From 9b90ff04822abfdc30f8f6aee851749ce521e543 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Fri, 11 Jun 2021 08:47:55 +0200 Subject: [PATCH 001/274] [bug] unable to process stripe payments with 3DS authentication --- CHANGELOG.md | 4 ++++ app/controllers/api/payments_controller.rb | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e1efa9f2..e2387fa73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog Fab-manager +## v4.7.13 2020 June 11 + +- Fix a bug: unable to process stripe payments with 3DS authentication + ## v4.7.12 2021 June 09 - Fix a bug: unable to process stripe payments diff --git a/app/controllers/api/payments_controller.rb b/app/controllers/api/payments_controller.rb index 2d5df145e..8b0104461 100644 --- a/app/controllers/api/payments_controller.rb +++ b/app/controllers/api/payments_controller.rb @@ -34,7 +34,7 @@ class API::PaymentsController < API::ApiController }, { api_key: Setting.get('stripe_secret_key') } ) elsif params[:payment_intent_id].present? - intent = Stripe::PaymentIntent.confirm(params[:payment_intent_id], api_key: Setting.get('stripe_secret_key')) + intent = Stripe::PaymentIntent.confirm(params[:payment_intent_id], {}, { api_key: Setting.get('stripe_secret_key') }) end rescue Stripe::CardError => e # Display error on client diff --git a/package.json b/package.json index 33aad27af..29b1a46cb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fab-manager", - "version": "4.7.12", + "version": "4.7.13", "description": "Fab-manager is the FabLab management solution. It provides a comprehensive, web-based, open-source tool to simplify your administrative tasks and your marker's projects.", "keywords": [ "fablab", From cb4bf36358d9a471c02f48d2e3d710cd2d9656b5 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Thu, 30 Sep 2021 14:38:32 +0200 Subject: [PATCH 002/274] updated sassc to 2.4.0 --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index b4562b85d..e626a3dda 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -140,7 +140,7 @@ GEM i18n (>= 1.6, < 2) faraday (0.17.3) multipart-post (>= 1.2, < 3) - ffi (1.15.1) + ffi (1.15.4) foreman (0.87.0) forgery (0.7.0) friendly_id (5.1.0) @@ -341,7 +341,7 @@ GEM rubyzip (>= 1.3.0) rubyzip (2.3.0) safe_yaml (1.0.5) - sassc (2.2.1) + sassc (2.4.0) ffi (~> 1.9) seed_dump (3.3.1) activerecord (>= 4) From 405afc7333b8f37e0603bc1aecb8f97edff2821a Mon Sep 17 00:00:00 2001 From: Sylvain Date: Thu, 30 Sep 2021 14:38:46 +0200 Subject: [PATCH 003/274] Version 4.7.14 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2387fa73..d4e19837e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog Fab-manager +## v4.7.14 2021 September 30 + +- Fix a bug: update sassc to 2.4.0 to try to fix #270 + ## v4.7.13 2020 June 11 - Fix a bug: unable to process stripe payments with 3DS authentication diff --git a/package.json b/package.json index 29b1a46cb..4460a198d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fab-manager", - "version": "4.7.13", + "version": "4.7.14", "description": "Fab-manager is the FabLab management solution. It provides a comprehensive, web-based, open-source tool to simplify your administrative tasks and your marker's projects.", "keywords": [ "fablab", From c00b8c6cdd63c3d088c3e74453d226198aabbf37 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Thu, 30 Sep 2021 14:54:26 +0200 Subject: [PATCH 004/274] try to downgrade sassc to 2.1.0 --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index daf0fbad7..4a2a60c58 100644 --- a/Gemfile +++ b/Gemfile @@ -138,4 +138,4 @@ gem 'icalendar' gem 'tzinfo-data' # compilation of dynamic stylesheets (home page & theme) -gem 'sassc' +gem 'sassc', '= 2.1.0' diff --git a/Gemfile.lock b/Gemfile.lock index e626a3dda..cf7d223c9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -341,7 +341,7 @@ GEM rubyzip (>= 1.3.0) rubyzip (2.3.0) safe_yaml (1.0.5) - sassc (2.4.0) + sassc (2.1.0) ffi (~> 1.9) seed_dump (3.3.1) activerecord (>= 4) @@ -484,7 +484,7 @@ DEPENDENCIES rubocop (~> 0.61.1) rubyXL rubyzip (>= 1.3.0) - sassc + sassc (= 2.1.0) seed_dump sha3 sidekiq (>= 6.0.7) From 719c1abd639b70560e73143abfff4ec7ba647534 Mon Sep 17 00:00:00 2001 From: vincent Date: Thu, 3 Feb 2022 15:32:02 +0100 Subject: [PATCH 005/274] Add description to plan category --- .../api/plan_categories_controller.rb | 2 +- .../javascript/components/base/fab-modal.tsx | 67 +-- .../javascript/components/base/rhf-input.tsx | 71 +++ .../base/text-editor/fab-text-editor.tsx | 94 ++++ .../components/base/text-editor/menu-bar.tsx | 168 +++++++ .../plan-categories/delete-plan-category.tsx | 10 +- .../plan-categories/manage-plan-category.tsx | 99 ++++ .../plan-categories/plan-categories-list.tsx | 13 +- .../plan-categories/plan-category-form.tsx | 69 +++ .../src/javascript/models/plan-category.ts | 1 + app/frontend/src/stylesheets/application.scss | 7 +- .../stylesheets/modules/base/fab-button.scss | 2 - .../stylesheets/modules/base/fab-modal.scss | 42 +- .../modules/base/fab-text-editor.scss | 170 +++++++ .../stylesheets/modules/base/rhf-input.scss | 74 +++ .../plan-categories/create-plan-category.scss | 7 - .../plan-categories/edit-plan-category.scss | 10 - .../plan-categories/manage-plan-category.scss | 4 + .../plan-categories/plan-categories-list.scss | 4 + .../src/stylesheets/variables/colors.scss | 48 ++ .../src/stylesheets/variables/typography.scss | 110 +++++ .../api/plan_categories/index.json.jbuilder | 2 +- .../api/plan_categories/show.json.jbuilder | 2 +- config/locales/app.admin.en.yml | 58 +-- config/locales/app.shared.en.yml | 5 + package.json | 9 + yarn.lock | 422 ++++++++++++++++++ 27 files changed, 1437 insertions(+), 133 deletions(-) create mode 100644 app/frontend/src/javascript/components/base/rhf-input.tsx create mode 100644 app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx create mode 100644 app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx create mode 100644 app/frontend/src/javascript/components/plan-categories/manage-plan-category.tsx create mode 100644 app/frontend/src/javascript/components/plan-categories/plan-category-form.tsx create mode 100644 app/frontend/src/stylesheets/modules/base/fab-text-editor.scss create mode 100644 app/frontend/src/stylesheets/modules/base/rhf-input.scss delete mode 100644 app/frontend/src/stylesheets/modules/plan-categories/create-plan-category.scss delete mode 100644 app/frontend/src/stylesheets/modules/plan-categories/edit-plan-category.scss create mode 100644 app/frontend/src/stylesheets/modules/plan-categories/manage-plan-category.scss create mode 100644 app/frontend/src/stylesheets/variables/colors.scss create mode 100644 app/frontend/src/stylesheets/variables/typography.scss diff --git a/app/controllers/api/plan_categories_controller.rb b/app/controllers/api/plan_categories_controller.rb index a83998b8f..407bfd0e6 100644 --- a/app/controllers/api/plan_categories_controller.rb +++ b/app/controllers/api/plan_categories_controller.rb @@ -45,6 +45,6 @@ class API::PlanCategoriesController < API::ApiController end def plan_category_params - params.require(:plan_category).permit(:name, :weight) + params.require(:plan_category).permit(:name, :weight, :description) end end diff --git a/app/frontend/src/javascript/components/base/fab-modal.tsx b/app/frontend/src/javascript/components/base/fab-modal.tsx index 7cc4042db..7cc6975d3 100644 --- a/app/frontend/src/javascript/components/base/fab-modal.tsx +++ b/app/frontend/src/javascript/components/base/fab-modal.tsx @@ -1,9 +1,7 @@ -import React, { ReactNode, BaseSyntheticEvent, useEffect, useState } from 'react'; +import React, { ReactNode, BaseSyntheticEvent, useEffect } from 'react'; import Modal from 'react-modal'; import { useTranslation } from 'react-i18next'; import { Loader } from './loader'; -import CustomAssetAPI from '../../api/custom-asset'; -import { CustomAsset, CustomAssetName } from '../../models/custom-asset'; import { FabButton } from './fab-button'; Modal.setAppElement('body'); @@ -36,79 +34,32 @@ interface FabModalProps { export const FabModal: React.FC = ({ title, isOpen, toggleModal, children, confirmButton, className, width = 'sm', closeButton, customHeader, customFooter, onConfirm, preventConfirm, onCreation, onConfirmSendFormId }) => { const { t } = useTranslation('shared'); - const [blackLogo, setBlackLogo] = useState(null); - - // initial request to the API to get the theme's logo, for back backgrounds - useEffect(() => { - CustomAssetAPI.get(CustomAssetName.LogoBlackFile).then(data => setBlackLogo(data)); - }, []); - useEffect(() => { if (typeof onCreation === 'function' && isOpen) { onCreation(); } }, [isOpen]); - /** - * Check if the confirm button should be present - */ - const hasConfirmButton = (): boolean => { - return confirmButton !== undefined; - }; - - /** - * Check if the behavior of the confirm button is to send a form, using the provided ID - */ - const confirmationSendForm = (): boolean => { - return onConfirmSendFormId !== undefined; - }; - - /** - * Should we display the close button? - */ - const hasCloseButton = (): boolean => { - return closeButton; - }; - - /** - * Check if there's a custom footer - */ - const hasCustomFooter = (): boolean => { - return customFooter !== undefined; - }; - - /** - * Check if there's a custom header - */ - const hasCustomHeader = (): boolean => { - return customHeader !== undefined; - }; - return ( + {closeButton && {t('app.shared.buttons.close')}}
- - {blackLogo && {blackLogo.custom_asset_file_attributes.attachment}} - - {!hasCustomHeader() &&

{ title }

} - {hasCustomHeader() && customHeader} + {!customHeader &&

{ title }

} + {customHeader && customHeader}
{children}
-
+ {(customFooter || confirmButton) &&
- {hasCloseButton() && {t('app.shared.buttons.close')}} - {hasConfirmButton() && !confirmationSendForm() && {confirmButton}} - {hasConfirmButton() && confirmationSendForm() && {confirmButton}} - {hasCustomFooter() && customFooter} + {confirmButton && !onConfirmSendFormId && {confirmButton}} + {confirmButton && onConfirmSendFormId && {confirmButton}} + {customFooter && customFooter} -
+
}
); }; diff --git a/app/frontend/src/javascript/components/base/rhf-input.tsx b/app/frontend/src/javascript/components/base/rhf-input.tsx new file mode 100644 index 000000000..941bd5b88 --- /dev/null +++ b/app/frontend/src/javascript/components/base/rhf-input.tsx @@ -0,0 +1,71 @@ +import React, { ReactNode } from 'react'; +import { FieldErrors, UseFormRegister, Validate } from 'react-hook-form'; + +type inputType = string|number|readonly string []; +type ruleTypes = { + required?: boolean | string, + pattern?: RegExp | {value: RegExp, message: string}, + minLenght?: number, + maxLenght?: number, + min?: number, + max?: number, + validate?: Validate; +}; + +interface RHFInputProps { + id: string, + register: UseFormRegister, + label?: string, + tooltip?: string, + defaultValue?: inputType, + icon?: ReactNode, + addOn?: ReactNode, + addOnClassName?: string, + classes?: string, + rules?: ruleTypes, + readOnly?: boolean, + disabled?: boolean, + placeholder?: string, + error?: FieldErrors, + type?: 'text' | 'date' | 'password' | 'url' | 'time' | 'tel' | 'search' | 'number' | 'month' | 'email' | 'datetime-local' | 'week', + step?: number | 'any' +} + +/** + * This component is a template for an input component to use within React Hook Form + */ +export const RHFInput: React.FC = ({ id, register, label, tooltip, defaultValue, icon, classes, rules, readOnly, disabled, type, addOn, addOnClassName, placeholder, error, step }) => { + // Compose classnames from props + const classNames = ` + rhf-input ${classes || ''} + ${error && error[id] ? 'is-incorrect' : ''} + ${rules && rules.required ? 'is-required' : ''} + ${readOnly ? 'is-readOnly' : ''} + ${disabled ? 'is-disabled' : ''}`; + + return ( + + ); +}; diff --git a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx new file mode 100644 index 000000000..19b293c20 --- /dev/null +++ b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx @@ -0,0 +1,94 @@ +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { react2angular } from 'react2angular'; +import { IApplication } from '../../../models/application'; +import { Loader } from '../loader'; +import { useEditor, EditorContent } from '@tiptap/react'; +import StarterKit from '@tiptap/starter-kit'; +import Placeholder from '@tiptap/extension-placeholder'; +import CharacterCount from '@tiptap/extension-character-count'; +import Underline from '@tiptap/extension-underline'; +import Link from '@tiptap/extension-link'; +import { MenuBar } from './menu-bar'; +import { WarningOctagon } from 'phosphor-react'; + +declare const Application: IApplication; + +interface FabTextEditorProps { + label?: string, + paragraphTools?: boolean, + content?: string, + limit?: number, + onChange?: (content: string) => void, + placeholder?: string, + error?: string, +} + +/** + * This component is a WYSIWYG text editor + */ +export const FabTextEditor: React.FC = ({ label, paragraphTools, content, limit = 400, onChange, placeholder, error }) => { + const { t } = useTranslation('shared'); + const placeholderText = placeholder || t('app.shared.text_editor.placeholder'); + // TODO: Add ctrl+click on link to visit + + // Setup the editor + // Extensions add functionalities to the editor (Bold, Italic…) + // Events fire action (onUpdate -> get the content as HTML) + const editor = useEditor({ + extensions: [ + StarterKit.configure({ + heading: { + levels: [3] + } + }), + Underline, + Link.configure({ + openOnClick: false + }), + Placeholder.configure({ + placeholder: placeholderText + }), + CharacterCount.configure({ + limit + }) + ], + content, + onUpdate: ({ editor }) => { + onChange(editor.getHTML()); + } + }); + + const focusEditor = () => { + editor.commands.focus('start'); + }; + + return ( + <> + {label && } +
+ + +
+ {editor?.storage.characterCount.characters()} / {limit} +
+ {error && +
+ +

{error}

+
+ } +
+ + ); +}; + +const FabTextEditorWrapper: React.FC = ({ label, paragraphTools, content, limit, placeholder, error }) => { + return ( + + + + ); +}; + +Application.Components.component('fabTextEditor', react2angular(FabTextEditorWrapper, ['label', 'paragraphTools', 'content', 'limit', 'placeholder', 'error'])); diff --git a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx new file mode 100644 index 000000000..4d19ae195 --- /dev/null +++ b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx @@ -0,0 +1,168 @@ +import React, { useCallback, useState, useEffect } from 'react'; +import { useTranslation } from 'react-i18next'; +import useOnclickOutside from 'react-cool-onclickoutside'; +import { Editor } from '@tiptap/react'; +import { TextAa, TextBolder, TextItalic, TextUnderline, LinkSimpleHorizontal, ListBullets, Quotes, Trash, CheckCircle } from 'phosphor-react'; + +interface MenuBarProps { + paragraphTools?: boolean, + editor?: Editor, +} + +/** + * This component is the menu bar for the WYSIWYG text editor + */ +export const MenuBar: React.FC = ({ editor, paragraphTools }) => { + const { t } = useTranslation('shared'); + + const [linkMenu, setLinkMenu] = useState(false); + const resetUrl = { href: '', target: '_blank' }; + const [url, setUrl] = useState(resetUrl); + const ref = useOnclickOutside(() => { + setLinkMenu(false); + }); + + // Reset state values when the link menu is closed + useEffect(() => { + if (!linkMenu) { + setUrl(resetUrl); + } + }, [linkMenu]); + + // Toggle link menu's visibility + const toggleLinkMenu = () => { + if (!linkMenu) { + setLinkMenu(true); + const previousUrl = { + href: editor.getAttributes('link').href, + target: editor.getAttributes('link').target || '' + }; + // display selected text's attributes if it's a link + if (previousUrl.href) { + setUrl(previousUrl); + } + } else { + setLinkMenu(false); + setUrl(resetUrl); + } + }; + + // Set link's target + const toggleTarget = (evt) => { + evt.target.checked + ? setUrl({ href: url.href, target: '_blank' }) + : setUrl({ href: url.href, target: '' }); + }; + + // Update url + const handleChange = (evt) => { + setUrl({ ...url, href: evt.target.value }); + }; + // Support keyboard "Enter" key event to validate + const handleEnter = (evt) => { + if (evt.keyCode === 13) { + setLink(); + } + }; + + // Update the selected link + const setLink = useCallback((closeLinkMenu?: boolean) => { + if (url.href === '') { + unsetLink(); + return; + } + editor.chain().focus().extendMarkRange('link').setLink({ href: url.href, target: url.target }).run(); + if (closeLinkMenu) { + setLinkMenu(false); + } + }, [editor, url]); + + // Remove the link tag from the selected text + const unsetLink = () => { + editor.chain().focus().extendMarkRange('link').unsetLink().run(); + setLinkMenu(false); + }; + + if (!editor) { + return null; + } + + return ( + <> +
+ { paragraphTools && + (<> + + + + + ) + } + + + + +
+
+
+ + +
+
+ + +
+
+ + ); +}; diff --git a/app/frontend/src/javascript/components/plan-categories/delete-plan-category.tsx b/app/frontend/src/javascript/components/plan-categories/delete-plan-category.tsx index cf8644694..35a3026ea 100644 --- a/app/frontend/src/javascript/components/plan-categories/delete-plan-category.tsx +++ b/app/frontend/src/javascript/components/plan-categories/delete-plan-category.tsx @@ -34,9 +34,9 @@ const DeletePlanCategoryComponent: React.FC = ({ onSucc */ const onDeleteConfirmed = (): void => { PlanCategoryAPI.destroy(category.id).then(() => { - onSuccess(t('app.admin.delete_plan_category.category_deleted')); + onSuccess(t('app.admin.manage_plan_category.delete_category.success')); }).catch((error) => { - onError(t('app.admin.delete_plan_category.unable_to_delete') + error); + onError(t('app.admin.manage_plan_category.delete_category.error') + error); }); toggleDeletionModal(); }; @@ -44,13 +44,13 @@ const DeletePlanCategoryComponent: React.FC = ({ onSucc return (
} onClick={toggleDeletionModal} /> - - {t('app.admin.delete_plan_category.delete_confirmation')} + {t('app.admin.manage_plan_category.delete_category.confirm')}
); diff --git a/app/frontend/src/javascript/components/plan-categories/manage-plan-category.tsx b/app/frontend/src/javascript/components/plan-categories/manage-plan-category.tsx new file mode 100644 index 000000000..2ea78b4c2 --- /dev/null +++ b/app/frontend/src/javascript/components/plan-categories/manage-plan-category.tsx @@ -0,0 +1,99 @@ +import React, { useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { PlanCategory } from '../../models/plan-category'; +import { FabButton } from '../base/fab-button'; +import { FabModal } from '../base/fab-modal'; +import { Loader } from '../base/loader'; +import { PlanCategoryForm } from './plan-category-form'; + +interface ManagePlanCategoryProps { + category?: PlanCategory, + action: 'create' | 'update', + onSuccess: (message: string) => void, + onError: (message: string) => void, +} + +/** + * This component shows a button. + * When clicked, we show a modal dialog allowing to fill the parameters with a new plan-category. + */ +const ManagePlanCategoryComponent: React.FC = ({ category, action, onSuccess, onError }) => { + const { t } = useTranslation('admin'); + + // is the creation modal open? + const [isOpen, setIsOpen] = useState(false); + // when editing, we store the category here, until the edition is over + const [tempCategory, setTempCategory] = useState(category); + + /** + * Opens/closes the new plan-category (creation) modal + */ + const toggleModal = (): void => { + setIsOpen(!isOpen); + }; + + /** + * Initialize a new plan-category for creation + * or refresh plan-category data for update + */ + const initCategoryCreation = () => { + if (action === 'create') { + setTempCategory({ name: '', description: '', weight: 0 }); + } else { + setTempCategory(category); + } + }; + + /** + * Close the modal if the form submission was successful + */ + const handleSuccess = (message) => { + setIsOpen(false); + onSuccess(message); + }; + + /** + * Render the appropriate button depending on the action type + */ + const toggleBtn = () => { + switch (action) { + case 'create': + return ( + } + className="btn-warning" + onClick={toggleModal}> + {t('app.admin.create_plan_category.new_category')} + + ); + case 'update': + return (} + className="edit-button" + onClick={toggleModal} />); + } + }; + + return ( +
+ { toggleBtn() } + + + {tempCategory && } + + +
+ ); +}; + +export const ManagePlanCategory: React.FC = ({ category, action, onSuccess, onError }) => { + return ( + + + + ); +}; diff --git a/app/frontend/src/javascript/components/plan-categories/plan-categories-list.tsx b/app/frontend/src/javascript/components/plan-categories/plan-categories-list.tsx index 212a235ec..615846d89 100644 --- a/app/frontend/src/javascript/components/plan-categories/plan-categories-list.tsx +++ b/app/frontend/src/javascript/components/plan-categories/plan-categories-list.tsx @@ -5,8 +5,7 @@ import { PlanCategory } from '../../models/plan-category'; import { react2angular } from 'react2angular'; import { Loader } from '../base/loader'; import { IApplication } from '../../models/application'; -import { CreatePlanCategory } from './create-plan-category'; -import { EditPlanCategory } from './edit-plan-category'; +import { ManagePlanCategory } from './manage-plan-category'; import { DeletePlanCategory } from './delete-plan-category'; declare const Application: IApplication; @@ -51,15 +50,15 @@ export const PlanCategoriesList: React.FC = ({ onSucces return (
- +

{t('app.admin.plan_categories_list.categories_list')}

{categories && categories.length === 0 && {t('app.admin.plan_categories_list.no_categories')}} {categories && categories.length > 0 && - - + + + @@ -68,7 +67,7 @@ export const PlanCategoriesList: React.FC = ({ onSucces )} diff --git a/app/frontend/src/javascript/components/plan-categories/plan-category-form.tsx b/app/frontend/src/javascript/components/plan-categories/plan-category-form.tsx new file mode 100644 index 000000000..c02872ac6 --- /dev/null +++ b/app/frontend/src/javascript/components/plan-categories/plan-category-form.tsx @@ -0,0 +1,69 @@ +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import PlanCategoryAPI from '../../api/plan-category'; +import { PlanCategory } from '../../models/plan-category'; +import { Loader } from '../base/loader'; +import { useForm, Controller, SubmitHandler } from 'react-hook-form'; +import { FabTextEditor } from '../base/text-editor/fab-text-editor'; +import { RHFInput } from '../base/rhf-input'; +import { FabAlert } from '../base/fab-alert'; +import { FabButton } from '../base/fab-button'; + +interface PlanCategoryFormProps { + action: 'create' | 'update', + category: PlanCategory, + onSuccess: (message: string) => void, + onError: (message: string) => void +} + +const PlanCategoryFormComponent: React.FC = ({ action, category, onSuccess, onError }) => { + const { t } = useTranslation('admin'); + + const { register, control, handleSubmit } = useForm({ defaultValues: { ...category } }); + /** + * The action has been confirmed by the user. + * Push the created/updated plan-category to the API. + */ + const onSubmit: SubmitHandler = (data: PlanCategory) => { + switch (action) { + case 'create': + PlanCategoryAPI.create(data).then(() => { + onSuccess(t('app.admin.manage_plan_category.create_category.success')); + }).catch((error) => { + onError(t('app.admin.manage_plan_category.create_category.error') + error); + }); + break; + case 'update': + PlanCategoryAPI.update(data).then(() => { + onSuccess(t('app.admin.manage_plan_category.update_category.success')); + }).catch((error) => { + onError(t('app.admin.manage_plan_category.update_category.error') + error); + }); + break; + } + }; + + return ( +
+ + + + + } /> + + + + {t('app.admin.manage_plan_category.info')} + + {t(`app.admin.manage_plan_category.${action}_category.cta`)} + + ); +}; + +export const PlanCategoryForm: React.FC = ({ action, category, onSuccess, onError }) => { + return ( + + + + ); +}; diff --git a/app/frontend/src/javascript/models/plan-category.ts b/app/frontend/src/javascript/models/plan-category.ts index 5bdac7922..3d9d41d64 100644 --- a/app/frontend/src/javascript/models/plan-category.ts +++ b/app/frontend/src/javascript/models/plan-category.ts @@ -1,5 +1,6 @@ export interface PlanCategory { id?: number, name: string, + description?: string, weight: number, } diff --git a/app/frontend/src/stylesheets/application.scss b/app/frontend/src/stylesheets/application.scss index f01f1461b..132d0b81e 100644 --- a/app/frontend/src/stylesheets/application.scss +++ b/app/frontend/src/stylesheets/application.scss @@ -1,3 +1,5 @@ +@import "variables/colors"; +@import "variables/typography"; @import "app.functions"; @import "bootstrap_and_overrides"; @@ -23,10 +25,12 @@ @import "modules/tour"; @import "modules/base/fab-modal"; @import "modules/base/fab-input"; +@import "modules/base/rhf-input"; @import "modules/base/fab-button"; @import "modules/base/fab-alert"; @import "modules/base/fab-popover"; @import "modules/base/labelled-input"; +@import "modules/base/fab-text-editor"; @import "modules/payment-schedule/payment-schedule-summary"; @import "modules/wallet-info"; @import "modules/document-filters"; @@ -49,8 +53,7 @@ @import "modules/payment/payzen/payzen-update-card-modal"; @import "modules/payment/local-payment/local-payment-modal"; @import "modules/plan-categories/plan-categories-list"; -@import "modules/plan-categories/create-plan-category"; -@import "modules/plan-categories/edit-plan-category"; +@import "modules/plan-categories/manage-plan-category"; @import "modules/plan-categories/delete-plan-category"; @import "modules/machines/machine-card"; @import "modules/machines/machines-list"; diff --git a/app/frontend/src/stylesheets/modules/base/fab-button.scss b/app/frontend/src/stylesheets/modules/base/fab-button.scss index 14a2f76fc..5f70a2d3a 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-button.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-button.scss @@ -46,6 +46,4 @@ &--icon { margin-right: 0.5em; } - - &--icon-only {} } diff --git a/app/frontend/src/stylesheets/modules/base/fab-modal.scss b/app/frontend/src/stylesheets/modules/base/fab-modal.scss index 132f71afc..a6d64d326 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-modal.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-modal.scss @@ -1,6 +1,7 @@ @keyframes slideInFromTop { 0% { transform: translate(0, -25%); } 100% { transform: translate(0, 0); } + } @keyframes fadeIn { @@ -38,6 +39,25 @@ border-radius: 6px; outline: 0; + .modal-btn--close { + position: absolute; + right: 0; + top: 0; + transform: translateY(calc(-100% + 4px)); + padding-bottom: 1rem; + color: var(--gray-soft-lightest); + background-color: transparent; + border: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + + &:hover { + color: var(--gray-hard-darkest); + background-color: var(--gray-soft-lightest); + cursor: pointer; + } + } + .fab-modal-header { padding: 8px; border-bottom: 1px solid #e5e5e5; @@ -60,6 +80,18 @@ .fab-modal-content { position: relative; padding: 15px; + + form { + display: flex; + flex-direction: column; + + button[type="submit"] { + margin-left: auto; + background-color: var(--secondary); + border: none; + &:hover { background-color: var(--secondary-dark);} + } + } } .fab-modal-footer { @@ -69,16 +101,6 @@ border-top: 1px solid #e5e5e5; .modal-btn { - &--close { - color: black; - background-color: #fbfbfb; - border: 1px solid #c9c9c9; - - &:hover { - background-color: #f2f2f2; - } - } - &--confirm { margin-left: 0.5em; } diff --git a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss new file mode 100644 index 000000000..dc2068a69 --- /dev/null +++ b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss @@ -0,0 +1,170 @@ +.fab-textEditor { + position: relative; + margin-bottom: 1.6rem; + padding-bottom: 1.6rem; + background-color: var(--gray-soft-lightest); + border: 1px solid var(--gray-soft-dark); + // TODO: border radius from variable + border-radius: 8px; + + &-label { + display: block; + margin-bottom: 0.8rem; + } + + @mixin button($height, $width: $height) { + width: $width; + height: $height; + display: flex; + justify-content: center; + align-items: center; + border-radius: 4px; + color: var(--gray-hard-darkest); + background-color: transparent; + border: none; + &.is-active { color: var(--information); } + &:hover { + background-color: var(--gray-soft); + cursor: pointer; + } + } + + &-menu { + display: flex; + align-items: center; + padding: 0.8rem; + border-bottom: 1px solid var(--gray-soft-darkest); + & > *:not(:last-child) { + margin-right: 4px; + } + + button { @include button(4rem); } + .divider { + width: 2px; + height: 2.4rem; + background-color: var(--gray-soft-dark); + border-radius: 1px; + } + } + + // tiptap class for the editor + .ProseMirror { + padding: 1.6rem 1.6rem 1.2rem; + &:focus { outline: none; } + @include editor; + } + + &-character-count { + padding-right: 1.6rem; + @include text-sm; + text-align: right; + color: var(--gray-hard-lightest); + } + + &-linkMenu { + position: absolute; + top: 4.5rem; + right: 0; + left: 0; + max-width: 50ch; + margin: 0 0.8rem; + padding: 1.2rem; + background-color: var(--gray-soft-lightest); + border: 1px solid var(--gray-soft-darkest); + border-radius: 8px; + // TODO: shadow from variable + box-shadow: 0 0 10px rgba(39, 32, 32, 0.25); + opacity: 0; + pointer-events: none; + transition: opacity 0.25s ease-out; + z-index: 10; + &.is-active { + opacity: 1; + pointer-events: all; + } + & > div { + display: flex; + align-items: center + } + .url { + margin-bottom: 0.8rem; + input { + width: 100%; + height: 4rem; + margin-right: 1.2rem; + padding: 0.4rem 0.8rem; + background-color: var(--gray-soft-light); + border: 1px solid var(--secondary); + border-radius: 8px; + font-size: var(--text-base); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + &::placeholder { color: var(--gray-soft-darkest);} + } + } + .tab { + display: flex; + align-items: center; + margin: 0; + cursor: pointer; + p { + margin: 0 1.2rem 0 0; + @include text-sm(); + color: var(--gray-hard); + } + input[type="checkbox"] { opacity: 0; width: 0; height: 0; } + .switch { + position: relative; + width: 3.6rem; + height: 2rem; + background-color: var(--gray-soft); + border-radius: 2rem; + &::after { + content: ""; + position: absolute; + left: 0; + width: 2rem; + height: 2rem; + background-color: var(--gray-soft-lightest); + border: 2px solid var(--gray-soft); + border-radius: 2rem; + } + } + input:checked + .switch { background-color: var(--information); } + input:checked + .switch::after { + left: auto; + right: 0; + border-color: var(--information); + } + } + + button { + @include button(3.2rem); + margin-left: auto; + } + } + + &-error { + position: absolute; + top: 4.5rem; + right: 0; + left: 0; + display: flex; + max-width: 50ch; + margin: 0 0.8rem; + padding: 1.2rem; + color: var(--main-dark); + background-color: var(--main-lightest); + border: 1px solid var(--main-light); + border-radius: 8px; + // TODO: shadow from variable + box-shadow: 0 0 10px rgba(39, 32, 32, 0.25); + + svg { + flex-shrink: 0; + margin-right: 1.2rem; + } + p { margin: 0; } + } +} diff --git a/app/frontend/src/stylesheets/modules/base/rhf-input.scss b/app/frontend/src/stylesheets/modules/base/rhf-input.scss new file mode 100644 index 000000000..8d9a19a2a --- /dev/null +++ b/app/frontend/src/stylesheets/modules/base/rhf-input.scss @@ -0,0 +1,74 @@ +.rhf-input { + width: 100%; + margin-bottom: 1.6rem; + + &-header { + width: 100%; + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 0.8rem; + p { margin: 0; } + } + &.is-required &-header p::after { + content: "*"; + margin-left: 0.5ch; + color: var(--error); + } + + &-field { + height: 4rem; + display: grid; + grid-template-areas: "icon input addon"; + grid-template-columns: min-content 1fr min-content; + border: 1px solid var(--gray-soft-dark); + border-radius: 4px; + overflow: hidden; + transition: border-color ease-in-out 0.15s; + + .icon, + .addon { + width: 4rem; + display: flex; + justify-content: center; + align-items: center; + color: var(--gray-hard-light); + background-color: var(--gray-soft); + } + .icon { + grid-area: icon; + border-right: 1px solid var(--gray-soft-dark); + } + input { + grid-area: input; + border: none; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .08); + padding: 0 0.8rem; + color: var(--gray-hard-darkest); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .addon { + grid-area: addon; + border-left: 1px solid var(--gray-soft-dark); + } + } + &.is-incorrect &-field { + border-color: var(--error); + .icon { + color: var(--error); + border-color: var(--error); + background-color: var(--error-lightest); + } + } + &.is-disabled &-field input, + &.is-readOnly &-field input { + background-color: var(--gray-soft-light); + } + + &-error { + margin-top: 0.4rem; + color: var(--error); + } +} diff --git a/app/frontend/src/stylesheets/modules/plan-categories/create-plan-category.scss b/app/frontend/src/stylesheets/modules/plan-categories/create-plan-category.scss deleted file mode 100644 index b5ca81cae..000000000 --- a/app/frontend/src/stylesheets/modules/plan-categories/create-plan-category.scss +++ /dev/null @@ -1,7 +0,0 @@ -.create-plan-category {} - -.create-plan-category-modal { - .significance-info { - margin-top: 10px; - } -} diff --git a/app/frontend/src/stylesheets/modules/plan-categories/edit-plan-category.scss b/app/frontend/src/stylesheets/modules/plan-categories/edit-plan-category.scss deleted file mode 100644 index fa1570b9a..000000000 --- a/app/frontend/src/stylesheets/modules/plan-categories/edit-plan-category.scss +++ /dev/null @@ -1,10 +0,0 @@ -.edit-plan-category { - display: inline; - margin-right: 5px; -} - -.edit-plan-category-modal { - .significance-info { - margin-top: 10px; - } -} diff --git a/app/frontend/src/stylesheets/modules/plan-categories/manage-plan-category.scss b/app/frontend/src/stylesheets/modules/plan-categories/manage-plan-category.scss new file mode 100644 index 000000000..4932f14dc --- /dev/null +++ b/app/frontend/src/stylesheets/modules/plan-categories/manage-plan-category.scss @@ -0,0 +1,4 @@ +.manage-plan-category { + display: inline; + margin-right: 5px; +} diff --git a/app/frontend/src/stylesheets/modules/plan-categories/plan-categories-list.scss b/app/frontend/src/stylesheets/modules/plan-categories/plan-categories-list.scss index 72f8bc6e5..c2f1834b0 100644 --- a/app/frontend/src/stylesheets/modules/plan-categories/plan-categories-list.scss +++ b/app/frontend/src/stylesheets/modules/plan-categories/plan-categories-list.scss @@ -19,7 +19,11 @@ border-color: #c9c9c9; } + .category-weight { + width: 13ch; + } .category-actions { + width: 110px; text-align: right; } } diff --git a/app/frontend/src/stylesheets/variables/colors.scss b/app/frontend/src/stylesheets/variables/colors.scss new file mode 100644 index 000000000..708531e7f --- /dev/null +++ b/app/frontend/src/stylesheets/variables/colors.scss @@ -0,0 +1,48 @@ +:root { + --gray-soft-lightest: #FFFFFF; + --gray-soft-light: #F5F5F5; + --gray-soft: #E5E5E5; + --gray-soft-dark: #D1D1D1; + --gray-soft-darkest: #A3A3A3; + + --gray-hard-lightest: #757575; + --gray-hard-light: #575757; + --gray-hard: #383838; + --gray-hard-dark: #1F1F1F; + --gray-hard-darkest: #0F0F0F; + + --main-lightest: #FDF1F1; + --main-light: #F6ACAC; + --main: #E72223; + --main-dark: #BC1415; + --main-darkest: #57090A; + + --secondary-light: #FFF8B3; + --secondary: #FDE500; + --secondary-dark: #CCB800; + --secondary-darkest: #3D3700; + + --success-lightest: #E3FCEC; + --success-light: #88E8AA; + --success: #259D58; + --success-dark: #229051; + --success-darkest: #155239; + + --error-lightest: #FDF1F1; + --error-light: #EA8585; + --error: #DA3030; + --error-dark: #9F1D1D; + --error-darkest: #611818; + + --information-lightest: #EFF6FF; + --information-light: #93C5FD; + --information: #1A5DF9; + --information-dark: #1E3A8A; + --information-darkest: #122354; + + --warning-lightest: #FFFCF4; + --warning-light: #FAE29F; + --warning: #D6AE47; + --warning-dark: #8C6D1F; + --warning-darkest: #5C4813; +} diff --git a/app/frontend/src/stylesheets/variables/typography.scss b/app/frontend/src/stylesheets/variables/typography.scss new file mode 100644 index 000000000..156b8144b --- /dev/null +++ b/app/frontend/src/stylesheets/variables/typography.scss @@ -0,0 +1,110 @@ +// Font +@import url('https://fonts.googleapis.com/css2?family=Work+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap'); + +:root { + --font-text: 'Work Sans', sans-serif; +} + +// Title +@mixin title-xl { + font-family: var(--font-text); + font-weight: 700; + font-size: 4rem; + line-height: 1.175; +} +@mixin title-lg { + font-family: var(--font-text); + font-weight: 600; + font-size: 2.8rem; + line-height: 1.175; +} +@mixin title-base { + font-family: var(--font-text); + font-weight: 600; + font-size: 2rem; + line-height: 1.175; +} +@mixin title-sm { + font-family: var(--font-text); + font-weight: 400; + font-size: 1.8rem; + line-height: 1.175; +} + +// Text +@mixin text-xl { + font-family: var(--font-text); + font-weight: 500; + font-size: 2rem; + line-height: 1.175; +} +@mixin text-lg($weight: normal) { + font-family: var(--font-text); + font-weight: $weight; + font-size: 1.8rem; + line-height: normal; +} +@mixin text-base($weight: normal) { + font-family: var(--font-text); + font-weight: $weight; + font-size: 1.6rem; + line-height: normal; +} +@mixin text-sm($weight: normal) { + font-family: var(--font-text); + font-weight: $weight; + font-size: 1.4rem; + line-height: normal; +} + +// Text Editor +@mixin editor { + *:first-child { + margin-top: 0; + } + h3 { + @include text-lg(600); + margin: 0 0 1rem; + color: var(--gray-hard-darkest); + } + ul { + padding-inline-start: 2.2rem; + } + blockquote { + position: relative; + margin: 2rem 0; + padding: 0.3rem 1.2rem; + border: none; + font-style: italic; + &::before { + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 4px; + border-radius: 2px; + background-color: var(--gray-hard-darkest); + } + } + + p { @include text-base; } + p:last-of-type { margin: 0; } + //placeholder + p.is-editor-empty:first-child:before { + content: attr(data-placeholder); + height: 0; + float: left; + pointer-events: none; + color: var(--gray-soft-darkest); + } + + strong { font-weight: 600; } + em { font-style: italic; } + u { text-decoration: underline; } + + a { + color: var(--main-dark); + text-decoration: underline; + } +} diff --git a/app/views/api/plan_categories/index.json.jbuilder b/app/views/api/plan_categories/index.json.jbuilder index fb63cd67c..65e94b01b 100644 --- a/app/views/api/plan_categories/index.json.jbuilder +++ b/app/views/api/plan_categories/index.json.jbuilder @@ -1,5 +1,5 @@ # frozen_string_literal: true json.array!(@categories) do |category| - json.extract! category, :id, :name, :weight + json.extract! category, :id, :name, :weight, :description end diff --git a/app/views/api/plan_categories/show.json.jbuilder b/app/views/api/plan_categories/show.json.jbuilder index 85366f247..2df946d08 100644 --- a/app/views/api/plan_categories/show.json.jbuilder +++ b/app/views/api/plan_categories/show.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.extract! @category, :id, :name, :weight +json.extract! @category, :id, :name, :weight, :description diff --git a/config/locales/app.admin.en.yml b/config/locales/app.admin.en.yml index 76b17eafc..e62c3d2f4 100644 --- a/config/locales/app.admin.en.yml +++ b/config/locales/app.admin.en.yml @@ -434,6 +434,35 @@ en: edit_extended_price: "Edit the extended price" confirm_changes: "Confirm changes" extended_price_successfully_updated: "The extended price was successfully updated." + plans_categories: + manage_plans_categories: "Manage plans' categories" + plan_categories_list: + categories_list: "List of the plan's categories" + no_categories: "No categories" + name: "Name" + description: "Description" + significance: "Significance" + manage_plan_category: + name: "Name" + description: "Description" + significance: "Significance" + info: "Categories will be shown ordered by signifiance. The higher you set the significance, the first the category will be shown." + create_category: + title: "New category" + cta: "Create the category" + success: "The new category was successfully created" + error: "Unable to create the category: " + update_category: + title: "Edit the category" + cta: "Validate" + success: "The category was successfully updated" + error: "Unable to update the category: " + delete_category: + title: "Delete a category" + confirm: "Are you sure you want to delete this category? If you do, the plans associated with this category won't be sorted anymore." + cta: "Delete" + success: "The category was successfully deleted" + error: "Unable to delete the category: " #ajouter un code promotionnel coupons_new: add_a_coupon: "Add a coupon" @@ -1421,35 +1450,6 @@ en: report_will_be_destroyed: "Once the report has been processed, it will be deleted. This can't be undone, continue?" report_removed: "The report has been deleted" failed_to_remove: "An error occurred, unable to delete the report" - plans_categories: - manage_plans_categories: "Manage plans' categories" - plan_categories_list: - categories_list: "List of the plan's categories" - no_categories: "No categories" - name: "Name" - significance: "Significance" - create_plan_category: - new_category: "New category" - name: "Name" - significance: "Significance" - significance_info: "Categories will be shown ordered by signifiance. The higher you set the significance, the first the category will be shown." - confirm_create: "Create the category" - category_created: "The new category was successfully created" - unable_to_create: "Unable to create the category: " - edit_plan_category: - edit_category: "Edit the category" - name: "Name" - significance: "Significance" - confirm_edition: "Validate" - category_updated: "The category was successfully updated" - unable_to_update: "Unable to update the category: " - significance_info: "Categories will be shown ordered by signifiance. The higher you set the significance, the first the category will be shown." - delete_plan_category: - delete_category: "Delete a category" - confirm_delete: "Delete" - delete_confirmation: "Are you sure you want to delete this category? If you do, the plans associated with this category won't be sorted anymore." - category_deleted: "The category was successfully deleted" - unable_to_delete: "Unable to delete the category: " local_payment: validate_cart: "Validate my cart" offline_payment: "Payment on site" diff --git a/config/locales/app.shared.en.yml b/config/locales/app.shared.en.yml index 33d8d7cd4..a1e668745 100644 --- a/config/locales/app.shared.en.yml +++ b/config/locales/app.shared.en.yml @@ -23,6 +23,11 @@ en: you_will_lose_any_unsaved_modification_if_you_reload_this_page: "You will lose any unsaved modification if you reload this page" payment_card_error: "A problem has occurred with your credit card:" payment_card_declined: "Your card was declined." + #text editor + text_editor: + placeholder: "Type something…" + link_placeholder: "Paste link…" + new_tab: "Open in a new tab" #user edition form user: man: "Man" diff --git a/package.json b/package.json index b3722472b..c73016964 100644 --- a/package.json +++ b/package.json @@ -58,6 +58,12 @@ "@rails/webpacker": "5.4.3", "@stripe/react-stripe-js": "^1.4.0", "@stripe/stripe-js": "^1.13.2", + "@tiptap/extension-character-count": "^2.0.0-beta.24", + "@tiptap/extension-link": "^2.0.0-beta.36", + "@tiptap/extension-placeholder": "^2.0.0-beta.47", + "@tiptap/extension-underline": "^2.0.0-beta.22", + "@tiptap/react": "^2.0.0-beta.107", + "@tiptap/starter-kit": "^2.0.0-beta.180", "@types/react": "^17.0.3", "@types/react-dom": "^17.0.3", "@uirouter/angularjs": "0.4", @@ -113,9 +119,12 @@ "ng-fittext": "https://github.com/patrickmarabeas/ng-FitText.js.git#4.1.1", "ngUpload": "0.5", "nvd3": "1.8", + "phosphor-react": "^1.4.0", "prop-types": "^15.7.2", "react": "^17.0.2", + "react-cool-onclickoutside": "^1.7.0", "react-dom": "^17.0.2", + "react-hook-form": "^7.25.3", "react-i18next": "^11.7.3", "react-modal": "^3.11.2", "react-select": "^4.3.1", diff --git a/yarn.lock b/yarn.lock index 047f00494..a03ff01f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1318,6 +1318,11 @@ schema-utils "^3.0.0" source-map "^0.7.3" +"@popperjs/core@^2.9.0": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9" + integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA== + "@rails/webpacker@5.4.3": version "5.4.3" resolved "https://registry.yarnpkg.com/@rails/webpacker/-/webpacker-5.4.3.tgz#cfe2d8faffe7db5001bad50a1534408b4f2efb2f" @@ -1374,6 +1379,209 @@ resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.15.1.tgz#a3809ecc5aa8a03bd261a2f970d11cfdcbf11c4f" integrity sha512-yJiDGutlwu25iajCy51VRJeoH3UMs+s5qVIDGfmPUuFpZ+F6AJ9g9EFrsBNvHxAGBahQFMLlBdzlCVydhGp6tg== +"@tiptap/core@^2.0.0-beta.171": + version "2.0.0-beta.171" + resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.0.0-beta.171.tgz#e681964c443383b81d2638c51fc3bbfda034a4fb" + integrity sha512-4CdJfcchmBOFooWPBMJ7AxJISeTstMFriQv0RyReMt0Dpef/c9UoU+NkKLwwv5VRUX0M8dL5SzEhkB8wIODqlA== + dependencies: + "@types/prosemirror-commands" "^1.0.4" + "@types/prosemirror-keymap" "^1.0.4" + "@types/prosemirror-model" "^1.16.0" + "@types/prosemirror-schema-list" "^1.0.3" + "@types/prosemirror-state" "^1.2.8" + "@types/prosemirror-transform" "^1.1.5" + "@types/prosemirror-view" "^1.23.1" + prosemirror-commands "^1.2.1" + prosemirror-keymap "^1.1.5" + prosemirror-model "^1.16.1" + prosemirror-schema-list "^1.1.6" + prosemirror-state "^1.3.4" + prosemirror-transform "^1.3.3" + prosemirror-view "^1.23.6" + +"@tiptap/extension-blockquote@^2.0.0-beta.26": + version "2.0.0-beta.26" + resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.26.tgz#e5ae4b7bd9376db37407a23e22080c7b11287f3b" + integrity sha512-A6yjcYovONJfOjQFk6vDYXswaCdCtCwjL7w9VTB0R2DLTuJvvRt9DWN0IDcMrj5G+aMgDq4GUUTitv+2Y8krDg== + +"@tiptap/extension-bold@^2.0.0-beta.25": + version "2.0.0-beta.25" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.25.tgz#ec19e7c862d25bae49609c5d6a873f372c506dee" + integrity sha512-ZNdgFYDxKo8lAp0Pqzu45I0JH3ah8/X5TCYg9zNg3QwLUFT16g2LlWDMUDGT5pH9aXxgtFaEdoVacu0EyhlPnQ== + +"@tiptap/extension-bubble-menu@^2.0.0-beta.55": + version "2.0.0-beta.55" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.0.0-beta.55.tgz#a26ad892cea6af9eeada22235701b06d0921af48" + integrity sha512-v32/QnwwRbepdbrho8mTYru1/XNW/rJi3Mjrgo3rrIs67R86aEPmhmdzD3QEQUJhAJkduuwdw8zElmVWqIJQ9w== + dependencies: + prosemirror-state "^1.3.4" + prosemirror-view "^1.23.6" + tippy.js "^6.3.7" + +"@tiptap/extension-bullet-list@^2.0.0-beta.26": + version "2.0.0-beta.26" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.0.0-beta.26.tgz#b42126d2d984c04041b14037e8d3ec1bcf16e7ec" + integrity sha512-1n5HV8gY1tLjPk4x48nva6SZlFHoPlRfF6pqSu9JcJxPO7FUSPxUokuz4swYNe0LRrtykfyNz44dUcxKVhoFow== + +"@tiptap/extension-character-count@^2.0.0-beta.24": + version "2.0.0-beta.24" + resolved "https://registry.yarnpkg.com/@tiptap/extension-character-count/-/extension-character-count-2.0.0-beta.24.tgz#8b5dba59be75343b0d660c59656acbb0a0eb4c4b" + integrity sha512-zMe+iNmHypvGQop5yV6xLetXvgEx7oMXJUvX+WwvtjZwx+/jJKLOzsR5EVt0vY/T5P5VCC8hkTseQhgrv4p72w== + +"@tiptap/extension-code-block@^2.0.0-beta.37": + version "2.0.0-beta.37" + resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.37.tgz#c07c007248a21d9e0434458fd05c363b7078227f" + integrity sha512-mJAM+PHaNoKRYwM3D36lZ51/aoPxxvZNQn3UBnZ6G7l0ZJSgB3JvBEzqK6S8nNFeYIIxGwv4QF6vXe4MG9ie2g== + dependencies: + prosemirror-state "^1.3.4" + +"@tiptap/extension-code@^2.0.0-beta.26": + version "2.0.0-beta.26" + resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.0.0-beta.26.tgz#bbfa600a252ee2cded6947b56b6c4c33d998e53a" + integrity sha512-QcFWdEFfbJ1n5UFFBD17QPPAJ3J5p/b7XV484u0shCzywO7aNPV32QeHy1z0eMoyZtCbOWf6hg/a7Ugv8IwpHw== + +"@tiptap/extension-document@^2.0.0-beta.15": + version "2.0.0-beta.15" + resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.0.0-beta.15.tgz#5d17a0289244a913ab2ef08e8495a1e46950711e" + integrity sha512-ypENC+xUYD5m2t+KOKNYqyXnanXd5fxyIyhR1qeEEwwQwMXGNrO3kCH6O4mIDCpy+/WqHvVay2tV5dVsXnvY8w== + +"@tiptap/extension-dropcursor@^2.0.0-beta.25": + version "2.0.0-beta.25" + resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.25.tgz#962f290a200259533a26194daca5a4b4a53e72d3" + integrity sha512-GYf5s6dkZtsDy+TEkrQK6kLbfbitG4qnk02D+FlhlJMI/Nnx8rYCRJbwEHDdqrfX7XwZzULMqqqHvzxZYrEeNg== + dependencies: + "@types/prosemirror-dropcursor" "^1.0.3" + prosemirror-dropcursor "^1.4.0" + +"@tiptap/extension-floating-menu@^2.0.0-beta.50": + version "2.0.0-beta.50" + resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.0.0-beta.50.tgz#e8785d5f051a848ae053ce139581dce96b951a35" + integrity sha512-aQu1HtthMIYEPylr6kzioLxMiObLbcgwx9xZzF03KwNnkjQLbjZOeJX2RwSYVpiVgtfPBGOm3N/br6NSYec4yQ== + dependencies: + prosemirror-state "^1.3.4" + prosemirror-view "^1.23.6" + tippy.js "^6.3.7" + +"@tiptap/extension-gapcursor@^2.0.0-beta.34": + version "2.0.0-beta.34" + resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.34.tgz#0e4971affb1621934422dd5fc4bf2dd7a84f70f7" + integrity sha512-Vm8vMWWQ2kJcUOLfB5CEo5pYgyudI7JeeiZvX9ScPmUmgKVYhEpt3EAICY9pUYJ41aAVH35gZLXkUtsz2f9GHw== + dependencies: + "@types/prosemirror-gapcursor" "^1.0.4" + prosemirror-gapcursor "^1.2.1" + +"@tiptap/extension-hard-break@^2.0.0-beta.30": + version "2.0.0-beta.30" + resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.30.tgz#165494f1194a7bad08907e6d64d349dd15851b72" + integrity sha512-X9xj/S+CikrbIE7ccUFVwit5QHEbflnKVxod+4zPwr1cxogFbE9AyLZE2MpYdx3z9LcnTYYi9leBqFrP4T/Olw== + +"@tiptap/extension-heading@^2.0.0-beta.26": + version "2.0.0-beta.26" + resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.26.tgz#112b14b4d488772bda36abbf7cb2bc8aba7c42f5" + integrity sha512-nR6W/3rjnZH1Swo7tGBoYsmO6xMvu9MGq6jlm3WVHCB7B3CsrRvCkTwGjVIbKTaZC4bQfx5gvAUpQFvwuU+M5w== + +"@tiptap/extension-history@^2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.0.0-beta.21.tgz#5d96a17a83a7130744f0757a3275dd5b11eb1bf7" + integrity sha512-0v8Cl30V4dsabdpspLdk+f+lMoIvLFlJN5WRxtc7RRZ5gfJVxPHwooIKdvC51brfh/oJtWFCNMRjhoz0fRaF9A== + dependencies: + "@types/prosemirror-history" "^1.0.3" + prosemirror-history "^1.2.0" + +"@tiptap/extension-horizontal-rule@^2.0.0-beta.31": + version "2.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.31.tgz#efb383a6cedbbf4f2175d7d207eaeeba626faab0" + integrity sha512-MNc4retfjRgkv3qxqGya0+/BEd1Kmn+oMsCRvE+8x3sXyKIse+vdqMuG5qUcA6np0ZD/9hh1riiQ1GQdgc23Ng== + dependencies: + prosemirror-state "^1.3.4" + +"@tiptap/extension-italic@^2.0.0-beta.25": + version "2.0.0-beta.25" + resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.25.tgz#c2ec95cc5baf855134883c5e261da4ab0d3b9479" + integrity sha512-7PvhioTX9baVp5+AmmZU0qna+dFPZCRlSEN/GciH57N77d2uhJ/ZW5iQWTbvy5HBNddQB4Jts1UDIaC7WASrGA== + +"@tiptap/extension-link@^2.0.0-beta.36": + version "2.0.0-beta.36" + resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.0.0-beta.36.tgz#184bac20f3226b8945e400ebfdce2feabb4f5a3c" + integrity sha512-jV0EBM/QPfR4e5FG5OPHZARnYS+CL8yhCzHO4J1Nb1i/+vRY9QpPVBruZABBwt+J+PMdq6t/6vvIXejCR3wyAg== + dependencies: + linkifyjs "^3.0.5" + prosemirror-model "^1.16.1" + prosemirror-state "^1.3.4" + +"@tiptap/extension-list-item@^2.0.0-beta.20": + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.0.0-beta.20.tgz#7169528b226dee4590e013bdf6e5fc6d83729b0f" + integrity sha512-5IPEspJt38t9ROj4xLUesOVEYlTT/R9Skd9meHRxJQZX1qrzBICs5PC/WRIsnexrvTBhdxpYgCYjpvpsJBlKuQ== + +"@tiptap/extension-ordered-list@^2.0.0-beta.27": + version "2.0.0-beta.27" + resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.27.tgz#ed48a53a9b012d578613b68375db31e8664bfdc9" + integrity sha512-apFDeignxdZb3cA3p1HJu0zw1JgJdBYUBz1r7f99qdNybYuk3I/1MPUvlOuOgvIrBB/wydoyVDP+v9F7QN3tfQ== + +"@tiptap/extension-paragraph@^2.0.0-beta.23": + version "2.0.0-beta.23" + resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.23.tgz#2ab77308519494994d7a9e5a4acd14042f45f28c" + integrity sha512-VWAxyzecErYWk97Kv/Gkghh97zAQTcaVOisEnYYArZAlyYDaYM48qVssAC/vnRRynP2eQxb1EkppbAxE+bMHAA== + +"@tiptap/extension-placeholder@^2.0.0-beta.47": + version "2.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.0.0-beta.47.tgz#6dba9cc3bc82a97e4082345d5b8a69e53cbd67b7" + integrity sha512-+XCRwI022Gkay5STr4uQDCcXNq9RDq4adILoTN37rEA8RB5DSRi1eTOCwkQN9+rK7U46/BZECrUwC5NBi551eQ== + dependencies: + prosemirror-model "^1.16.1" + prosemirror-state "^1.3.4" + prosemirror-view "^1.23.6" + +"@tiptap/extension-strike@^2.0.0-beta.27": + version "2.0.0-beta.27" + resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.27.tgz#c5187bf3c28837f95a5c0c0617d0dd31c318353d" + integrity sha512-2dmCgtesuDdivM/54Q+Y6Tc3JbGz1SkHP6c62piuqBiYLWg3xa16zChZOhfN8szbbQlBgLT6XRTDt3c2Ux+Dug== + +"@tiptap/extension-text@^2.0.0-beta.15": + version "2.0.0-beta.15" + resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.0.0-beta.15.tgz#f08cff1b78f1c6996464dfba1fef8ec1e107617f" + integrity sha512-S3j2+HyV2gsXZP8Wg/HA+YVXQsZ3nrXgBM9HmGAxB0ESOO50l7LWfip0f3qcw1oRlh5H3iLPkA6/f7clD2/TFA== + +"@tiptap/extension-underline@^2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-2.0.0-beta.22.tgz#e6b83be0c0944183b47aa30d53f2ab5cd7defe23" + integrity sha512-c+tOv4CRBG2pgtAACEsDwvbmM8C89M/CeelTcLLu8zrk+PRy7yj8DKLUtcb9Ybsa7f1Suk6iqyj3dkfxuuvDLw== + +"@tiptap/react@^2.0.0-beta.107": + version "2.0.0-beta.107" + resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.0.0-beta.107.tgz#82e02bd83e9d3d37e31197f915968213124330c4" + integrity sha512-4G14F32TxEuYNYyOOQQxJ3ddFooPOv9Opcw5mjKxgKFZLzlBMTBl7os9ndrMfVdWYTI3RpZlfiAQxq3QlHamxA== + dependencies: + "@tiptap/extension-bubble-menu" "^2.0.0-beta.55" + "@tiptap/extension-floating-menu" "^2.0.0-beta.50" + prosemirror-view "^1.23.6" + +"@tiptap/starter-kit@^2.0.0-beta.180": + version "2.0.0-beta.180" + resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.180.tgz#bea8101fdc25de88eb2fb76d29a3d16f4e94028e" + integrity sha512-dX+RxfAZa5MyY/XPr8iW+VTX/Qy3MIhCWApw15zHfLOdO80inl3to9JG5XS9oSMI2/SqsRe9XKz47Lj8srhw7A== + dependencies: + "@tiptap/core" "^2.0.0-beta.171" + "@tiptap/extension-blockquote" "^2.0.0-beta.26" + "@tiptap/extension-bold" "^2.0.0-beta.25" + "@tiptap/extension-bullet-list" "^2.0.0-beta.26" + "@tiptap/extension-code" "^2.0.0-beta.26" + "@tiptap/extension-code-block" "^2.0.0-beta.37" + "@tiptap/extension-document" "^2.0.0-beta.15" + "@tiptap/extension-dropcursor" "^2.0.0-beta.25" + "@tiptap/extension-gapcursor" "^2.0.0-beta.34" + "@tiptap/extension-hard-break" "^2.0.0-beta.30" + "@tiptap/extension-heading" "^2.0.0-beta.26" + "@tiptap/extension-history" "^2.0.0-beta.21" + "@tiptap/extension-horizontal-rule" "^2.0.0-beta.31" + "@tiptap/extension-italic" "^2.0.0-beta.25" + "@tiptap/extension-list-item" "^2.0.0-beta.20" + "@tiptap/extension-ordered-list" "^2.0.0-beta.27" + "@tiptap/extension-paragraph" "^2.0.0-beta.23" + "@tiptap/extension-strike" "^2.0.0-beta.27" + "@tiptap/extension-text" "^2.0.0-beta.15" + "@types/angular@^1.6.39": version "1.8.1" resolved "https://registry.yarnpkg.com/@types/angular/-/angular-1.8.1.tgz#940b16476adff7b66608aae778e5e9f1c57ab847" @@ -1414,6 +1622,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.4.tgz#e1cf817d70a1e118e81922c4ff6683ce9d422e26" integrity sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA== +"@types/orderedmap@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/orderedmap/-/orderedmap-1.0.0.tgz#807455a192bba52cbbb4517044bc82bdbfa8c596" + integrity sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -1424,6 +1637,89 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== +"@types/prosemirror-commands@*", "@types/prosemirror-commands@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@types/prosemirror-commands/-/prosemirror-commands-1.0.4.tgz#d08551415127d93ae62e7239d30db0b5e7208e22" + integrity sha512-utDNYB3EXLjAfYIcRWJe6pn3kcQ5kG4RijbT/0Y/TFOm6yhvYS/D9eJVnijdg9LDjykapcezchxGRqFD5LcyaQ== + dependencies: + "@types/prosemirror-model" "*" + "@types/prosemirror-state" "*" + "@types/prosemirror-view" "*" + +"@types/prosemirror-dropcursor@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/prosemirror-dropcursor/-/prosemirror-dropcursor-1.0.3.tgz#49250849b8a0b86e8c29eb1ba70a463e53e46947" + integrity sha512-b0/8njnJ4lwyHKcGuCMf3x7r1KjxyugB1R/c2iMCjplsJHSC7UY9+OysqgJR5uUXRekUSGniiLgBtac/lvH6wg== + dependencies: + "@types/prosemirror-state" "*" + +"@types/prosemirror-gapcursor@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@types/prosemirror-gapcursor/-/prosemirror-gapcursor-1.0.4.tgz#7df7d373edb33ea8da12084bfd462cf84cd69761" + integrity sha512-9xKjFIG5947dzerFvkLWp6F53JwrUYoYwh3SgcTFEp8SbSfNNrez/PFYVZKPnoqPoaK5WtTdQTaMwpCV9rXQIg== + dependencies: + "@types/prosemirror-model" "*" + "@types/prosemirror-state" "*" + +"@types/prosemirror-history@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/prosemirror-history/-/prosemirror-history-1.0.3.tgz#f1110efbe758129b5475e466ff077f0a8d9b964f" + integrity sha512-5TloMDRavgLjOAKXp1Li8u0xcsspzbT1Cm9F2pwHOkgvQOz1jWQb2VIXO7RVNsFjLBZdIXlyfSLivro3DuMWXg== + dependencies: + "@types/prosemirror-model" "*" + "@types/prosemirror-state" "*" + +"@types/prosemirror-keymap@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@types/prosemirror-keymap/-/prosemirror-keymap-1.0.4.tgz#f73c79810e8d0e0a20d153d84f998f02e5afbc0c" + integrity sha512-ycevwkqUh+jEQtPwqO7sWGcm+Sybmhu8MpBsM8DlO3+YTKnXbKA6SDz/+q14q1wK3UA8lHJyfR+v+GPxfUSemg== + dependencies: + "@types/prosemirror-commands" "*" + "@types/prosemirror-model" "*" + "@types/prosemirror-state" "*" + "@types/prosemirror-view" "*" + +"@types/prosemirror-model@*", "@types/prosemirror-model@^1.16.0": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@types/prosemirror-model/-/prosemirror-model-1.16.0.tgz#8b22c7431a4c93f7f550fc89c4b0e2d44d42c8b6" + integrity sha512-nv93YLyTEcDDl17OB90EldxZjyJQJll2WSMLDvLzTewbpvE/vtMjHT3j4mik3uSzQ6YD486AcloCO3WODY/lDg== + dependencies: + "@types/orderedmap" "*" + +"@types/prosemirror-schema-list@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/prosemirror-schema-list/-/prosemirror-schema-list-1.0.3.tgz#bdf1893a7915fbdc5c49b3cac9368e96213d70de" + integrity sha512-uWybOf+M2Ea7rlbs0yLsS4YJYNGXYtn4N+w8HCw3Vvfl6wBAROzlMt0gV/D/VW/7J/LlAjwMezuGe8xi24HzXA== + dependencies: + "@types/orderedmap" "*" + "@types/prosemirror-model" "*" + "@types/prosemirror-state" "*" + +"@types/prosemirror-state@*", "@types/prosemirror-state@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@types/prosemirror-state/-/prosemirror-state-1.2.8.tgz#65080eeec52f63c50bf7034377f07773b4f6b2ac" + integrity sha512-mq9uyQWcpu8jeamO6Callrdvf/e1H/aRLR2kZWSpZrPHctEsxWHBbluD/wqVjXBRIOoMHLf6ZvOkrkmGLoCHVA== + dependencies: + "@types/prosemirror-model" "*" + "@types/prosemirror-transform" "*" + "@types/prosemirror-view" "*" + +"@types/prosemirror-transform@*", "@types/prosemirror-transform@^1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@types/prosemirror-transform/-/prosemirror-transform-1.1.5.tgz#e6949398c64a5d3ca53e6081352751aa9e9ce76e" + integrity sha512-Wr2HXaEF4JPklWpC17RTxE6PxyU54Taqk5FMhK1ojgcN93J+GpkYW8s0mD3rl7KfTmlhVwZPCHE9o0cYf2Go5A== + dependencies: + "@types/prosemirror-model" "*" + +"@types/prosemirror-view@*", "@types/prosemirror-view@^1.23.1": + version "1.23.1" + resolved "https://registry.yarnpkg.com/@types/prosemirror-view/-/prosemirror-view-1.23.1.tgz#a9a926bb6b6e6873e3a9d8caa61c32f3402629eb" + integrity sha512-6e1B2oKUnhmZPUrsVvYjDqeVjE6jGezygjtoHsAK4ZENAxHzHqy5NT4jUvdPTWjCYeH0t2Y7pSfRPNrPIyQX4A== + dependencies: + "@types/prosemirror-model" "*" + "@types/prosemirror-state" "*" + "@types/prosemirror-transform" "*" + "@types/q@^1.5.1": version "1.5.4" resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" @@ -5399,6 +5695,11 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= +linkifyjs@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-3.0.5.tgz#99e51a3a0c0e232fcb63ebb89eea3ff923378f34" + integrity sha512-1Y9XQH65eQKA9p2xtk+zxvnTeQBG7rdAXSkUG97DmuI/Xhji9uaUzaWxRj6rf9YC0v8KKHkxav7tnLX82Sz5Fg== + load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" @@ -6247,6 +6548,11 @@ optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" +orderedmap@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/orderedmap/-/orderedmap-1.1.1.tgz#c618e77611b3b21d0fe3edc92586265e0059c789" + integrity sha512-3Ux8um0zXbVacKUkcytc0u3HgC0b0bBLT+I60r2J/En72cI0nZffqrA7Xtf2Hqs27j1g82llR5Mhbd0Z1XW4AQ== + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -6508,6 +6814,11 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +phosphor-react@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/phosphor-react/-/phosphor-react-1.4.0.tgz#6c3d5f9d3433c3c2456b902891d24ec677f89dc3" + integrity sha512-K2/ZtkigHV/li5qfYPqY5fA7MLkWM52tW9ghBCyJc7JS5ykI/WD61JC8kFWaZ6yqlEHXPUJLHr+p+5uGsBnHmQ== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" @@ -7257,6 +7568,90 @@ prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +prosemirror-commands@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.2.1.tgz#eae0cb714df695260659b78ff5d201d3a037e50d" + integrity sha512-S/IkpXfpuLFsRynC2HQ5iYROUPiZskKS1+ClcWycGJvj4HMb/mVfeEkQrixYxgTl96EAh+RZQNWPC06GZXk5tQ== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.0.0" + +prosemirror-dropcursor@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.4.0.tgz#91a859d4ee79c99b1c0ba6ee61c093b195c0d9f0" + integrity sha512-6+YwTjmqDwlA/Dm+5wK67ezgqgjA/MhSDgaNxKUzH97SmeuWFXyLeDRxxOPZeSo7yTxcDGUCWTEjmQZsVBuMrQ== + dependencies: + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + prosemirror-view "^1.1.0" + +prosemirror-gapcursor@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.2.1.tgz#02365e1bcc1ad25d390b0fb7f0e94a7fc173ad75" + integrity sha512-PHa9lj27iM/g4C46gxVzsefuXVfy/LrGQH4QjMRht7VDBgw77iWYWn8ZHMWSFkwtr9jQEuxI5gccHHHwWG80nw== + dependencies: + prosemirror-keymap "^1.0.0" + prosemirror-model "^1.0.0" + prosemirror-state "^1.0.0" + prosemirror-view "^1.0.0" + +prosemirror-history@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.2.0.tgz#04cc4df8d2f7b2a46651a2780de191ada6d465ea" + integrity sha512-B9v9xtf4fYbKxQwIr+3wtTDNLDZcmMMmGiI3TAPShnUzvo+Rmv1GiUrsQChY1meetHl7rhML2cppF3FTs7f7UQ== + dependencies: + prosemirror-state "^1.2.2" + prosemirror-transform "^1.0.0" + rope-sequence "^1.3.0" + +prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.1.5.tgz#b5984c7d30f5c75956c853126c54e9e624c0327b" + integrity sha512-8SZgPH3K+GLsHL2wKuwBD9rxhsbnVBTwpHCO4VUO5GmqUQlxd/2GtBVWTsyLq4Dp3N9nGgPd3+lZFKUDuVp+Vw== + dependencies: + prosemirror-state "^1.0.0" + w3c-keyname "^2.2.0" + +prosemirror-model@^1.0.0, prosemirror-model@^1.16.0, prosemirror-model@^1.16.1: + version "1.16.1" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.16.1.tgz#fb388270bc9609b66298d6a7e15d0cc1d6c61253" + integrity sha512-r1/w0HDU40TtkXp0DyKBnFPYwd8FSlUSJmGCGFv4DeynfeSlyQF2FD0RQbVEMOe6P3PpUSXM6LZBV7W/YNZ4mA== + dependencies: + orderedmap "^1.1.0" + +prosemirror-schema-list@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-1.1.6.tgz#c3e13fe2f74750e4a53ff88d798dc0c4ccca6707" + integrity sha512-aFGEdaCWmJzouZ8DwedmvSsL50JpRkqhQ6tcpThwJONVVmCgI36LJHtoQ4VGZbusMavaBhXXr33zyD2IVsTlkw== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-transform "^1.0.0" + +prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.3.4.tgz#4c6b52628216e753fc901c6d2bfd84ce109e8952" + integrity sha512-Xkkrpd1y/TQ6HKzN3agsQIGRcLckUMA9u3j207L04mt8ToRgpGeyhbVv0HI7omDORIBHjR29b7AwlATFFf2GLA== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-transform "^1.0.0" + +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.3.3.tgz#5f6712b0577a119cc418686fe7588b6dd9b7464d" + integrity sha512-9NLVXy1Sfa2G6qPqhWMkEvwQQMTw7OyTqOZbJaGQWsCeH3hH5Cw+c5eNaLM1Uu75EyKLsEZhJ93XpHJBa6RX8A== + dependencies: + prosemirror-model "^1.0.0" + +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.23.6: + version "1.23.6" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.23.6.tgz#f514b3166942cb70aac4ac24d0a28c21c3897608" + integrity sha512-B4DAzriNpI/AVoW0Lu6SVfX00jZZQxOVwdBQEjWlRbCdT9V0pvk4GQJ3JTFaib+b6BcPdRZ3MjWXz2xvV1rblA== + dependencies: + prosemirror-model "^1.16.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + proxy-addr@~2.0.5: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -7398,6 +7793,11 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +react-cool-onclickoutside@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/react-cool-onclickoutside/-/react-cool-onclickoutside-1.7.0.tgz#abc844e14852220fe15f81d7ef44976d15cd9980" + integrity sha512-HVZK2155Unee+enpoHKyYP2UdQK69thw90XAOUCjvJBcgRSgfRPgWWt/W1dYzoGp3+nleAa8SJxF1d4FMA4Qmw== + react-dom@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" @@ -7407,6 +7807,11 @@ react-dom@^17.0.2: object-assign "^4.1.1" scheduler "^0.20.2" +react-hook-form@^7.25.3: + version "7.25.3" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.25.3.tgz#1475fd52398e905e1f6d88835f96aaa1144635c3" + integrity sha512-jL4SByMaC8U3Vhu9s7CwgJBP4M6I3Kpwxib9LrCwWSRPnXDrNQL4uihSTqLLoDICqSUhwwvian9uVYfv+ITtGg== + react-i18next@^11.7.3: version "11.11.0" resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.11.0.tgz#2f7c6cb4f81f94d1728a02d60e4bb5216709f942" @@ -7800,6 +8205,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rope-sequence@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.2.tgz#a19e02d72991ca71feb6b5f8a91154e48e3c098b" + integrity sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg== + run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" @@ -8598,6 +9008,13 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= +tippy.js@^6.3.7: + version "6.3.7" + resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c" + integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ== + dependencies: + "@popperjs/core" "^2.9.0" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -8934,6 +9351,11 @@ void-elements@3.1.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk= +w3c-keyname@^2.2.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.4.tgz#4ade6916f6290224cdbd1db8ac49eab03d0eef6b" + integrity sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw== + warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" From d94f5efbcd15bbd6a85ee2fa3fdf6fa043f3e3c5 Mon Sep 17 00:00:00 2001 From: vincent Date: Fri, 4 Feb 2022 15:09:38 +0100 Subject: [PATCH 006/274] Add style variables --- app/frontend/src/stylesheets/application.scss | 1 + .../src/stylesheets/bootstrap_and_overrides.scss | 3 ++- .../modules/base/fab-text-editor.scss | 16 +++++++--------- .../src/stylesheets/modules/base/rhf-input.scss | 8 ++++++-- .../src/stylesheets/variables/decoration.scss | 4 ++++ 5 files changed, 20 insertions(+), 12 deletions(-) create mode 100644 app/frontend/src/stylesheets/variables/decoration.scss diff --git a/app/frontend/src/stylesheets/application.scss b/app/frontend/src/stylesheets/application.scss index 132d0b81e..37ba6b614 100644 --- a/app/frontend/src/stylesheets/application.scss +++ b/app/frontend/src/stylesheets/application.scss @@ -1,5 +1,6 @@ @import "variables/colors"; @import "variables/typography"; +@import "variables/decoration"; @import "app.functions"; @import "bootstrap_and_overrides"; diff --git a/app/frontend/src/stylesheets/bootstrap_and_overrides.scss b/app/frontend/src/stylesheets/bootstrap_and_overrides.scss index 6784a7b1a..ea2c8cae9 100644 --- a/app/frontend/src/stylesheets/bootstrap_and_overrides.scss +++ b/app/frontend/src/stylesheets/bootstrap_and_overrides.scss @@ -95,7 +95,8 @@ $link-hover-decoration: underline; // Semibold = 600, Bold = 700, ExtraB = 800 -$font-family-sans-serif: "proxima-nova", "Open Sans", Helvetica, Arial, sans-serif !default; +//$font-family-sans-serif: "proxima-nova", "Open Sans", Helvetica, Arial, sans-serif !default; +$font-family-sans-serif: var(--font-text) !default; $font-proxima-condensed: "proxima-nova-condensed", "Open Sans Condensed", Helvetica, Arial, sans-serif !default; $font-family-serif: Georgia, "Times New Roman", Times, serif !default; $font-felt: "felt-tip-roman", "Loved by the King", cursive, sans-serif; diff --git a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss index dc2068a69..cdcbaa7d0 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss @@ -4,10 +4,10 @@ padding-bottom: 1.6rem; background-color: var(--gray-soft-lightest); border: 1px solid var(--gray-soft-dark); - // TODO: border radius from variable - border-radius: 8px; + border-radius: var(--border-radius); &-label { + @include text-sm; display: block; margin-bottom: 0.8rem; } @@ -71,9 +71,8 @@ padding: 1.2rem; background-color: var(--gray-soft-lightest); border: 1px solid var(--gray-soft-darkest); - border-radius: 8px; - // TODO: shadow from variable - box-shadow: 0 0 10px rgba(39, 32, 32, 0.25); + border-radius: var(--border-radius); + box-shadow: var(--shadow); opacity: 0; pointer-events: none; transition: opacity 0.25s ease-out; @@ -95,7 +94,7 @@ padding: 0.4rem 0.8rem; background-color: var(--gray-soft-light); border: 1px solid var(--secondary); - border-radius: 8px; + border-radius: var(--border-radius); font-size: var(--text-base); text-overflow: ellipsis; white-space: nowrap; @@ -157,9 +156,8 @@ color: var(--main-dark); background-color: var(--main-lightest); border: 1px solid var(--main-light); - border-radius: 8px; - // TODO: shadow from variable - box-shadow: 0 0 10px rgba(39, 32, 32, 0.25); + border-radius: var(--border-radius); + box-shadow: var(--shadow); svg { flex-shrink: 0; diff --git a/app/frontend/src/stylesheets/modules/base/rhf-input.scss b/app/frontend/src/stylesheets/modules/base/rhf-input.scss index 8d9a19a2a..3efe1ab21 100644 --- a/app/frontend/src/stylesheets/modules/base/rhf-input.scss +++ b/app/frontend/src/stylesheets/modules/base/rhf-input.scss @@ -8,7 +8,10 @@ justify-content: space-between; align-items: flex-start; margin-bottom: 0.8rem; - p { margin: 0; } + p { + @include text-sm; + margin: 0; + } } &.is-required &-header p::after { content: "*"; @@ -22,7 +25,7 @@ grid-template-areas: "icon input addon"; grid-template-columns: min-content 1fr min-content; border: 1px solid var(--gray-soft-dark); - border-radius: 4px; + border-radius: var(--border-radius); overflow: hidden; transition: border-color ease-in-out 0.15s; @@ -42,6 +45,7 @@ input { grid-area: input; border: none; + border-radius: var(--border-radius); box-shadow: inset 0 1px 1px rgba(0, 0, 0, .08); padding: 0 0.8rem; color: var(--gray-hard-darkest); diff --git a/app/frontend/src/stylesheets/variables/decoration.scss b/app/frontend/src/stylesheets/variables/decoration.scss new file mode 100644 index 000000000..29a009f81 --- /dev/null +++ b/app/frontend/src/stylesheets/variables/decoration.scss @@ -0,0 +1,4 @@ +:root { + --border-radius: 8px; + --shadow: 0 0 10px rgba(39, 32, 32, 0.25); +} \ No newline at end of file From c317c04117ca8af231f9f5b6c73615f479d2b41b Mon Sep 17 00:00:00 2001 From: vincent Date: Mon, 7 Feb 2022 17:27:51 +0100 Subject: [PATCH 007/274] Update Node --- .nvmrc | 2 +- CHANGELOG.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 9cd25a1fe..23d9c36a1 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -12.18.3 +16.13.2 diff --git a/CHANGELOG.md b/CHANGELOG.md index 35c4243e7..6c51ae0d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog Fab-manager +- Updated Node to 16.13.2 + # v5.3.2 2022 January 19 - Add a test for statistics generation From fbbd64165531e55ed4842ab66af1f54c50bea7e4 Mon Sep 17 00:00:00 2001 From: vincent Date: Tue, 8 Feb 2022 09:48:57 +0100 Subject: [PATCH 008/274] Delete unused components --- .../plan-categories/create-plan-category.tsx | 122 ------------------ .../plan-categories/edit-plan-category.tsx | 104 --------------- 2 files changed, 226 deletions(-) delete mode 100644 app/frontend/src/javascript/components/plan-categories/create-plan-category.tsx delete mode 100644 app/frontend/src/javascript/components/plan-categories/edit-plan-category.tsx diff --git a/app/frontend/src/javascript/components/plan-categories/create-plan-category.tsx b/app/frontend/src/javascript/components/plan-categories/create-plan-category.tsx deleted file mode 100644 index fda2db9da..000000000 --- a/app/frontend/src/javascript/components/plan-categories/create-plan-category.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import React, { BaseSyntheticEvent, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import PlanCategoryAPI from '../../api/plan-category'; -import { PlanCategory } from '../../models/plan-category'; -import { FabButton } from '../base/fab-button'; -import { FabModal } from '../base/fab-modal'; -import { LabelledInput } from '../base/labelled-input'; -import { Loader } from '../base/loader'; -import { FabAlert } from '../base/fab-alert'; - -interface CreatePlanCategoryProps { - onSuccess: (message: string) => void, - onError: (message: string) => void, -} - -/** - * This component shows a button. - * When clicked, we show a modal dialog allowing to fill the parameters with a new plan-category. - */ -const CreatePlanCategoryComponent: React.FC = ({ onSuccess, onError }) => { - const { t } = useTranslation('admin'); - - const [category, setCategory] = useState(null); - // is the creation modal open? - const [isOpen, setIsOpen] = useState(false); - - /** - * Opens/closes the new plan-category (creation) modal - */ - const toggleModal = (): void => { - setIsOpen(!isOpen); - }; - - /** - * The creation has been confirmed by the user. - * Push the new plan-category to the API. - */ - const onCreateConfirmed = (): void => { - PlanCategoryAPI.create(category).then(() => { - onSuccess(t('app.admin.create_plan_category.category_created')); - resetCategory(); - toggleModal(); - }).catch((error) => { - onError(t('app.admin.create_plan_category.unable_to_create') + error); - }); - }; - - /** - * Callback triggered when the user is changing the name of the category in the modal dialog. - * We update the name of the temporary-set plan-category, accordingly. - */ - const onCategoryNameChange = (event: BaseSyntheticEvent) => { - setCategory({ ...category, name: event.target.value }); - }; - - /** - * Callback triggered when the user is changing the weight of the category in the modal dialog. - * We update the weight of the temporary-set plan-category, accordingly. - */ - const onCategoryWeightChange = (event: BaseSyntheticEvent) => { - setCategory({ ...category, weight: event.target.value }); - }; - - /** - * Initialize a new plan-category for creation - */ - const initCategoryCreation = () => { - setCategory({ name: '', weight: 0 }); - }; - - /** - * Reinitialize the category to prevent ghost data - */ - const resetCategory = () => { - setCategory(null); - }; - - return ( -
- } - className="add-category" - onClick={toggleModal}> - {t('app.admin.create_plan_category.new_category')} - - - {category &&
- - } - type="text" - value={category.name} - onChange={onCategoryNameChange} /> - - } - value={category.weight} - onChange={onCategoryWeightChange} /> -
} - - {t('app.admin.create_plan_category.significance_info')} - -
-
- ); -}; - -export const CreatePlanCategory: React.FC = ({ onSuccess, onError }) => { - return ( - - - - ); -}; diff --git a/app/frontend/src/javascript/components/plan-categories/edit-plan-category.tsx b/app/frontend/src/javascript/components/plan-categories/edit-plan-category.tsx deleted file mode 100644 index 1d351627d..000000000 --- a/app/frontend/src/javascript/components/plan-categories/edit-plan-category.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import React, { BaseSyntheticEvent, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import PlanCategoryAPI from '../../api/plan-category'; -import { PlanCategory } from '../../models/plan-category'; -import { FabButton } from '../base/fab-button'; -import { FabModal } from '../base/fab-modal'; -import { LabelledInput } from '../base/labelled-input'; -import { Loader } from '../base/loader'; -import { FabAlert } from '../base/fab-alert'; - -interface EditPlanCategoryProps { - onSuccess: (message: string) => void, - onError: (message: string) => void, - category: PlanCategory -} - -/** - * This component shows an edit button. - * When clicked, we show a modal dialog allowing to edit the parameters of the provided plan-category. - */ -const EditPlanCategoryComponent: React.FC = ({ onSuccess, onError, category }) => { - const { t } = useTranslation('admin'); - - // is the edition modal open? - const [editionModal, setEditionModal] = useState(false); - // when editing, we store the category here, until the edition is over - const [tempCategory, setTempCategory] = useState(category); - - /** - * Opens/closes the edition modal - */ - const toggleEditionModal = (): void => { - setEditionModal(!editionModal); - }; - - /** - * The edit has been confirmed by the user. - * Call the API to trigger the update of the temporary set plan-category. - */ - const onEditConfirmed = (): void => { - PlanCategoryAPI.update(tempCategory).then((updatedCategory) => { - onSuccess(t('app.admin.edit_plan_category.category_updated')); - setTempCategory(updatedCategory); - toggleEditionModal(); - }).catch((error) => { - onError(t('app.admin.edit_plan_category.unable_to_update') + error); - }); - }; - - /** - * Callback triggered when the user is changing the name of the category in the modal dialog. - * We update the name of the temporary-set plan-category, accordingly. - */ - const onCategoryNameChange = (event: BaseSyntheticEvent) => { - setTempCategory({ ...tempCategory, name: event.target.value }); - }; - - /** - * Callback triggered when the user is changing the weight of the category in the modal dialog. - * We update the weight of the temporary-set plan-category, accordingly. - */ - const onCategoryWeightChange = (event: BaseSyntheticEvent) => { - setTempCategory({ ...tempCategory, weight: event.target.value }); - }; - - return ( -
- } onClick={toggleEditionModal} /> - - {tempCategory &&
- - } - value={tempCategory.name} - onChange={onCategoryNameChange} /> - - } - value={tempCategory.weight} - onChange={onCategoryWeightChange} /> -
} - - {t('app.admin.edit_plan_category.significance_info')} - -
-
- ); -}; - -export const EditPlanCategory: React.FC = ({ onSuccess, onError, category }) => { - return ( - - - - ); -}; From 98361707dac0ceec3f9d52a314d30b31ad7aef06 Mon Sep 17 00:00:00 2001 From: vincent Date: Thu, 10 Feb 2022 15:01:33 +0100 Subject: [PATCH 009/274] Test video embed on the text editor --- .../base/text-editor/fab-text-editor.tsx | 4 +- .../components/base/text-editor/iframe.tsx | 76 +++++++++++++++++++ .../components/base/text-editor/menu-bar.tsx | 20 ++++- .../modules/base/fab-text-editor.scss | 9 +++ 4 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 app/frontend/src/javascript/components/base/text-editor/iframe.tsx diff --git a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx index 19b293c20..47d173953 100644 --- a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx @@ -9,6 +9,7 @@ import Placeholder from '@tiptap/extension-placeholder'; import CharacterCount from '@tiptap/extension-character-count'; import Underline from '@tiptap/extension-underline'; import Link from '@tiptap/extension-link'; +import Iframe from './iframe'; import { MenuBar } from './menu-bar'; import { WarningOctagon } from 'phosphor-react'; @@ -51,7 +52,8 @@ export const FabTextEditor: React.FC = ({ label, paragraphTo }), CharacterCount.configure({ limit - }) + }), + Iframe ], content, onUpdate: ({ editor }) => { diff --git a/app/frontend/src/javascript/components/base/text-editor/iframe.tsx b/app/frontend/src/javascript/components/base/text-editor/iframe.tsx new file mode 100644 index 000000000..0263800f9 --- /dev/null +++ b/app/frontend/src/javascript/components/base/text-editor/iframe.tsx @@ -0,0 +1,76 @@ +import { Node } from '@tiptap/core'; + +export interface IframeOptions { + allowFullscreen: boolean, + HTMLAttributes: { + [key: string]: any + }, +} + +declare module '@tiptap/core' { + interface Commands { + iframe: { + /** + * Add an iframe to embed a video + */ + setIframe: (options: { src: string }) => ReturnType, + } + } +} + +export default Node.create({ + name: 'iframe', + + group: 'block', + + atom: true, + + addOptions () { + return { + allowFullscreen: true, + HTMLAttributes: { + class: 'fab-textEditor-video' + } + }; + }, + + addAttributes () { + return { + src: { + default: null + }, + frameborder: { + default: 0 + }, + allowfullscreen: { + default: this.options.allowFullscreen, + parseHTML: () => this.options.allowFullscreen + } + }; + }, + + parseHTML () { + return [{ + tag: 'iframe' + }]; + }, + + renderHTML ({ HTMLAttributes }) { + return ['div', this.options.HTMLAttributes, ['iframe', HTMLAttributes]]; + }, + + addCommands () { + return { + setIframe: (options: { src: string }) => ({ tr, dispatch }) => { + const { selection } = tr; + const node = this.type.create(options); + + if (dispatch) { + tr.replaceRangeWith(selection.from, selection.to, node); + } + + return true; + } + }; + } +}); diff --git a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx index 4d19ae195..0448aa3c6 100644 --- a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx @@ -2,17 +2,18 @@ import React, { useCallback, useState, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import useOnclickOutside from 'react-cool-onclickoutside'; import { Editor } from '@tiptap/react'; -import { TextAa, TextBolder, TextItalic, TextUnderline, LinkSimpleHorizontal, ListBullets, Quotes, Trash, CheckCircle } from 'phosphor-react'; +import { TextAa, TextBolder, TextItalic, TextUnderline, LinkSimpleHorizontal, ListBullets, Quotes, Trash, CheckCircle, VideoCamera } from 'phosphor-react'; interface MenuBarProps { paragraphTools?: boolean, + extra?: boolean, editor?: Editor, } /** * This component is the menu bar for the WYSIWYG text editor */ -export const MenuBar: React.FC = ({ editor, paragraphTools }) => { +export const MenuBar: React.FC = ({ editor, paragraphTools, extra }) => { const { t } = useTranslation('shared'); const [linkMenu, setLinkMenu] = useState(false); @@ -83,6 +84,11 @@ export const MenuBar: React.FC = ({ editor, paragraphTools }) => { setLinkMenu(false); }; + // Add iFrame + const addIframe = () => { + editor.chain().focus().setIframe({ src: 'https://www.youtube.com/embed/XIMLoLxmTDw' }).run(); + }; + if (!editor) { return null; } @@ -144,6 +150,16 @@ export const MenuBar: React.FC = ({ editor, paragraphTools }) => { > + { extra && + (<> + + ) + }
diff --git a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss index cdcbaa7d0..5ec63f5a2 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss @@ -144,6 +144,15 @@ } } + &-video { + position: relative; + height: 0; + width: 100%; + max-width: 600px; + padding-bottom: calc(100 / 16 * 9); + overflow: hidden; + } + &-error { position: absolute; top: 4.5rem; From 2dc7529b3f79eacd40f5adfbe17e942396dcd2e8 Mon Sep 17 00:00:00 2001 From: vincent Date: Fri, 25 Mar 2022 18:44:37 +0100 Subject: [PATCH 010/274] Add video embed on the text editor --- .../base/text-editor/fab-text-editor.tsx | 13 +- .../components/base/text-editor/menu-bar.tsx | 130 +++++++++++++----- .../modules/base/fab-text-editor.scss | 60 ++++---- package.json | 5 +- yarn.lock | 90 +++++++----- 5 files changed, 193 insertions(+), 105 deletions(-) diff --git a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx index 47d173953..667df3b30 100644 --- a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx @@ -20,15 +20,16 @@ interface FabTextEditorProps { paragraphTools?: boolean, content?: string, limit?: number, + video?: boolean, onChange?: (content: string) => void, placeholder?: string, - error?: string, + error?: string } /** * This component is a WYSIWYG text editor */ -export const FabTextEditor: React.FC = ({ label, paragraphTools, content, limit = 400, onChange, placeholder, error }) => { +export const FabTextEditor: React.FC = ({ label, paragraphTools, content, limit = 400, video, onChange, placeholder, error }) => { const { t } = useTranslation('shared'); const placeholderText = placeholder || t('app.shared.text_editor.placeholder'); // TODO: Add ctrl+click on link to visit @@ -69,7 +70,7 @@ export const FabTextEditor: React.FC = ({ label, paragraphTo <> {label && }
- +
{editor?.storage.characterCount.characters()} / {limit} @@ -85,12 +86,12 @@ export const FabTextEditor: React.FC = ({ label, paragraphTo ); }; -const FabTextEditorWrapper: React.FC = ({ label, paragraphTools, content, limit, placeholder, error }) => { +const FabTextEditorWrapper: React.FC = ({ label, paragraphTools, content, limit, video, placeholder, error }) => { return ( - + ); }; -Application.Components.component('fabTextEditor', react2angular(FabTextEditorWrapper, ['label', 'paragraphTools', 'content', 'limit', 'placeholder', 'error'])); +Application.Components.component('fabTextEditor', react2angular(FabTextEditorWrapper, ['label', 'paragraphTools', 'content', 'limit', 'video', 'placeholder', 'error'])); diff --git a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx index 0448aa3c6..6809feca2 100644 --- a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx @@ -6,34 +6,39 @@ import { TextAa, TextBolder, TextItalic, TextUnderline, LinkSimpleHorizontal, Li interface MenuBarProps { paragraphTools?: boolean, - extra?: boolean, + video?: boolean, editor?: Editor, } /** * This component is the menu bar for the WYSIWYG text editor */ -export const MenuBar: React.FC = ({ editor, paragraphTools, extra }) => { +export const MenuBar: React.FC = ({ editor, paragraphTools, video }) => { const { t } = useTranslation('shared'); - const [linkMenu, setLinkMenu] = useState(false); + const [submenu, setSubmenu] = useState(''); const resetUrl = { href: '', target: '_blank' }; const [url, setUrl] = useState(resetUrl); - const ref = useOnclickOutside(() => { - setLinkMenu(false); - }); + const [videoProvider, setVideoProvider] = useState('youtube'); + const [videoId, setVideoId] = useState(''); - // Reset state values when the link menu is closed + // Reset state values when the submenu is closed useEffect(() => { - if (!linkMenu) { + if (!submenu) { setUrl(resetUrl); + setVideoProvider('youtube'); } - }, [linkMenu]); + }, [submenu]); + + // Close the submenu frame on click outside + const ref = useOnclickOutside(() => { + setSubmenu(''); + }); // Toggle link menu's visibility const toggleLinkMenu = () => { - if (!linkMenu) { - setLinkMenu(true); + if (submenu !== 'link') { + setSubmenu('link'); const previousUrl = { href: editor.getAttributes('link').href, target: editor.getAttributes('link').target || '' @@ -43,8 +48,7 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, extra setUrl(previousUrl); } } else { - setLinkMenu(false); - setUrl(resetUrl); + setSubmenu(''); } }; @@ -56,7 +60,7 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, extra }; // Update url - const handleChange = (evt) => { + const linkUrlChange = (evt) => { setUrl({ ...url, href: evt.target.value }); }; // Support keyboard "Enter" key event to validate @@ -74,19 +78,52 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, extra } editor.chain().focus().extendMarkRange('link').setLink({ href: url.href, target: url.target }).run(); if (closeLinkMenu) { - setLinkMenu(false); + setSubmenu(''); } }, [editor, url]); // Remove the link tag from the selected text const unsetLink = () => { editor.chain().focus().extendMarkRange('link').unsetLink().run(); - setLinkMenu(false); + setSubmenu(''); }; - // Add iFrame + // Toggle video menu's visibility + const toggleVideoMenu = () => { + if (submenu !== 'video') { + setSubmenu('video'); + } else { + setSubmenu(''); + } + }; + + // Store selected video provider in state + const handleSelect = (evt) => { + setVideoProvider(evt.target.value); + }; + // Store video id in state + const VideoUrlChange = (evt) => { + const id = evt.target.value.match(/([^/]+$)/g); + setVideoId(id); + }; + // Insert iframe containing the video player const addIframe = () => { - editor.chain().focus().setIframe({ src: 'https://www.youtube.com/embed/XIMLoLxmTDw' }).run(); + let videoUrl = ''; + switch (videoProvider) { + case 'youtube': + videoUrl = `https://www.youtube.com/embed/${videoId}`; + break; + case 'vimeo': + videoUrl = `https://player.vimeo.com/video/${videoId}`; + break; + case 'dailymotion': + videoUrl = `https://www.dailymotion.com/embed/video/${videoId}`; + break; + default: + break; + } + editor.chain().focus().setIframe({ src: videoUrl }).run(); + setSubmenu(''); }; if (!editor) { @@ -150,34 +187,53 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, extra > - { extra && + { video && (<> ) }
-
-
- - -
-
- - -
+
+ { submenu === 'link' && + (<> +
+ + +
+
+ + +
+ ) + } + { submenu === 'video' && + (<> + +
+ + +
+ ) + }
); diff --git a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss index 5ec63f5a2..8da40fedd 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss @@ -49,7 +49,10 @@ // tiptap class for the editor .ProseMirror { + max-height: 40vh; padding: 1.6rem 1.6rem 1.2rem; + overflow: auto; + resize: vertical; &:focus { outline: none; } @include editor; } @@ -61,7 +64,7 @@ color: var(--gray-hard-lightest); } - &-linkMenu { + &-subMenu { position: absolute; top: 4.5rem; right: 0; @@ -83,25 +86,35 @@ } & > div { display: flex; - align-items: center + align-items: center; + &:not(:last-of-type) { margin-bottom: 0.8rem; } } - .url { + + input[type="text"], + select { + width: 100%; + height: 4rem; + padding: 0.4rem 0.8rem; + background-color: var(--gray-soft-light); + border: 1px solid var(--secondary); + border-radius: var(--border-radius); + font-size: var(--text-base); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + input[type="text"] { + margin-right: 1.2rem; + &::placeholder { color: var(--gray-soft-darkest);} + } + select { margin-bottom: 0.8rem; - input { - width: 100%; - height: 4rem; - margin-right: 1.2rem; - padding: 0.4rem 0.8rem; - background-color: var(--gray-soft-light); - border: 1px solid var(--secondary); - border-radius: var(--border-radius); - font-size: var(--text-base); - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - &::placeholder { color: var(--gray-soft-darkest);} - } } + button { + @include button(3.2rem); + margin-left: auto; + } + .tab { display: flex; align-items: center; @@ -137,11 +150,6 @@ border-color: var(--information); } } - - button { - @include button(3.2rem); - margin-left: auto; - } } &-video { @@ -149,8 +157,14 @@ height: 0; width: 100%; max-width: 600px; - padding-bottom: calc(100 / 16 * 9); + padding-bottom: calc(100% / 16 * 9); overflow: hidden; + + iframe { + position: absolute; + max-width: 100%; + inset: 0; + } } &-error { diff --git a/package.json b/package.json index c73016964..a0b9032b4 100644 --- a/package.json +++ b/package.json @@ -58,12 +58,13 @@ "@rails/webpacker": "5.4.3", "@stripe/react-stripe-js": "^1.4.0", "@stripe/stripe-js": "^1.13.2", + "@tiptap/core": "^2.0.0-beta.174", "@tiptap/extension-character-count": "^2.0.0-beta.24", "@tiptap/extension-link": "^2.0.0-beta.36", "@tiptap/extension-placeholder": "^2.0.0-beta.47", "@tiptap/extension-underline": "^2.0.0-beta.22", - "@tiptap/react": "^2.0.0-beta.107", - "@tiptap/starter-kit": "^2.0.0-beta.180", + "@tiptap/react": "^2.0.0-beta.108", + "@tiptap/starter-kit": "^2.0.0-beta.183", "@types/react": "^17.0.3", "@types/react-dom": "^17.0.3", "@uirouter/angularjs": "0.4", diff --git a/yarn.lock b/yarn.lock index a03ff01f1..ff10d97c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1379,10 +1379,10 @@ resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.15.1.tgz#a3809ecc5aa8a03bd261a2f970d11cfdcbf11c4f" integrity sha512-yJiDGutlwu25iajCy51VRJeoH3UMs+s5qVIDGfmPUuFpZ+F6AJ9g9EFrsBNvHxAGBahQFMLlBdzlCVydhGp6tg== -"@tiptap/core@^2.0.0-beta.171": - version "2.0.0-beta.171" - resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.0.0-beta.171.tgz#e681964c443383b81d2638c51fc3bbfda034a4fb" - integrity sha512-4CdJfcchmBOFooWPBMJ7AxJISeTstMFriQv0RyReMt0Dpef/c9UoU+NkKLwwv5VRUX0M8dL5SzEhkB8wIODqlA== +"@tiptap/core@^2.0.0-beta.174": + version "2.0.0-beta.174" + resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.0.0-beta.174.tgz#cfdf16b7d7401e4b255dc69147d784f5f537b942" + integrity sha512-APQDto40PdvagG1HTwkKlieQS4Vp6GXNe7qgV1Qo2QCgJCLyxc/fXCTghtrOx0CQb+9JT7fjSLZxbSyUFXjx7Q== dependencies: "@types/prosemirror-commands" "^1.0.4" "@types/prosemirror-keymap" "^1.0.4" @@ -1404,10 +1404,10 @@ resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.26.tgz#e5ae4b7bd9376db37407a23e22080c7b11287f3b" integrity sha512-A6yjcYovONJfOjQFk6vDYXswaCdCtCwjL7w9VTB0R2DLTuJvvRt9DWN0IDcMrj5G+aMgDq4GUUTitv+2Y8krDg== -"@tiptap/extension-bold@^2.0.0-beta.25": - version "2.0.0-beta.25" - resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.25.tgz#ec19e7c862d25bae49609c5d6a873f372c506dee" - integrity sha512-ZNdgFYDxKo8lAp0Pqzu45I0JH3ah8/X5TCYg9zNg3QwLUFT16g2LlWDMUDGT5pH9aXxgtFaEdoVacu0EyhlPnQ== +"@tiptap/extension-bold@^2.0.0-beta.26": + version "2.0.0-beta.26" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.26.tgz#aa1c7850df28cec8e0614fde437183bd4ae3e66b" + integrity sha512-pnO0I5sEQM3pmowjMGQ74adLzvc6HqGyLyqMizaGMicPu9uTYlSdId+qckYEEgPwPMaEShtv2Vg+ZHs7KVqfcg== "@tiptap/extension-bubble-menu@^2.0.0-beta.55": version "2.0.0-beta.55" @@ -1495,10 +1495,10 @@ dependencies: prosemirror-state "^1.3.4" -"@tiptap/extension-italic@^2.0.0-beta.25": - version "2.0.0-beta.25" - resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.25.tgz#c2ec95cc5baf855134883c5e261da4ab0d3b9479" - integrity sha512-7PvhioTX9baVp5+AmmZU0qna+dFPZCRlSEN/GciH57N77d2uhJ/ZW5iQWTbvy5HBNddQB4Jts1UDIaC7WASrGA== +"@tiptap/extension-italic@^2.0.0-beta.26": + version "2.0.0-beta.26" + resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.26.tgz#b00c9e32b81b1bd94eaed24bb2a22e44d5dc54a3" + integrity sha512-vejGe2ra4K5ipFOn1U9viqF9X9nPTX8WSJpSOux+9UbKjHpANy7bz69tp66OIi/Wh5L/MMDc+luH/04qfVnpZw== "@tiptap/extension-link@^2.0.0-beta.36": version "2.0.0-beta.36" @@ -1548,23 +1548,23 @@ resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-2.0.0-beta.22.tgz#e6b83be0c0944183b47aa30d53f2ab5cd7defe23" integrity sha512-c+tOv4CRBG2pgtAACEsDwvbmM8C89M/CeelTcLLu8zrk+PRy7yj8DKLUtcb9Ybsa7f1Suk6iqyj3dkfxuuvDLw== -"@tiptap/react@^2.0.0-beta.107": - version "2.0.0-beta.107" - resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.0.0-beta.107.tgz#82e02bd83e9d3d37e31197f915968213124330c4" - integrity sha512-4G14F32TxEuYNYyOOQQxJ3ddFooPOv9Opcw5mjKxgKFZLzlBMTBl7os9ndrMfVdWYTI3RpZlfiAQxq3QlHamxA== +"@tiptap/react@^2.0.0-beta.108": + version "2.0.0-beta.108" + resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.0.0-beta.108.tgz#65beeb4dfb99bc75e4a370cb24b2cbbd42ae13a7" + integrity sha512-uYfYx0em6rUoaTkwblYIzT6WLsNGA65XyP5PH56yLvHoOz+Q+skJMBkfrJ7n75tuWa3zMS+W9iYtybxaqPP0aw== dependencies: "@tiptap/extension-bubble-menu" "^2.0.0-beta.55" "@tiptap/extension-floating-menu" "^2.0.0-beta.50" prosemirror-view "^1.23.6" -"@tiptap/starter-kit@^2.0.0-beta.180": - version "2.0.0-beta.180" - resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.180.tgz#bea8101fdc25de88eb2fb76d29a3d16f4e94028e" - integrity sha512-dX+RxfAZa5MyY/XPr8iW+VTX/Qy3MIhCWApw15zHfLOdO80inl3to9JG5XS9oSMI2/SqsRe9XKz47Lj8srhw7A== +"@tiptap/starter-kit@^2.0.0-beta.183": + version "2.0.0-beta.183" + resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.183.tgz#35ff9f4b236bd321ffdd44c5061514959c1b4b9d" + integrity sha512-Lcms6lEfFfdL1oHoATcNKfu1C8+yhuZnI5Pq+U6o2zSslfnUSDf3jgmy6nSoZrrkqvFoXjQk4dxMDFg3giw2Kg== dependencies: - "@tiptap/core" "^2.0.0-beta.171" + "@tiptap/core" "^2.0.0-beta.174" "@tiptap/extension-blockquote" "^2.0.0-beta.26" - "@tiptap/extension-bold" "^2.0.0-beta.25" + "@tiptap/extension-bold" "^2.0.0-beta.26" "@tiptap/extension-bullet-list" "^2.0.0-beta.26" "@tiptap/extension-code" "^2.0.0-beta.26" "@tiptap/extension-code-block" "^2.0.0-beta.37" @@ -1575,7 +1575,7 @@ "@tiptap/extension-heading" "^2.0.0-beta.26" "@tiptap/extension-history" "^2.0.0-beta.21" "@tiptap/extension-horizontal-rule" "^2.0.0-beta.31" - "@tiptap/extension-italic" "^2.0.0-beta.25" + "@tiptap/extension-italic" "^2.0.0-beta.26" "@tiptap/extension-list-item" "^2.0.0-beta.20" "@tiptap/extension-ordered-list" "^2.0.0-beta.27" "@tiptap/extension-paragraph" "^2.0.0-beta.23" @@ -1680,9 +1680,9 @@ "@types/prosemirror-view" "*" "@types/prosemirror-model@*", "@types/prosemirror-model@^1.16.0": - version "1.16.0" - resolved "https://registry.yarnpkg.com/@types/prosemirror-model/-/prosemirror-model-1.16.0.tgz#8b22c7431a4c93f7f550fc89c4b0e2d44d42c8b6" - integrity sha512-nv93YLyTEcDDl17OB90EldxZjyJQJll2WSMLDvLzTewbpvE/vtMjHT3j4mik3uSzQ6YD486AcloCO3WODY/lDg== + version "1.16.1" + resolved "https://registry.yarnpkg.com/@types/prosemirror-model/-/prosemirror-model-1.16.1.tgz#0ce6c80cd81b398b8a11b1bf7cf695bff3160c9a" + integrity sha512-SrrCe2cHlYrQ9o55e2i/c3wt1yRajTTpRLvzfmB+2DWjWEbBLTByVWyjrdpKtQTxAaTeU2aeDGo1iuwl/jF27w== dependencies: "@types/orderedmap" "*" @@ -1705,9 +1705,9 @@ "@types/prosemirror-view" "*" "@types/prosemirror-transform@*", "@types/prosemirror-transform@^1.1.5": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@types/prosemirror-transform/-/prosemirror-transform-1.1.5.tgz#e6949398c64a5d3ca53e6081352751aa9e9ce76e" - integrity sha512-Wr2HXaEF4JPklWpC17RTxE6PxyU54Taqk5FMhK1ojgcN93J+GpkYW8s0mD3rl7KfTmlhVwZPCHE9o0cYf2Go5A== + version "1.1.6" + resolved "https://registry.yarnpkg.com/@types/prosemirror-transform/-/prosemirror-transform-1.1.6.tgz#4a06979f656331c46c2725039a57360cc35853af" + integrity sha512-7HwXOWc5vZQqIfEUUVAz13lPgBqAWJTv89qEpzAtBFB6hOszFmhsvQ02Jqe2LvKauAoJDa3Qpv/dbJAmgyiTuQ== dependencies: "@types/prosemirror-model" "*" @@ -7569,9 +7569,9 @@ prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: react-is "^16.8.1" prosemirror-commands@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.2.1.tgz#eae0cb714df695260659b78ff5d201d3a037e50d" - integrity sha512-S/IkpXfpuLFsRynC2HQ5iYROUPiZskKS1+ClcWycGJvj4HMb/mVfeEkQrixYxgTl96EAh+RZQNWPC06GZXk5tQ== + version "1.2.2" + resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.2.2.tgz#1bd167372ee20abf488aca9cece63c43fab182c9" + integrity sha512-TX+KpWudMon06frryfpO/u7hsQv2hu8L4VSVbCpi3/7wXHBgl+35mV85qfa3RpT8xD2f3MdeoTqH0vy5JdbXPg== dependencies: prosemirror-model "^1.0.0" prosemirror-state "^1.0.0" @@ -7587,9 +7587,9 @@ prosemirror-dropcursor@^1.4.0: prosemirror-view "^1.1.0" prosemirror-gapcursor@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.2.1.tgz#02365e1bcc1ad25d390b0fb7f0e94a7fc173ad75" - integrity sha512-PHa9lj27iM/g4C46gxVzsefuXVfy/LrGQH4QjMRht7VDBgw77iWYWn8ZHMWSFkwtr9jQEuxI5gccHHHwWG80nw== + version "1.2.2" + resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.2.2.tgz#7394613ba4a1601fad1f36f1cff8961968c22ffa" + integrity sha512-7YzuRBbu9W7HGQde84kCHfIjaRLNcAdeijbgqrm/R9dsdTWkV+rrdcmic/sCc+bptiNpvjCEE+R6hrbT8zFQeQ== dependencies: prosemirror-keymap "^1.0.0" prosemirror-model "^1.0.0" @@ -7636,14 +7636,30 @@ prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.4: prosemirror-model "^1.0.0" prosemirror-transform "^1.0.0" -prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.3.3: +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0: version "1.3.3" resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.3.3.tgz#5f6712b0577a119cc418686fe7588b6dd9b7464d" integrity sha512-9NLVXy1Sfa2G6qPqhWMkEvwQQMTw7OyTqOZbJaGQWsCeH3hH5Cw+c5eNaLM1Uu75EyKLsEZhJ93XpHJBa6RX8A== dependencies: prosemirror-model "^1.0.0" -prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.23.6: +prosemirror-transform@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.4.0.tgz#057344b7ef38d1a4ba370390eba8c35f9afe6b36" + integrity sha512-P+bv4JiLHcRy4krHByUglXR1yAMCuzHRAaSKInsoW7Rjy3aomPXM/MwRs+b7TGtC1e6ZM31KbapbvE4wV1X9RA== + dependencies: + prosemirror-model "^1.0.0" + +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0: + version "1.23.10" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.23.10.tgz#a3fb6a7c780c8cd84488fdd451c23becab9dbefb" + integrity sha512-/p8Orb1VeJEbf7Z/BltU9GMWADZRqKlna6TlQGK1snJ6fTdLRC4f4yF2MgNK4OMQjmAwJISUtEp5+Vu5CSbR1w== + dependencies: + prosemirror-model "^1.16.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + +prosemirror-view@^1.23.6: version "1.23.6" resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.23.6.tgz#f514b3166942cb70aac4ac24d0a28c21c3897608" integrity sha512-B4DAzriNpI/AVoW0Lu6SVfX00jZZQxOVwdBQEjWlRbCdT9V0pvk4GQJ3JTFaib+b6BcPdRZ3MjWXz2xvV1rblA== From 2939bbce69fc260de9b3b792791a9ae20163d74f Mon Sep 17 00:00:00 2001 From: vincent Date: Mon, 28 Mar 2022 14:01:14 +0200 Subject: [PATCH 011/274] Add image embed in the text editor --- .../base/text-editor/fab-text-editor.tsx | 19 +++-- .../components/base/text-editor/menu-bar.tsx | 84 +++++++++++++------ .../modules/base/fab-text-editor.scss | 11 +++ package.json | 1 + yarn.lock | 5 ++ 5 files changed, 87 insertions(+), 33 deletions(-) diff --git a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx index 667df3b30..f3c45a331 100644 --- a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx @@ -10,6 +10,7 @@ import CharacterCount from '@tiptap/extension-character-count'; import Underline from '@tiptap/extension-underline'; import Link from '@tiptap/extension-link'; import Iframe from './iframe'; +import Image from '@tiptap/extension-image'; import { MenuBar } from './menu-bar'; import { WarningOctagon } from 'phosphor-react'; @@ -21,6 +22,7 @@ interface FabTextEditorProps { content?: string, limit?: number, video?: boolean, + image?: boolean, onChange?: (content: string) => void, placeholder?: string, error?: string @@ -29,7 +31,7 @@ interface FabTextEditorProps { /** * This component is a WYSIWYG text editor */ -export const FabTextEditor: React.FC = ({ label, paragraphTools, content, limit = 400, video, onChange, placeholder, error }) => { +export const FabTextEditor: React.FC = ({ label, paragraphTools, content, limit = 400, video, image, onChange, placeholder, error }) => { const { t } = useTranslation('shared'); const placeholderText = placeholder || t('app.shared.text_editor.placeholder'); // TODO: Add ctrl+click on link to visit @@ -54,7 +56,12 @@ export const FabTextEditor: React.FC = ({ label, paragraphTo CharacterCount.configure({ limit }), - Iframe + Iframe, + Image.configure({ + HTMLAttributes: { + class: 'fab-textEditor-image' + } + }) ], content, onUpdate: ({ editor }) => { @@ -70,7 +77,7 @@ export const FabTextEditor: React.FC = ({ label, paragraphTo <> {label && }
- +
{editor?.storage.characterCount.characters()} / {limit} @@ -86,12 +93,12 @@ export const FabTextEditor: React.FC = ({ label, paragraphTo ); }; -const FabTextEditorWrapper: React.FC = ({ label, paragraphTools, content, limit, video, placeholder, error }) => { +const FabTextEditorWrapper: React.FC = ({ label, paragraphTools, content, limit, video, image, placeholder, error }) => { return ( - + ); }; -Application.Components.component('fabTextEditor', react2angular(FabTextEditorWrapper, ['label', 'paragraphTools', 'content', 'limit', 'video', 'placeholder', 'error'])); +Application.Components.component('fabTextEditor', react2angular(FabTextEditorWrapper, ['label', 'paragraphTools', 'content', 'limit', 'video', 'image', 'placeholder', 'error'])); diff --git a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx index 6809feca2..b707db9c3 100644 --- a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx @@ -2,18 +2,19 @@ import React, { useCallback, useState, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import useOnclickOutside from 'react-cool-onclickoutside'; import { Editor } from '@tiptap/react'; -import { TextAa, TextBolder, TextItalic, TextUnderline, LinkSimpleHorizontal, ListBullets, Quotes, Trash, CheckCircle, VideoCamera } from 'phosphor-react'; +import { TextAa, TextBolder, TextItalic, TextUnderline, LinkSimpleHorizontal, ListBullets, Quotes, Trash, CheckCircle, VideoCamera, Image } from 'phosphor-react'; interface MenuBarProps { + editor?: Editor, paragraphTools?: boolean, video?: boolean, - editor?: Editor, + image?: boolean, } /** * This component is the menu bar for the WYSIWYG text editor */ -export const MenuBar: React.FC = ({ editor, paragraphTools, video }) => { +export const MenuBar: React.FC = ({ editor, paragraphTools, video, image }) => { const { t } = useTranslation('shared'); const [submenu, setSubmenu] = useState(''); @@ -21,12 +22,14 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video const [url, setUrl] = useState(resetUrl); const [videoProvider, setVideoProvider] = useState('youtube'); const [videoId, setVideoId] = useState(''); + const [imageUrl, setImageUrl] = useState(''); // Reset state values when the submenu is closed useEffect(() => { if (!submenu) { setUrl(resetUrl); setVideoProvider('youtube'); + setImageUrl(''); } }, [submenu]); @@ -35,17 +38,19 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video setSubmenu(''); }); - // Toggle link menu's visibility - const toggleLinkMenu = () => { - if (submenu !== 'link') { - setSubmenu('link'); - const previousUrl = { - href: editor.getAttributes('link').href, - target: editor.getAttributes('link').target || '' - }; - // display selected text's attributes if it's a link - if (previousUrl.href) { - setUrl(previousUrl); + // Toggle submenu's visibility + const toggleSubmenu = (type) => { + if (submenu !== type) { + setSubmenu(type); + if (type === 'link') { + const previousUrl = { + href: editor.getAttributes('link').href, + target: editor.getAttributes('link').target || '' + }; + // display selected text's attributes if it's a link + if (previousUrl.href) { + setUrl(previousUrl); + } } } else { setSubmenu(''); @@ -88,21 +93,12 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video setSubmenu(''); }; - // Toggle video menu's visibility - const toggleVideoMenu = () => { - if (submenu !== 'video') { - setSubmenu('video'); - } else { - setSubmenu(''); - } - }; - // Store selected video provider in state const handleSelect = (evt) => { setVideoProvider(evt.target.value); }; // Store video id in state - const VideoUrlChange = (evt) => { + const videoUrlChange = (evt) => { const id = evt.target.value.match(/([^/]+$)/g); setVideoId(id); }; @@ -126,6 +122,18 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video setSubmenu(''); }; + // Store image url in state + const imageUrlChange = (evt) => { + setImageUrl(evt.target.value); + }; + // Insert image + const addImage = () => { + if (imageUrl) { + editor.chain().focus().setImage({ src: imageUrl }).run(); + setSubmenu(''); + } + }; + if (!editor) { return null; } @@ -182,22 +190,34 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video + { (video || image) && } { video && (<> ) } + { image && + (<> + + ) + }
+
{ submenu === 'link' && (<> @@ -227,13 +247,23 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video
- +
) } + { submenu === 'image' && + (<> +
+ + +
+ ) + }
); diff --git a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss index 8da40fedd..68422a09c 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss @@ -157,6 +157,7 @@ height: 0; width: 100%; max-width: 600px; + margin: 1rem 0; padding-bottom: calc(100% / 16 * 9); overflow: hidden; @@ -167,6 +168,16 @@ } } + &-image { + height: auto; + max-width: 100%; + max-height: min(75vh, 600px); + margin: 1rem 0; + &.ProseMirror-selectednode { + box-shadow: 0 0 0 2px var(--secondary); + } + } + &-error { position: absolute; top: 4.5rem; diff --git a/package.json b/package.json index a0b9032b4..217b476c7 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "@stripe/stripe-js": "^1.13.2", "@tiptap/core": "^2.0.0-beta.174", "@tiptap/extension-character-count": "^2.0.0-beta.24", + "@tiptap/extension-image": "^2.0.0-beta.27", "@tiptap/extension-link": "^2.0.0-beta.36", "@tiptap/extension-placeholder": "^2.0.0-beta.47", "@tiptap/extension-underline": "^2.0.0-beta.22", diff --git a/yarn.lock b/yarn.lock index ff10d97c9..35555b727 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1495,6 +1495,11 @@ dependencies: prosemirror-state "^1.3.4" +"@tiptap/extension-image@^2.0.0-beta.27": + version "2.0.0-beta.27" + resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.0.0-beta.27.tgz#62152240cfa7ead03080c38485c1ebda4a603d18" + integrity sha512-kdJ7V39yNdVWUco/RBe7WgvFevd81l+pU6+Je9HpelqBBP953wDttzLMuAWQB4AeLv9WhKSlORHiFv2SKsV5NA== + "@tiptap/extension-italic@^2.0.0-beta.26": version "2.0.0-beta.26" resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.26.tgz#b00c9e32b81b1bd94eaed24bb2a22e44d5dc54a3" From c16150d7ccfc61b8d60ccf3851f13e979e6f8ab1 Mon Sep 17 00:00:00 2001 From: vincent Date: Mon, 28 Mar 2022 17:58:35 +0200 Subject: [PATCH 012/274] Add labels --- .../components/base/text-editor/fab-text-editor.tsx | 2 +- .../javascript/components/base/text-editor/menu-bar.tsx | 7 +++++-- .../src/stylesheets/modules/base/fab-text-editor.scss | 5 +++++ config/locales/app.shared.en.yml | 6 +++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx index f3c45a331..ee652fed4 100644 --- a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx @@ -33,7 +33,7 @@ interface FabTextEditorProps { */ export const FabTextEditor: React.FC = ({ label, paragraphTools, content, limit = 400, video, image, onChange, placeholder, error }) => { const { t } = useTranslation('shared'); - const placeholderText = placeholder || t('app.shared.text_editor.placeholder'); + const placeholderText = placeholder || t('app.shared.text_editor.text_placeholder'); // TODO: Add ctrl+click on link to visit // Setup the editor diff --git a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx index b707db9c3..1eeb67b00 100644 --- a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx @@ -221,6 +221,7 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video,
{ submenu === 'link' && (<> +
{t('app.shared.text_editor.add_link')}
@@ -256,8 +258,9 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video, } { submenu === 'image' && (<> +
{t('app.shared.text_editor.add_image')}
- + diff --git a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss index 68422a09c..e2e2942af 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss @@ -89,6 +89,11 @@ align-items: center; &:not(:last-of-type) { margin-bottom: 0.8rem; } } + + h6 { + @include text-sm(); + margin-top: 0; + } input[type="text"], select { diff --git a/config/locales/app.shared.en.yml b/config/locales/app.shared.en.yml index a1e668745..0f0cf5138 100644 --- a/config/locales/app.shared.en.yml +++ b/config/locales/app.shared.en.yml @@ -25,9 +25,13 @@ en: payment_card_declined: "Your card was declined." #text editor text_editor: - placeholder: "Type something…" + text_placeholder: "Type something…" link_placeholder: "Paste link…" + url_placeholder: "Paste url…" new_tab: "Open in a new tab" + add_link: "Insert a link" + add_video: "Embed a video" + add_image: "Insert an image" #user edition form user: man: "Man" From 9832f9f19a0720d7c327ccffeb5876766f65055b Mon Sep 17 00:00:00 2001 From: Sylvain Date: Tue, 29 Mar 2022 16:41:56 +0200 Subject: [PATCH 013/274] (dev) webpack overlay report eslint issues Also: updated eslint --- .eslintrc | 2 +- CHANGELOG.md | 3 + config/webpack/webpack.config.js | 3 +- package.json | 23 +- yarn.lock | 1233 ++++++++++++------------------ 5 files changed, 514 insertions(+), 750 deletions(-) diff --git a/.eslintrc b/.eslintrc index 53dc8d8e7..88558a63b 100644 --- a/.eslintrc +++ b/.eslintrc @@ -17,7 +17,7 @@ "Humanize": true, "GTM": true }, - "plugins": ["lint-erb"], + "plugins": ["html-erb"], "overrides": [ { "files": ["**/*.ts", "**/*.tsx"], diff --git a/CHANGELOG.md b/CHANGELOG.md index cf51ef2bb..7dd90caa9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog Fab-manager +- Updated eslint to v8 and eslint related packages to their latest versions +- Webpack overlay will now report eslint issues + ## v5.3.7 2022 March 28 - Updated Spanish translations (thanks to [@altieriranedo](https://crowdin.com/profile/altieriranedo)) diff --git a/config/webpack/webpack.config.js b/config/webpack/webpack.config.js index 5bd65571c..9ba7adadf 100644 --- a/config/webpack/webpack.config.js +++ b/config/webpack/webpack.config.js @@ -31,7 +31,8 @@ const customConfig = { Application: [path.resolve(path.join(__dirname, '../../app/frontend/src/javascript/app.js')), 'Application'], process: 'process/browser' }), - isDevelopment && new (require('@pmmmwh/react-refresh-webpack-plugin'))() + isDevelopment && new (require('@pmmmwh/react-refresh-webpack-plugin'))(), + isDevelopment && new (require('eslint-webpack-plugin'))() ].filter(Boolean), module: { rules: [ diff --git a/package.json b/package.json index 17ec91236..a7d886b3d 100644 --- a/package.json +++ b/package.json @@ -16,22 +16,21 @@ "url": "https://github.com/sleede/fab-manager/issues" }, "scripts": { - "lint": "eslint ./app/frontend/src", - "lint-ts": "eslint ./app/frontend/src --ext .ts --ext .tsx" + "lint": "eslint ./app/frontend/src" }, "license": "AGPL-3.0-only", "devDependencies": { "@pmmmwh/react-refresh-webpack-plugin": "^0.5.4", - "@typescript-eslint/eslint-plugin": "^4.28.1", - "@typescript-eslint/parser": "^4.28.1", - "eslint": "~6.8.0", - "eslint-config-standard": "~14.1.1", - "eslint-plugin-import": "~2.20.1", - "eslint-plugin-lint-erb": "https://github.com/sleede/eslint-plugin-lint-erb.git#master", - "eslint-plugin-node": "~11.0.0", - "eslint-plugin-promise": "~4.2.1", - "eslint-plugin-react": "^7.21.5", - "eslint-plugin-standard": "~4.0.1", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "~8.12.0", + "eslint-config-standard": "~17.0.0-1", + "eslint-plugin-html-erb": "^1.0.1", + "eslint-plugin-import": "~2.25.4", + "eslint-plugin-n": "^15.1.0", + "eslint-plugin-promise": "~6.0.0", + "eslint-plugin-react": "^7.29.4", + "eslint-webpack-plugin": "^3.1.1", "react-refresh": "^0.11.0", "webpack-dev-server": "^4.7.4" }, diff --git a/yarn.lock b/yarn.lock index 647268401..f04d61490 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1293,6 +1293,21 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@eslint/eslintrc@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.1.tgz#8b5e1c49f4077235516bc9ec7d41378c0f69b8c6" + integrity sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.3.1" + globals "^13.9.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@formatjs/ecma402-abstract@1.11.3": version "1.11.3" resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.3.tgz#f25276dfd4ef3dac90da667c3961d8aa9732e384" @@ -1337,6 +1352,20 @@ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.14.0.tgz#a371e91029ebf265015e64f81bfbf7d228c9681f" integrity sha512-OfdMsF+ZQgdKHP9jUbmDcRrP0eX90XXrsXIdyjLbkmSBzmMXPABB8eobUJtivaupucYaByz6WNe1PI1JuYm3qA== +"@humanwhocodes/config-array@^0.9.2": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" + integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + "@jridgewell/resolve-uri@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" @@ -1471,6 +1500,14 @@ "@types/estree" "*" "@types/json-schema" "*" +"@types/eslint@^7.28.2": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" + integrity sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + "@types/estree@*", "@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" @@ -1507,11 +1544,16 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== -"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7": +"@types/json-schema@^7.0.5": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/lodash.frompairs@^4.0.5": version "4.0.6" resolved "https://registry.yarnpkg.com/@types/lodash.frompairs/-/lodash.frompairs-4.0.6.tgz#09b082c10fa753dc2001302b75ac79ca1e0a9ea3" @@ -1614,74 +1656,85 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.1.tgz#c045e440196ae45464e08e20c38aff5c3a825947" - integrity sha512-9yfcNpDaNGQ6/LQOX/KhUFTR1sCKH+PBr234k6hI9XJ0VP5UqGxap0AnNwBnWFk1MNyWBylJH9ZkzBXC+5akZQ== +"@typescript-eslint/eslint-plugin@^5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.17.0.tgz#704eb4e75039000531255672bf1c85ee85cf1d67" + integrity sha512-qVstvQilEd89HJk3qcbKt/zZrfBZ+9h2ynpAGlWjWiizA7m/MtLT9RoX6gjtpE500vfIg8jogAkDzdCxbsFASQ== dependencies: - "@typescript-eslint/experimental-utils" "4.28.1" - "@typescript-eslint/scope-manager" "4.28.1" - debug "^4.3.1" + "@typescript-eslint/scope-manager" "5.17.0" + "@typescript-eslint/type-utils" "5.17.0" + "@typescript-eslint/utils" "5.17.0" + debug "^4.3.2" functional-red-black-tree "^1.0.1" - regexpp "^3.1.0" + ignore "^5.1.8" + regexpp "^3.2.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.1.tgz#3869489dcca3c18523c46018b8996e15948dbadc" - integrity sha512-n8/ggadrZ+uyrfrSEchx3jgODdmcx7MzVM2sI3cTpI/YlfSm0+9HEUaWw3aQn2urL2KYlWYMDgn45iLfjDYB+Q== +"@typescript-eslint/parser@^5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.17.0.tgz#7def77d5bcd8458d12d52909118cf3f0a45f89d5" + integrity sha512-aRzW9Jg5Rlj2t2/crzhA2f23SIYFlF9mchGudyP0uiD6SenIxzKoLjwzHbafgHn39dNV/TV7xwQkLfFTZlJ4ig== dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.28.1" - "@typescript-eslint/types" "4.28.1" - "@typescript-eslint/typescript-estree" "4.28.1" + "@typescript-eslint/scope-manager" "5.17.0" + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/typescript-estree" "5.17.0" + debug "^4.3.2" + +"@typescript-eslint/scope-manager@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz#4cea7d0e0bc0e79eb60cad431c89120987c3f952" + integrity sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w== + dependencies: + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/visitor-keys" "5.17.0" + +"@typescript-eslint/type-utils@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.17.0.tgz#1c4549d68c89877662224aabb29fbbebf5fc9672" + integrity sha512-3hU0RynUIlEuqMJA7dragb0/75gZmwNwFf/QJokWzPehTZousP/MNifVSgjxNcDCkM5HI2K22TjQWUmmHUINSg== + dependencies: + "@typescript-eslint/utils" "5.17.0" + debug "^4.3.2" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.17.0.tgz#861ec9e669ffa2aa9b873dd4d28d9b1ce26d216f" + integrity sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw== + +"@typescript-eslint/typescript-estree@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz#a7cba7dfc8f9cc2ac78c18584e684507df4f2488" + integrity sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg== + dependencies: + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/visitor-keys" "5.17.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.17.0.tgz#549a9e1d491c6ccd3624bc3c1b098f5cfb45f306" + integrity sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.17.0" + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/typescript-estree" "5.17.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@^4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.1.tgz#5181b81658414f47291452c15bf6cd44a32f85bd" - integrity sha512-UjrMsgnhQIIK82hXGaD+MCN8IfORS1CbMdu7VlZbYa8LCZtbZjJA26De4IPQB7XYZbL8gJ99KWNj0l6WD0guJg== +"@typescript-eslint/visitor-keys@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz#52daae45c61b0211b4c81b53a71841911e479128" + integrity sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA== dependencies: - "@typescript-eslint/scope-manager" "4.28.1" - "@typescript-eslint/types" "4.28.1" - "@typescript-eslint/typescript-estree" "4.28.1" - debug "^4.3.1" - -"@typescript-eslint/scope-manager@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.1.tgz#fd3c20627cdc12933f6d98b386940d8d0ce8a991" - integrity sha512-o95bvGKfss6705x7jFGDyS7trAORTy57lwJ+VsYwil/lOUxKQ9tA7Suuq+ciMhJc/1qPwB3XE2DKh9wubW8YYA== - dependencies: - "@typescript-eslint/types" "4.28.1" - "@typescript-eslint/visitor-keys" "4.28.1" - -"@typescript-eslint/types@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.1.tgz#d0f2ecbef3684634db357b9bbfc97b94b828f83f" - integrity sha512-4z+knEihcyX7blAGi7O3Fm3O6YRCP+r56NJFMNGsmtdw+NCdpG5SgNz427LS9nQkRVTswZLhz484hakQwB8RRg== - -"@typescript-eslint/typescript-estree@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz#af882ae41740d1f268e38b4d0fad21e7e8d86a81" - integrity sha512-GhKxmC4sHXxHGJv8e8egAZeTZ6HI4mLU6S7FUzvFOtsk7ZIDN1ksA9r9DyOgNqowA9yAtZXV0Uiap61bIO81FQ== - dependencies: - "@typescript-eslint/types" "4.28.1" - "@typescript-eslint/visitor-keys" "4.28.1" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/visitor-keys@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz#162a515ee255f18a6068edc26df793cdc1ec9157" - integrity sha512-K4HMrdFqr9PFquPu178SaSb92CaWe2yErXyPumc8cYWxFmhgJsNY9eSePmO05j0JhBvf2Cdhptd6E6Yv9HVHcg== - dependencies: - "@typescript-eslint/types" "4.28.1" - eslint-visitor-keys "^2.0.0" + "@typescript-eslint/types" "5.17.0" + eslint-visitor-keys "^3.0.0" "@uirouter/angularjs@1.0.30": version "1.0.30" @@ -1865,17 +1918,12 @@ acorn-import-assertions@^1.7.6: resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== -acorn-jsx@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.4.1, acorn@^8.5.0: +acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0: version "8.7.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== @@ -1915,7 +1963,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2108,34 +2156,22 @@ angular@1.8, angular@>=1.5, angular@>=1.5.0, angular@>=1.8.0, angular@^1.8.0, an resolved "https://registry.yarnpkg.com/angular/-/angular-1.8.2.tgz#5983bbb5a9fa63e213cb7749199e0d352de3a2f1" integrity sha512-IauMOej2xEe7/7Ennahkbb5qd/HFADiNuLSESz9Q27inmi32zB0lnAsFeLEWcox3Gd1F6YhNd1CP7/9IukJ0Gw== -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - ansi-html-community@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -2157,13 +2193,6 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -2179,7 +2208,7 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.0.3, array-includes@^3.1.2, array-includes@^3.1.3: +array-includes@^3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== @@ -2190,29 +2219,39 @@ array-includes@^3.0.3, array-includes@^3.1.2, array-includes@^3.1.3: get-intrinsic "^1.1.1" is-string "^1.0.5" +array-includes@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" + integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.flat@^1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" - integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== +array.prototype.flat@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" + integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.19.0" -array.prototype.flatmap@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" - integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== +array.prototype.flatmap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446" + integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA== dependencies: call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - function-bind "^1.1.1" + es-abstract "^1.19.0" assert@^2.0.0: version "2.0.0" @@ -2224,11 +2263,6 @@ assert@^2.0.0: object-is "^1.0.1" util "^0.12.0" -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -2418,6 +2452,13 @@ buffer-indexof@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== +builtins@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-4.1.0.tgz#1edd016dd91ce771a1ed6fc3b2b71fb918953250" + integrity sha512-1bPRZQtmKaO6h7qV1YHXNtr6nCK28k0Zo95KM4dXfILcZZwoHJBN1m3lfLv9LPkcOZlrSr+J1bzMaZFO98Yq0w== + dependencies: + semver "^7.0.0" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -2469,7 +2510,7 @@ caniuse-lite@^1.0.30001219: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz" integrity sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q== -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2478,7 +2519,7 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0: +chalk@^4.0, chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2486,19 +2527,6 @@ chalk@^4.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - checklist-model@0.2: version "0.2.4" resolved "https://registry.yarnpkg.com/checklist-model/-/checklist-model-0.2.4.tgz#123edfb21c338db2e9f8d5525348d9df3ce6b5a1" @@ -2536,18 +2564,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -2664,11 +2680,6 @@ connect-history-api-fallback@^1.6.0: resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -2739,18 +2750,7 @@ cross-fetch@3.1.5: dependencies: node-fetch "2.6.7" -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.3: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2901,13 +2901,20 @@ debug@^3.1.1, debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: +debug@^4.1.0, debug@^4.1.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" +debug@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -2920,10 +2927,10 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.0: version "4.2.2" @@ -3005,14 +3012,6 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -3100,16 +3099,6 @@ electron-to-chromium@^1.4.76: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.78.tgz#7a1cf853efafde2c4cf6e86facf3e5792d3541a5" integrity sha512-o61+D/Lx7j/E0LIin/efOqeHpXhwi1TaQco9vUcRmr91m25SfZY6L5hWJDv/r+6kNjboFKgBw1LbfM0lbhuK6Q== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -3138,7 +3127,7 @@ envinfo@^7.7.3: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -3152,7 +3141,7 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.1.1" -es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: +es-abstract@^1.18.0-next.2: version "1.18.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== @@ -3200,6 +3189,32 @@ es-abstract@^1.18.5: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.1" +es-abstract@^1.19.0, es-abstract@^1.19.1: + version "1.19.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f" + integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + es-module-lexer@^0.9.0: version "0.9.3" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" @@ -3239,98 +3254,104 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -eslint-config-standard@~14.1.1: - version "14.1.1" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea" - integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg== +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-import-resolver-node@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" - integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== - dependencies: - debug "^2.6.9" - resolve "^1.13.1" +eslint-config-standard@~17.0.0-1: + version "17.0.0-1" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.0.0-1.tgz#5496abc783468e3e3a806ae4f2b3273521b1cb9a" + integrity sha512-aqRG58dqoBNfOLN+PsitasxmW+W9Os4oQrx081B16T4E4WogsSbpUL6hnKSnyv35sSRYA2XjBtKMOrUboL6jgw== -eslint-module-utils@^2.4.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233" - integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A== +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== dependencies: debug "^3.2.7" - pkg-dir "^2.0.0" + resolve "^1.20.0" -eslint-plugin-es@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== +eslint-module-utils@^2.7.2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" + integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== + dependencies: + debug "^3.2.7" + find-up "^2.1.0" + +eslint-plugin-es@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9" + integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ== dependencies: eslint-utils "^2.0.0" regexpp "^3.0.0" -eslint-plugin-import@~2.20.1: - version "2.20.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d" - integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg== +eslint-plugin-html-erb@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-html-erb/-/eslint-plugin-html-erb-1.0.1.tgz#f4a55070d5eabe365e13dba587a1d779bfe36eb6" + integrity sha512-78tk6t8NbO2pH7EuOXRG2wztCVDEiFPVlM4pTKYFI6r6XiW7prjrz3LL88yQPGHw+rcZkIYl8UJ2obVECvFO8Q== + +eslint-plugin-import@~2.25.4: + version "2.25.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1" + integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA== dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" - contains-path "^0.1.0" + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.1" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.2" has "^1.0.3" + is-core-module "^2.8.0" + is-glob "^4.0.3" minimatch "^3.0.4" - object.values "^1.1.0" - read-pkg-up "^2.0.0" - resolve "^1.12.0" + object.values "^1.1.5" + resolve "^1.20.0" + tsconfig-paths "^3.12.0" -"eslint-plugin-lint-erb@https://github.com/sleede/eslint-plugin-lint-erb.git#master": - version "0.2.2" - resolved "https://github.com/sleede/eslint-plugin-lint-erb.git#c163046088f7e988d131b0ca857a47feb925c10f" - -eslint-plugin-node@~11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.0.0.tgz#365944bb0804c5d1d501182a9bc41a0ffefed726" - integrity sha512-chUs/NVID+sknFiJzxoN9lM7uKSOEta8GC8365hw1nDfwIPIjjpRSwwPvQanWv8dt/pDe9EV4anmVSwdiSndNg== +eslint-plugin-n@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.1.0.tgz#efb6648dda91bc00e1521f42e5c0208eeae82bb8" + integrity sha512-Tgx4Z58QXv2Ha7Qzp0u4wavnZNZ3AOievZMxrAxi7nvDbzD5B/JqOD80LHYcGHFZc2HD9jDmM/+KWMPov46a4A== dependencies: - eslint-plugin-es "^3.0.0" - eslint-utils "^2.0.0" + builtins "^4.0.0" + eslint-plugin-es "^4.1.0" + eslint-utils "^3.0.0" ignore "^5.1.1" + is-core-module "^2.3.0" minimatch "^3.0.4" resolve "^1.10.1" - semver "^6.1.0" + semver "^6.3.0" -eslint-plugin-promise@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" - integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== +eslint-plugin-promise@~6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz#017652c07c9816413a41e11c30adc42c3d55ff18" + integrity sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw== -eslint-plugin-react@^7.21.5: - version "7.24.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4" - integrity sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q== +eslint-plugin-react@^7.29.4: + version "7.29.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2" + integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ== dependencies: - array-includes "^3.1.3" - array.prototype.flatmap "^1.2.4" + array-includes "^3.1.4" + array.prototype.flatmap "^1.2.5" doctrine "^2.1.0" - has "^1.0.3" + estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.0.4" - object.entries "^1.1.4" - object.fromentries "^2.0.4" - object.values "^1.1.4" - prop-types "^15.7.2" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.0" + object.values "^1.1.5" + prop-types "^15.8.1" resolve "^2.0.0-next.3" - string.prototype.matchall "^4.0.5" + semver "^6.3.0" + string.prototype.matchall "^4.0.6" -eslint-plugin-standard@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.2.tgz#021211a9f077e63a6847e7bb9ab4247327ac8e0c" - integrity sha512-nKptN8l7jksXkwFk++PhJB3cCDTcXOEyhISIN86Ue2feJ1LFyY3PrY3/xT2keXlJSY5bpmbiTG0f885/YKAvTA== - -eslint-scope@5.1.1, eslint-scope@^5.0.0, eslint-scope@^5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -3338,12 +3359,13 @@ eslint-scope@5.1.1, eslint-scope@^5.0.0, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: - eslint-visitor-keys "^1.1.0" + esrecurse "^4.3.0" + estraverse "^5.2.0" eslint-utils@^2.0.0: version "2.1.0" @@ -3369,64 +3391,73 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@~6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint-webpack-plugin@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz#83dad2395e5f572d6f4d919eedaa9cf902890fcb" + integrity sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg== dependencies: - "@babel/code-frame" "^7.0.0" + "@types/eslint" "^7.28.2" + jest-worker "^27.3.1" + micromatch "^4.0.4" + normalize-path "^3.0.0" + schema-utils "^3.1.1" + +eslint@~8.12.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.12.0.tgz#c7a5bd1cfa09079aae64c9076c07eada66a46e8e" + integrity sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q== + dependencies: + "@eslint/eslintrc" "^1.2.1" + "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^5.0.1" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" + glob-parent "^6.0.1" + globals "^13.6.0" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^7.0.0" is-glob "^4.0.0" - js-yaml "^3.13.1" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" + levn "^0.4.1" + lodash.merge "^4.6.2" minimatch "^3.0.4" - mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== +espree@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" + integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" + acorn "^8.7.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^3.3.0" -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: +esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== @@ -3450,6 +3481,11 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== +estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -3526,31 +3562,11 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.1.1: - version "3.2.6" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.6.tgz#434dd9529845176ea049acc9343e8282765c6e1a" - integrity sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" @@ -3567,7 +3583,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -3591,19 +3607,12 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" + flat-cache "^3.0.4" fill-range@^7.0.1: version "7.0.1" @@ -3634,7 +3643,7 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-up@^2.0.0, find-up@^2.1.0: +find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= @@ -3657,19 +3666,18 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" + flatted "^3.1.0" + rimraf "^3.0.2" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== +flatted@^3.1.0: + version "3.2.5" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" + integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== follow-redirects@^1.0.0, follow-redirects@^1.14.0: version "1.14.8" @@ -3748,13 +3756,20 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" @@ -3801,14 +3816,14 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== +globals@^13.6.0, globals@^13.9.0: + version "13.13.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" + integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A== dependencies: - type-fest "^0.8.1" + type-fest "^0.20.2" -globby@^11.0.1: +globby@^11.0.1, globby@^11.0.4: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -3820,18 +3835,6 @@ globby@^11.0.1: merge2 "^1.4.1" slash "^3.0.0" -globby@^11.0.3: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - graceful-fs@^4.1.2: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" @@ -3867,6 +3870,11 @@ has-symbols@^1.0.1, has-symbols@^1.0.2: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + has-tostringtag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" @@ -3903,11 +3911,6 @@ hone@1.1.0: resolved "https://registry.yarnpkg.com/hone/-/hone-1.1.0.tgz#b6ce8d0716ee78c424e1ff83f2bb497493a88639" integrity sha512-OT6AXfa+pMwM0jJbpyZk6/pgQ4m9vMkiUSKMfRbYv+Tnca/IRLsfBbmJy/FcsrqujW54Yvn6g+ApBwUnD8MQZg== -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -4054,7 +4057,7 @@ i18next@^21.6.13: dependencies: "@babel/runtime" "^7.12.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4066,17 +4069,12 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1, ignore@^5.1.4: +ignore@^5.1.1: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -ignore@^5.2.0: +ignore@^5.1.8, ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -4135,25 +4133,6 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -4241,7 +4220,7 @@ is-core-module@^2.2.0: dependencies: has "^1.0.3" -is-core-module@^2.8.1: +is-core-module@^2.3.0, is-core-module@^2.8.0, is-core-module@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== @@ -4263,16 +4242,6 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" @@ -4287,7 +4256,7 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" -is-glob@~4.0.1: +is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -4307,6 +4276,11 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + is-number-object@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" @@ -4395,7 +4369,7 @@ is-typed-array@^1.1.3, is-typed-array@^1.1.7: foreach "^2.0.5" has-tostringtag "^1.0.0" -is-weakref@^1.0.1: +is-weakref@^1.0.1, is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== @@ -4409,7 +4383,7 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@^1.0.0, isarray@~1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -4429,7 +4403,7 @@ jasny-bootstrap@3.1: resolved "https://registry.yarnpkg.com/jasny-bootstrap/-/jasny-bootstrap-3.1.3.tgz#b072a681d50c649762c9543c7a6093d9baa2f87b" integrity sha1-sHKmgdUMZJdiyVQ8emCT2bqi+Hs= -jest-worker@^27.0.2, jest-worker@^27.4.5: +jest-worker@^27.0.2, jest-worker@^27.3.1, jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== @@ -4453,14 +4427,6 @@ jquery@>=3.5.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -4535,13 +4501,13 @@ klona@^2.0.4: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" + prelude-ls "^1.2.1" + type-check "~0.4.0" lilconfig@^2.0.3: version "2.0.4" @@ -4553,16 +4519,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - loader-runner@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" @@ -4645,12 +4601,17 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.4: +lodash@^4.17.14, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4814,12 +4775,19 @@ minimatch@^3.0.2, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== -mkdirp@^0.5.1, mkdirp@^0.5.5: +mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -4871,11 +4839,6 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - nanoid@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" @@ -4927,11 +4890,6 @@ ngtemplate-loader@^2.1.0: jsesc "^0.5.0" loader-utils "^1.0.2" -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -4969,16 +4927,6 @@ nopt@~3.0.6: dependencies: abbrev "1" -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -5018,7 +4966,7 @@ object-inspect@^1.10.3, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== -object-inspect@^1.11.0: +object-inspect@^1.11.0, object-inspect@^1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== @@ -5046,33 +4994,40 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd" - integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA== +object.entries@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.2" + es-abstract "^1.19.1" -object.fromentries@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" - integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== +object.fromentries@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" + es-abstract "^1.19.1" -object.values@^1.1.0, object.values@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" - integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== +object.hasown@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5" + integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.2" + es-abstract "^1.19.1" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" @@ -5098,7 +5053,7 @@ once@^1.3.0: dependencies: wrappy "1" -onetime@^5.1.0, onetime@^5.1.2: +onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -5114,22 +5069,17 @@ open@^8.0.9: is-docker "^2.1.1" is-wsl "^2.2.0" -optionator@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" p-limit@^1.1.0: version "1.3.0" @@ -5213,13 +5163,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - parse-json@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -5263,11 +5206,6 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -5283,13 +5221,6 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -5310,18 +5241,6 @@ picomatch@^2.2.3: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -5593,10 +5512,10 @@ postcss@^8.3.5, postcss@^8.4.7: picocolors "^1.0.0" source-map-js "^1.0.2" -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== process-nextick-args@~2.0.0: version "2.0.1" @@ -5608,11 +5527,6 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" @@ -5622,6 +5536,15 @@ prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + proxy-addr@~2.0.5: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -5700,7 +5623,7 @@ react-input-autosize@^3.0.0: dependencies: prop-types "^15.5.8" -react-is@^16.7.0, react-is@^16.8.1: +react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -5773,23 +5696,6 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - readable-stream@^2.0.1: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -5862,7 +5768,7 @@ regex-parser@^2.2.11: resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: +regexp.prototype.flags@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== @@ -5870,12 +5776,15 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +regexp.prototype.flags@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" + integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" -regexpp@^3.0.0, regexpp@^3.1.0: +regexpp@^3.0.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -5976,7 +5885,7 @@ resolve-url-loader@^4.0.0: postcss "^7.0.35" source-map "0.6.1" -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2: +resolve@^1.10.1, resolve@^1.14.2: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -5984,7 +5893,7 @@ resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.1 is-core-module "^2.2.0" path-parse "^1.0.6" -resolve@^1.19.0, resolve@^1.9.0: +resolve@^1.19.0, resolve@^1.20.0, resolve@^1.9.0: version "1.22.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== @@ -6001,14 +5910,6 @@ resolve@^2.0.0-next.3: is-core-module "^2.2.0" path-parse "^1.0.6" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - retry@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" @@ -6019,13 +5920,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -6033,11 +5927,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6045,13 +5934,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^6.6.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -6132,22 +6014,17 @@ selfsigned@^2.0.0: dependencies: node-forge "^1.2.0" -"semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.5: +semver@^7.0.0, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -6229,13 +6106,6 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -6243,11 +6113,6 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" @@ -6277,15 +6142,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - sockjs@^0.3.21: version "0.3.21" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" @@ -6323,32 +6179,6 @@ source-map@^0.7.3, source-map@~0.7.2: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" - integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== - spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" @@ -6372,11 +6202,6 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -6392,36 +6217,18 @@ stackframe@^1.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.matchall@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" - integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q== +string.prototype.matchall@^4.0.6: + version "4.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.2" + es-abstract "^1.19.1" get-intrinsic "^1.1.1" - has-symbols "^1.0.2" + has-symbols "^1.0.3" internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" + regexp.prototype.flags "^1.4.1" side-channel "^1.0.4" string.prototype.trimend@^1.0.4: @@ -6454,19 +6261,12 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" + ansi-regex "^5.0.1" strip-ansi@^7.0.0: version "7.0.1" @@ -6485,7 +6285,7 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.0.1: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -6559,16 +6359,6 @@ svgo@^2.7.0: picocolors "^1.0.0" stable "^0.1.8" -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - tapable@^2.0, tapable@^2.1.1, tapable@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" @@ -6614,11 +6404,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -6629,13 +6414,6 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -6658,7 +6436,17 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= -tslib@^1.8.1, tslib@^1.9.0: +tsconfig-paths@^3.12.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -6680,22 +6468,17 @@ twitter-fetcher@^18.0.2: resolved "https://registry.yarnpkg.com/twitter-fetcher/-/twitter-fetcher-18.0.4.tgz#39a7d5bceb99eeefb39686f5729c9f2c3c01dfc7" integrity sha512-p6HIJfzYLWKVT1rDGqq6wlbfCoZiRAWC6o6zkhxqkt7s7gNxW04xrCy8mDIjl6GHVGbdN+JQtSpVhs0Mp2PKfg== -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: - prelude-ls "~1.1.2" + prelude-ls "^1.2.1" -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" @@ -6825,14 +6608,6 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -7036,13 +6811,6 @@ which-typed-array@^1.1.2: has-tostringtag "^1.0.0" is-typed-array "^1.1.7" -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -7055,7 +6823,7 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== -word-wrap@~1.2.3: +word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== @@ -7065,13 +6833,6 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - ws@^8.4.2: version "8.5.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" From 7e9745a761635d9a33c186c69fb02eadbe2dc4ab Mon Sep 17 00:00:00 2001 From: Sylvain Date: Tue, 29 Mar 2022 17:21:29 +0200 Subject: [PATCH 014/274] (style) eslint all code --- app/frontend/src/javascript/api/space.ts | 3 +- app/frontend/src/javascript/app.js | 1 + .../payment/abstract-payment-modal.tsx | 3 +- .../components/payment/stripe/stripe-form.tsx | 2 +- .../subscriptions/free-extend-modal.tsx | 1 - .../javascript/controllers/admin/graphs.js | 40 +++---- .../javascript/controllers/admin/groups.js | 8 +- .../javascript/controllers/admin/invoices.js | 2 +- .../javascript/controllers/admin/pricing.js | 2 +- .../controllers/admin/statistics.js | 6 +- .../src/javascript/controllers/admin/tags.js | 6 +- .../src/javascript/controllers/members.js | 2 +- .../src/javascript/controllers/projects.js | 2 +- .../directives/bs-jasny-fileinput.js | 6 +- .../src/javascript/lib/devise-modal.js | 2 +- app/frontend/src/javascript/lib/dirDisqus.js | 2 +- app/frontend/src/javascript/lib/format.ts | 6 +- app/frontend/src/javascript/lib/gtm.js | 2 +- app/frontend/src/javascript/lib/humanize.js | 111 +++++++++--------- app/frontend/src/javascript/lib/polyfill.js | 8 +- app/frontend/src/javascript/lib/user.ts | 2 +- app/frontend/src/javascript/lib/wallet.ts | 2 +- app/frontend/src/javascript/models/gtm.ts | 6 + .../src/javascript/services/diacritics.js | 10 +- config/webpack/webpack.config.js | 4 +- 25 files changed, 119 insertions(+), 120 deletions(-) create mode 100644 app/frontend/src/javascript/models/gtm.ts diff --git a/app/frontend/src/javascript/api/space.ts b/app/frontend/src/javascript/api/space.ts index 6f1d9c9b9..ea2f7b5ff 100644 --- a/app/frontend/src/javascript/api/space.ts +++ b/app/frontend/src/javascript/api/space.ts @@ -3,7 +3,7 @@ import { AxiosResponse } from 'axios'; import { Space } from '../models/space'; export default class SpaceAPI { - static async index (): Promise> { + static async index (): Promise> { const res: AxiosResponse> = await apiClient.get('/api/spaces'); return res?.data; } @@ -12,5 +12,4 @@ export default class SpaceAPI { const res: AxiosResponse = await apiClient.get(`/api/spaces/${id}`); return res?.data; } - } diff --git a/app/frontend/src/javascript/app.js b/app/frontend/src/javascript/app.js index d80152cad..dcd13a2b4 100644 --- a/app/frontend/src/javascript/app.js +++ b/app/frontend/src/javascript/app.js @@ -5,6 +5,7 @@ * creating namespaces and moduled for controllers, filters, services, and directives. */ +// eslint-disable-next-line no-var -- Application is a global variable. var Application = Application || {}; Application.Components = angular.module('application.components', []); diff --git a/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx b/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx index 26f19bb6c..f031ecca7 100644 --- a/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx +++ b/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx @@ -14,6 +14,7 @@ import WalletAPI from '../../api/wallet'; import { Invoice } from '../../models/invoice'; import SettingAPI from '../../api/setting'; import { SettingName } from '../../models/setting'; +import { GoogleTagManager } from '../../models/gtm'; import { ComputePriceResult } from '../../models/price'; import { Wallet } from '../../models/wallet'; import FormatLib from '../../lib/format'; @@ -52,7 +53,7 @@ interface AbstractPaymentModalProps { modalSize?: ModalSize, } -declare const GTM: any; +declare const GTM: GoogleTagManager; /** * This component is an abstract modal that must be extended by each payment gateway to include its payment form. diff --git a/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx b/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx index 3b62d3a89..04afd8922 100644 --- a/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx +++ b/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx @@ -11,7 +11,7 @@ import { PaymentSchedule } from '../../../models/payment-schedule'; * A form component to collect the credit card details and to create the payment method on Stripe. * The form validation button must be created elsewhere, using the attribute form={formId}. */ -export const StripeForm: React.FC = ({ onSubmit, onSuccess, onError, children, className, paymentSchedule = false, cart, customer, operator, formId }) => { +export const StripeForm: React.FC = ({ onSubmit, onSuccess, onError, children, className, paymentSchedule = false, cart, formId }) => { const { t } = useTranslation('shared'); const stripe = useStripe(); diff --git a/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx b/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx index 595d0ac8c..b31a6d544 100644 --- a/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx +++ b/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx @@ -26,7 +26,6 @@ interface FreeExtendModalProps { * Modal dialog shown to extend the current subscription of a customer, for free */ const FreeExtendModal: React.FC = ({ isOpen, toggleModal, subscription, customerId, onError, onSuccess }) => { - // we do not render the modal if the subscription was not provided if (!subscription) return null; diff --git a/app/frontend/src/javascript/controllers/admin/graphs.js b/app/frontend/src/javascript/controllers/admin/graphs.js index 598480aa8..d5ec66f1b 100644 --- a/app/frontend/src/javascript/controllers/admin/graphs.js +++ b/app/frontend/src/javascript/controllers/admin/graphs.js @@ -4,7 +4,7 @@ no-undef, no-unreachable, no-unused-vars, - standard/no-callback-literal, + n/no-callback-literal, */ // TODO: This file was created by bulk-decaffeinate. // Fix any style issues and re-enable lint. @@ -179,7 +179,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param $event {Object} jQuery event object * @param datePicker {Object} settings object of the concerned datepicker. Must have an 'opened' property */ - var toggleDatePicker = function ($event, datePicker) { + const toggleDatePicker = function ($event, datePicker) { $event.preventDefault(); $event.stopPropagation(); return datePicker.opened = !datePicker.opened; @@ -188,7 +188,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro /** * Query elasticSearch according to the current parameters and update the chart */ - var refreshChart = function () { + const refreshChart = function () { if ($scope.selectedIndex && !$scope.preventRefresh) { return query($scope.selectedIndex, function (aggregations, error) { if (error) { @@ -239,7 +239,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * Format aggregations as retuned by elasticSearch to an understandable format for NVD3 * @param aggs {Object} as returned by elasticsearch */ - var formatAggregations = function (aggs) { + const formatAggregations = function (aggs) { const format = {}; angular.forEach(aggs, function (type, type_key) { // go through aggs[$TYPE] where $TYPE = month|year|hour|booking|... @@ -254,7 +254,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro const cur_subtype = cur_type.subtypes[it_st]; if (subgroup.key === cur_subtype.key) { // ... which match $SUBTYPE // then we construct NVD3 dataSource according to these information - var dataSource = { + const dataSource = { values: [], key: cur_subtype.label, total: 0, @@ -292,7 +292,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param limit {number} limit the number of stats in the bar chart * @param typeKey {String} field name witch results are grouped by */ - var formatRankingAggregations = function (aggs, limit, typeKey) { + const formatRankingAggregations = function (aggs, limit, typeKey) { const format = { ranking: [] }; @@ -325,7 +325,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param key {string} raw value of the label * @param typeKey {string} name of the field the results are grouped by */ - var getRankingLabel = function (key, typeKey) { + const getRankingLabel = function (key, typeKey) { if ($scope.selectedIndex) { if (typeKey === 'subType') { for (const type of Array.from($scope.selectedIndex.types)) { @@ -356,7 +356,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param callback {function} function be to run after results were retrieved, * it will receive two parameters : results {Array}, error {String} (if any) */ - var query = function (index, callback) { + const query = function (index, callback) { // invalid callback handeling if (typeof (callback) !== 'function') { console.error('[graphsController::query] Error: invalid callback provided'); @@ -384,7 +384,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro let type_it = 0; const results = {}; let error = ''; - var recursiveCb = function () { + const recursiveCb = function () { if (type_it < stat_types.length) { return queryElasticStats(index.es_type_key, stat_types[type_it], function (prevResults, prevError) { if (prevError) { @@ -418,7 +418,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param callback {function} function be to run after results were retrieved, * it will receive two parameters : results {Array}, error {String} (if any) */ - var queryElasticStats = function (esType, statType, callback) { + const queryElasticStats = function (esType, statType, callback) { // handle invalid callback if (typeof (callback) !== 'function') { console.error('[graphsController::queryElasticStats] Error: invalid callback provided'); @@ -457,7 +457,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param callback {function} function be to run after results were retrieved, * it will receive two parameters : results {Array}, error {String} (if any) */ - var queryElasticRanking = function (esType, groupKey, sortKey, callback) { + const queryElasticRanking = function (esType, groupKey, sortKey, callback) { // handle invalid callback if (typeof (callback) !== 'function') { return console.error('[graphsController::queryElasticRanking] Error: invalid callback provided'); @@ -497,15 +497,13 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param intervalBegin {moment} statitics interval beginning (moment.js type) * @param intervalEnd {moment} statitics interval ending (moment.js type) */ - var buildElasticAggregationsQuery = function (type, interval, intervalBegin, intervalEnd) { + const buildElasticAggregationsQuery = function (type, interval, intervalBegin, intervalEnd) { const q = { query: { bool: { must: [ { - match: { - type: type - } + match: { type } }, { range: { @@ -527,7 +525,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro intervals: { date_histogram: { field: 'date', - interval: interval, + interval, min_doc_count: 0, extended_bounds: { min: intervalBegin.valueOf(), @@ -566,7 +564,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param intervalBegin {moment} statitics interval beginning (moment.js type) * @param intervalEnd {moment} statitics interval ending (moment.js type) */ - var buildElasticAggregationsRankingQuery = function (groupKey, sortKey, intervalBegin, intervalEnd) { + const buildElasticAggregationsRankingQuery = function (groupKey, sortKey, intervalBegin, intervalEnd) { const q = { query: { bool: { @@ -635,7 +633,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param data {Array} array of NVD3 dataSources * @param type {String} which chart to update (statistic type key) */ - var updateChart = function (chart_type, data, type) { + const updateChart = function (chart_type, data, type) { const id = `#chart-${type} svg`; // clean old charts @@ -695,7 +693,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro /** * Given an NVD3 line chart axis, scale it to display ordinated dates, according to the given arguments */ - var setTimeScale = function (nvd3Axis, nvd3Scale, argsArray) { + const setTimeScale = function (nvd3Axis, nvd3Scale, argsArray) { const scale = d3.time.scale(); nvd3Axis.scale(scale); @@ -710,7 +708,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro /** * Translate line chart data in dates row to bar chart data, one bar per type. */ - var prepareDataForBarChart = function (data, type) { + const prepareDataForBarChart = function (data, type) { const newData = [{ key: type, values: [] @@ -738,7 +736,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param getValue {function} the callback which will return the value on which the sort will occurs * @returns {Array} */ - var stableSort = function (array, order, getValue) { + const stableSort = function (array, order, getValue) { // prepare sorting const keys_order = []; const result = []; diff --git a/app/frontend/src/javascript/controllers/admin/groups.js b/app/frontend/src/javascript/controllers/admin/groups.js index e102117c6..a93e05caf 100644 --- a/app/frontend/src/javascript/controllers/admin/groups.js +++ b/app/frontend/src/javascript/controllers/admin/groups.js @@ -55,13 +55,13 @@ Application.Controllers.controller('GroupsController', ['$scope', 'groupsPromise $scope.saveGroup = function (data, id) { if (id != null) { return Group.update({ id }, { group: data }, response => growl.success(_t('app.admin.members.group_form.changes_successfully_saved')) - , error => growl.error(_t('app.admin.members.group_form.an_error_occurred_while_saving_changes'))); + , () => growl.error(_t('app.admin.members.group_form.an_error_occurred_while_saving_changes'))); } else { return Group.save({ group: data }, function (resp) { growl.success(_t('app.admin.members.group_form.new_group_successfully_saved')); return $scope.groups[$scope.groups.length - 1].id = resp.id; } - , function (error) { + , function () { growl.error(_t('app.admin.members.group_form.an_error_occurred_when_saving_the_new_group')); return $scope.groups.splice($scope.groups.length - 1, 1); }); @@ -77,7 +77,7 @@ Application.Controllers.controller('GroupsController', ['$scope', 'groupsPromise growl.success(_t('app.admin.members.group_form.group_successfully_deleted')); return $scope.groups.splice(index, 1); } - , error => growl.error(_t('app.admin.members.group_form.unable_to_delete_group_because_some_users_and_or_groups_are_still_linked_to_it'))); + , () => growl.error(_t('app.admin.members.group_form.unable_to_delete_group_because_some_users_and_or_groups_are_still_linked_to_it'))); /** * Enable/disable the group at the specified index @@ -92,7 +92,7 @@ Application.Controllers.controller('GroupsController', ['$scope', 'groupsPromise $scope.groups[index] = response; return growl.success(_t('app.admin.members.group_form.group_successfully_enabled_disabled', { STATUS: response.disabled })); } - , error => growl.error(_t('app.admin.members.group_form.unable_to_enable_disable_group', { STATUS: !group.disabled }))); + , () => growl.error(_t('app.admin.members.group_form.unable_to_enable_disable_group', { STATUS: !group.disabled }))); } }; } diff --git a/app/frontend/src/javascript/controllers/admin/invoices.js b/app/frontend/src/javascript/controllers/admin/invoices.js index 0638be15a..b8f554668 100644 --- a/app/frontend/src/javascript/controllers/admin/invoices.js +++ b/app/frontend/src/javascript/controllers/admin/invoices.js @@ -1247,7 +1247,7 @@ Application.Controllers.controller('AvoirModalController', ['$scope', '$uibModal function (avoir) { // success $uibModalInstance.close({ avoir, invoice: $scope.invoice }); }, - function (err) { // failed + function () { // failed growl.error(_t('app.admin.invoices.unable_to_create_the_refund')); } ); diff --git a/app/frontend/src/javascript/controllers/admin/pricing.js b/app/frontend/src/javascript/controllers/admin/pricing.js index 1337cbd22..3505bfcb1 100644 --- a/app/frontend/src/javascript/controllers/admin/pricing.js +++ b/app/frontend/src/javascript/controllers/admin/pricing.js @@ -403,7 +403,7 @@ Application.Controllers.controller('EditPricingController', ['$scope', '$state', $scope.spaceCredits[$scope.spaceCredits.length - 1].id = resp.id; return growl.success(_t('app.admin.pricing.credit_was_successfully_saved')); } - , function (err) { + , function () { $scope.spaceCredits.pop(); return growl.error(_t('app.admin.pricing.error_creating_credit')); }); diff --git a/app/frontend/src/javascript/controllers/admin/statistics.js b/app/frontend/src/javascript/controllers/admin/statistics.js index 55efbb497..102523e1c 100644 --- a/app/frontend/src/javascript/controllers/admin/statistics.js +++ b/app/frontend/src/javascript/controllers/admin/statistics.js @@ -2,7 +2,7 @@ no-constant-condition, no-return-assign, no-undef, - standard/no-callback-literal, + n/no-callback-literal, */ // TODO: This file was created by bulk-decaffeinate. // Fix any style issues and re-enable lint. @@ -522,9 +522,7 @@ Application.Controllers.controller('StatisticsController', ['$scope', '$state', bool: { must: [ { - term: { - type: type - } + term: { type } }, { range: { diff --git a/app/frontend/src/javascript/controllers/admin/tags.js b/app/frontend/src/javascript/controllers/admin/tags.js index 4faa51851..494718141 100644 --- a/app/frontend/src/javascript/controllers/admin/tags.js +++ b/app/frontend/src/javascript/controllers/admin/tags.js @@ -45,13 +45,13 @@ Application.Controllers.controller('TagsController', ['$scope', 'tagsPromise', ' $scope.saveTag = function (data, id) { if (id != null) { return Tag.update({ id }, { tag: data }, response => growl.success(_t('app.admin.members.tag_form.changes_successfully_saved')) - , error => growl.error(_t('app.admin.members.tag_form.an_error_occurred_while_saving_changes'))); + , () => growl.error(_t('app.admin.members.tag_form.an_error_occurred_while_saving_changes'))); } else { return Tag.save({ tag: data }, function (resp) { growl.success(_t('app.admin.members.tag_form.new_tag_successfully_saved')); return $scope.tags[$scope.tags.length - 1].id = resp.id; } - , function (error) { + , function () { growl.error(_t('app.admin.members.tag_form.an_error_occurred_while_saving_the_new_tag')); return $scope.tags.splice($scope.tags.length - 1, 1); }); @@ -78,7 +78,7 @@ Application.Controllers.controller('TagsController', ['$scope', 'tagsPromise', ' growl.success(_t('app.admin.members.tag_form.tag_successfully_deleted')); return $scope.tags.splice(index, 1); } - , error => growl.error(_t('app.admin.members.tag_form.an_error_occurred_and_the_tag_deletion_failed'))); + , () => growl.error(_t('app.admin.members.tag_form.an_error_occurred_and_the_tag_deletion_failed'))); }); } diff --git a/app/frontend/src/javascript/controllers/members.js b/app/frontend/src/javascript/controllers/members.js index 388bffbff..0b308def2 100644 --- a/app/frontend/src/javascript/controllers/members.js +++ b/app/frontend/src/javascript/controllers/members.js @@ -323,7 +323,7 @@ Application.Controllers.controller('ShowProfileController', ['$scope', 'memberPr * and return the filtered networks * @return {Array} */ - var filterNetworks = function () { + const filterNetworks = function () { const networks = []; for (const network of Array.from(SocialNetworks)) { if ($scope.user.profile[network] && ($scope.user.profile[network].length > 0)) { diff --git a/app/frontend/src/javascript/controllers/projects.js b/app/frontend/src/javascript/controllers/projects.js index 7cd5c1bef..ce7f6dc67 100644 --- a/app/frontend/src/javascript/controllers/projects.js +++ b/app/frontend/src/javascript/controllers/projects.js @@ -618,7 +618,7 @@ Application.Controllers.controller('ShowProjectController', ['$scope', '$state', growl.success(_t('app.public.projects_show.your_report_was_successful_thanks')); return $uibModalInstance.close(res); } - , function (error) { + , function () { // creation failed... growl.error(_t('app.public.projects_show.an_error_occured_while_sending_your_report')); } diff --git a/app/frontend/src/javascript/directives/bs-jasny-fileinput.js b/app/frontend/src/javascript/directives/bs-jasny-fileinput.js index 0055d2ffc..814b10509 100644 --- a/app/frontend/src/javascript/directives/bs-jasny-fileinput.js +++ b/app/frontend/src/javascript/directives/bs-jasny-fileinput.js @@ -4,9 +4,9 @@ Application.Directives.directive('bsJasnyFileinput', [function () { return { require: ['ngModel'], link: function ($scope, elm, attrs, requiredCtrls) { - var ngModelCtrl = requiredCtrls[0]; - var fileinput = elm.parents('[data-provides=fileinput]'); - var filetypeRegex = attrs.bsJasnyFileinput; + const ngModelCtrl = requiredCtrls[0]; + const fileinput = elm.parents('[data-provides=fileinput]'); + const filetypeRegex = attrs.bsJasnyFileinput; fileinput.on('clear.bs.fileinput', function (e) { if (ngModelCtrl) { ngModelCtrl.$setViewValue(null); diff --git a/app/frontend/src/javascript/lib/devise-modal.js b/app/frontend/src/javascript/lib/devise-modal.js index ea4cff117..07b6d0261 100644 --- a/app/frontend/src/javascript/lib/devise-modal.js +++ b/app/frontend/src/javascript/lib/devise-modal.js @@ -11,7 +11,7 @@ 'Auth', '$rootScope', function ($uibModal, $http, Auth, $rootScope) { - var promise = null; + let promise = null; function reset () { promise = null; } diff --git a/app/frontend/src/javascript/lib/dirDisqus.js b/app/frontend/src/javascript/lib/dirDisqus.js index 4ab8120a7..02ae98907 100644 --- a/app/frontend/src/javascript/lib/dirDisqus.js +++ b/app/frontend/src/javascript/lib/dirDisqus.js @@ -46,7 +46,7 @@ angular.module('angularUtils.directives.dirDisqus', []) // get the remote Disqus script and insert it into the DOM, but only if it not already loaded (as that will cause warnings) if (!$window.DISQUS) { - var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; + const dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = '//' + scope.disqus_shortname + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); } else { diff --git a/app/frontend/src/javascript/lib/format.ts b/app/frontend/src/javascript/lib/format.ts index 14b21ddce..811630602 100644 --- a/app/frontend/src/javascript/lib/format.ts +++ b/app/frontend/src/javascript/lib/format.ts @@ -9,7 +9,7 @@ export default class FormatLib { */ static date = (date: Date): string => { return Intl.DateTimeFormat().format(moment(date).toDate()); - } + }; /** * Return the formatted localized time for the given date @@ -23,12 +23,12 @@ export default class FormatLib { */ static duration = (interval: unitOfTime.DurationConstructor, intervalCount: number): string => { return moment.duration(intervalCount, interval).locale(Fablab.moment_locale).humanize(); - } + }; /** * Return the formatted localized amount for the given price (eg. 20.5 => "20,50 €") */ static price = (price: number): string => { return new Intl.NumberFormat(Fablab.intl_locale, { style: 'currency', currency: Fablab.intl_currency }).format(price); - } + }; } diff --git a/app/frontend/src/javascript/lib/gtm.js b/app/frontend/src/javascript/lib/gtm.js index a1b7ea9e7..e3057035e 100644 --- a/app/frontend/src/javascript/lib/gtm.js +++ b/app/frontend/src/javascript/lib/gtm.js @@ -30,7 +30,7 @@ GTM.trackPurchase = function (transactionId, value) { gtag('event', 'purchase', { transaction_id: transactionId, - value: value, + value, currency: Fablab.intl_currency }); }; diff --git a/app/frontend/src/javascript/lib/humanize.js b/app/frontend/src/javascript/lib/humanize.js index d337278f7..55ad7066a 100644 --- a/app/frontend/src/javascript/lib/humanize.js +++ b/app/frontend/src/javascript/lib/humanize.js @@ -1,23 +1,21 @@ (function () { - var Humanize, isArray, isFinite, isNaN, objectRef, timeFormats, toString; + const objectRef = new function () {}(); - objectRef = new function () {}(); + const toString = objectRef.toString; - toString = objectRef.toString; - - isNaN = function (value) { + const isNaN = function (value) { return Number.isNaN(value); }; - isFinite = function (value) { + const isFinite = function (value) { return ((typeof window !== 'undefined' && window !== null ? window.isFinite : undefined) || global.isFinite)(value) && !isNaN(parseFloat(value)); }; - isArray = function (value) { + const isArray = function (value) { return toString.call(value) === '[object Array]'; }; - timeFormats = [ + const timeFormats = [ { name: 'second', value: 1e3 @@ -36,7 +34,7 @@ } ]; - Humanize = {}; + const Humanize = {}; Humanize.intword = function (number, charWidth, decimals) { if (decimals == null) { @@ -51,18 +49,18 @@ }; Humanize.compactInteger = function (input, decimals) { - var bigNumPrefixes, decimalIndex, decimalPart, decimalPartArray, length, number, numberLength, numberLengths, output, outputNumber, signString, unsignedNumber, unsignedNumberCharacterArray, unsignedNumberString, wholePart, wholePartArray, _i, _len, _length; + let decimalPart, length, output, outputNumber, unsignedNumberString, _i, _len, _length; if (decimals == null) { decimals = 0; } decimals = Math.max(decimals, 0); - number = parseInt(input, 10); - signString = number < 0 ? '-' : ''; - unsignedNumber = Math.abs(number); + const number = parseInt(input, 10); + const signString = number < 0 ? '-' : ''; + const unsignedNumber = Math.abs(number); unsignedNumberString = '' + unsignedNumber; - numberLength = unsignedNumberString.length; - numberLengths = [13, 10, 7, 4]; - bigNumPrefixes = ['T', 'B', 'M', 'k']; + const numberLength = unsignedNumberString.length; + const numberLengths = [13, 10, 7, 4]; + const bigNumPrefixes = ['T', 'B', 'M', 'k']; if (unsignedNumber < 1000) { if (decimals > 0) { unsignedNumberString += '.' + (Array(decimals + 1).join('0')); @@ -79,11 +77,11 @@ break; } } - decimalIndex = numberLength - length + 1; - unsignedNumberCharacterArray = unsignedNumberString.split(''); - wholePartArray = unsignedNumberCharacterArray.slice(0, decimalIndex); - decimalPartArray = unsignedNumberCharacterArray.slice(decimalIndex, decimalIndex + decimals + 1); - wholePart = wholePartArray.join(''); + const decimalIndex = numberLength - length + 1; + const unsignedNumberCharacterArray = unsignedNumberString.split(''); + const wholePartArray = unsignedNumberCharacterArray.slice(0, decimalIndex); + const decimalPartArray = unsignedNumberCharacterArray.slice(decimalIndex, decimalIndex + decimals + 1); + const wholePart = wholePartArray.join(''); decimalPart = decimalPartArray.join(''); if (decimalPart.length < decimals) { decimalPart += '' + (Array(decimals - decimalPart.length + 1).join('0')); @@ -105,7 +103,7 @@ }; Humanize.filesize = Humanize.fileSize = function (filesize) { - var sizeStr; + let sizeStr; if (filesize >= 1073741824) { sizeStr = Humanize.formatNumber(filesize / 1073741824, 2, '') + ' GB'; } else if (filesize >= 1048576) { @@ -119,7 +117,6 @@ }; Humanize.formatNumber = function (number, precision, thousand, decimal) { - var base; var commas; var decimals; var firstComma; var mod; var negative; var usePrecision; if (precision == null) { precision = 0; } @@ -129,36 +126,35 @@ if (decimal == null) { decimal = '.'; } - firstComma = function (number, thousand, position) { + const firstComma = function (number, thousand, position) { if (position) { return number.substr(0, position) + thousand; } else { return ''; } }; - commas = function (number, thousand, position) { + const commas = function (number, thousand, position) { return number.substr(position).replace(/(\d{3})(?=\d)/g, '$1' + thousand); }; - decimals = function (number, decimal, usePrecision) { + const decimals = function (number, decimal, usePrecision) { if (usePrecision) { return decimal + Humanize.toFixed(Math.abs(number), usePrecision).split('.')[1]; } else { return ''; } }; - usePrecision = Humanize.normalizePrecision(precision); - negative = number < 0 ? '-' : ''; - base = parseInt(Humanize.toFixed(Math.abs(number || 0), usePrecision), 10) + ''; - mod = base.length > 3 ? base.length % 3 : 0; + const usePrecision = Humanize.normalizePrecision(precision); + const negative = number < 0 ? '-' : ''; + const base = parseInt(Humanize.toFixed(Math.abs(number || 0), usePrecision), 10) + ''; + const mod = base.length > 3 ? base.length % 3 : 0; return negative + firstComma(base, thousand, mod) + commas(base, thousand, mod) + decimals(number, decimal, usePrecision); }; Humanize.toFixed = function (value, precision) { - var power; if (precision == null) { precision = Humanize.normalizePrecision(precision, 0); } - power = Math.pow(10, precision); + const power = Math.pow(10, precision); return (Math.round(value * power) / power).toFixed(precision); }; @@ -172,16 +168,16 @@ }; Humanize.ordinal = function (value) { - var end, leastSignificant, number, specialCase; - number = parseInt(value, 10); + let end; + const number = parseInt(value, 10); if (number === 0) { return value; } - specialCase = number % 100; + const specialCase = number % 100; if (specialCase === 11 || specialCase === 12 || specialCase === 13) { return '' + number + 'th'; } - leastSignificant = number % 10; + const leastSignificant = number % 10; switch (leastSignificant) { case 1: end = 'st'; @@ -199,7 +195,7 @@ }; Humanize.times = function (value, overrides) { - var number, smallTimes, _ref; + let number, smallTimes, _ref; if (overrides == null) { overrides = {}; } @@ -243,8 +239,8 @@ }; Humanize.truncatewords = Humanize.truncateWords = function (string, length) { - var array, i, result; - array = string.split(' '); + let i, result; + const array = string.split(' '); result = ''; i = 0; while (i < length) { @@ -259,7 +255,7 @@ }; Humanize.truncatenumber = Humanize.boundedNumber = function (num, bound, ending) { - var result; + let result; if (bound == null) { bound = 100; } @@ -276,8 +272,8 @@ }; Humanize.oxford = function (items, limit, limitStr) { - var extra, limitIndex, numItems; - numItems = items.length; + let extra, limitIndex; + const numItems = items.length; if (numItems < 2) { return '' + items; } else if (numItems === 2) { @@ -296,7 +292,7 @@ }; Humanize.dictionary = function (object, joiner, separator) { - var defs, key, result, val; + let defs, key, result, val; if (joiner == null) { joiner = ' is '; } @@ -316,12 +312,12 @@ }; Humanize.frequency = function (list, verb) { - var len, str, times; + let str; if (!isArray(list)) { return; } - len = list.length; - times = Humanize.times(len); + const len = list.length; + const times = Humanize.times(len); if (len === 0) { str = '' + times + ' ' + verb; } else { @@ -331,7 +327,7 @@ }; Humanize.pace = function (value, intervalMs, unit) { - var f, prefix, rate, relativePace, roundedPace, timeUnit, _i, _len; + let f, prefix, relativePace, timeUnit, _i, _len; if (unit == null) { unit = 'time'; } @@ -340,7 +336,7 @@ } prefix = 'Approximately'; timeUnit = null; - rate = value / intervalMs; + const rate = value / intervalMs; for (_i = 0, _len = timeFormats.length; _i < _len; _i++) { f = timeFormats[_i]; relativePace = rate * f.value; @@ -354,7 +350,7 @@ relativePace = 1; timeUnit = timeFormats[timeFormats.length - 1].name; } - roundedPace = Math.round(relativePace); + const roundedPace = Math.round(relativePace); unit = Humanize.pluralize(roundedPace, unit); return '' + prefix + ' ' + roundedPace + ' ' + unit + ' per ' + timeUnit; }; @@ -387,21 +383,20 @@ }; Humanize.titlecase = Humanize.titleCase = function (string) { - var doTitleCase; var internalCaps; var smallWords; var splitOnHyphensRegex; var splitOnWhiteSpaceRegex; - smallWords = /\b(a|an|and|at|but|by|de|en|for|if|in|of|on|or|the|to|via|vs?\.?)\b/i; - internalCaps = /\S+[A-Z]+\S*/; - splitOnWhiteSpaceRegex = /\s+/; - splitOnHyphensRegex = /-/; - doTitleCase = function (_string, hyphenated, firstOrLast) { - var index, stringArray, titleCasedArray, word, _i, _len; + const smallWords = /\b(a|an|and|at|but|by|de|en|for|if|in|of|on|or|the|to|via|vs?\.?)\b/i; + const internalCaps = /\S+[A-Z]+\S*/; + const splitOnWhiteSpaceRegex = /\s+/; + const splitOnHyphensRegex = /-/; + const doTitleCase = function (_string, hyphenated, firstOrLast) { + let index, word, _i, _len; if (hyphenated == null) { hyphenated = false; } if (firstOrLast == null) { firstOrLast = true; } - titleCasedArray = []; - stringArray = _string.split(hyphenated ? splitOnHyphensRegex : splitOnWhiteSpaceRegex); + const titleCasedArray = []; + const stringArray = _string.split(hyphenated ? splitOnHyphensRegex : splitOnWhiteSpaceRegex); for (index = _i = 0, _len = stringArray.length; _i < _len; index = ++_i) { word = stringArray[index]; if (word.indexOf('-') !== -1) { diff --git a/app/frontend/src/javascript/lib/polyfill.js b/app/frontend/src/javascript/lib/polyfill.js index 5425e5460..ce3ce441c 100644 --- a/app/frontend/src/javascript/lib/polyfill.js +++ b/app/frontend/src/javascript/lib/polyfill.js @@ -7,13 +7,13 @@ if (typeof Object.assign !== 'function') { throw new TypeError('Cannot convert undefined or null to object'); } - var to = Object(target); + const to = Object(target); - for (var index = 1; index < arguments.length; index++) { - var nextSource = arguments[index]; + for (let index = 1; index < arguments.length; index++) { + const nextSource = arguments[index]; if (nextSource != null) { // Skip over if undefined or null - for (var nextKey in nextSource) { + for (const nextKey in nextSource) { // Avoid bugs when hasOwnProperty is shadowed if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { to[nextKey] = nextSource[nextKey]; diff --git a/app/frontend/src/javascript/lib/user.ts b/app/frontend/src/javascript/lib/user.ts index b8e350a76..ca773dbfd 100644 --- a/app/frontend/src/javascript/lib/user.ts +++ b/app/frontend/src/javascript/lib/user.ts @@ -18,5 +18,5 @@ export default class UserLib { } return false; - } + }; } diff --git a/app/frontend/src/javascript/lib/wallet.ts b/app/frontend/src/javascript/lib/wallet.ts index 11393e03b..d69464e5b 100644 --- a/app/frontend/src/javascript/lib/wallet.ts +++ b/app/frontend/src/javascript/lib/wallet.ts @@ -16,5 +16,5 @@ export default class WalletLib { } else { return price - this.wallet.amount; } - } + }; } diff --git a/app/frontend/src/javascript/models/gtm.ts b/app/frontend/src/javascript/models/gtm.ts new file mode 100644 index 000000000..995537077 --- /dev/null +++ b/app/frontend/src/javascript/models/gtm.ts @@ -0,0 +1,6 @@ +export interface GoogleTagManager { + enableAnalytics: (trackingId: string) => void, + trackPage: (url: string, title: string) => void, + trackLogin: () => void, + trackPurchase: (transactionId: number, value: number) => void, +} diff --git a/app/frontend/src/javascript/services/diacritics.js b/app/frontend/src/javascript/services/diacritics.js index f22283a0f..7c507da3b 100755 --- a/app/frontend/src/javascript/services/diacritics.js +++ b/app/frontend/src/javascript/services/diacritics.js @@ -14,7 +14,7 @@ Application.Services.service('Diacritics', [ * @returns {string} without diacritics */ remove: function (str) { - var defaultDiacriticsRemovalap = [ + const defaultDiacriticsRemovalap = [ { base: 'A', letters: '\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F' }, { base: 'AA', letters: '\uA732' }, { base: 'AE', letters: '\u00C6\u01FC\u01E2' }, @@ -103,10 +103,10 @@ Application.Services.service('Diacritics', [ { base: 'z', letters: '\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763' } ]; - var diacriticsMap = {}; - for (var i = 0; i < defaultDiacriticsRemovalap.length; i++) { - var letters = defaultDiacriticsRemovalap[i].letters.split(''); - for (var j = 0; j < letters.length; j++) { + const diacriticsMap = {}; + for (let i = 0; i < defaultDiacriticsRemovalap.length; i++) { + const letters = defaultDiacriticsRemovalap[i].letters.split(''); + for (let j = 0; j < letters.length; j++) { diacriticsMap[letters[j]] = defaultDiacriticsRemovalap[i].base; } } diff --git a/config/webpack/webpack.config.js b/config/webpack/webpack.config.js index 9ba7adadf..16cb74a71 100644 --- a/config/webpack/webpack.config.js +++ b/config/webpack/webpack.config.js @@ -32,7 +32,9 @@ const customConfig = { process: 'process/browser' }), isDevelopment && new (require('@pmmmwh/react-refresh-webpack-plugin'))(), - isDevelopment && new (require('eslint-webpack-plugin'))() + isDevelopment && new (require('eslint-webpack-plugin'))({ + extensions: ['js', 'ts', 'tsx'], + }) ].filter(Boolean), module: { rules: [ From 7b5f656e7681b58415edfb413b4eeeb769c32a5f Mon Sep 17 00:00:00 2001 From: vincent Date: Thu, 3 Feb 2022 15:32:02 +0100 Subject: [PATCH 015/274] Add description to plan category --- .../api/plan_categories_controller.rb | 2 +- .../javascript/components/base/fab-modal.tsx | 67 +-- .../javascript/components/base/rhf-input.tsx | 71 +++ .../base/text-editor/fab-text-editor.tsx | 94 ++++ .../components/base/text-editor/menu-bar.tsx | 168 +++++++ .../plan-categories/delete-plan-category.tsx | 10 +- .../plan-categories/manage-plan-category.tsx | 99 ++++ .../plan-categories/plan-categories-list.tsx | 13 +- .../plan-categories/plan-category-form.tsx | 69 +++ .../src/javascript/models/plan-category.ts | 1 + app/frontend/src/stylesheets/application.scss | 7 +- .../stylesheets/modules/base/fab-button.scss | 2 - .../stylesheets/modules/base/fab-modal.scss | 42 +- .../modules/base/fab-text-editor.scss | 170 +++++++ .../stylesheets/modules/base/rhf-input.scss | 74 +++ .../plan-categories/create-plan-category.scss | 7 - .../plan-categories/edit-plan-category.scss | 10 - .../plan-categories/manage-plan-category.scss | 4 + .../plan-categories/plan-categories-list.scss | 4 + .../src/stylesheets/variables/colors.scss | 48 ++ .../src/stylesheets/variables/typography.scss | 110 +++++ .../api/plan_categories/index.json.jbuilder | 2 +- .../api/plan_categories/show.json.jbuilder | 2 +- config/locales/app.admin.en.yml | 58 +-- config/locales/app.shared.en.yml | 5 + package.json | 9 + yarn.lock | 430 +++++++++++++++++- 27 files changed, 1444 insertions(+), 134 deletions(-) create mode 100644 app/frontend/src/javascript/components/base/rhf-input.tsx create mode 100644 app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx create mode 100644 app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx create mode 100644 app/frontend/src/javascript/components/plan-categories/manage-plan-category.tsx create mode 100644 app/frontend/src/javascript/components/plan-categories/plan-category-form.tsx create mode 100644 app/frontend/src/stylesheets/modules/base/fab-text-editor.scss create mode 100644 app/frontend/src/stylesheets/modules/base/rhf-input.scss delete mode 100644 app/frontend/src/stylesheets/modules/plan-categories/create-plan-category.scss delete mode 100644 app/frontend/src/stylesheets/modules/plan-categories/edit-plan-category.scss create mode 100644 app/frontend/src/stylesheets/modules/plan-categories/manage-plan-category.scss create mode 100644 app/frontend/src/stylesheets/variables/colors.scss create mode 100644 app/frontend/src/stylesheets/variables/typography.scss diff --git a/app/controllers/api/plan_categories_controller.rb b/app/controllers/api/plan_categories_controller.rb index a83998b8f..407bfd0e6 100644 --- a/app/controllers/api/plan_categories_controller.rb +++ b/app/controllers/api/plan_categories_controller.rb @@ -45,6 +45,6 @@ class API::PlanCategoriesController < API::ApiController end def plan_category_params - params.require(:plan_category).permit(:name, :weight) + params.require(:plan_category).permit(:name, :weight, :description) end end diff --git a/app/frontend/src/javascript/components/base/fab-modal.tsx b/app/frontend/src/javascript/components/base/fab-modal.tsx index 7cc4042db..7cc6975d3 100644 --- a/app/frontend/src/javascript/components/base/fab-modal.tsx +++ b/app/frontend/src/javascript/components/base/fab-modal.tsx @@ -1,9 +1,7 @@ -import React, { ReactNode, BaseSyntheticEvent, useEffect, useState } from 'react'; +import React, { ReactNode, BaseSyntheticEvent, useEffect } from 'react'; import Modal from 'react-modal'; import { useTranslation } from 'react-i18next'; import { Loader } from './loader'; -import CustomAssetAPI from '../../api/custom-asset'; -import { CustomAsset, CustomAssetName } from '../../models/custom-asset'; import { FabButton } from './fab-button'; Modal.setAppElement('body'); @@ -36,79 +34,32 @@ interface FabModalProps { export const FabModal: React.FC = ({ title, isOpen, toggleModal, children, confirmButton, className, width = 'sm', closeButton, customHeader, customFooter, onConfirm, preventConfirm, onCreation, onConfirmSendFormId }) => { const { t } = useTranslation('shared'); - const [blackLogo, setBlackLogo] = useState(null); - - // initial request to the API to get the theme's logo, for back backgrounds - useEffect(() => { - CustomAssetAPI.get(CustomAssetName.LogoBlackFile).then(data => setBlackLogo(data)); - }, []); - useEffect(() => { if (typeof onCreation === 'function' && isOpen) { onCreation(); } }, [isOpen]); - /** - * Check if the confirm button should be present - */ - const hasConfirmButton = (): boolean => { - return confirmButton !== undefined; - }; - - /** - * Check if the behavior of the confirm button is to send a form, using the provided ID - */ - const confirmationSendForm = (): boolean => { - return onConfirmSendFormId !== undefined; - }; - - /** - * Should we display the close button? - */ - const hasCloseButton = (): boolean => { - return closeButton; - }; - - /** - * Check if there's a custom footer - */ - const hasCustomFooter = (): boolean => { - return customFooter !== undefined; - }; - - /** - * Check if there's a custom header - */ - const hasCustomHeader = (): boolean => { - return customHeader !== undefined; - }; - return ( + {closeButton && {t('app.shared.buttons.close')}}
- - {blackLogo && {blackLogo.custom_asset_file_attributes.attachment}} - - {!hasCustomHeader() &&

{ title }

} - {hasCustomHeader() && customHeader} + {!customHeader &&

{ title }

} + {customHeader && customHeader}
{children}
-
+ {(customFooter || confirmButton) &&
- {hasCloseButton() && {t('app.shared.buttons.close')}} - {hasConfirmButton() && !confirmationSendForm() && {confirmButton}} - {hasConfirmButton() && confirmationSendForm() && {confirmButton}} - {hasCustomFooter() && customFooter} + {confirmButton && !onConfirmSendFormId && {confirmButton}} + {confirmButton && onConfirmSendFormId && {confirmButton}} + {customFooter && customFooter} -
+
}
); }; diff --git a/app/frontend/src/javascript/components/base/rhf-input.tsx b/app/frontend/src/javascript/components/base/rhf-input.tsx new file mode 100644 index 000000000..941bd5b88 --- /dev/null +++ b/app/frontend/src/javascript/components/base/rhf-input.tsx @@ -0,0 +1,71 @@ +import React, { ReactNode } from 'react'; +import { FieldErrors, UseFormRegister, Validate } from 'react-hook-form'; + +type inputType = string|number|readonly string []; +type ruleTypes = { + required?: boolean | string, + pattern?: RegExp | {value: RegExp, message: string}, + minLenght?: number, + maxLenght?: number, + min?: number, + max?: number, + validate?: Validate; +}; + +interface RHFInputProps { + id: string, + register: UseFormRegister, + label?: string, + tooltip?: string, + defaultValue?: inputType, + icon?: ReactNode, + addOn?: ReactNode, + addOnClassName?: string, + classes?: string, + rules?: ruleTypes, + readOnly?: boolean, + disabled?: boolean, + placeholder?: string, + error?: FieldErrors, + type?: 'text' | 'date' | 'password' | 'url' | 'time' | 'tel' | 'search' | 'number' | 'month' | 'email' | 'datetime-local' | 'week', + step?: number | 'any' +} + +/** + * This component is a template for an input component to use within React Hook Form + */ +export const RHFInput: React.FC = ({ id, register, label, tooltip, defaultValue, icon, classes, rules, readOnly, disabled, type, addOn, addOnClassName, placeholder, error, step }) => { + // Compose classnames from props + const classNames = ` + rhf-input ${classes || ''} + ${error && error[id] ? 'is-incorrect' : ''} + ${rules && rules.required ? 'is-required' : ''} + ${readOnly ? 'is-readOnly' : ''} + ${disabled ? 'is-disabled' : ''}`; + + return ( + + ); +}; diff --git a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx new file mode 100644 index 000000000..19b293c20 --- /dev/null +++ b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx @@ -0,0 +1,94 @@ +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { react2angular } from 'react2angular'; +import { IApplication } from '../../../models/application'; +import { Loader } from '../loader'; +import { useEditor, EditorContent } from '@tiptap/react'; +import StarterKit from '@tiptap/starter-kit'; +import Placeholder from '@tiptap/extension-placeholder'; +import CharacterCount from '@tiptap/extension-character-count'; +import Underline from '@tiptap/extension-underline'; +import Link from '@tiptap/extension-link'; +import { MenuBar } from './menu-bar'; +import { WarningOctagon } from 'phosphor-react'; + +declare const Application: IApplication; + +interface FabTextEditorProps { + label?: string, + paragraphTools?: boolean, + content?: string, + limit?: number, + onChange?: (content: string) => void, + placeholder?: string, + error?: string, +} + +/** + * This component is a WYSIWYG text editor + */ +export const FabTextEditor: React.FC = ({ label, paragraphTools, content, limit = 400, onChange, placeholder, error }) => { + const { t } = useTranslation('shared'); + const placeholderText = placeholder || t('app.shared.text_editor.placeholder'); + // TODO: Add ctrl+click on link to visit + + // Setup the editor + // Extensions add functionalities to the editor (Bold, Italic…) + // Events fire action (onUpdate -> get the content as HTML) + const editor = useEditor({ + extensions: [ + StarterKit.configure({ + heading: { + levels: [3] + } + }), + Underline, + Link.configure({ + openOnClick: false + }), + Placeholder.configure({ + placeholder: placeholderText + }), + CharacterCount.configure({ + limit + }) + ], + content, + onUpdate: ({ editor }) => { + onChange(editor.getHTML()); + } + }); + + const focusEditor = () => { + editor.commands.focus('start'); + }; + + return ( + <> + {label && } +
+ + +
+ {editor?.storage.characterCount.characters()} / {limit} +
+ {error && +
+ +

{error}

+
+ } +
+ + ); +}; + +const FabTextEditorWrapper: React.FC = ({ label, paragraphTools, content, limit, placeholder, error }) => { + return ( + + + + ); +}; + +Application.Components.component('fabTextEditor', react2angular(FabTextEditorWrapper, ['label', 'paragraphTools', 'content', 'limit', 'placeholder', 'error'])); diff --git a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx new file mode 100644 index 000000000..4d19ae195 --- /dev/null +++ b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx @@ -0,0 +1,168 @@ +import React, { useCallback, useState, useEffect } from 'react'; +import { useTranslation } from 'react-i18next'; +import useOnclickOutside from 'react-cool-onclickoutside'; +import { Editor } from '@tiptap/react'; +import { TextAa, TextBolder, TextItalic, TextUnderline, LinkSimpleHorizontal, ListBullets, Quotes, Trash, CheckCircle } from 'phosphor-react'; + +interface MenuBarProps { + paragraphTools?: boolean, + editor?: Editor, +} + +/** + * This component is the menu bar for the WYSIWYG text editor + */ +export const MenuBar: React.FC = ({ editor, paragraphTools }) => { + const { t } = useTranslation('shared'); + + const [linkMenu, setLinkMenu] = useState(false); + const resetUrl = { href: '', target: '_blank' }; + const [url, setUrl] = useState(resetUrl); + const ref = useOnclickOutside(() => { + setLinkMenu(false); + }); + + // Reset state values when the link menu is closed + useEffect(() => { + if (!linkMenu) { + setUrl(resetUrl); + } + }, [linkMenu]); + + // Toggle link menu's visibility + const toggleLinkMenu = () => { + if (!linkMenu) { + setLinkMenu(true); + const previousUrl = { + href: editor.getAttributes('link').href, + target: editor.getAttributes('link').target || '' + }; + // display selected text's attributes if it's a link + if (previousUrl.href) { + setUrl(previousUrl); + } + } else { + setLinkMenu(false); + setUrl(resetUrl); + } + }; + + // Set link's target + const toggleTarget = (evt) => { + evt.target.checked + ? setUrl({ href: url.href, target: '_blank' }) + : setUrl({ href: url.href, target: '' }); + }; + + // Update url + const handleChange = (evt) => { + setUrl({ ...url, href: evt.target.value }); + }; + // Support keyboard "Enter" key event to validate + const handleEnter = (evt) => { + if (evt.keyCode === 13) { + setLink(); + } + }; + + // Update the selected link + const setLink = useCallback((closeLinkMenu?: boolean) => { + if (url.href === '') { + unsetLink(); + return; + } + editor.chain().focus().extendMarkRange('link').setLink({ href: url.href, target: url.target }).run(); + if (closeLinkMenu) { + setLinkMenu(false); + } + }, [editor, url]); + + // Remove the link tag from the selected text + const unsetLink = () => { + editor.chain().focus().extendMarkRange('link').unsetLink().run(); + setLinkMenu(false); + }; + + if (!editor) { + return null; + } + + return ( + <> +
+ { paragraphTools && + (<> + + + + + ) + } + + + + +
+
+
+ + +
+
+ + +
+
+ + ); +}; diff --git a/app/frontend/src/javascript/components/plan-categories/delete-plan-category.tsx b/app/frontend/src/javascript/components/plan-categories/delete-plan-category.tsx index cf8644694..35a3026ea 100644 --- a/app/frontend/src/javascript/components/plan-categories/delete-plan-category.tsx +++ b/app/frontend/src/javascript/components/plan-categories/delete-plan-category.tsx @@ -34,9 +34,9 @@ const DeletePlanCategoryComponent: React.FC = ({ onSucc */ const onDeleteConfirmed = (): void => { PlanCategoryAPI.destroy(category.id).then(() => { - onSuccess(t('app.admin.delete_plan_category.category_deleted')); + onSuccess(t('app.admin.manage_plan_category.delete_category.success')); }).catch((error) => { - onError(t('app.admin.delete_plan_category.unable_to_delete') + error); + onError(t('app.admin.manage_plan_category.delete_category.error') + error); }); toggleDeletionModal(); }; @@ -44,13 +44,13 @@ const DeletePlanCategoryComponent: React.FC = ({ onSucc return (
} onClick={toggleDeletionModal} /> - - {t('app.admin.delete_plan_category.delete_confirmation')} + {t('app.admin.manage_plan_category.delete_category.confirm')}
); diff --git a/app/frontend/src/javascript/components/plan-categories/manage-plan-category.tsx b/app/frontend/src/javascript/components/plan-categories/manage-plan-category.tsx new file mode 100644 index 000000000..2ea78b4c2 --- /dev/null +++ b/app/frontend/src/javascript/components/plan-categories/manage-plan-category.tsx @@ -0,0 +1,99 @@ +import React, { useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { PlanCategory } from '../../models/plan-category'; +import { FabButton } from '../base/fab-button'; +import { FabModal } from '../base/fab-modal'; +import { Loader } from '../base/loader'; +import { PlanCategoryForm } from './plan-category-form'; + +interface ManagePlanCategoryProps { + category?: PlanCategory, + action: 'create' | 'update', + onSuccess: (message: string) => void, + onError: (message: string) => void, +} + +/** + * This component shows a button. + * When clicked, we show a modal dialog allowing to fill the parameters with a new plan-category. + */ +const ManagePlanCategoryComponent: React.FC = ({ category, action, onSuccess, onError }) => { + const { t } = useTranslation('admin'); + + // is the creation modal open? + const [isOpen, setIsOpen] = useState(false); + // when editing, we store the category here, until the edition is over + const [tempCategory, setTempCategory] = useState(category); + + /** + * Opens/closes the new plan-category (creation) modal + */ + const toggleModal = (): void => { + setIsOpen(!isOpen); + }; + + /** + * Initialize a new plan-category for creation + * or refresh plan-category data for update + */ + const initCategoryCreation = () => { + if (action === 'create') { + setTempCategory({ name: '', description: '', weight: 0 }); + } else { + setTempCategory(category); + } + }; + + /** + * Close the modal if the form submission was successful + */ + const handleSuccess = (message) => { + setIsOpen(false); + onSuccess(message); + }; + + /** + * Render the appropriate button depending on the action type + */ + const toggleBtn = () => { + switch (action) { + case 'create': + return ( + } + className="btn-warning" + onClick={toggleModal}> + {t('app.admin.create_plan_category.new_category')} + + ); + case 'update': + return (} + className="edit-button" + onClick={toggleModal} />); + } + }; + + return ( +
+ { toggleBtn() } + + + {tempCategory && } + + +
+ ); +}; + +export const ManagePlanCategory: React.FC = ({ category, action, onSuccess, onError }) => { + return ( + + + + ); +}; diff --git a/app/frontend/src/javascript/components/plan-categories/plan-categories-list.tsx b/app/frontend/src/javascript/components/plan-categories/plan-categories-list.tsx index 212a235ec..615846d89 100644 --- a/app/frontend/src/javascript/components/plan-categories/plan-categories-list.tsx +++ b/app/frontend/src/javascript/components/plan-categories/plan-categories-list.tsx @@ -5,8 +5,7 @@ import { PlanCategory } from '../../models/plan-category'; import { react2angular } from 'react2angular'; import { Loader } from '../base/loader'; import { IApplication } from '../../models/application'; -import { CreatePlanCategory } from './create-plan-category'; -import { EditPlanCategory } from './edit-plan-category'; +import { ManagePlanCategory } from './manage-plan-category'; import { DeletePlanCategory } from './delete-plan-category'; declare const Application: IApplication; @@ -51,15 +50,15 @@ export const PlanCategoriesList: React.FC = ({ onSucces return (
- +

{t('app.admin.plan_categories_list.categories_list')}

{categories && categories.length === 0 && {t('app.admin.plan_categories_list.no_categories')}} {categories && categories.length > 0 &&
{t('app.admin.plan_categories_list.name')}{t('app.admin.plan_categories_list.significance')} {t('app.admin.plan_categories_list.name')}{t('app.admin.plan_categories_list.significance')}
{c.name} {c.weight} - +
- - + + + @@ -68,7 +67,7 @@ export const PlanCategoriesList: React.FC = ({ onSucces )} diff --git a/app/frontend/src/javascript/components/plan-categories/plan-category-form.tsx b/app/frontend/src/javascript/components/plan-categories/plan-category-form.tsx new file mode 100644 index 000000000..c02872ac6 --- /dev/null +++ b/app/frontend/src/javascript/components/plan-categories/plan-category-form.tsx @@ -0,0 +1,69 @@ +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import PlanCategoryAPI from '../../api/plan-category'; +import { PlanCategory } from '../../models/plan-category'; +import { Loader } from '../base/loader'; +import { useForm, Controller, SubmitHandler } from 'react-hook-form'; +import { FabTextEditor } from '../base/text-editor/fab-text-editor'; +import { RHFInput } from '../base/rhf-input'; +import { FabAlert } from '../base/fab-alert'; +import { FabButton } from '../base/fab-button'; + +interface PlanCategoryFormProps { + action: 'create' | 'update', + category: PlanCategory, + onSuccess: (message: string) => void, + onError: (message: string) => void +} + +const PlanCategoryFormComponent: React.FC = ({ action, category, onSuccess, onError }) => { + const { t } = useTranslation('admin'); + + const { register, control, handleSubmit } = useForm({ defaultValues: { ...category } }); + /** + * The action has been confirmed by the user. + * Push the created/updated plan-category to the API. + */ + const onSubmit: SubmitHandler = (data: PlanCategory) => { + switch (action) { + case 'create': + PlanCategoryAPI.create(data).then(() => { + onSuccess(t('app.admin.manage_plan_category.create_category.success')); + }).catch((error) => { + onError(t('app.admin.manage_plan_category.create_category.error') + error); + }); + break; + case 'update': + PlanCategoryAPI.update(data).then(() => { + onSuccess(t('app.admin.manage_plan_category.update_category.success')); + }).catch((error) => { + onError(t('app.admin.manage_plan_category.update_category.error') + error); + }); + break; + } + }; + + return ( +
+ + + + + } /> + + + + {t('app.admin.manage_plan_category.info')} + + {t(`app.admin.manage_plan_category.${action}_category.cta`)} + + ); +}; + +export const PlanCategoryForm: React.FC = ({ action, category, onSuccess, onError }) => { + return ( + + + + ); +}; diff --git a/app/frontend/src/javascript/models/plan-category.ts b/app/frontend/src/javascript/models/plan-category.ts index 5bdac7922..3d9d41d64 100644 --- a/app/frontend/src/javascript/models/plan-category.ts +++ b/app/frontend/src/javascript/models/plan-category.ts @@ -1,5 +1,6 @@ export interface PlanCategory { id?: number, name: string, + description?: string, weight: number, } diff --git a/app/frontend/src/stylesheets/application.scss b/app/frontend/src/stylesheets/application.scss index f01f1461b..132d0b81e 100644 --- a/app/frontend/src/stylesheets/application.scss +++ b/app/frontend/src/stylesheets/application.scss @@ -1,3 +1,5 @@ +@import "variables/colors"; +@import "variables/typography"; @import "app.functions"; @import "bootstrap_and_overrides"; @@ -23,10 +25,12 @@ @import "modules/tour"; @import "modules/base/fab-modal"; @import "modules/base/fab-input"; +@import "modules/base/rhf-input"; @import "modules/base/fab-button"; @import "modules/base/fab-alert"; @import "modules/base/fab-popover"; @import "modules/base/labelled-input"; +@import "modules/base/fab-text-editor"; @import "modules/payment-schedule/payment-schedule-summary"; @import "modules/wallet-info"; @import "modules/document-filters"; @@ -49,8 +53,7 @@ @import "modules/payment/payzen/payzen-update-card-modal"; @import "modules/payment/local-payment/local-payment-modal"; @import "modules/plan-categories/plan-categories-list"; -@import "modules/plan-categories/create-plan-category"; -@import "modules/plan-categories/edit-plan-category"; +@import "modules/plan-categories/manage-plan-category"; @import "modules/plan-categories/delete-plan-category"; @import "modules/machines/machine-card"; @import "modules/machines/machines-list"; diff --git a/app/frontend/src/stylesheets/modules/base/fab-button.scss b/app/frontend/src/stylesheets/modules/base/fab-button.scss index 14a2f76fc..5f70a2d3a 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-button.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-button.scss @@ -46,6 +46,4 @@ &--icon { margin-right: 0.5em; } - - &--icon-only {} } diff --git a/app/frontend/src/stylesheets/modules/base/fab-modal.scss b/app/frontend/src/stylesheets/modules/base/fab-modal.scss index 132f71afc..a6d64d326 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-modal.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-modal.scss @@ -1,6 +1,7 @@ @keyframes slideInFromTop { 0% { transform: translate(0, -25%); } 100% { transform: translate(0, 0); } + } @keyframes fadeIn { @@ -38,6 +39,25 @@ border-radius: 6px; outline: 0; + .modal-btn--close { + position: absolute; + right: 0; + top: 0; + transform: translateY(calc(-100% + 4px)); + padding-bottom: 1rem; + color: var(--gray-soft-lightest); + background-color: transparent; + border: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + + &:hover { + color: var(--gray-hard-darkest); + background-color: var(--gray-soft-lightest); + cursor: pointer; + } + } + .fab-modal-header { padding: 8px; border-bottom: 1px solid #e5e5e5; @@ -60,6 +80,18 @@ .fab-modal-content { position: relative; padding: 15px; + + form { + display: flex; + flex-direction: column; + + button[type="submit"] { + margin-left: auto; + background-color: var(--secondary); + border: none; + &:hover { background-color: var(--secondary-dark);} + } + } } .fab-modal-footer { @@ -69,16 +101,6 @@ border-top: 1px solid #e5e5e5; .modal-btn { - &--close { - color: black; - background-color: #fbfbfb; - border: 1px solid #c9c9c9; - - &:hover { - background-color: #f2f2f2; - } - } - &--confirm { margin-left: 0.5em; } diff --git a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss new file mode 100644 index 000000000..dc2068a69 --- /dev/null +++ b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss @@ -0,0 +1,170 @@ +.fab-textEditor { + position: relative; + margin-bottom: 1.6rem; + padding-bottom: 1.6rem; + background-color: var(--gray-soft-lightest); + border: 1px solid var(--gray-soft-dark); + // TODO: border radius from variable + border-radius: 8px; + + &-label { + display: block; + margin-bottom: 0.8rem; + } + + @mixin button($height, $width: $height) { + width: $width; + height: $height; + display: flex; + justify-content: center; + align-items: center; + border-radius: 4px; + color: var(--gray-hard-darkest); + background-color: transparent; + border: none; + &.is-active { color: var(--information); } + &:hover { + background-color: var(--gray-soft); + cursor: pointer; + } + } + + &-menu { + display: flex; + align-items: center; + padding: 0.8rem; + border-bottom: 1px solid var(--gray-soft-darkest); + & > *:not(:last-child) { + margin-right: 4px; + } + + button { @include button(4rem); } + .divider { + width: 2px; + height: 2.4rem; + background-color: var(--gray-soft-dark); + border-radius: 1px; + } + } + + // tiptap class for the editor + .ProseMirror { + padding: 1.6rem 1.6rem 1.2rem; + &:focus { outline: none; } + @include editor; + } + + &-character-count { + padding-right: 1.6rem; + @include text-sm; + text-align: right; + color: var(--gray-hard-lightest); + } + + &-linkMenu { + position: absolute; + top: 4.5rem; + right: 0; + left: 0; + max-width: 50ch; + margin: 0 0.8rem; + padding: 1.2rem; + background-color: var(--gray-soft-lightest); + border: 1px solid var(--gray-soft-darkest); + border-radius: 8px; + // TODO: shadow from variable + box-shadow: 0 0 10px rgba(39, 32, 32, 0.25); + opacity: 0; + pointer-events: none; + transition: opacity 0.25s ease-out; + z-index: 10; + &.is-active { + opacity: 1; + pointer-events: all; + } + & > div { + display: flex; + align-items: center + } + .url { + margin-bottom: 0.8rem; + input { + width: 100%; + height: 4rem; + margin-right: 1.2rem; + padding: 0.4rem 0.8rem; + background-color: var(--gray-soft-light); + border: 1px solid var(--secondary); + border-radius: 8px; + font-size: var(--text-base); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + &::placeholder { color: var(--gray-soft-darkest);} + } + } + .tab { + display: flex; + align-items: center; + margin: 0; + cursor: pointer; + p { + margin: 0 1.2rem 0 0; + @include text-sm(); + color: var(--gray-hard); + } + input[type="checkbox"] { opacity: 0; width: 0; height: 0; } + .switch { + position: relative; + width: 3.6rem; + height: 2rem; + background-color: var(--gray-soft); + border-radius: 2rem; + &::after { + content: ""; + position: absolute; + left: 0; + width: 2rem; + height: 2rem; + background-color: var(--gray-soft-lightest); + border: 2px solid var(--gray-soft); + border-radius: 2rem; + } + } + input:checked + .switch { background-color: var(--information); } + input:checked + .switch::after { + left: auto; + right: 0; + border-color: var(--information); + } + } + + button { + @include button(3.2rem); + margin-left: auto; + } + } + + &-error { + position: absolute; + top: 4.5rem; + right: 0; + left: 0; + display: flex; + max-width: 50ch; + margin: 0 0.8rem; + padding: 1.2rem; + color: var(--main-dark); + background-color: var(--main-lightest); + border: 1px solid var(--main-light); + border-radius: 8px; + // TODO: shadow from variable + box-shadow: 0 0 10px rgba(39, 32, 32, 0.25); + + svg { + flex-shrink: 0; + margin-right: 1.2rem; + } + p { margin: 0; } + } +} diff --git a/app/frontend/src/stylesheets/modules/base/rhf-input.scss b/app/frontend/src/stylesheets/modules/base/rhf-input.scss new file mode 100644 index 000000000..8d9a19a2a --- /dev/null +++ b/app/frontend/src/stylesheets/modules/base/rhf-input.scss @@ -0,0 +1,74 @@ +.rhf-input { + width: 100%; + margin-bottom: 1.6rem; + + &-header { + width: 100%; + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 0.8rem; + p { margin: 0; } + } + &.is-required &-header p::after { + content: "*"; + margin-left: 0.5ch; + color: var(--error); + } + + &-field { + height: 4rem; + display: grid; + grid-template-areas: "icon input addon"; + grid-template-columns: min-content 1fr min-content; + border: 1px solid var(--gray-soft-dark); + border-radius: 4px; + overflow: hidden; + transition: border-color ease-in-out 0.15s; + + .icon, + .addon { + width: 4rem; + display: flex; + justify-content: center; + align-items: center; + color: var(--gray-hard-light); + background-color: var(--gray-soft); + } + .icon { + grid-area: icon; + border-right: 1px solid var(--gray-soft-dark); + } + input { + grid-area: input; + border: none; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .08); + padding: 0 0.8rem; + color: var(--gray-hard-darkest); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .addon { + grid-area: addon; + border-left: 1px solid var(--gray-soft-dark); + } + } + &.is-incorrect &-field { + border-color: var(--error); + .icon { + color: var(--error); + border-color: var(--error); + background-color: var(--error-lightest); + } + } + &.is-disabled &-field input, + &.is-readOnly &-field input { + background-color: var(--gray-soft-light); + } + + &-error { + margin-top: 0.4rem; + color: var(--error); + } +} diff --git a/app/frontend/src/stylesheets/modules/plan-categories/create-plan-category.scss b/app/frontend/src/stylesheets/modules/plan-categories/create-plan-category.scss deleted file mode 100644 index b5ca81cae..000000000 --- a/app/frontend/src/stylesheets/modules/plan-categories/create-plan-category.scss +++ /dev/null @@ -1,7 +0,0 @@ -.create-plan-category {} - -.create-plan-category-modal { - .significance-info { - margin-top: 10px; - } -} diff --git a/app/frontend/src/stylesheets/modules/plan-categories/edit-plan-category.scss b/app/frontend/src/stylesheets/modules/plan-categories/edit-plan-category.scss deleted file mode 100644 index fa1570b9a..000000000 --- a/app/frontend/src/stylesheets/modules/plan-categories/edit-plan-category.scss +++ /dev/null @@ -1,10 +0,0 @@ -.edit-plan-category { - display: inline; - margin-right: 5px; -} - -.edit-plan-category-modal { - .significance-info { - margin-top: 10px; - } -} diff --git a/app/frontend/src/stylesheets/modules/plan-categories/manage-plan-category.scss b/app/frontend/src/stylesheets/modules/plan-categories/manage-plan-category.scss new file mode 100644 index 000000000..4932f14dc --- /dev/null +++ b/app/frontend/src/stylesheets/modules/plan-categories/manage-plan-category.scss @@ -0,0 +1,4 @@ +.manage-plan-category { + display: inline; + margin-right: 5px; +} diff --git a/app/frontend/src/stylesheets/modules/plan-categories/plan-categories-list.scss b/app/frontend/src/stylesheets/modules/plan-categories/plan-categories-list.scss index 72f8bc6e5..c2f1834b0 100644 --- a/app/frontend/src/stylesheets/modules/plan-categories/plan-categories-list.scss +++ b/app/frontend/src/stylesheets/modules/plan-categories/plan-categories-list.scss @@ -19,7 +19,11 @@ border-color: #c9c9c9; } + .category-weight { + width: 13ch; + } .category-actions { + width: 110px; text-align: right; } } diff --git a/app/frontend/src/stylesheets/variables/colors.scss b/app/frontend/src/stylesheets/variables/colors.scss new file mode 100644 index 000000000..708531e7f --- /dev/null +++ b/app/frontend/src/stylesheets/variables/colors.scss @@ -0,0 +1,48 @@ +:root { + --gray-soft-lightest: #FFFFFF; + --gray-soft-light: #F5F5F5; + --gray-soft: #E5E5E5; + --gray-soft-dark: #D1D1D1; + --gray-soft-darkest: #A3A3A3; + + --gray-hard-lightest: #757575; + --gray-hard-light: #575757; + --gray-hard: #383838; + --gray-hard-dark: #1F1F1F; + --gray-hard-darkest: #0F0F0F; + + --main-lightest: #FDF1F1; + --main-light: #F6ACAC; + --main: #E72223; + --main-dark: #BC1415; + --main-darkest: #57090A; + + --secondary-light: #FFF8B3; + --secondary: #FDE500; + --secondary-dark: #CCB800; + --secondary-darkest: #3D3700; + + --success-lightest: #E3FCEC; + --success-light: #88E8AA; + --success: #259D58; + --success-dark: #229051; + --success-darkest: #155239; + + --error-lightest: #FDF1F1; + --error-light: #EA8585; + --error: #DA3030; + --error-dark: #9F1D1D; + --error-darkest: #611818; + + --information-lightest: #EFF6FF; + --information-light: #93C5FD; + --information: #1A5DF9; + --information-dark: #1E3A8A; + --information-darkest: #122354; + + --warning-lightest: #FFFCF4; + --warning-light: #FAE29F; + --warning: #D6AE47; + --warning-dark: #8C6D1F; + --warning-darkest: #5C4813; +} diff --git a/app/frontend/src/stylesheets/variables/typography.scss b/app/frontend/src/stylesheets/variables/typography.scss new file mode 100644 index 000000000..156b8144b --- /dev/null +++ b/app/frontend/src/stylesheets/variables/typography.scss @@ -0,0 +1,110 @@ +// Font +@import url('https://fonts.googleapis.com/css2?family=Work+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap'); + +:root { + --font-text: 'Work Sans', sans-serif; +} + +// Title +@mixin title-xl { + font-family: var(--font-text); + font-weight: 700; + font-size: 4rem; + line-height: 1.175; +} +@mixin title-lg { + font-family: var(--font-text); + font-weight: 600; + font-size: 2.8rem; + line-height: 1.175; +} +@mixin title-base { + font-family: var(--font-text); + font-weight: 600; + font-size: 2rem; + line-height: 1.175; +} +@mixin title-sm { + font-family: var(--font-text); + font-weight: 400; + font-size: 1.8rem; + line-height: 1.175; +} + +// Text +@mixin text-xl { + font-family: var(--font-text); + font-weight: 500; + font-size: 2rem; + line-height: 1.175; +} +@mixin text-lg($weight: normal) { + font-family: var(--font-text); + font-weight: $weight; + font-size: 1.8rem; + line-height: normal; +} +@mixin text-base($weight: normal) { + font-family: var(--font-text); + font-weight: $weight; + font-size: 1.6rem; + line-height: normal; +} +@mixin text-sm($weight: normal) { + font-family: var(--font-text); + font-weight: $weight; + font-size: 1.4rem; + line-height: normal; +} + +// Text Editor +@mixin editor { + *:first-child { + margin-top: 0; + } + h3 { + @include text-lg(600); + margin: 0 0 1rem; + color: var(--gray-hard-darkest); + } + ul { + padding-inline-start: 2.2rem; + } + blockquote { + position: relative; + margin: 2rem 0; + padding: 0.3rem 1.2rem; + border: none; + font-style: italic; + &::before { + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 4px; + border-radius: 2px; + background-color: var(--gray-hard-darkest); + } + } + + p { @include text-base; } + p:last-of-type { margin: 0; } + //placeholder + p.is-editor-empty:first-child:before { + content: attr(data-placeholder); + height: 0; + float: left; + pointer-events: none; + color: var(--gray-soft-darkest); + } + + strong { font-weight: 600; } + em { font-style: italic; } + u { text-decoration: underline; } + + a { + color: var(--main-dark); + text-decoration: underline; + } +} diff --git a/app/views/api/plan_categories/index.json.jbuilder b/app/views/api/plan_categories/index.json.jbuilder index fb63cd67c..65e94b01b 100644 --- a/app/views/api/plan_categories/index.json.jbuilder +++ b/app/views/api/plan_categories/index.json.jbuilder @@ -1,5 +1,5 @@ # frozen_string_literal: true json.array!(@categories) do |category| - json.extract! category, :id, :name, :weight + json.extract! category, :id, :name, :weight, :description end diff --git a/app/views/api/plan_categories/show.json.jbuilder b/app/views/api/plan_categories/show.json.jbuilder index 85366f247..2df946d08 100644 --- a/app/views/api/plan_categories/show.json.jbuilder +++ b/app/views/api/plan_categories/show.json.jbuilder @@ -1,3 +1,3 @@ # frozen_string_literal: true -json.extract! @category, :id, :name, :weight +json.extract! @category, :id, :name, :weight, :description diff --git a/config/locales/app.admin.en.yml b/config/locales/app.admin.en.yml index f2e58f01d..10b2f3c34 100644 --- a/config/locales/app.admin.en.yml +++ b/config/locales/app.admin.en.yml @@ -434,6 +434,35 @@ en: edit_extended_price: "Edit the extended price" confirm_changes: "Confirm changes" extended_price_successfully_updated: "The extended price was successfully updated." + plans_categories: + manage_plans_categories: "Manage plans' categories" + plan_categories_list: + categories_list: "List of the plan's categories" + no_categories: "No categories" + name: "Name" + description: "Description" + significance: "Significance" + manage_plan_category: + name: "Name" + description: "Description" + significance: "Significance" + info: "Categories will be shown ordered by signifiance. The higher you set the significance, the first the category will be shown." + create_category: + title: "New category" + cta: "Create the category" + success: "The new category was successfully created" + error: "Unable to create the category: " + update_category: + title: "Edit the category" + cta: "Validate" + success: "The category was successfully updated" + error: "Unable to update the category: " + delete_category: + title: "Delete a category" + confirm: "Are you sure you want to delete this category? If you do, the plans associated with this category won't be sorted anymore." + cta: "Delete" + success: "The category was successfully deleted" + error: "Unable to delete the category: " #ajouter un code promotionnel coupons_new: add_a_coupon: "Add a coupon" @@ -1425,35 +1454,6 @@ en: report_will_be_destroyed: "Once the report has been processed, it will be deleted. This can't be undone, continue?" report_removed: "The report has been deleted" failed_to_remove: "An error occurred, unable to delete the report" - plans_categories: - manage_plans_categories: "Manage plans' categories" - plan_categories_list: - categories_list: "List of the plan's categories" - no_categories: "No categories" - name: "Name" - significance: "Significance" - create_plan_category: - new_category: "New category" - name: "Name" - significance: "Significance" - significance_info: "Categories will be shown ordered by signifiance. The higher you set the significance, the first the category will be shown." - confirm_create: "Create the category" - category_created: "The new category was successfully created" - unable_to_create: "Unable to create the category: " - edit_plan_category: - edit_category: "Edit the category" - name: "Name" - significance: "Significance" - confirm_edition: "Validate" - category_updated: "The category was successfully updated" - unable_to_update: "Unable to update the category: " - significance_info: "Categories will be shown ordered by signifiance. The higher you set the significance, the first the category will be shown." - delete_plan_category: - delete_category: "Delete a category" - confirm_delete: "Delete" - delete_confirmation: "Are you sure you want to delete this category? If you do, the plans associated with this category won't be sorted anymore." - category_deleted: "The category was successfully deleted" - unable_to_delete: "Unable to delete the category: " local_payment: validate_cart: "Validate my cart" offline_payment: "Payment on site" diff --git a/config/locales/app.shared.en.yml b/config/locales/app.shared.en.yml index 6f647d6fc..3e5950523 100644 --- a/config/locales/app.shared.en.yml +++ b/config/locales/app.shared.en.yml @@ -23,6 +23,11 @@ en: you_will_lose_any_unsaved_modification_if_you_reload_this_page: "You will lose any unsaved modification if you reload this page" payment_card_error: "A problem has occurred with your credit card:" payment_card_declined: "Your card was declined." + #text editor + text_editor: + placeholder: "Type something…" + link_placeholder: "Paste link…" + new_tab: "Open in a new tab" #user edition form user: man: "Man" diff --git a/package.json b/package.json index a7d886b3d..e72941210 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,12 @@ "@lyracom/embedded-form-glue": "^0.3.3", "@stripe/react-stripe-js": "^1.4.0", "@stripe/stripe-js": "^1.13.2", + "@tiptap/extension-character-count": "^2.0.0-beta.24", + "@tiptap/extension-link": "^2.0.0-beta.36", + "@tiptap/extension-placeholder": "^2.0.0-beta.47", + "@tiptap/extension-underline": "^2.0.0-beta.22", + "@tiptap/react": "^2.0.0-beta.107", + "@tiptap/starter-kit": "^2.0.0-beta.180", "@types/angular": "^1.7.3", "@types/prop-types": "^15.7.2", "@types/react": "^17.0.3", @@ -117,11 +123,14 @@ "ngUpload": "0.5", "ngtemplate-loader": "^2.1.0", "nvd3": "1.8", + "phosphor-react": "^1.4.0", "process": "^0.11.10", "prop-types": "^15.7.2", "rails-erb-loader": "^5.5.2", "react": "^17.0.2", + "react-cool-onclickoutside": "^1.7.0", "react-dom": "^17.0.2", + "react-hook-form": "^7.25.3", "react-i18next": "^11.15.6", "react-modal": "^3.11.2", "react-select": "^4.3.1", diff --git a/yarn.lock b/yarn.lock index f04d61490..87bdd8fd7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1427,6 +1427,11 @@ schema-utils "^3.0.0" source-map "^0.7.3" +"@popperjs/core@^2.9.0": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9" + integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA== + "@stripe/react-stripe-js@^1.4.0": version "1.4.1" resolved "https://registry.yarnpkg.com/@stripe/react-stripe-js/-/react-stripe-js-1.4.1.tgz#884d59286fff00ba77389b32c045516f65d7a340" @@ -1439,6 +1444,210 @@ resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.15.1.tgz#a3809ecc5aa8a03bd261a2f970d11cfdcbf11c4f" integrity sha512-yJiDGutlwu25iajCy51VRJeoH3UMs+s5qVIDGfmPUuFpZ+F6AJ9g9EFrsBNvHxAGBahQFMLlBdzlCVydhGp6tg== + +"@tiptap/core@^2.0.0-beta.171": + version "2.0.0-beta.171" + resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.0.0-beta.171.tgz#e681964c443383b81d2638c51fc3bbfda034a4fb" + integrity sha512-4CdJfcchmBOFooWPBMJ7AxJISeTstMFriQv0RyReMt0Dpef/c9UoU+NkKLwwv5VRUX0M8dL5SzEhkB8wIODqlA== + dependencies: + "@types/prosemirror-commands" "^1.0.4" + "@types/prosemirror-keymap" "^1.0.4" + "@types/prosemirror-model" "^1.16.0" + "@types/prosemirror-schema-list" "^1.0.3" + "@types/prosemirror-state" "^1.2.8" + "@types/prosemirror-transform" "^1.1.5" + "@types/prosemirror-view" "^1.23.1" + prosemirror-commands "^1.2.1" + prosemirror-keymap "^1.1.5" + prosemirror-model "^1.16.1" + prosemirror-schema-list "^1.1.6" + prosemirror-state "^1.3.4" + prosemirror-transform "^1.3.3" + prosemirror-view "^1.23.6" + +"@tiptap/extension-blockquote@^2.0.0-beta.26": + version "2.0.0-beta.26" + resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.26.tgz#e5ae4b7bd9376db37407a23e22080c7b11287f3b" + integrity sha512-A6yjcYovONJfOjQFk6vDYXswaCdCtCwjL7w9VTB0R2DLTuJvvRt9DWN0IDcMrj5G+aMgDq4GUUTitv+2Y8krDg== + +"@tiptap/extension-bold@^2.0.0-beta.25": + version "2.0.0-beta.25" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.25.tgz#ec19e7c862d25bae49609c5d6a873f372c506dee" + integrity sha512-ZNdgFYDxKo8lAp0Pqzu45I0JH3ah8/X5TCYg9zNg3QwLUFT16g2LlWDMUDGT5pH9aXxgtFaEdoVacu0EyhlPnQ== + +"@tiptap/extension-bubble-menu@^2.0.0-beta.55": + version "2.0.0-beta.55" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.0.0-beta.55.tgz#a26ad892cea6af9eeada22235701b06d0921af48" + integrity sha512-v32/QnwwRbepdbrho8mTYru1/XNW/rJi3Mjrgo3rrIs67R86aEPmhmdzD3QEQUJhAJkduuwdw8zElmVWqIJQ9w== + dependencies: + prosemirror-state "^1.3.4" + prosemirror-view "^1.23.6" + tippy.js "^6.3.7" + +"@tiptap/extension-bullet-list@^2.0.0-beta.26": + version "2.0.0-beta.26" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.0.0-beta.26.tgz#b42126d2d984c04041b14037e8d3ec1bcf16e7ec" + integrity sha512-1n5HV8gY1tLjPk4x48nva6SZlFHoPlRfF6pqSu9JcJxPO7FUSPxUokuz4swYNe0LRrtykfyNz44dUcxKVhoFow== + +"@tiptap/extension-character-count@^2.0.0-beta.24": + version "2.0.0-beta.24" + resolved "https://registry.yarnpkg.com/@tiptap/extension-character-count/-/extension-character-count-2.0.0-beta.24.tgz#8b5dba59be75343b0d660c59656acbb0a0eb4c4b" + integrity sha512-zMe+iNmHypvGQop5yV6xLetXvgEx7oMXJUvX+WwvtjZwx+/jJKLOzsR5EVt0vY/T5P5VCC8hkTseQhgrv4p72w== + +"@tiptap/extension-code-block@^2.0.0-beta.37": + version "2.0.0-beta.37" + resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.37.tgz#c07c007248a21d9e0434458fd05c363b7078227f" + integrity sha512-mJAM+PHaNoKRYwM3D36lZ51/aoPxxvZNQn3UBnZ6G7l0ZJSgB3JvBEzqK6S8nNFeYIIxGwv4QF6vXe4MG9ie2g== + dependencies: + prosemirror-state "^1.3.4" + +"@tiptap/extension-code@^2.0.0-beta.26": + version "2.0.0-beta.26" + resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.0.0-beta.26.tgz#bbfa600a252ee2cded6947b56b6c4c33d998e53a" + integrity sha512-QcFWdEFfbJ1n5UFFBD17QPPAJ3J5p/b7XV484u0shCzywO7aNPV32QeHy1z0eMoyZtCbOWf6hg/a7Ugv8IwpHw== + +"@tiptap/extension-document@^2.0.0-beta.15": + version "2.0.0-beta.15" + resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.0.0-beta.15.tgz#5d17a0289244a913ab2ef08e8495a1e46950711e" + integrity sha512-ypENC+xUYD5m2t+KOKNYqyXnanXd5fxyIyhR1qeEEwwQwMXGNrO3kCH6O4mIDCpy+/WqHvVay2tV5dVsXnvY8w== + +"@tiptap/extension-dropcursor@^2.0.0-beta.25": + version "2.0.0-beta.25" + resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.25.tgz#962f290a200259533a26194daca5a4b4a53e72d3" + integrity sha512-GYf5s6dkZtsDy+TEkrQK6kLbfbitG4qnk02D+FlhlJMI/Nnx8rYCRJbwEHDdqrfX7XwZzULMqqqHvzxZYrEeNg== + dependencies: + "@types/prosemirror-dropcursor" "^1.0.3" + prosemirror-dropcursor "^1.4.0" + +"@tiptap/extension-floating-menu@^2.0.0-beta.50": + version "2.0.0-beta.50" + resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.0.0-beta.50.tgz#e8785d5f051a848ae053ce139581dce96b951a35" + integrity sha512-aQu1HtthMIYEPylr6kzioLxMiObLbcgwx9xZzF03KwNnkjQLbjZOeJX2RwSYVpiVgtfPBGOm3N/br6NSYec4yQ== + dependencies: + prosemirror-state "^1.3.4" + prosemirror-view "^1.23.6" + tippy.js "^6.3.7" + +"@tiptap/extension-gapcursor@^2.0.0-beta.34": + version "2.0.0-beta.34" + resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.34.tgz#0e4971affb1621934422dd5fc4bf2dd7a84f70f7" + integrity sha512-Vm8vMWWQ2kJcUOLfB5CEo5pYgyudI7JeeiZvX9ScPmUmgKVYhEpt3EAICY9pUYJ41aAVH35gZLXkUtsz2f9GHw== + dependencies: + "@types/prosemirror-gapcursor" "^1.0.4" + prosemirror-gapcursor "^1.2.1" + +"@tiptap/extension-hard-break@^2.0.0-beta.30": + version "2.0.0-beta.30" + resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.30.tgz#165494f1194a7bad08907e6d64d349dd15851b72" + integrity sha512-X9xj/S+CikrbIE7ccUFVwit5QHEbflnKVxod+4zPwr1cxogFbE9AyLZE2MpYdx3z9LcnTYYi9leBqFrP4T/Olw== + +"@tiptap/extension-heading@^2.0.0-beta.26": + version "2.0.0-beta.26" + resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.26.tgz#112b14b4d488772bda36abbf7cb2bc8aba7c42f5" + integrity sha512-nR6W/3rjnZH1Swo7tGBoYsmO6xMvu9MGq6jlm3WVHCB7B3CsrRvCkTwGjVIbKTaZC4bQfx5gvAUpQFvwuU+M5w== + +"@tiptap/extension-history@^2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.0.0-beta.21.tgz#5d96a17a83a7130744f0757a3275dd5b11eb1bf7" + integrity sha512-0v8Cl30V4dsabdpspLdk+f+lMoIvLFlJN5WRxtc7RRZ5gfJVxPHwooIKdvC51brfh/oJtWFCNMRjhoz0fRaF9A== + dependencies: + "@types/prosemirror-history" "^1.0.3" + prosemirror-history "^1.2.0" + +"@tiptap/extension-horizontal-rule@^2.0.0-beta.31": + version "2.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.31.tgz#efb383a6cedbbf4f2175d7d207eaeeba626faab0" + integrity sha512-MNc4retfjRgkv3qxqGya0+/BEd1Kmn+oMsCRvE+8x3sXyKIse+vdqMuG5qUcA6np0ZD/9hh1riiQ1GQdgc23Ng== + dependencies: + prosemirror-state "^1.3.4" + +"@tiptap/extension-italic@^2.0.0-beta.25": + version "2.0.0-beta.25" + resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.25.tgz#c2ec95cc5baf855134883c5e261da4ab0d3b9479" + integrity sha512-7PvhioTX9baVp5+AmmZU0qna+dFPZCRlSEN/GciH57N77d2uhJ/ZW5iQWTbvy5HBNddQB4Jts1UDIaC7WASrGA== + +"@tiptap/extension-link@^2.0.0-beta.36": + version "2.0.0-beta.36" + resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.0.0-beta.36.tgz#184bac20f3226b8945e400ebfdce2feabb4f5a3c" + integrity sha512-jV0EBM/QPfR4e5FG5OPHZARnYS+CL8yhCzHO4J1Nb1i/+vRY9QpPVBruZABBwt+J+PMdq6t/6vvIXejCR3wyAg== + dependencies: + linkifyjs "^3.0.5" + prosemirror-model "^1.16.1" + prosemirror-state "^1.3.4" + +"@tiptap/extension-list-item@^2.0.0-beta.20": + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.0.0-beta.20.tgz#7169528b226dee4590e013bdf6e5fc6d83729b0f" + integrity sha512-5IPEspJt38t9ROj4xLUesOVEYlTT/R9Skd9meHRxJQZX1qrzBICs5PC/WRIsnexrvTBhdxpYgCYjpvpsJBlKuQ== + +"@tiptap/extension-ordered-list@^2.0.0-beta.27": + version "2.0.0-beta.27" + resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.27.tgz#ed48a53a9b012d578613b68375db31e8664bfdc9" + integrity sha512-apFDeignxdZb3cA3p1HJu0zw1JgJdBYUBz1r7f99qdNybYuk3I/1MPUvlOuOgvIrBB/wydoyVDP+v9F7QN3tfQ== + +"@tiptap/extension-paragraph@^2.0.0-beta.23": + version "2.0.0-beta.23" + resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.23.tgz#2ab77308519494994d7a9e5a4acd14042f45f28c" + integrity sha512-VWAxyzecErYWk97Kv/Gkghh97zAQTcaVOisEnYYArZAlyYDaYM48qVssAC/vnRRynP2eQxb1EkppbAxE+bMHAA== + +"@tiptap/extension-placeholder@^2.0.0-beta.47": + version "2.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.0.0-beta.47.tgz#6dba9cc3bc82a97e4082345d5b8a69e53cbd67b7" + integrity sha512-+XCRwI022Gkay5STr4uQDCcXNq9RDq4adILoTN37rEA8RB5DSRi1eTOCwkQN9+rK7U46/BZECrUwC5NBi551eQ== + dependencies: + prosemirror-model "^1.16.1" + prosemirror-state "^1.3.4" + prosemirror-view "^1.23.6" + +"@tiptap/extension-strike@^2.0.0-beta.27": + version "2.0.0-beta.27" + resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.27.tgz#c5187bf3c28837f95a5c0c0617d0dd31c318353d" + integrity sha512-2dmCgtesuDdivM/54Q+Y6Tc3JbGz1SkHP6c62piuqBiYLWg3xa16zChZOhfN8szbbQlBgLT6XRTDt3c2Ux+Dug== + +"@tiptap/extension-text@^2.0.0-beta.15": + version "2.0.0-beta.15" + resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.0.0-beta.15.tgz#f08cff1b78f1c6996464dfba1fef8ec1e107617f" + integrity sha512-S3j2+HyV2gsXZP8Wg/HA+YVXQsZ3nrXgBM9HmGAxB0ESOO50l7LWfip0f3qcw1oRlh5H3iLPkA6/f7clD2/TFA== + +"@tiptap/extension-underline@^2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-2.0.0-beta.22.tgz#e6b83be0c0944183b47aa30d53f2ab5cd7defe23" + integrity sha512-c+tOv4CRBG2pgtAACEsDwvbmM8C89M/CeelTcLLu8zrk+PRy7yj8DKLUtcb9Ybsa7f1Suk6iqyj3dkfxuuvDLw== + +"@tiptap/react@^2.0.0-beta.107": + version "2.0.0-beta.107" + resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.0.0-beta.107.tgz#82e02bd83e9d3d37e31197f915968213124330c4" + integrity sha512-4G14F32TxEuYNYyOOQQxJ3ddFooPOv9Opcw5mjKxgKFZLzlBMTBl7os9ndrMfVdWYTI3RpZlfiAQxq3QlHamxA== + dependencies: + "@tiptap/extension-bubble-menu" "^2.0.0-beta.55" + "@tiptap/extension-floating-menu" "^2.0.0-beta.50" + prosemirror-view "^1.23.6" + +"@tiptap/starter-kit@^2.0.0-beta.180": + version "2.0.0-beta.180" + resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.180.tgz#bea8101fdc25de88eb2fb76d29a3d16f4e94028e" + integrity sha512-dX+RxfAZa5MyY/XPr8iW+VTX/Qy3MIhCWApw15zHfLOdO80inl3to9JG5XS9oSMI2/SqsRe9XKz47Lj8srhw7A== + dependencies: + "@tiptap/core" "^2.0.0-beta.171" + "@tiptap/extension-blockquote" "^2.0.0-beta.26" + "@tiptap/extension-bold" "^2.0.0-beta.25" + "@tiptap/extension-bullet-list" "^2.0.0-beta.26" + "@tiptap/extension-code" "^2.0.0-beta.26" + "@tiptap/extension-code-block" "^2.0.0-beta.37" + "@tiptap/extension-document" "^2.0.0-beta.15" + "@tiptap/extension-dropcursor" "^2.0.0-beta.25" + "@tiptap/extension-gapcursor" "^2.0.0-beta.34" + "@tiptap/extension-hard-break" "^2.0.0-beta.30" + "@tiptap/extension-heading" "^2.0.0-beta.26" + "@tiptap/extension-history" "^2.0.0-beta.21" + "@tiptap/extension-horizontal-rule" "^2.0.0-beta.31" + "@tiptap/extension-italic" "^2.0.0-beta.25" + "@tiptap/extension-list-item" "^2.0.0-beta.20" + "@tiptap/extension-ordered-list" "^2.0.0-beta.27" + "@tiptap/extension-paragraph" "^2.0.0-beta.23" + "@tiptap/extension-strike" "^2.0.0-beta.27" + "@tiptap/extension-text" "^2.0.0-beta.15" + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" @@ -1576,6 +1785,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.4.tgz#e1cf817d70a1e118e81922c4ff6683ce9d422e26" integrity sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA== +"@types/orderedmap@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/orderedmap/-/orderedmap-1.0.0.tgz#807455a192bba52cbbb4517044bc82bdbfa8c596" + integrity sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -1591,6 +1805,94 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== +"@types/prosemirror-commands@*", "@types/prosemirror-commands@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@types/prosemirror-commands/-/prosemirror-commands-1.0.4.tgz#d08551415127d93ae62e7239d30db0b5e7208e22" + integrity sha512-utDNYB3EXLjAfYIcRWJe6pn3kcQ5kG4RijbT/0Y/TFOm6yhvYS/D9eJVnijdg9LDjykapcezchxGRqFD5LcyaQ== + dependencies: + "@types/prosemirror-model" "*" + "@types/prosemirror-state" "*" + "@types/prosemirror-view" "*" + +"@types/prosemirror-dropcursor@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/prosemirror-dropcursor/-/prosemirror-dropcursor-1.0.3.tgz#49250849b8a0b86e8c29eb1ba70a463e53e46947" + integrity sha512-b0/8njnJ4lwyHKcGuCMf3x7r1KjxyugB1R/c2iMCjplsJHSC7UY9+OysqgJR5uUXRekUSGniiLgBtac/lvH6wg== + dependencies: + "@types/prosemirror-state" "*" + +"@types/prosemirror-gapcursor@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@types/prosemirror-gapcursor/-/prosemirror-gapcursor-1.0.4.tgz#7df7d373edb33ea8da12084bfd462cf84cd69761" + integrity sha512-9xKjFIG5947dzerFvkLWp6F53JwrUYoYwh3SgcTFEp8SbSfNNrez/PFYVZKPnoqPoaK5WtTdQTaMwpCV9rXQIg== + dependencies: + "@types/prosemirror-model" "*" + "@types/prosemirror-state" "*" + +"@types/prosemirror-history@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/prosemirror-history/-/prosemirror-history-1.0.3.tgz#f1110efbe758129b5475e466ff077f0a8d9b964f" + integrity sha512-5TloMDRavgLjOAKXp1Li8u0xcsspzbT1Cm9F2pwHOkgvQOz1jWQb2VIXO7RVNsFjLBZdIXlyfSLivro3DuMWXg== + dependencies: + "@types/prosemirror-model" "*" + "@types/prosemirror-state" "*" + +"@types/prosemirror-keymap@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@types/prosemirror-keymap/-/prosemirror-keymap-1.0.4.tgz#f73c79810e8d0e0a20d153d84f998f02e5afbc0c" + integrity sha512-ycevwkqUh+jEQtPwqO7sWGcm+Sybmhu8MpBsM8DlO3+YTKnXbKA6SDz/+q14q1wK3UA8lHJyfR+v+GPxfUSemg== + dependencies: + "@types/prosemirror-commands" "*" + "@types/prosemirror-model" "*" + "@types/prosemirror-state" "*" + "@types/prosemirror-view" "*" + +"@types/prosemirror-model@*", "@types/prosemirror-model@^1.16.0": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@types/prosemirror-model/-/prosemirror-model-1.16.0.tgz#8b22c7431a4c93f7f550fc89c4b0e2d44d42c8b6" + integrity sha512-nv93YLyTEcDDl17OB90EldxZjyJQJll2WSMLDvLzTewbpvE/vtMjHT3j4mik3uSzQ6YD486AcloCO3WODY/lDg== + dependencies: + "@types/orderedmap" "*" + +"@types/prosemirror-schema-list@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/prosemirror-schema-list/-/prosemirror-schema-list-1.0.3.tgz#bdf1893a7915fbdc5c49b3cac9368e96213d70de" + integrity sha512-uWybOf+M2Ea7rlbs0yLsS4YJYNGXYtn4N+w8HCw3Vvfl6wBAROzlMt0gV/D/VW/7J/LlAjwMezuGe8xi24HzXA== + dependencies: + "@types/orderedmap" "*" + "@types/prosemirror-model" "*" + "@types/prosemirror-state" "*" + +"@types/prosemirror-state@*", "@types/prosemirror-state@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@types/prosemirror-state/-/prosemirror-state-1.2.8.tgz#65080eeec52f63c50bf7034377f07773b4f6b2ac" + integrity sha512-mq9uyQWcpu8jeamO6Callrdvf/e1H/aRLR2kZWSpZrPHctEsxWHBbluD/wqVjXBRIOoMHLf6ZvOkrkmGLoCHVA== + dependencies: + "@types/prosemirror-model" "*" + "@types/prosemirror-transform" "*" + "@types/prosemirror-view" "*" + +"@types/prosemirror-transform@*", "@types/prosemirror-transform@^1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@types/prosemirror-transform/-/prosemirror-transform-1.1.5.tgz#e6949398c64a5d3ca53e6081352751aa9e9ce76e" + integrity sha512-Wr2HXaEF4JPklWpC17RTxE6PxyU54Taqk5FMhK1ojgcN93J+GpkYW8s0mD3rl7KfTmlhVwZPCHE9o0cYf2Go5A== + dependencies: + "@types/prosemirror-model" "*" + +"@types/prosemirror-view@*", "@types/prosemirror-view@^1.23.1": + version "1.23.1" + resolved "https://registry.yarnpkg.com/@types/prosemirror-view/-/prosemirror-view-1.23.1.tgz#a9a926bb6b6e6873e3a9d8caa61c32f3402629eb" + integrity sha512-6e1B2oKUnhmZPUrsVvYjDqeVjE6jGezygjtoHsAK4ZENAxHzHqy5NT4jUvdPTWjCYeH0t2Y7pSfRPNrPIyQX4A== + dependencies: + "@types/prosemirror-model" "*" + "@types/prosemirror-state" "*" + "@types/prosemirror-transform" "*" + +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + "@types/qs@*": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -4519,6 +4821,11 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +linkifyjs@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-3.0.5.tgz#99e51a3a0c0e232fcb63ebb89eea3ff923378f34" + integrity sha512-1Y9XQH65eQKA9p2xtk+zxvnTeQBG7rdAXSkUG97DmuI/Xhji9uaUzaWxRj6rf9YC0v8KKHkxav7tnLX82Sz5Fg== + loader-runner@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" @@ -5081,6 +5388,11 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +orderedmap@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/orderedmap/-/orderedmap-1.1.1.tgz#c618e77611b3b21d0fe3edc92586265e0059c789" + integrity sha512-3Ux8um0zXbVacKUkcytc0u3HgC0b0bBLT+I60r2J/En72cI0nZffqrA7Xtf2Hqs27j1g82llR5Mhbd0Z1XW4AQ== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -5231,7 +5543,12 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1: +phosphor-react@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/phosphor-react/-/phosphor-react-1.4.0.tgz#6c3d5f9d3433c3c2456b902891d24ec677f89dc3" + integrity sha512-K2/ZtkigHV/li5qfYPqY5fA7MLkWM52tW9ghBCyJc7JS5ykI/WD61JC8kFWaZ6yqlEHXPUJLHr+p+5uGsBnHmQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -5545,6 +5862,90 @@ prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +prosemirror-commands@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.2.1.tgz#eae0cb714df695260659b78ff5d201d3a037e50d" + integrity sha512-S/IkpXfpuLFsRynC2HQ5iYROUPiZskKS1+ClcWycGJvj4HMb/mVfeEkQrixYxgTl96EAh+RZQNWPC06GZXk5tQ== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.0.0" + +prosemirror-dropcursor@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.4.0.tgz#91a859d4ee79c99b1c0ba6ee61c093b195c0d9f0" + integrity sha512-6+YwTjmqDwlA/Dm+5wK67ezgqgjA/MhSDgaNxKUzH97SmeuWFXyLeDRxxOPZeSo7yTxcDGUCWTEjmQZsVBuMrQ== + dependencies: + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + prosemirror-view "^1.1.0" + +prosemirror-gapcursor@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.2.1.tgz#02365e1bcc1ad25d390b0fb7f0e94a7fc173ad75" + integrity sha512-PHa9lj27iM/g4C46gxVzsefuXVfy/LrGQH4QjMRht7VDBgw77iWYWn8ZHMWSFkwtr9jQEuxI5gccHHHwWG80nw== + dependencies: + prosemirror-keymap "^1.0.0" + prosemirror-model "^1.0.0" + prosemirror-state "^1.0.0" + prosemirror-view "^1.0.0" + +prosemirror-history@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.2.0.tgz#04cc4df8d2f7b2a46651a2780de191ada6d465ea" + integrity sha512-B9v9xtf4fYbKxQwIr+3wtTDNLDZcmMMmGiI3TAPShnUzvo+Rmv1GiUrsQChY1meetHl7rhML2cppF3FTs7f7UQ== + dependencies: + prosemirror-state "^1.2.2" + prosemirror-transform "^1.0.0" + rope-sequence "^1.3.0" + +prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.1.5.tgz#b5984c7d30f5c75956c853126c54e9e624c0327b" + integrity sha512-8SZgPH3K+GLsHL2wKuwBD9rxhsbnVBTwpHCO4VUO5GmqUQlxd/2GtBVWTsyLq4Dp3N9nGgPd3+lZFKUDuVp+Vw== + dependencies: + prosemirror-state "^1.0.0" + w3c-keyname "^2.2.0" + +prosemirror-model@^1.0.0, prosemirror-model@^1.16.0, prosemirror-model@^1.16.1: + version "1.16.1" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.16.1.tgz#fb388270bc9609b66298d6a7e15d0cc1d6c61253" + integrity sha512-r1/w0HDU40TtkXp0DyKBnFPYwd8FSlUSJmGCGFv4DeynfeSlyQF2FD0RQbVEMOe6P3PpUSXM6LZBV7W/YNZ4mA== + dependencies: + orderedmap "^1.1.0" + +prosemirror-schema-list@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-1.1.6.tgz#c3e13fe2f74750e4a53ff88d798dc0c4ccca6707" + integrity sha512-aFGEdaCWmJzouZ8DwedmvSsL50JpRkqhQ6tcpThwJONVVmCgI36LJHtoQ4VGZbusMavaBhXXr33zyD2IVsTlkw== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-transform "^1.0.0" + +prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.3.4.tgz#4c6b52628216e753fc901c6d2bfd84ce109e8952" + integrity sha512-Xkkrpd1y/TQ6HKzN3agsQIGRcLckUMA9u3j207L04mt8ToRgpGeyhbVv0HI7omDORIBHjR29b7AwlATFFf2GLA== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-transform "^1.0.0" + +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.3.3.tgz#5f6712b0577a119cc418686fe7588b6dd9b7464d" + integrity sha512-9NLVXy1Sfa2G6qPqhWMkEvwQQMTw7OyTqOZbJaGQWsCeH3hH5Cw+c5eNaLM1Uu75EyKLsEZhJ93XpHJBa6RX8A== + dependencies: + prosemirror-model "^1.0.0" + +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.23.6: + version "1.23.6" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.23.6.tgz#f514b3166942cb70aac4ac24d0a28c21c3897608" + integrity sha512-B4DAzriNpI/AVoW0Lu6SVfX00jZZQxOVwdBQEjWlRbCdT9V0pvk4GQJ3JTFaib+b6BcPdRZ3MjWXz2xvV1rblA== + dependencies: + prosemirror-model "^1.16.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + proxy-addr@~2.0.5: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -5598,6 +5999,11 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +react-cool-onclickoutside@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/react-cool-onclickoutside/-/react-cool-onclickoutside-1.7.0.tgz#abc844e14852220fe15f81d7ef44976d15cd9980" + integrity sha512-HVZK2155Unee+enpoHKyYP2UdQK69thw90XAOUCjvJBcgRSgfRPgWWt/W1dYzoGp3+nleAa8SJxF1d4FMA4Qmw== + react-dom@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" @@ -5607,6 +6013,11 @@ react-dom@^17.0.2: object-assign "^4.1.1" scheduler "^0.20.2" +react-hook-form@^7.25.3: + version "7.25.3" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.25.3.tgz#1475fd52398e905e1f6d88835f96aaa1144635c3" + integrity sha512-jL4SByMaC8U3Vhu9s7CwgJBP4M6I3Kpwxib9LrCwWSRPnXDrNQL4uihSTqLLoDICqSUhwwvian9uVYfv+ITtGg== + react-i18next@^11.15.6: version "11.15.6" resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.15.6.tgz#693430fbee5ac7d0774bd88683575d62adb24afb" @@ -5927,6 +6338,11 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +rope-sequence@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.2.tgz#a19e02d72991ca71feb6b5f8a91154e48e3c098b" + integrity sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6414,6 +6830,13 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= +tippy.js@^6.3.7: + version "6.3.7" + resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c" + integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ== + dependencies: + "@popperjs/core" "^2.9.0" + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -6618,6 +7041,11 @@ void-elements@3.1.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk= +w3c-keyname@^2.2.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.4.tgz#4ade6916f6290224cdbd1db8ac49eab03d0eef6b" + integrity sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw== + warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" From 431836c21becfe0755bad4b47ed43133e1f76c3b Mon Sep 17 00:00:00 2001 From: vincent Date: Fri, 4 Feb 2022 15:09:38 +0100 Subject: [PATCH 016/274] Add style variables --- app/frontend/src/stylesheets/application.scss | 1 + .../src/stylesheets/bootstrap_and_overrides.scss | 3 ++- .../modules/base/fab-text-editor.scss | 16 +++++++--------- .../src/stylesheets/modules/base/rhf-input.scss | 8 ++++++-- .../src/stylesheets/variables/decoration.scss | 4 ++++ 5 files changed, 20 insertions(+), 12 deletions(-) create mode 100644 app/frontend/src/stylesheets/variables/decoration.scss diff --git a/app/frontend/src/stylesheets/application.scss b/app/frontend/src/stylesheets/application.scss index 132d0b81e..37ba6b614 100644 --- a/app/frontend/src/stylesheets/application.scss +++ b/app/frontend/src/stylesheets/application.scss @@ -1,5 +1,6 @@ @import "variables/colors"; @import "variables/typography"; +@import "variables/decoration"; @import "app.functions"; @import "bootstrap_and_overrides"; diff --git a/app/frontend/src/stylesheets/bootstrap_and_overrides.scss b/app/frontend/src/stylesheets/bootstrap_and_overrides.scss index 6784a7b1a..ea2c8cae9 100644 --- a/app/frontend/src/stylesheets/bootstrap_and_overrides.scss +++ b/app/frontend/src/stylesheets/bootstrap_and_overrides.scss @@ -95,7 +95,8 @@ $link-hover-decoration: underline; // Semibold = 600, Bold = 700, ExtraB = 800 -$font-family-sans-serif: "proxima-nova", "Open Sans", Helvetica, Arial, sans-serif !default; +//$font-family-sans-serif: "proxima-nova", "Open Sans", Helvetica, Arial, sans-serif !default; +$font-family-sans-serif: var(--font-text) !default; $font-proxima-condensed: "proxima-nova-condensed", "Open Sans Condensed", Helvetica, Arial, sans-serif !default; $font-family-serif: Georgia, "Times New Roman", Times, serif !default; $font-felt: "felt-tip-roman", "Loved by the King", cursive, sans-serif; diff --git a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss index dc2068a69..cdcbaa7d0 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss @@ -4,10 +4,10 @@ padding-bottom: 1.6rem; background-color: var(--gray-soft-lightest); border: 1px solid var(--gray-soft-dark); - // TODO: border radius from variable - border-radius: 8px; + border-radius: var(--border-radius); &-label { + @include text-sm; display: block; margin-bottom: 0.8rem; } @@ -71,9 +71,8 @@ padding: 1.2rem; background-color: var(--gray-soft-lightest); border: 1px solid var(--gray-soft-darkest); - border-radius: 8px; - // TODO: shadow from variable - box-shadow: 0 0 10px rgba(39, 32, 32, 0.25); + border-radius: var(--border-radius); + box-shadow: var(--shadow); opacity: 0; pointer-events: none; transition: opacity 0.25s ease-out; @@ -95,7 +94,7 @@ padding: 0.4rem 0.8rem; background-color: var(--gray-soft-light); border: 1px solid var(--secondary); - border-radius: 8px; + border-radius: var(--border-radius); font-size: var(--text-base); text-overflow: ellipsis; white-space: nowrap; @@ -157,9 +156,8 @@ color: var(--main-dark); background-color: var(--main-lightest); border: 1px solid var(--main-light); - border-radius: 8px; - // TODO: shadow from variable - box-shadow: 0 0 10px rgba(39, 32, 32, 0.25); + border-radius: var(--border-radius); + box-shadow: var(--shadow); svg { flex-shrink: 0; diff --git a/app/frontend/src/stylesheets/modules/base/rhf-input.scss b/app/frontend/src/stylesheets/modules/base/rhf-input.scss index 8d9a19a2a..3efe1ab21 100644 --- a/app/frontend/src/stylesheets/modules/base/rhf-input.scss +++ b/app/frontend/src/stylesheets/modules/base/rhf-input.scss @@ -8,7 +8,10 @@ justify-content: space-between; align-items: flex-start; margin-bottom: 0.8rem; - p { margin: 0; } + p { + @include text-sm; + margin: 0; + } } &.is-required &-header p::after { content: "*"; @@ -22,7 +25,7 @@ grid-template-areas: "icon input addon"; grid-template-columns: min-content 1fr min-content; border: 1px solid var(--gray-soft-dark); - border-radius: 4px; + border-radius: var(--border-radius); overflow: hidden; transition: border-color ease-in-out 0.15s; @@ -42,6 +45,7 @@ input { grid-area: input; border: none; + border-radius: var(--border-radius); box-shadow: inset 0 1px 1px rgba(0, 0, 0, .08); padding: 0 0.8rem; color: var(--gray-hard-darkest); diff --git a/app/frontend/src/stylesheets/variables/decoration.scss b/app/frontend/src/stylesheets/variables/decoration.scss new file mode 100644 index 000000000..29a009f81 --- /dev/null +++ b/app/frontend/src/stylesheets/variables/decoration.scss @@ -0,0 +1,4 @@ +:root { + --border-radius: 8px; + --shadow: 0 0 10px rgba(39, 32, 32, 0.25); +} \ No newline at end of file From e24246b9b45be51202f215fc71f47570cef7aeae Mon Sep 17 00:00:00 2001 From: vincent Date: Mon, 7 Feb 2022 17:27:51 +0100 Subject: [PATCH 017/274] Update Node --- .nvmrc | 2 +- CHANGELOG.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 9cd25a1fe..23d9c36a1 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -12.18.3 +16.13.2 diff --git a/CHANGELOG.md b/CHANGELOG.md index 7dd90caa9..b54f2933f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,9 @@ # Changelog Fab-manager +- Updated Node to 16.13.2 - Updated eslint to v8 and eslint related packages to their latest versions - Webpack overlay will now report eslint issues +- Linted all code according to eslint rules ## v5.3.7 2022 March 28 From 13732d7de1b6142dc730ac04e2fa6607e3e8a7a1 Mon Sep 17 00:00:00 2001 From: vincent Date: Tue, 8 Feb 2022 09:48:57 +0100 Subject: [PATCH 018/274] Delete unused components --- .../plan-categories/create-plan-category.tsx | 122 ------------------ .../plan-categories/edit-plan-category.tsx | 104 --------------- 2 files changed, 226 deletions(-) delete mode 100644 app/frontend/src/javascript/components/plan-categories/create-plan-category.tsx delete mode 100644 app/frontend/src/javascript/components/plan-categories/edit-plan-category.tsx diff --git a/app/frontend/src/javascript/components/plan-categories/create-plan-category.tsx b/app/frontend/src/javascript/components/plan-categories/create-plan-category.tsx deleted file mode 100644 index fda2db9da..000000000 --- a/app/frontend/src/javascript/components/plan-categories/create-plan-category.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import React, { BaseSyntheticEvent, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import PlanCategoryAPI from '../../api/plan-category'; -import { PlanCategory } from '../../models/plan-category'; -import { FabButton } from '../base/fab-button'; -import { FabModal } from '../base/fab-modal'; -import { LabelledInput } from '../base/labelled-input'; -import { Loader } from '../base/loader'; -import { FabAlert } from '../base/fab-alert'; - -interface CreatePlanCategoryProps { - onSuccess: (message: string) => void, - onError: (message: string) => void, -} - -/** - * This component shows a button. - * When clicked, we show a modal dialog allowing to fill the parameters with a new plan-category. - */ -const CreatePlanCategoryComponent: React.FC = ({ onSuccess, onError }) => { - const { t } = useTranslation('admin'); - - const [category, setCategory] = useState(null); - // is the creation modal open? - const [isOpen, setIsOpen] = useState(false); - - /** - * Opens/closes the new plan-category (creation) modal - */ - const toggleModal = (): void => { - setIsOpen(!isOpen); - }; - - /** - * The creation has been confirmed by the user. - * Push the new plan-category to the API. - */ - const onCreateConfirmed = (): void => { - PlanCategoryAPI.create(category).then(() => { - onSuccess(t('app.admin.create_plan_category.category_created')); - resetCategory(); - toggleModal(); - }).catch((error) => { - onError(t('app.admin.create_plan_category.unable_to_create') + error); - }); - }; - - /** - * Callback triggered when the user is changing the name of the category in the modal dialog. - * We update the name of the temporary-set plan-category, accordingly. - */ - const onCategoryNameChange = (event: BaseSyntheticEvent) => { - setCategory({ ...category, name: event.target.value }); - }; - - /** - * Callback triggered when the user is changing the weight of the category in the modal dialog. - * We update the weight of the temporary-set plan-category, accordingly. - */ - const onCategoryWeightChange = (event: BaseSyntheticEvent) => { - setCategory({ ...category, weight: event.target.value }); - }; - - /** - * Initialize a new plan-category for creation - */ - const initCategoryCreation = () => { - setCategory({ name: '', weight: 0 }); - }; - - /** - * Reinitialize the category to prevent ghost data - */ - const resetCategory = () => { - setCategory(null); - }; - - return ( -
- } - className="add-category" - onClick={toggleModal}> - {t('app.admin.create_plan_category.new_category')} - - - {category &&
- - } - type="text" - value={category.name} - onChange={onCategoryNameChange} /> - - } - value={category.weight} - onChange={onCategoryWeightChange} /> -
} - - {t('app.admin.create_plan_category.significance_info')} - -
-
- ); -}; - -export const CreatePlanCategory: React.FC = ({ onSuccess, onError }) => { - return ( - - - - ); -}; diff --git a/app/frontend/src/javascript/components/plan-categories/edit-plan-category.tsx b/app/frontend/src/javascript/components/plan-categories/edit-plan-category.tsx deleted file mode 100644 index 1d351627d..000000000 --- a/app/frontend/src/javascript/components/plan-categories/edit-plan-category.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import React, { BaseSyntheticEvent, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import PlanCategoryAPI from '../../api/plan-category'; -import { PlanCategory } from '../../models/plan-category'; -import { FabButton } from '../base/fab-button'; -import { FabModal } from '../base/fab-modal'; -import { LabelledInput } from '../base/labelled-input'; -import { Loader } from '../base/loader'; -import { FabAlert } from '../base/fab-alert'; - -interface EditPlanCategoryProps { - onSuccess: (message: string) => void, - onError: (message: string) => void, - category: PlanCategory -} - -/** - * This component shows an edit button. - * When clicked, we show a modal dialog allowing to edit the parameters of the provided plan-category. - */ -const EditPlanCategoryComponent: React.FC = ({ onSuccess, onError, category }) => { - const { t } = useTranslation('admin'); - - // is the edition modal open? - const [editionModal, setEditionModal] = useState(false); - // when editing, we store the category here, until the edition is over - const [tempCategory, setTempCategory] = useState(category); - - /** - * Opens/closes the edition modal - */ - const toggleEditionModal = (): void => { - setEditionModal(!editionModal); - }; - - /** - * The edit has been confirmed by the user. - * Call the API to trigger the update of the temporary set plan-category. - */ - const onEditConfirmed = (): void => { - PlanCategoryAPI.update(tempCategory).then((updatedCategory) => { - onSuccess(t('app.admin.edit_plan_category.category_updated')); - setTempCategory(updatedCategory); - toggleEditionModal(); - }).catch((error) => { - onError(t('app.admin.edit_plan_category.unable_to_update') + error); - }); - }; - - /** - * Callback triggered when the user is changing the name of the category in the modal dialog. - * We update the name of the temporary-set plan-category, accordingly. - */ - const onCategoryNameChange = (event: BaseSyntheticEvent) => { - setTempCategory({ ...tempCategory, name: event.target.value }); - }; - - /** - * Callback triggered when the user is changing the weight of the category in the modal dialog. - * We update the weight of the temporary-set plan-category, accordingly. - */ - const onCategoryWeightChange = (event: BaseSyntheticEvent) => { - setTempCategory({ ...tempCategory, weight: event.target.value }); - }; - - return ( -
- } onClick={toggleEditionModal} /> - - {tempCategory &&
- - } - value={tempCategory.name} - onChange={onCategoryNameChange} /> - - } - value={tempCategory.weight} - onChange={onCategoryWeightChange} /> -
} - - {t('app.admin.edit_plan_category.significance_info')} - -
-
- ); -}; - -export const EditPlanCategory: React.FC = ({ onSuccess, onError, category }) => { - return ( - - - - ); -}; From 2916c5b9d8c34d165276921ff3ed506423abef8a Mon Sep 17 00:00:00 2001 From: vincent Date: Thu, 10 Feb 2022 15:01:33 +0100 Subject: [PATCH 019/274] Test video embed on the text editor --- .../base/text-editor/fab-text-editor.tsx | 4 +- .../components/base/text-editor/iframe.tsx | 76 +++++++++++++++++++ .../components/base/text-editor/menu-bar.tsx | 20 ++++- .../modules/base/fab-text-editor.scss | 9 +++ 4 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 app/frontend/src/javascript/components/base/text-editor/iframe.tsx diff --git a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx index 19b293c20..47d173953 100644 --- a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx @@ -9,6 +9,7 @@ import Placeholder from '@tiptap/extension-placeholder'; import CharacterCount from '@tiptap/extension-character-count'; import Underline from '@tiptap/extension-underline'; import Link from '@tiptap/extension-link'; +import Iframe from './iframe'; import { MenuBar } from './menu-bar'; import { WarningOctagon } from 'phosphor-react'; @@ -51,7 +52,8 @@ export const FabTextEditor: React.FC = ({ label, paragraphTo }), CharacterCount.configure({ limit - }) + }), + Iframe ], content, onUpdate: ({ editor }) => { diff --git a/app/frontend/src/javascript/components/base/text-editor/iframe.tsx b/app/frontend/src/javascript/components/base/text-editor/iframe.tsx new file mode 100644 index 000000000..0263800f9 --- /dev/null +++ b/app/frontend/src/javascript/components/base/text-editor/iframe.tsx @@ -0,0 +1,76 @@ +import { Node } from '@tiptap/core'; + +export interface IframeOptions { + allowFullscreen: boolean, + HTMLAttributes: { + [key: string]: any + }, +} + +declare module '@tiptap/core' { + interface Commands { + iframe: { + /** + * Add an iframe to embed a video + */ + setIframe: (options: { src: string }) => ReturnType, + } + } +} + +export default Node.create({ + name: 'iframe', + + group: 'block', + + atom: true, + + addOptions () { + return { + allowFullscreen: true, + HTMLAttributes: { + class: 'fab-textEditor-video' + } + }; + }, + + addAttributes () { + return { + src: { + default: null + }, + frameborder: { + default: 0 + }, + allowfullscreen: { + default: this.options.allowFullscreen, + parseHTML: () => this.options.allowFullscreen + } + }; + }, + + parseHTML () { + return [{ + tag: 'iframe' + }]; + }, + + renderHTML ({ HTMLAttributes }) { + return ['div', this.options.HTMLAttributes, ['iframe', HTMLAttributes]]; + }, + + addCommands () { + return { + setIframe: (options: { src: string }) => ({ tr, dispatch }) => { + const { selection } = tr; + const node = this.type.create(options); + + if (dispatch) { + tr.replaceRangeWith(selection.from, selection.to, node); + } + + return true; + } + }; + } +}); diff --git a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx index 4d19ae195..0448aa3c6 100644 --- a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx @@ -2,17 +2,18 @@ import React, { useCallback, useState, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import useOnclickOutside from 'react-cool-onclickoutside'; import { Editor } from '@tiptap/react'; -import { TextAa, TextBolder, TextItalic, TextUnderline, LinkSimpleHorizontal, ListBullets, Quotes, Trash, CheckCircle } from 'phosphor-react'; +import { TextAa, TextBolder, TextItalic, TextUnderline, LinkSimpleHorizontal, ListBullets, Quotes, Trash, CheckCircle, VideoCamera } from 'phosphor-react'; interface MenuBarProps { paragraphTools?: boolean, + extra?: boolean, editor?: Editor, } /** * This component is the menu bar for the WYSIWYG text editor */ -export const MenuBar: React.FC = ({ editor, paragraphTools }) => { +export const MenuBar: React.FC = ({ editor, paragraphTools, extra }) => { const { t } = useTranslation('shared'); const [linkMenu, setLinkMenu] = useState(false); @@ -83,6 +84,11 @@ export const MenuBar: React.FC = ({ editor, paragraphTools }) => { setLinkMenu(false); }; + // Add iFrame + const addIframe = () => { + editor.chain().focus().setIframe({ src: 'https://www.youtube.com/embed/XIMLoLxmTDw' }).run(); + }; + if (!editor) { return null; } @@ -144,6 +150,16 @@ export const MenuBar: React.FC = ({ editor, paragraphTools }) => { > + { extra && + (<> + + ) + }
diff --git a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss index cdcbaa7d0..5ec63f5a2 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss @@ -144,6 +144,15 @@ } } + &-video { + position: relative; + height: 0; + width: 100%; + max-width: 600px; + padding-bottom: calc(100 / 16 * 9); + overflow: hidden; + } + &-error { position: absolute; top: 4.5rem; From 4c6a1fb0fcade4bcc208b818ad30d0c74cd856cb Mon Sep 17 00:00:00 2001 From: vincent Date: Fri, 25 Mar 2022 18:44:37 +0100 Subject: [PATCH 020/274] Add video embed on the text editor --- .../base/text-editor/fab-text-editor.tsx | 13 +- .../components/base/text-editor/menu-bar.tsx | 130 +++++++++++++----- .../modules/base/fab-text-editor.scss | 60 ++++---- package.json | 5 +- yarn.lock | 91 +++++++----- 5 files changed, 193 insertions(+), 106 deletions(-) diff --git a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx index 47d173953..667df3b30 100644 --- a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx @@ -20,15 +20,16 @@ interface FabTextEditorProps { paragraphTools?: boolean, content?: string, limit?: number, + video?: boolean, onChange?: (content: string) => void, placeholder?: string, - error?: string, + error?: string } /** * This component is a WYSIWYG text editor */ -export const FabTextEditor: React.FC = ({ label, paragraphTools, content, limit = 400, onChange, placeholder, error }) => { +export const FabTextEditor: React.FC = ({ label, paragraphTools, content, limit = 400, video, onChange, placeholder, error }) => { const { t } = useTranslation('shared'); const placeholderText = placeholder || t('app.shared.text_editor.placeholder'); // TODO: Add ctrl+click on link to visit @@ -69,7 +70,7 @@ export const FabTextEditor: React.FC = ({ label, paragraphTo <> {label && }
- +
{editor?.storage.characterCount.characters()} / {limit} @@ -85,12 +86,12 @@ export const FabTextEditor: React.FC = ({ label, paragraphTo ); }; -const FabTextEditorWrapper: React.FC = ({ label, paragraphTools, content, limit, placeholder, error }) => { +const FabTextEditorWrapper: React.FC = ({ label, paragraphTools, content, limit, video, placeholder, error }) => { return ( - + ); }; -Application.Components.component('fabTextEditor', react2angular(FabTextEditorWrapper, ['label', 'paragraphTools', 'content', 'limit', 'placeholder', 'error'])); +Application.Components.component('fabTextEditor', react2angular(FabTextEditorWrapper, ['label', 'paragraphTools', 'content', 'limit', 'video', 'placeholder', 'error'])); diff --git a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx index 0448aa3c6..6809feca2 100644 --- a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx @@ -6,34 +6,39 @@ import { TextAa, TextBolder, TextItalic, TextUnderline, LinkSimpleHorizontal, Li interface MenuBarProps { paragraphTools?: boolean, - extra?: boolean, + video?: boolean, editor?: Editor, } /** * This component is the menu bar for the WYSIWYG text editor */ -export const MenuBar: React.FC = ({ editor, paragraphTools, extra }) => { +export const MenuBar: React.FC = ({ editor, paragraphTools, video }) => { const { t } = useTranslation('shared'); - const [linkMenu, setLinkMenu] = useState(false); + const [submenu, setSubmenu] = useState(''); const resetUrl = { href: '', target: '_blank' }; const [url, setUrl] = useState(resetUrl); - const ref = useOnclickOutside(() => { - setLinkMenu(false); - }); + const [videoProvider, setVideoProvider] = useState('youtube'); + const [videoId, setVideoId] = useState(''); - // Reset state values when the link menu is closed + // Reset state values when the submenu is closed useEffect(() => { - if (!linkMenu) { + if (!submenu) { setUrl(resetUrl); + setVideoProvider('youtube'); } - }, [linkMenu]); + }, [submenu]); + + // Close the submenu frame on click outside + const ref = useOnclickOutside(() => { + setSubmenu(''); + }); // Toggle link menu's visibility const toggleLinkMenu = () => { - if (!linkMenu) { - setLinkMenu(true); + if (submenu !== 'link') { + setSubmenu('link'); const previousUrl = { href: editor.getAttributes('link').href, target: editor.getAttributes('link').target || '' @@ -43,8 +48,7 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, extra setUrl(previousUrl); } } else { - setLinkMenu(false); - setUrl(resetUrl); + setSubmenu(''); } }; @@ -56,7 +60,7 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, extra }; // Update url - const handleChange = (evt) => { + const linkUrlChange = (evt) => { setUrl({ ...url, href: evt.target.value }); }; // Support keyboard "Enter" key event to validate @@ -74,19 +78,52 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, extra } editor.chain().focus().extendMarkRange('link').setLink({ href: url.href, target: url.target }).run(); if (closeLinkMenu) { - setLinkMenu(false); + setSubmenu(''); } }, [editor, url]); // Remove the link tag from the selected text const unsetLink = () => { editor.chain().focus().extendMarkRange('link').unsetLink().run(); - setLinkMenu(false); + setSubmenu(''); }; - // Add iFrame + // Toggle video menu's visibility + const toggleVideoMenu = () => { + if (submenu !== 'video') { + setSubmenu('video'); + } else { + setSubmenu(''); + } + }; + + // Store selected video provider in state + const handleSelect = (evt) => { + setVideoProvider(evt.target.value); + }; + // Store video id in state + const VideoUrlChange = (evt) => { + const id = evt.target.value.match(/([^/]+$)/g); + setVideoId(id); + }; + // Insert iframe containing the video player const addIframe = () => { - editor.chain().focus().setIframe({ src: 'https://www.youtube.com/embed/XIMLoLxmTDw' }).run(); + let videoUrl = ''; + switch (videoProvider) { + case 'youtube': + videoUrl = `https://www.youtube.com/embed/${videoId}`; + break; + case 'vimeo': + videoUrl = `https://player.vimeo.com/video/${videoId}`; + break; + case 'dailymotion': + videoUrl = `https://www.dailymotion.com/embed/video/${videoId}`; + break; + default: + break; + } + editor.chain().focus().setIframe({ src: videoUrl }).run(); + setSubmenu(''); }; if (!editor) { @@ -150,34 +187,53 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, extra > - { extra && + { video && (<> ) }
-
-
- - -
-
- - -
+
+ { submenu === 'link' && + (<> +
+ + +
+
+ + +
+ ) + } + { submenu === 'video' && + (<> + +
+ + +
+ ) + }
); diff --git a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss index 5ec63f5a2..8da40fedd 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss @@ -49,7 +49,10 @@ // tiptap class for the editor .ProseMirror { + max-height: 40vh; padding: 1.6rem 1.6rem 1.2rem; + overflow: auto; + resize: vertical; &:focus { outline: none; } @include editor; } @@ -61,7 +64,7 @@ color: var(--gray-hard-lightest); } - &-linkMenu { + &-subMenu { position: absolute; top: 4.5rem; right: 0; @@ -83,25 +86,35 @@ } & > div { display: flex; - align-items: center + align-items: center; + &:not(:last-of-type) { margin-bottom: 0.8rem; } } - .url { + + input[type="text"], + select { + width: 100%; + height: 4rem; + padding: 0.4rem 0.8rem; + background-color: var(--gray-soft-light); + border: 1px solid var(--secondary); + border-radius: var(--border-radius); + font-size: var(--text-base); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + input[type="text"] { + margin-right: 1.2rem; + &::placeholder { color: var(--gray-soft-darkest);} + } + select { margin-bottom: 0.8rem; - input { - width: 100%; - height: 4rem; - margin-right: 1.2rem; - padding: 0.4rem 0.8rem; - background-color: var(--gray-soft-light); - border: 1px solid var(--secondary); - border-radius: var(--border-radius); - font-size: var(--text-base); - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - &::placeholder { color: var(--gray-soft-darkest);} - } } + button { + @include button(3.2rem); + margin-left: auto; + } + .tab { display: flex; align-items: center; @@ -137,11 +150,6 @@ border-color: var(--information); } } - - button { - @include button(3.2rem); - margin-left: auto; - } } &-video { @@ -149,8 +157,14 @@ height: 0; width: 100%; max-width: 600px; - padding-bottom: calc(100 / 16 * 9); + padding-bottom: calc(100% / 16 * 9); overflow: hidden; + + iframe { + position: absolute; + max-width: 100%; + inset: 0; + } } &-error { diff --git a/package.json b/package.json index e72941210..b735ef67d 100644 --- a/package.json +++ b/package.json @@ -50,12 +50,13 @@ "@lyracom/embedded-form-glue": "^0.3.3", "@stripe/react-stripe-js": "^1.4.0", "@stripe/stripe-js": "^1.13.2", + "@tiptap/core": "^2.0.0-beta.174", "@tiptap/extension-character-count": "^2.0.0-beta.24", "@tiptap/extension-link": "^2.0.0-beta.36", "@tiptap/extension-placeholder": "^2.0.0-beta.47", "@tiptap/extension-underline": "^2.0.0-beta.22", - "@tiptap/react": "^2.0.0-beta.107", - "@tiptap/starter-kit": "^2.0.0-beta.180", + "@tiptap/react": "^2.0.0-beta.108", + "@tiptap/starter-kit": "^2.0.0-beta.183", "@types/angular": "^1.7.3", "@types/prop-types": "^15.7.2", "@types/react": "^17.0.3", diff --git a/yarn.lock b/yarn.lock index 87bdd8fd7..833067a08 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1444,11 +1444,10 @@ resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.15.1.tgz#a3809ecc5aa8a03bd261a2f970d11cfdcbf11c4f" integrity sha512-yJiDGutlwu25iajCy51VRJeoH3UMs+s5qVIDGfmPUuFpZ+F6AJ9g9EFrsBNvHxAGBahQFMLlBdzlCVydhGp6tg== - -"@tiptap/core@^2.0.0-beta.171": - version "2.0.0-beta.171" - resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.0.0-beta.171.tgz#e681964c443383b81d2638c51fc3bbfda034a4fb" - integrity sha512-4CdJfcchmBOFooWPBMJ7AxJISeTstMFriQv0RyReMt0Dpef/c9UoU+NkKLwwv5VRUX0M8dL5SzEhkB8wIODqlA== +"@tiptap/core@^2.0.0-beta.174": + version "2.0.0-beta.174" + resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.0.0-beta.174.tgz#cfdf16b7d7401e4b255dc69147d784f5f537b942" + integrity sha512-APQDto40PdvagG1HTwkKlieQS4Vp6GXNe7qgV1Qo2QCgJCLyxc/fXCTghtrOx0CQb+9JT7fjSLZxbSyUFXjx7Q== dependencies: "@types/prosemirror-commands" "^1.0.4" "@types/prosemirror-keymap" "^1.0.4" @@ -1470,10 +1469,10 @@ resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.26.tgz#e5ae4b7bd9376db37407a23e22080c7b11287f3b" integrity sha512-A6yjcYovONJfOjQFk6vDYXswaCdCtCwjL7w9VTB0R2DLTuJvvRt9DWN0IDcMrj5G+aMgDq4GUUTitv+2Y8krDg== -"@tiptap/extension-bold@^2.0.0-beta.25": - version "2.0.0-beta.25" - resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.25.tgz#ec19e7c862d25bae49609c5d6a873f372c506dee" - integrity sha512-ZNdgFYDxKo8lAp0Pqzu45I0JH3ah8/X5TCYg9zNg3QwLUFT16g2LlWDMUDGT5pH9aXxgtFaEdoVacu0EyhlPnQ== +"@tiptap/extension-bold@^2.0.0-beta.26": + version "2.0.0-beta.26" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.26.tgz#aa1c7850df28cec8e0614fde437183bd4ae3e66b" + integrity sha512-pnO0I5sEQM3pmowjMGQ74adLzvc6HqGyLyqMizaGMicPu9uTYlSdId+qckYEEgPwPMaEShtv2Vg+ZHs7KVqfcg== "@tiptap/extension-bubble-menu@^2.0.0-beta.55": version "2.0.0-beta.55" @@ -1561,10 +1560,10 @@ dependencies: prosemirror-state "^1.3.4" -"@tiptap/extension-italic@^2.0.0-beta.25": - version "2.0.0-beta.25" - resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.25.tgz#c2ec95cc5baf855134883c5e261da4ab0d3b9479" - integrity sha512-7PvhioTX9baVp5+AmmZU0qna+dFPZCRlSEN/GciH57N77d2uhJ/ZW5iQWTbvy5HBNddQB4Jts1UDIaC7WASrGA== +"@tiptap/extension-italic@^2.0.0-beta.26": + version "2.0.0-beta.26" + resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.26.tgz#b00c9e32b81b1bd94eaed24bb2a22e44d5dc54a3" + integrity sha512-vejGe2ra4K5ipFOn1U9viqF9X9nPTX8WSJpSOux+9UbKjHpANy7bz69tp66OIi/Wh5L/MMDc+luH/04qfVnpZw== "@tiptap/extension-link@^2.0.0-beta.36": version "2.0.0-beta.36" @@ -1614,23 +1613,23 @@ resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-2.0.0-beta.22.tgz#e6b83be0c0944183b47aa30d53f2ab5cd7defe23" integrity sha512-c+tOv4CRBG2pgtAACEsDwvbmM8C89M/CeelTcLLu8zrk+PRy7yj8DKLUtcb9Ybsa7f1Suk6iqyj3dkfxuuvDLw== -"@tiptap/react@^2.0.0-beta.107": - version "2.0.0-beta.107" - resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.0.0-beta.107.tgz#82e02bd83e9d3d37e31197f915968213124330c4" - integrity sha512-4G14F32TxEuYNYyOOQQxJ3ddFooPOv9Opcw5mjKxgKFZLzlBMTBl7os9ndrMfVdWYTI3RpZlfiAQxq3QlHamxA== +"@tiptap/react@^2.0.0-beta.108": + version "2.0.0-beta.108" + resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.0.0-beta.108.tgz#65beeb4dfb99bc75e4a370cb24b2cbbd42ae13a7" + integrity sha512-uYfYx0em6rUoaTkwblYIzT6WLsNGA65XyP5PH56yLvHoOz+Q+skJMBkfrJ7n75tuWa3zMS+W9iYtybxaqPP0aw== dependencies: "@tiptap/extension-bubble-menu" "^2.0.0-beta.55" "@tiptap/extension-floating-menu" "^2.0.0-beta.50" prosemirror-view "^1.23.6" -"@tiptap/starter-kit@^2.0.0-beta.180": - version "2.0.0-beta.180" - resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.180.tgz#bea8101fdc25de88eb2fb76d29a3d16f4e94028e" - integrity sha512-dX+RxfAZa5MyY/XPr8iW+VTX/Qy3MIhCWApw15zHfLOdO80inl3to9JG5XS9oSMI2/SqsRe9XKz47Lj8srhw7A== +"@tiptap/starter-kit@^2.0.0-beta.183": + version "2.0.0-beta.183" + resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.183.tgz#35ff9f4b236bd321ffdd44c5061514959c1b4b9d" + integrity sha512-Lcms6lEfFfdL1oHoATcNKfu1C8+yhuZnI5Pq+U6o2zSslfnUSDf3jgmy6nSoZrrkqvFoXjQk4dxMDFg3giw2Kg== dependencies: - "@tiptap/core" "^2.0.0-beta.171" + "@tiptap/core" "^2.0.0-beta.174" "@tiptap/extension-blockquote" "^2.0.0-beta.26" - "@tiptap/extension-bold" "^2.0.0-beta.25" + "@tiptap/extension-bold" "^2.0.0-beta.26" "@tiptap/extension-bullet-list" "^2.0.0-beta.26" "@tiptap/extension-code" "^2.0.0-beta.26" "@tiptap/extension-code-block" "^2.0.0-beta.37" @@ -1641,7 +1640,7 @@ "@tiptap/extension-heading" "^2.0.0-beta.26" "@tiptap/extension-history" "^2.0.0-beta.21" "@tiptap/extension-horizontal-rule" "^2.0.0-beta.31" - "@tiptap/extension-italic" "^2.0.0-beta.25" + "@tiptap/extension-italic" "^2.0.0-beta.26" "@tiptap/extension-list-item" "^2.0.0-beta.20" "@tiptap/extension-ordered-list" "^2.0.0-beta.27" "@tiptap/extension-paragraph" "^2.0.0-beta.23" @@ -1848,9 +1847,9 @@ "@types/prosemirror-view" "*" "@types/prosemirror-model@*", "@types/prosemirror-model@^1.16.0": - version "1.16.0" - resolved "https://registry.yarnpkg.com/@types/prosemirror-model/-/prosemirror-model-1.16.0.tgz#8b22c7431a4c93f7f550fc89c4b0e2d44d42c8b6" - integrity sha512-nv93YLyTEcDDl17OB90EldxZjyJQJll2WSMLDvLzTewbpvE/vtMjHT3j4mik3uSzQ6YD486AcloCO3WODY/lDg== + version "1.16.1" + resolved "https://registry.yarnpkg.com/@types/prosemirror-model/-/prosemirror-model-1.16.1.tgz#0ce6c80cd81b398b8a11b1bf7cf695bff3160c9a" + integrity sha512-SrrCe2cHlYrQ9o55e2i/c3wt1yRajTTpRLvzfmB+2DWjWEbBLTByVWyjrdpKtQTxAaTeU2aeDGo1iuwl/jF27w== dependencies: "@types/orderedmap" "*" @@ -1873,9 +1872,9 @@ "@types/prosemirror-view" "*" "@types/prosemirror-transform@*", "@types/prosemirror-transform@^1.1.5": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@types/prosemirror-transform/-/prosemirror-transform-1.1.5.tgz#e6949398c64a5d3ca53e6081352751aa9e9ce76e" - integrity sha512-Wr2HXaEF4JPklWpC17RTxE6PxyU54Taqk5FMhK1ojgcN93J+GpkYW8s0mD3rl7KfTmlhVwZPCHE9o0cYf2Go5A== + version "1.1.6" + resolved "https://registry.yarnpkg.com/@types/prosemirror-transform/-/prosemirror-transform-1.1.6.tgz#4a06979f656331c46c2725039a57360cc35853af" + integrity sha512-7HwXOWc5vZQqIfEUUVAz13lPgBqAWJTv89qEpzAtBFB6hOszFmhsvQ02Jqe2LvKauAoJDa3Qpv/dbJAmgyiTuQ== dependencies: "@types/prosemirror-model" "*" @@ -5863,9 +5862,9 @@ prop-types@^15.8.1: react-is "^16.13.1" prosemirror-commands@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.2.1.tgz#eae0cb714df695260659b78ff5d201d3a037e50d" - integrity sha512-S/IkpXfpuLFsRynC2HQ5iYROUPiZskKS1+ClcWycGJvj4HMb/mVfeEkQrixYxgTl96EAh+RZQNWPC06GZXk5tQ== + version "1.2.2" + resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.2.2.tgz#1bd167372ee20abf488aca9cece63c43fab182c9" + integrity sha512-TX+KpWudMon06frryfpO/u7hsQv2hu8L4VSVbCpi3/7wXHBgl+35mV85qfa3RpT8xD2f3MdeoTqH0vy5JdbXPg== dependencies: prosemirror-model "^1.0.0" prosemirror-state "^1.0.0" @@ -5881,9 +5880,9 @@ prosemirror-dropcursor@^1.4.0: prosemirror-view "^1.1.0" prosemirror-gapcursor@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.2.1.tgz#02365e1bcc1ad25d390b0fb7f0e94a7fc173ad75" - integrity sha512-PHa9lj27iM/g4C46gxVzsefuXVfy/LrGQH4QjMRht7VDBgw77iWYWn8ZHMWSFkwtr9jQEuxI5gccHHHwWG80nw== + version "1.2.2" + resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.2.2.tgz#7394613ba4a1601fad1f36f1cff8961968c22ffa" + integrity sha512-7YzuRBbu9W7HGQde84kCHfIjaRLNcAdeijbgqrm/R9dsdTWkV+rrdcmic/sCc+bptiNpvjCEE+R6hrbT8zFQeQ== dependencies: prosemirror-keymap "^1.0.0" prosemirror-model "^1.0.0" @@ -5930,14 +5929,30 @@ prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.4: prosemirror-model "^1.0.0" prosemirror-transform "^1.0.0" -prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.3.3: +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0: version "1.3.3" resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.3.3.tgz#5f6712b0577a119cc418686fe7588b6dd9b7464d" integrity sha512-9NLVXy1Sfa2G6qPqhWMkEvwQQMTw7OyTqOZbJaGQWsCeH3hH5Cw+c5eNaLM1Uu75EyKLsEZhJ93XpHJBa6RX8A== dependencies: prosemirror-model "^1.0.0" -prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.23.6: +prosemirror-transform@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.4.0.tgz#057344b7ef38d1a4ba370390eba8c35f9afe6b36" + integrity sha512-P+bv4JiLHcRy4krHByUglXR1yAMCuzHRAaSKInsoW7Rjy3aomPXM/MwRs+b7TGtC1e6ZM31KbapbvE4wV1X9RA== + dependencies: + prosemirror-model "^1.0.0" + +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0: + version "1.23.10" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.23.10.tgz#a3fb6a7c780c8cd84488fdd451c23becab9dbefb" + integrity sha512-/p8Orb1VeJEbf7Z/BltU9GMWADZRqKlna6TlQGK1snJ6fTdLRC4f4yF2MgNK4OMQjmAwJISUtEp5+Vu5CSbR1w== + dependencies: + prosemirror-model "^1.16.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + +prosemirror-view@^1.23.6: version "1.23.6" resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.23.6.tgz#f514b3166942cb70aac4ac24d0a28c21c3897608" integrity sha512-B4DAzriNpI/AVoW0Lu6SVfX00jZZQxOVwdBQEjWlRbCdT9V0pvk4GQJ3JTFaib+b6BcPdRZ3MjWXz2xvV1rblA== From d1daa55be12f5f4d9ddf48b40c4e70d22bda321b Mon Sep 17 00:00:00 2001 From: vincent Date: Mon, 28 Mar 2022 14:01:14 +0200 Subject: [PATCH 021/274] Add image embed in the text editor --- .../base/text-editor/fab-text-editor.tsx | 19 +++-- .../components/base/text-editor/menu-bar.tsx | 84 +++++++++++++------ .../modules/base/fab-text-editor.scss | 11 +++ package.json | 1 + yarn.lock | 5 ++ 5 files changed, 87 insertions(+), 33 deletions(-) diff --git a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx index 667df3b30..f3c45a331 100644 --- a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx @@ -10,6 +10,7 @@ import CharacterCount from '@tiptap/extension-character-count'; import Underline from '@tiptap/extension-underline'; import Link from '@tiptap/extension-link'; import Iframe from './iframe'; +import Image from '@tiptap/extension-image'; import { MenuBar } from './menu-bar'; import { WarningOctagon } from 'phosphor-react'; @@ -21,6 +22,7 @@ interface FabTextEditorProps { content?: string, limit?: number, video?: boolean, + image?: boolean, onChange?: (content: string) => void, placeholder?: string, error?: string @@ -29,7 +31,7 @@ interface FabTextEditorProps { /** * This component is a WYSIWYG text editor */ -export const FabTextEditor: React.FC = ({ label, paragraphTools, content, limit = 400, video, onChange, placeholder, error }) => { +export const FabTextEditor: React.FC = ({ label, paragraphTools, content, limit = 400, video, image, onChange, placeholder, error }) => { const { t } = useTranslation('shared'); const placeholderText = placeholder || t('app.shared.text_editor.placeholder'); // TODO: Add ctrl+click on link to visit @@ -54,7 +56,12 @@ export const FabTextEditor: React.FC = ({ label, paragraphTo CharacterCount.configure({ limit }), - Iframe + Iframe, + Image.configure({ + HTMLAttributes: { + class: 'fab-textEditor-image' + } + }) ], content, onUpdate: ({ editor }) => { @@ -70,7 +77,7 @@ export const FabTextEditor: React.FC = ({ label, paragraphTo <> {label && }
- +
{editor?.storage.characterCount.characters()} / {limit} @@ -86,12 +93,12 @@ export const FabTextEditor: React.FC = ({ label, paragraphTo ); }; -const FabTextEditorWrapper: React.FC = ({ label, paragraphTools, content, limit, video, placeholder, error }) => { +const FabTextEditorWrapper: React.FC = ({ label, paragraphTools, content, limit, video, image, placeholder, error }) => { return ( - + ); }; -Application.Components.component('fabTextEditor', react2angular(FabTextEditorWrapper, ['label', 'paragraphTools', 'content', 'limit', 'video', 'placeholder', 'error'])); +Application.Components.component('fabTextEditor', react2angular(FabTextEditorWrapper, ['label', 'paragraphTools', 'content', 'limit', 'video', 'image', 'placeholder', 'error'])); diff --git a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx index 6809feca2..b707db9c3 100644 --- a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx @@ -2,18 +2,19 @@ import React, { useCallback, useState, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import useOnclickOutside from 'react-cool-onclickoutside'; import { Editor } from '@tiptap/react'; -import { TextAa, TextBolder, TextItalic, TextUnderline, LinkSimpleHorizontal, ListBullets, Quotes, Trash, CheckCircle, VideoCamera } from 'phosphor-react'; +import { TextAa, TextBolder, TextItalic, TextUnderline, LinkSimpleHorizontal, ListBullets, Quotes, Trash, CheckCircle, VideoCamera, Image } from 'phosphor-react'; interface MenuBarProps { + editor?: Editor, paragraphTools?: boolean, video?: boolean, - editor?: Editor, + image?: boolean, } /** * This component is the menu bar for the WYSIWYG text editor */ -export const MenuBar: React.FC = ({ editor, paragraphTools, video }) => { +export const MenuBar: React.FC = ({ editor, paragraphTools, video, image }) => { const { t } = useTranslation('shared'); const [submenu, setSubmenu] = useState(''); @@ -21,12 +22,14 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video const [url, setUrl] = useState(resetUrl); const [videoProvider, setVideoProvider] = useState('youtube'); const [videoId, setVideoId] = useState(''); + const [imageUrl, setImageUrl] = useState(''); // Reset state values when the submenu is closed useEffect(() => { if (!submenu) { setUrl(resetUrl); setVideoProvider('youtube'); + setImageUrl(''); } }, [submenu]); @@ -35,17 +38,19 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video setSubmenu(''); }); - // Toggle link menu's visibility - const toggleLinkMenu = () => { - if (submenu !== 'link') { - setSubmenu('link'); - const previousUrl = { - href: editor.getAttributes('link').href, - target: editor.getAttributes('link').target || '' - }; - // display selected text's attributes if it's a link - if (previousUrl.href) { - setUrl(previousUrl); + // Toggle submenu's visibility + const toggleSubmenu = (type) => { + if (submenu !== type) { + setSubmenu(type); + if (type === 'link') { + const previousUrl = { + href: editor.getAttributes('link').href, + target: editor.getAttributes('link').target || '' + }; + // display selected text's attributes if it's a link + if (previousUrl.href) { + setUrl(previousUrl); + } } } else { setSubmenu(''); @@ -88,21 +93,12 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video setSubmenu(''); }; - // Toggle video menu's visibility - const toggleVideoMenu = () => { - if (submenu !== 'video') { - setSubmenu('video'); - } else { - setSubmenu(''); - } - }; - // Store selected video provider in state const handleSelect = (evt) => { setVideoProvider(evt.target.value); }; // Store video id in state - const VideoUrlChange = (evt) => { + const videoUrlChange = (evt) => { const id = evt.target.value.match(/([^/]+$)/g); setVideoId(id); }; @@ -126,6 +122,18 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video setSubmenu(''); }; + // Store image url in state + const imageUrlChange = (evt) => { + setImageUrl(evt.target.value); + }; + // Insert image + const addImage = () => { + if (imageUrl) { + editor.chain().focus().setImage({ src: imageUrl }).run(); + setSubmenu(''); + } + }; + if (!editor) { return null; } @@ -182,22 +190,34 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video + { (video || image) && } { video && (<> ) } + { image && + (<> + + ) + }
+
{ submenu === 'link' && (<> @@ -227,13 +247,23 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video
- +
) } + { submenu === 'image' && + (<> +
+ + +
+ ) + }
); diff --git a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss index 8da40fedd..68422a09c 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss @@ -157,6 +157,7 @@ height: 0; width: 100%; max-width: 600px; + margin: 1rem 0; padding-bottom: calc(100% / 16 * 9); overflow: hidden; @@ -167,6 +168,16 @@ } } + &-image { + height: auto; + max-width: 100%; + max-height: min(75vh, 600px); + margin: 1rem 0; + &.ProseMirror-selectednode { + box-shadow: 0 0 0 2px var(--secondary); + } + } + &-error { position: absolute; top: 4.5rem; diff --git a/package.json b/package.json index b735ef67d..5f64708c2 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "@stripe/stripe-js": "^1.13.2", "@tiptap/core": "^2.0.0-beta.174", "@tiptap/extension-character-count": "^2.0.0-beta.24", + "@tiptap/extension-image": "^2.0.0-beta.27", "@tiptap/extension-link": "^2.0.0-beta.36", "@tiptap/extension-placeholder": "^2.0.0-beta.47", "@tiptap/extension-underline": "^2.0.0-beta.22", diff --git a/yarn.lock b/yarn.lock index 833067a08..7c7df3d28 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1560,6 +1560,11 @@ dependencies: prosemirror-state "^1.3.4" +"@tiptap/extension-image@^2.0.0-beta.27": + version "2.0.0-beta.27" + resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.0.0-beta.27.tgz#62152240cfa7ead03080c38485c1ebda4a603d18" + integrity sha512-kdJ7V39yNdVWUco/RBe7WgvFevd81l+pU6+Je9HpelqBBP953wDttzLMuAWQB4AeLv9WhKSlORHiFv2SKsV5NA== + "@tiptap/extension-italic@^2.0.0-beta.26": version "2.0.0-beta.26" resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.26.tgz#b00c9e32b81b1bd94eaed24bb2a22e44d5dc54a3" From edc34d9836f59f4af4cd1866fc37f56a89ea7f5f Mon Sep 17 00:00:00 2001 From: vincent Date: Mon, 28 Mar 2022 17:58:35 +0200 Subject: [PATCH 022/274] Add labels --- .../components/base/text-editor/fab-text-editor.tsx | 2 +- .../javascript/components/base/text-editor/menu-bar.tsx | 7 +++++-- .../src/stylesheets/modules/base/fab-text-editor.scss | 5 +++++ config/locales/app.shared.en.yml | 6 +++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx index f3c45a331..ee652fed4 100644 --- a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx @@ -33,7 +33,7 @@ interface FabTextEditorProps { */ export const FabTextEditor: React.FC = ({ label, paragraphTools, content, limit = 400, video, image, onChange, placeholder, error }) => { const { t } = useTranslation('shared'); - const placeholderText = placeholder || t('app.shared.text_editor.placeholder'); + const placeholderText = placeholder || t('app.shared.text_editor.text_placeholder'); // TODO: Add ctrl+click on link to visit // Setup the editor diff --git a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx index b707db9c3..1eeb67b00 100644 --- a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx @@ -221,6 +221,7 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video,
{ submenu === 'link' && (<> +
{t('app.shared.text_editor.add_link')}
@@ -256,8 +258,9 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video, } { submenu === 'image' && (<> +
{t('app.shared.text_editor.add_image')}
- + diff --git a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss index 68422a09c..e2e2942af 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss @@ -89,6 +89,11 @@ align-items: center; &:not(:last-of-type) { margin-bottom: 0.8rem; } } + + h6 { + @include text-sm(); + margin-top: 0; + } input[type="text"], select { diff --git a/config/locales/app.shared.en.yml b/config/locales/app.shared.en.yml index 3e5950523..5727de6a9 100644 --- a/config/locales/app.shared.en.yml +++ b/config/locales/app.shared.en.yml @@ -25,9 +25,13 @@ en: payment_card_declined: "Your card was declined." #text editor text_editor: - placeholder: "Type something…" + text_placeholder: "Type something…" link_placeholder: "Paste link…" + url_placeholder: "Paste url…" new_tab: "Open in a new tab" + add_link: "Insert a link" + add_video: "Embed a video" + add_image: "Insert an image" #user edition form user: man: "Man" From 2471f95ae8eb1a7e1906d934f9963501e913572b Mon Sep 17 00:00:00 2001 From: Sylvain Date: Tue, 29 Mar 2022 14:12:26 +0200 Subject: [PATCH 023/274] (bug) Refused to connect to wss://localhost:3035/ws because it violates the following Content Security Policy directive --- CHANGELOG.md | 2 ++ config/initializers/content_security_policy.rb | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7dd90caa9..08a8eef4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ - Updated eslint to v8 and eslint related packages to their latest versions - Webpack overlay will now report eslint issues +- Linted all code according to eslint rules +- Fix a bug: Refused to connect to 'wss://localhost:3035/ws' when using a https tunnel in development mode ## v5.3.7 2022 March 28 diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index 0c70b1579..a92544780 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -7,7 +7,7 @@ # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy Rails.application.config.content_security_policy do |policy| # # If you are using webpack-dev-server then specify webpack-dev-server host - policy.connect_src :self, :https, 'http://localhost:3035', 'ws://localhost:3035' if Rails.env.development? + policy.connect_src :self, :https, :wss, 'http://localhost:3035', 'ws://localhost:3035' if Rails.env.development? # policy.default_src :self, :https # policy.font_src :self, :https, :data From 7de8686bd831610a46e95307e9f728c848a48945 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Wed, 30 Mar 2022 15:51:23 +0200 Subject: [PATCH 024/274] (dependency) updated typescript --- CHANGELOG.md | 1 + package.json | 2 +- yarn.lock | 25 ++++++++++--------------- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b54f2933f..9fa7a6729 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - Updated Node to 16.13.2 - Updated eslint to v8 and eslint related packages to their latest versions +- Updated typescript to v4.6.3 - Webpack overlay will now report eslint issues - Linted all code according to eslint rules diff --git a/package.json b/package.json index 5f64708c2..ac800a492 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,7 @@ "summernote": "0.8.18", "terser-webpack-plugin": "5", "twitter-fetcher": "^18.0.2", - "typescript": "^4.0.5", + "typescript": "^4.6.3", "ui-select": "0.19", "underscore": "1.12", "use-immer": "^0.5.1", diff --git a/yarn.lock b/yarn.lock index 7c7df3d28..0b81d2997 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1892,11 +1892,6 @@ "@types/prosemirror-state" "*" "@types/prosemirror-transform" "*" -"@types/q@^1.5.1": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" - integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== - "@types/qs@*": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -5542,17 +5537,17 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - phosphor-react@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/phosphor-react/-/phosphor-react-1.4.0.tgz#6c3d5f9d3433c3c2456b902891d24ec677f89dc3" integrity sha512-K2/ZtkigHV/li5qfYPqY5fA7MLkWM52tW9ghBCyJc7JS5ykI/WD61JC8kFWaZ6yqlEHXPUJLHr+p+5uGsBnHmQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -6931,10 +6926,10 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typescript@^4.0.5: - version "4.3.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc" - integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== +typescript@^4.6.3: + version "4.6.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" + integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== ui-select@0.19: version "0.19.8" From f83dc52610fc71ced3075c858c119f89db6aee48 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Wed, 30 Mar 2022 16:44:45 +0200 Subject: [PATCH 025/274] (type) fix typing issues --- app/frontend/src/javascript/components/base/rhf-input.tsx | 5 +++-- .../src/javascript/components/base/text-editor/iframe.tsx | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/frontend/src/javascript/components/base/rhf-input.tsx b/app/frontend/src/javascript/components/base/rhf-input.tsx index 941bd5b88..152e477bd 100644 --- a/app/frontend/src/javascript/components/base/rhf-input.tsx +++ b/app/frontend/src/javascript/components/base/rhf-input.tsx @@ -1,5 +1,6 @@ import React, { ReactNode } from 'react'; import { FieldErrors, UseFormRegister, Validate } from 'react-hook-form'; +import { FieldValues } from 'react-hook-form/dist/types/fields'; type inputType = string|number|readonly string []; type ruleTypes = { @@ -9,12 +10,12 @@ type ruleTypes = { maxLenght?: number, min?: number, max?: number, - validate?: Validate; + validate?: Validate; }; interface RHFInputProps { id: string, - register: UseFormRegister, + register: UseFormRegister, label?: string, tooltip?: string, defaultValue?: inputType, diff --git a/app/frontend/src/javascript/components/base/text-editor/iframe.tsx b/app/frontend/src/javascript/components/base/text-editor/iframe.tsx index 0263800f9..8ef646560 100644 --- a/app/frontend/src/javascript/components/base/text-editor/iframe.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/iframe.tsx @@ -3,7 +3,7 @@ import { Node } from '@tiptap/core'; export interface IframeOptions { allowFullscreen: boolean, HTMLAttributes: { - [key: string]: any + [key: string]: string }, } From f25fdd4091f4a1b7922b40a67cdd50834e6eb1e8 Mon Sep 17 00:00:00 2001 From: vincent Date: Fri, 1 Apr 2022 17:48:32 +0200 Subject: [PATCH 026/274] merge --- .browserslistrc | 1 - .eslintrc | 6 +- .gitignore | 7 + CHANGELOG.md | 77 +- Dockerfile | 3 +- Gemfile | 8 +- Gemfile.lock | 192 +- Procfile | 3 +- .../api/auth_providers_controller.rb | 2 +- .../api/openlab_projects_controller.rb | 4 +- app/frontend/{packs => }/application.js.erb | 33 +- app/frontend/{packs => }/application.scss | 2 +- app/frontend/packs/printer.scss | 2 - app/frontend/{packs => }/plugins.scss.erb | 0 app/frontend/printer.scss | 2 + app/frontend/src/javascript/api/space.ts | 3 +- app/frontend/src/javascript/app.js | 39 +- .../javascript/components/base/rhf-input.tsx | 5 +- .../components/base/text-editor/iframe.tsx | 2 +- .../payment/abstract-payment-modal.tsx | 8 +- .../components/payment/stripe/stripe-form.tsx | 2 +- .../subscriptions/free-extend-modal.tsx | 1 - .../controllers/admin/authentications.js | 4 +- .../javascript/controllers/admin/events.js | 6 +- .../javascript/controllers/admin/graphs.js | 48 +- .../javascript/controllers/admin/groups.js | 8 +- .../javascript/controllers/admin/invoices.js | 10 +- .../javascript/controllers/admin/members.js | 10 +- .../src/javascript/controllers/admin/plans.js | 6 +- .../javascript/controllers/admin/pricing.js | 2 +- .../controllers/admin/statistics.js | 14 +- .../src/javascript/controllers/admin/tags.js | 6 +- .../javascript/controllers/admin/trainings.js | 6 +- .../javascript/controllers/application.js.erb | 16 +- .../src/javascript/controllers/cookies.js | 18 +- .../src/javascript/controllers/events.js.erb | 4 +- .../src/javascript/controllers/header.js | 8 +- .../src/javascript/controllers/home.js | 8 +- .../javascript/controllers/machines.js.erb | 16 +- .../src/javascript/controllers/members.js | 2 +- .../src/javascript/controllers/projects.js | 8 +- .../src/javascript/controllers/spaces.js.erb | 12 +- .../javascript/controllers/trainings.js.erb | 12 +- .../directives/bs-jasny-fileinput.js | 6 +- .../src/javascript/filters/filters.js | 11 +- .../src/javascript/lib/devise-modal.js | 2 +- app/frontend/src/javascript/lib/dirDisqus.js | 2 +- app/frontend/src/javascript/lib/format.ts | 6 +- app/frontend/src/javascript/lib/gtm.js | 43 + app/frontend/src/javascript/lib/humanize.js | 111 +- app/frontend/src/javascript/lib/polyfill.js | 8 +- app/frontend/src/javascript/lib/user.ts | 2 +- app/frontend/src/javascript/lib/wallet.ts | 2 +- app/frontend/src/javascript/models/gtm.ts | 6 + app/frontend/src/javascript/router.js | 62 +- .../src/javascript/services/diacritics.js | 10 +- .../src/stylesheets/app.functions.scss | 6 +- app/frontend/src/stylesheets/app.layout.scss | 10 +- app/frontend/src/stylesheets/app.nav.scss | 14 +- app/frontend/src/stylesheets/app.printer.scss | 4 +- .../src/stylesheets/modules/cookies.scss | 29 +- .../admin/authentications/_oauth2.html | 11 + .../templates/admin/invoices/codes.html | 10 + app/frontend/templates/projects/index.html | 2 +- app/models/accounting_period.rb | 12 +- app/models/invoice_item.rb | 5 - app/models/open_api/calls_count_tracing.rb | 4 - app/models/open_api/client.rb | 2 - app/models/setting.rb | 11 +- app/models/user.rb | 2 + app/pdfs/pdf/invoice.rb | 10 +- app/pdfs/pdf/payment_schedule.rb | 4 +- app/policies/project_policy.rb | 2 +- app/policies/subscription_policy.rb | 2 +- app/services/accounting_export_service.rb | 30 +- app/services/members/members_service.rb | 2 +- app/services/statistic_service.rb | 8 +- app/services/user_service.rb | 4 +- .../api/auth_providers/show.json.jbuilder | 4 +- app/views/application/index.html.erb | 6 +- .../open_api_trace_calls_count_worker.rb | 10 - app/workers/openlab_worker.rb | 8 +- app/workers/reservation_reminder_worker.rb | 38 +- babel.config.js | 54 +- bin/webpacker | 15 + bin/webpacker-dev-server | 18 + bin/yarn | 15 +- .../initializers/content_security_policy.rb | 8 +- config/initializers/openlab_ruby.rb | 4 +- config/initializers/sidekiq.rb | 31 +- config/locales/app.admin.de.yml | 384 +- config/locales/app.admin.en.yml | 32 +- config/locales/app.admin.es.yml | 24 +- config/locales/app.admin.fr.yml | 14 +- config/locales/app.admin.no.yml | 20 +- config/locales/app.admin.pt.yml | 24 +- config/locales/app.admin.zu.yml | 30 +- config/locales/app.logged.de.yml | 44 +- config/locales/app.logged.es.yml | 78 +- config/locales/app.public.de.yml | 23 +- config/locales/app.public.en.yml | 7 +- config/locales/app.public.es.yml | 7 +- config/locales/app.public.fr.yml | 7 +- config/locales/app.public.no.yml | 7 +- config/locales/app.public.pt.yml | 7 +- config/locales/app.public.zu.yml | 7 +- config/locales/app.shared.de.yml | 169 +- config/locales/app.shared.en.yml | 3 +- config/locales/app.shared.es.yml | 3 +- config/locales/app.shared.fr.yml | 1 + config/locales/app.shared.no.yml | 3 +- config/locales/app.shared.pt.yml | 3 +- config/locales/app.shared.zu.yml | 3 +- config/locales/de.yml | 296 +- config/locales/en.yml | 4 +- config/locales/es.yml | 4 +- config/locales/fr.yml | 2 +- config/locales/mails.de.yml | 78 +- config/locales/mails.en.yml | 4 +- config/locales/mails.es.yml | 56 +- config/locales/mails.fr.yml | 4 +- config/locales/mails.no.yml | 4 +- config/locales/mails.pt.yml | 4 +- config/locales/mails.zu.yml | 4 +- config/locales/no.yml | 4 +- config/locales/pt.yml | 4 +- config/locales/zu.yml | 4 +- config/routes.rb | 2 +- config/schedule.yml | 26 +- config/secrets.yml | 30 +- config/webpack/development.js | 20 - config/webpack/environment.js | 38 - config/webpack/loaders/js.js | 14 - config/webpack/loaders/sass.js | 19 - config/webpack/loaders/sass_erb.js | 22 - config/webpack/modules/hmr.js | 14 + config/webpack/{loaders => modules}/html.js | 1 + .../webpack/{loaders => modules}/html_erb.js | 0 config/webpack/{loaders => modules}/js_erb.js | 8 - config/webpack/modules/sass.js | 21 + config/webpack/modules/sass_erb.js | 24 + .../webpack/{loaders => modules}/ui-tour.js | 1 + config/webpack/production.js | 5 - config/webpack/test.js | 5 - config/webpack/webpack.config.js | 61 + config/webpacker.yml | 79 +- ...rop_table_open_api_calls_count_tracings.rb | 17 + ..._update_closed_by_on_accounting_periods.rb | 26 + ...22135836_add_scopes_to_o_auth2_provider.rb | 9 + db/schema.rb | 31 +- doc/environment.md | 19 +- env.example | 1 + .../strategies/sso_oauth2_provider.rb | 2 +- lib/tasks/fablab/maintenance.rake | 2 +- package.json | 104 +- scripts/cve-2021-44228.sh | 32 + setup/env.example | 1 + setup/upgrade.sh | 4 +- .../open_api_calls_count_tracings.yml | 0 test/integration/events/as_user_test.rb | 9 +- .../reservations/create_as_admin_test.rb | 2 +- test/integration/reservations/create_test.rb | 2 +- test/integration/settings_test.rb | 2 +- yarn.lock | 8063 ++++++----------- 164 files changed, 4662 insertions(+), 6718 deletions(-) delete mode 100644 .browserslistrc rename app/frontend/{packs => }/application.js.erb (76%) rename app/frontend/{packs => }/application.scss (94%) delete mode 100644 app/frontend/packs/printer.scss rename app/frontend/{packs => }/plugins.scss.erb (100%) create mode 100644 app/frontend/printer.scss create mode 100644 app/frontend/src/javascript/lib/gtm.js create mode 100644 app/frontend/src/javascript/models/gtm.ts delete mode 100644 app/models/open_api/calls_count_tracing.rb delete mode 100644 app/workers/open_api_trace_calls_count_worker.rb create mode 100755 bin/webpacker create mode 100755 bin/webpacker-dev-server delete mode 100644 config/webpack/development.js delete mode 100644 config/webpack/environment.js delete mode 100644 config/webpack/loaders/js.js delete mode 100644 config/webpack/loaders/sass.js delete mode 100644 config/webpack/loaders/sass_erb.js create mode 100644 config/webpack/modules/hmr.js rename config/webpack/{loaders => modules}/html.js (92%) rename config/webpack/{loaders => modules}/html_erb.js (100%) rename config/webpack/{loaders => modules}/js_erb.js (53%) create mode 100644 config/webpack/modules/sass.js create mode 100644 config/webpack/modules/sass_erb.js rename config/webpack/{loaders => modules}/ui-tour.js (92%) delete mode 100644 config/webpack/production.js delete mode 100644 config/webpack/test.js create mode 100644 config/webpack/webpack.config.js create mode 100644 db/migrate/20220225143203_drop_table_open_api_calls_count_tracings.rb create mode 100644 db/migrate/20220316133304_allow_update_closed_by_on_accounting_periods.rb create mode 100644 db/migrate/20220322135836_add_scopes_to_o_auth2_provider.rb create mode 100644 scripts/cve-2021-44228.sh delete mode 100644 test/fixtures/open_api_calls_count_tracings.yml diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index e94f8140c..000000000 --- a/.browserslistrc +++ /dev/null @@ -1 +0,0 @@ -defaults diff --git a/.eslintrc b/.eslintrc index 3d7e64b55..88558a63b 100644 --- a/.eslintrc +++ b/.eslintrc @@ -13,9 +13,11 @@ "angular": true, "Fablab": true, "moment": true, - "_": true + "_": true, + "Humanize": true, + "GTM": true }, - "plugins": ["lint-erb"], + "plugins": ["html-erb"], "overrides": [ { "files": ["**/*.ts", "**/*.tsx"], diff --git a/.gitignore b/.gitignore index c9cb7821d..4a28e3c41 100644 --- a/.gitignore +++ b/.gitignore @@ -65,3 +65,10 @@ yarn-error.log /yarn-error.log yarn-debug.log* .yarn-integrity + +/public/packs +/public/packs-test +/node_modules +/yarn-error.log +yarn-debug.log* +.yarn-integrity diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c51ae0d9..9fa7a6729 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,77 @@ # Changelog Fab-manager - Updated Node to 16.13.2 +- Updated eslint to v8 and eslint related packages to their latest versions +- Updated typescript to v4.6.3 +- Webpack overlay will now report eslint issues +- Linted all code according to eslint rules -# v5.3.2 2022 January 19 +## v5.3.7 2022 March 28 + +- Updated Spanish translations (thanks to [@altieriranedo](https://crowdin.com/profile/altieriranedo)) +- Fix a security issue: updated minimist to 1.2.6 to fix [CVE-2021-44906](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44906) +- Fix a security issue: updated node-forge to 1.3.0 to fix [CVE-2022-24771](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-24771), [CVE-2022-24772](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-24772) and [CVE-2022-24773](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-24773) + +## v5.3.6 2022 March 24 + +- Support for Google Analytics V4 +- OAuth2 scopes are now configurable from the interface +- Prepaid-packs purchases are exported to the accounting CSV file +- Updated environment documentation +- Updated react-i18next to 11.15.6 +- Updated i18next to 21.6.13 +- Updated i18next-icu to 2.0.3 +- Updated sidekiq-unique-jobs to 7.1.15 +- Updated @uirouter/angularjs to 1.0.30 +- Updated bootstrap-sass to 3.4.3 +- Removed unmaintained gem sidekiq-cron and replaced it with sidekiq-scheduler +- Removed unmaintained @rails/webpacker v5 and replaced it with shakapacker v6.2.0 +- Removed dependency to auto-ngtemplate-loader +- Removed support for Universal Analytics +- Updated deprecated division operators in sass +- Fix a bug: prepaid-packs purchases are reported as subscriptions in the statistics +- Fix a bug: error Couldn't find the binary git during assets compilation +- Fix a bug: a sentence was not linked to a translation key +- Fix a bug: the version check may be scheduled at an invalid time +- Fix a bug: the moment-timezone relied on an outdated version of moment with a case-sensitive locale file +- Fix a bug: unable to delete an administrator who had closed an accounting period +- Fix a bug: captcha keys are not shown in the admin panel, once configured +- Fix a bug: help message in upgrade script has a bogus format +- Fix a security issue: removed message format in elasticsearch's log4j to fix [CVE-2021-44228](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228) +- Fix a security issue: updated image_processing to 1.12.2 to fix [CVE-2022-24720](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-24720) +- Fix a security issue: updated url-parse to 1.5.10 to fix [CVE-2022-0686](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0686), [CVE-2022-0691](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0691), [CVE-2022-0639](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0639) and [CVE-2022-0512](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0512) +- Fix a security issue: updated rails to 5.2.6.3 to fix [CVE-2022-21831](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21831), [CVE-2022-23633](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23633) +- Fix a security issue: updated sidekiq to 6.4.1 to fix [CVE-2022-23837](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23837) +- Fix a security issue: updated nokogiri to 1.13.3 to fix [CVE-2021-30560](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-30560) and [CVE-2022-23308](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23308) +- Fix a security issue: updated puma to 4.3.11 to fix [CVE-2022-23634](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23634) +- Fix a security issue: updated i18next-http-backend to 1.3.2 to fix [CVE-2022-0235](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0235) +- Fix a security issue: updated follow-redirects to 1.18.8 to fix [CVE-2022-0536](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0536) +- [TODO DEPLOY] `rails fablab:maintenance:regenerate_statistics[2021,07]` +- [TODO DEPLOY] `\curl -sSL https://raw.githubusercontent.com/sleede/fab-manager/master/scripts/cve-2021-44228.sh | bash` +- [TODO DEPLOY] update your oAuth2 provider configuration with the scopes previously defined in the OAUTH2_SCOPE environment variable + +## v5.3.5 2022 March 02 + +- Added [an option](doc/environment.md#OPENLAB_SSL_VERIFY) to allow set verify ssl option for OpenLab + +## v5.3.4 2022 March 01 + +- Fix line break on home events' cards +- Fix typo "projets" => "projects" +- Removes dead code about OpenAPI (open_api_calls_count_tracings) +- Fix a bug: unable to modify OpenLab url for production + +## v5.3.3 2022 February 08 + +- Updated german translations +- Fix a bug: unable to rebuild the statistics +- Fix a bug/regresion: $sce.getTrustedHtml removes all dangerous html like iframe (youtube players, ect), replaced by $sce.trustAsHtml which trusts the content, it creates a security breach but all contents are created by users to we trust them +- Fix a bug: in SubscriptionPolicy#show?, was causing an error notice, making user think that the payment was not done, but it was +- Fix a bug: destroying a project was impossible +- Fix a bug: fix non-blocking js error when there was not payment gateway set +- [TODO DEPLOY] `rails fablab:maintenance:regenerate_statistics[2020,04]` + +## v5.3.2 2022 January 19 - Add a test for statistics generation - Fix a bug: missing the Other payment method @@ -14,7 +83,7 @@ - Fix a bug: prepaid-packs without expiration date do not work - [TODO DEPLOY] `rails fablab:maintenance:regenerate_statistics[2020,04]` -# v5.3.1 2022 January 17 +## v5.3.1 2022 January 17 - Definition of extended prices for spaces is now made in hours (previously in minutes) - Support for JSONPath syntax in OAuth2 SSO fields mapping @@ -45,12 +114,12 @@ - Fix a security issue: updated follow-redirects to 1.14.7 to fix [CVE-2022-0155](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0155) - [TODO DEPLOY] `rails db:seed` -# v5.3.0 2021 December 29 +## v5.3.0 2021 December 29 - Ability to configure multiple VAT rates, per kind of invoiced item - Ability to export the collected VAT, by rates, to a CSV file - Refactored the extended prices' frontend code to allow future customization -- Fix a bug: the amount label in not correctly shown in the extended prices modal +- Fix a bug: the amount label in not correctly shown in the extended prices modal - Fix a bug: `extended_prices_in_same_day` apply the extended prices to each day ## v5.2.0 2021 December 23 diff --git a/Dockerfile b/Dockerfile index 66a01fd47..0aeb002ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,6 +9,8 @@ RUN apk update && apk upgrade && \ curl \ nodejs \ yarn \ + git \ + openssh \ imagemagick \ supervisor \ tzdata \ @@ -26,7 +28,6 @@ RUN apk update && apk upgrade && \ alpine-sdk \ build-base \ linux-headers \ - git \ patch RUN gem install bundler diff --git a/Gemfile b/Gemfile index cfb4267e9..adc249b89 100644 --- a/Gemfile +++ b/Gemfile @@ -7,8 +7,8 @@ gem 'rails', '~> 5.2.4' # Used by rails 5.2 to reduce the app boot time by over 50% gem 'bootsnap' # Use Puma as web server -gem 'puma', '4.3.9' -gem 'webpacker', '~> 5.x' +gem 'puma', '4.3.11' +gem 'shakapacker', '6.2.0' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' @@ -90,8 +90,8 @@ gem 'aasm' # Background job processing gem 'sidekiq', '>= 6.0.7' # Recurring jobs for Sidekiq -gem 'sidekiq-cron' -gem 'sidekiq-unique-jobs', '~> 6.0.22' +gem 'sidekiq-scheduler' +gem 'sidekiq-unique-jobs', '~> 7.1.15' gem 'stripe', '5.29.0' diff --git a/Gemfile.lock b/Gemfile.lock index ee7be9a7c..23bd799a8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -4,46 +4,46 @@ GEM Ascii85 (1.0.3) aasm (5.0.8) concurrent-ruby (~> 1.0) - actioncable (5.2.6) - actionpack (= 5.2.6) + actioncable (5.2.6.3) + actionpack (= 5.2.6.3) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailer (5.2.6) - actionpack (= 5.2.6) - actionview (= 5.2.6) - activejob (= 5.2.6) + actionmailer (5.2.6.3) + actionpack (= 5.2.6.3) + actionview (= 5.2.6.3) + activejob (= 5.2.6.3) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (5.2.6) - actionview (= 5.2.6) - activesupport (= 5.2.6) + actionpack (5.2.6.3) + actionview (= 5.2.6.3) + activesupport (= 5.2.6.3) rack (~> 2.0, >= 2.0.8) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.2) actionpack-page_caching (1.2.2) actionpack (>= 5.0.0) - actionview (5.2.6) - activesupport (= 5.2.6) + actionview (5.2.6.3) + activesupport (= 5.2.6.3) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) active_record_query_trace (1.7) - activejob (5.2.6) - activesupport (= 5.2.6) + activejob (5.2.6.3) + activesupport (= 5.2.6.3) globalid (>= 0.3.6) - activemodel (5.2.6) - activesupport (= 5.2.6) - activerecord (5.2.6) - activemodel (= 5.2.6) - activesupport (= 5.2.6) + activemodel (5.2.6.3) + activesupport (= 5.2.6.3) + activerecord (5.2.6.3) + activemodel (= 5.2.6.3) + activesupport (= 5.2.6.3) arel (>= 9.0) - activestorage (5.2.6) - actionpack (= 5.2.6) - activerecord (= 5.2.6) + activestorage (5.2.6.3) + actionpack (= 5.2.6.3) + activerecord (= 5.2.6.3) marcel (~> 1.0.0) - activesupport (5.2.6) + activesupport (5.2.6.3) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) @@ -66,6 +66,9 @@ GEM bindex (0.8.1) bootsnap (1.4.6) msgpack (~> 1.0) + brpoplpush-redis_script (0.1.2) + concurrent-ruby (~> 1.0, >= 1.0.5) + redis (>= 1.0, <= 5.0) builder (3.2.4) bullet (7.0.0) activesupport (>= 3.0.0) @@ -91,7 +94,7 @@ GEM cldr-plurals-runtime-rb (1.0.1) coercible (1.0.0) descendants_tracker (~> 0.0.1) - concurrent-ruby (1.1.8) + concurrent-ruby (1.1.9) connection_pool (2.2.5) coveralls_reborn (0.18.0) simplecov (>= 0.18.1, < 0.20.0) @@ -115,6 +118,7 @@ GEM dotenv-rails (2.7.5) dotenv (= 2.7.5) railties (>= 3.2, < 6.1) + e2mmap (0.1.0) elasticsearch (5.0.5) elasticsearch-api (= 5.0.5) elasticsearch-transport (= 5.0.5) @@ -137,36 +141,36 @@ GEM multi_json equalizer (0.0.11) erubi (1.10.0) - et-orbi (1.2.1) + et-orbi (1.2.7) tzinfo faker (2.10.2) i18n (>= 1.6, < 2) faraday (0.17.3) multipart-post (>= 1.2, < 3) - ffi (1.15.4) + ffi (1.15.5) foreman (0.87.0) forgery (0.7.0) friendly_id (5.1.0) activerecord (>= 4.0.0) - fugit (1.3.1) + fugit (1.5.2) et-orbi (~> 1.1, >= 1.1.8) - raabro (~> 1.1) - globalid (0.4.2) - activesupport (>= 4.2.0) + raabro (~> 1.4) + globalid (1.0.0) + activesupport (>= 5.0) hashdiff (1.0.1) hashery (2.1.2) hashie (4.1.0) htmlentities (4.3.4) - httparty (0.18.1) + httparty (0.20.0) mime-types (~> 3.0) multi_xml (>= 0.5.2) - i18n (1.8.10) + i18n (1.10.0) concurrent-ruby (~> 1.0) icalendar (2.5.3) ice_cube (~> 0.16) ice_cube (0.16.3) ice_nine (0.11.2) - image_processing (1.12.1) + image_processing (1.12.2) mini_magick (>= 4.9.5, < 5) ruby-vips (>= 2.0.17, < 3) jaro_winkler (1.5.4) @@ -193,25 +197,25 @@ GEM listen (3.0.8) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) - loofah (2.9.1) + loofah (2.14.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) - marcel (1.0.1) + marcel (1.0.2) message_format (0.0.6) twitter_cldr (~> 5.0) method_source (1.0.0) - mime-types (3.3.1) + mime-types (3.4.1) mime-types-data (~> 3.2015) - mime-types-data (3.2021.0225) + mime-types-data (3.2022.0105) mimemagic (0.4.3) nokogiri (~> 1) rake mini_magick (4.10.1) - mini_mime (1.1.0) - mini_portile2 (2.6.1) - minitest (5.14.4) + mini_mime (1.1.2) + mini_portile2 (2.8.0) + minitest (5.15.0) minitest-reporters (1.4.2) ansi builder @@ -222,8 +226,8 @@ GEM multi_xml (0.6.0) multipart-post (2.1.1) nio4r (2.5.8) - nokogiri (1.12.5) - mini_portile2 (~> 2.6.1) + nokogiri (1.13.3) + mini_portile2 (~> 2.8.0) racc (~> 1.4) notify_with (0.0.2) jbuilder (~> 2.0) @@ -245,8 +249,8 @@ GEM omniauth-rails_csrf_protection (0.1.2) actionpack (>= 4.2) omniauth (>= 1.3.1) - openlab_ruby (0.0.5) - httparty (~> 0.13) + openlab_ruby (0.0.7) + httparty (~> 0.20) orm_adapter (0.5.0) parallel (1.19.1) parser (2.7.0.4) @@ -269,35 +273,35 @@ GEM prawn-table (0.2.2) prawn (>= 1.3.0, < 3.0.0) public_suffix (4.0.6) - puma (4.3.9) + puma (4.3.11) nio4r (~> 2.0) pundit (2.1.0) activesupport (>= 3.0.0) - raabro (1.1.6) - racc (1.5.2) + raabro (1.4.0) + racc (1.6.0) rack (2.2.3) - rack-proxy (0.6.5) + rack-proxy (0.7.2) rack rack-test (1.1.0) rack (>= 1.0, < 3) railroady (1.5.3) - rails (5.2.6) - actioncable (= 5.2.6) - actionmailer (= 5.2.6) - actionpack (= 5.2.6) - actionview (= 5.2.6) - activejob (= 5.2.6) - activemodel (= 5.2.6) - activerecord (= 5.2.6) - activestorage (= 5.2.6) - activesupport (= 5.2.6) + rails (5.2.6.3) + actioncable (= 5.2.6.3) + actionmailer (= 5.2.6.3) + actionpack (= 5.2.6.3) + actionview (= 5.2.6.3) + activejob (= 5.2.6.3) + activemodel (= 5.2.6.3) + activerecord (= 5.2.6.3) + activestorage (= 5.2.6.3) + activesupport (= 5.2.6.3) bundler (>= 1.3.0) - railties (= 5.2.6) + railties (= 5.2.6.3) sprockets-rails (>= 2.0.0) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) - rails-html-sanitizer (1.3.0) + rails-html-sanitizer (1.4.2) loofah (~> 2.3) rails-observers (0.1.5) activemodel (>= 4.0) @@ -306,14 +310,14 @@ GEM rails_stdout_logging rails_serve_static_assets (0.0.5) rails_stdout_logging (0.0.5) - railties (5.2.6) - actionpack (= 5.2.6) - activesupport (= 5.2.6) + railties (5.2.6.3) + actionpack (= 5.2.6.3) + activesupport (= 5.2.6.3) method_source rake (>= 0.8.7) thor (>= 0.19.0, < 2.0) rainbow (3.0.0) - rake (13.0.3) + rake (13.0.6) rb-fsevent (0.10.3) rb-inotify (0.10.1) ffi (~> 1.0) @@ -321,7 +325,7 @@ GEM recurrence (1.3.0) activesupport i18n - redis (4.4.0) + redis (4.6.0) repost (0.3.2) responders (2.4.1) actionpack (>= 4.2.0, < 6.0) @@ -337,31 +341,43 @@ GEM unicode-display_width (~> 1.4.0) ruby-progressbar (1.10.1) ruby-rc4 (0.1.5) - ruby-vips (2.0.17) - ffi (~> 1.9) + ruby-vips (2.1.4) + ffi (~> 1.12) rubyXL (3.4.14) nokogiri (>= 1.10.8) rubyzip (>= 1.3.0) rubyzip (2.3.0) + rufus-scheduler (3.8.1) + fugit (~> 1.1, >= 1.1.6) safe_yaml (1.0.5) sassc (2.4.0) ffi (~> 1.9) seed_dump (3.3.1) activerecord (>= 4) activesupport (>= 4) - semantic_range (2.3.0) + semantic_range (3.0.0) sha3 (1.0.1) - sidekiq (6.2.1) + shakapacker (6.2.0) + activesupport (>= 5.2) + rack-proxy (>= 0.6.1) + railties (>= 5.2) + semantic_range (>= 2.3.0) + sidekiq (6.4.1) connection_pool (>= 2.2.2) rack (~> 2.0) redis (>= 4.2.0) - sidekiq-cron (1.1.0) - fugit (~> 1.1) - sidekiq (>= 4.2.1) - sidekiq-unique-jobs (6.0.22) + sidekiq-scheduler (3.1.1) + e2mmap + redis (>= 3, < 5) + rufus-scheduler (~> 3.2) + sidekiq (>= 3) + thwait + tilt (>= 1.4.0) + sidekiq-unique-jobs (7.1.15) + brpoplpush-redis_script (> 0.1.1, <= 2.0.0) concurrent-ruby (~> 1.0, >= 1.0.5) - sidekiq (>= 4.0, < 7.0) - thor (~> 0) + sidekiq (>= 5.0, < 8.0) + thor (>= 0.20, < 3.0) simplecov (0.19.0) docile (~> 1.1) simplecov-html (~> 0.11) @@ -371,12 +387,12 @@ GEM spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) spring (>= 1.2, < 3.0) - sprockets (4.0.2) + sprockets (4.0.3) concurrent-ruby (~> 1.0) rack (> 1, < 3) - sprockets-rails (3.2.2) - actionpack (>= 4.0) - activesupport (>= 4.0) + sprockets-rails (3.4.2) + actionpack (>= 5.2) + activesupport (>= 5.2) sprockets (>= 3.0.0) ssrf_filter (1.0.7) stripe (5.29.0) @@ -387,6 +403,9 @@ GEM tins (~> 1.0) thor (0.20.3) thread_safe (0.3.6) + thwait (0.2.0) + e2mmap + tilt (2.0.10) tins (1.25.0) sync ttfunk (1.5.1) @@ -417,12 +436,7 @@ GEM addressable (>= 2.3.6) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) - webpacker (5.2.1) - activesupport (>= 5.2) - rack-proxy (>= 0.6.1) - railties (>= 5.2) - semantic_range (>= 2.3.0) - websocket-driver (0.7.3) + websocket-driver (0.7.5) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) @@ -475,7 +489,7 @@ DEPENDENCIES pg_search prawn prawn-table - puma (= 4.3.9) + puma (= 4.3.11) pundit railroady rails (~> 5.2.4) @@ -492,9 +506,10 @@ DEPENDENCIES sassc seed_dump sha3 + shakapacker (= 6.2.0) sidekiq (>= 6.0.7) - sidekiq-cron - sidekiq-unique-jobs (~> 6.0.22) + sidekiq-scheduler + sidekiq-unique-jobs (~> 7.1.15) spring spring-watcher-listen (~> 2.0.0) stripe (= 5.29.0) @@ -503,7 +518,6 @@ DEPENDENCIES vcr (= 6.0.0) web-console (>= 3.3.0) webmock - webpacker (~> 5.x) BUNDLED WITH - 2.2.19 + 2.2.21 diff --git a/Procfile b/Procfile index e68a73938..64f020c5e 100644 --- a/Procfile +++ b/Procfile @@ -1,4 +1,3 @@ web: bundle exec rails server puma -p $PORT worker: bundle exec sidekiq -C ./config/sidekiq.yml -wp-client: bin/webpack-dev-server -wp-server: SERVER_BUNDLE_ONLY=yes bin/webpack --watch +webpack: bin/webpacker-dev-server diff --git a/app/controllers/api/auth_providers_controller.rb b/app/controllers/api/auth_providers_controller.rb index 071b6a927..f83915e9f 100644 --- a/app/controllers/api/auth_providers_controller.rb +++ b/app/controllers/api/auth_providers_controller.rb @@ -83,7 +83,7 @@ class API::AuthProvidersController < API::ApiController params.require(:auth_provider) .permit(:name, :providable_type, providable_attributes: [:id, :base_url, :token_endpoint, :authorization_endpoint, :logout_endpoint, - :profile_url, :client_id, :client_secret, + :profile_url, :client_id, :client_secret, :scopes, o_auth2_mappings_attributes: [:id, :local_model, :local_field, :api_field, :api_endpoint, :api_data_type, :_destroy, transformation: [:type, :format, :true_value, diff --git a/app/controllers/api/openlab_projects_controller.rb b/app/controllers/api/openlab_projects_controller.rb index d117725c6..1a19508e4 100644 --- a/app/controllers/api/openlab_projects_controller.rb +++ b/app/controllers/api/openlab_projects_controller.rb @@ -6,7 +6,7 @@ class API::OpenlabProjectsController < API::ApiController before_action :init_openlab def index - render json: @projets.search(params[:q], page: params[:page], per_page: params[:per_page]).response.body + render json: @projects.search(params[:q], page: params[:page], per_page: params[:per_page]).response.body rescue StandardError render json: { errors: ['service unavailable'] } end @@ -15,6 +15,6 @@ class API::OpenlabProjectsController < API::ApiController def init_openlab client = Openlab::Client.new(app_secret: Setting.get('openlab_app_secret')) - @projets = Openlab::Projects.new(client) + @projects = Openlab::Projects.new(client) end end diff --git a/app/frontend/packs/application.js.erb b/app/frontend/application.js.erb similarity index 76% rename from app/frontend/packs/application.js.erb rename to app/frontend/application.js.erb index d4c1eb9b3..f5b628cb1 100644 --- a/app/frontend/packs/application.js.erb +++ b/app/frontend/application.js.erb @@ -4,7 +4,7 @@ import 'regenerator-runtime/runtime'; import 'jquery'; import {} from 'jquery-ujs'; import 'bootstrap-sass'; -import '../src/javascript/lib/polyfill'; +import 'src/javascript/lib/polyfill'; import 'angular'; <% unless Rails.application.secrets.angular_locale == 'en-us' %> import 'angular-i18n/angular-locale_<%= Rails.application.secrets.angular_locale %>.js'; @@ -31,16 +31,15 @@ import 'ngUpload'; import 'jasny-bootstrap/js/fileinput'; import 'holderjs'; import 'AngularDevise'; -import '../src/javascript/lib/devise-modal'; +import 'src/javascript/lib/devise-modal'; import 'angular-growl-v2'; import 'angular-xeditable'; import 'checklist-model/checklist-model'; import 'angular-unsavedchanges/lib/unsavedChanges'; import 'angular-loading-bar/src/loading-bar'; import 'angular-scroll/angular-scroll'; -import 'angular-google-analytics/dist/angular-google-analytics'; -import '../src/javascript/lib/dirDisqus'; -import '../src/javascript/lib/humanize'; +import 'src/javascript/lib/dirDisqus'; +import 'src/javascript/lib/humanize'; import 'underscore/underscore'; import 'elasticsearch-browser/elasticsearch.angular'; import 'd3/d3'; @@ -56,7 +55,7 @@ import 'summernote'; import 'summernote/lang/summernote-<%= Rails.application.secrets.summernote_locale %>.js'; <% end %> import 'angular-summernote/dist/angular-summernote'; -import '../src/javascript/lib/summernote-ext-nugget'; +import 'src/javascript/lib/summernote-ext-nugget'; import '@claviska/jquery-minicolors/jquery.minicolors.js'; import 'angular-minicolors/angular-minicolors.js'; import 'angular-translate/dist/angular-translate'; @@ -80,18 +79,18 @@ import 'angular-ui-tour/app/angular-ui-tour'; import '@fortawesome/fontawesome-free'; import '@fortawesome/fontawesome-free/js/v4-shims'; -require('../src/javascript/app.js'); -require('../src/javascript/router.js'); -require('../src/javascript/plugins.js.erb'); +require('src/javascript/app.js'); +require('src/javascript/router.js'); +require('src/javascript/plugins.js.erb'); function importAll (r) { r.keys().forEach(r); } -importAll(require.context('../src/javascript/components/', true, /.*/)); -importAll(require.context('../src/javascript/controllers/', true, /.*/)); -importAll(require.context('../src/javascript/services/', true, /.*/)); -importAll(require.context('../src/javascript/directives/', true, /.*/)); -importAll(require.context('../src/javascript/filters/', true, /.*/)); -importAll(require.context('../src/javascript/typings/', true, /.*/)); +importAll(require.context('src/javascript/components/', true, /.*/)); +importAll(require.context('src/javascript/controllers/', true, /.*/)); +importAll(require.context('src/javascript/services/', true, /.*/)); +importAll(require.context('src/javascript/directives/', true, /.*/)); +importAll(require.context('src/javascript/filters/', true, /.*/)); +importAll(require.context('src/javascript/typings/', true, /.*/)); -importAll(require.context('../images', true)); -importAll(require.context('../templates', true)); +importAll(require.context('images', true)); +importAll(require.context('templates', true)); diff --git a/app/frontend/packs/application.scss b/app/frontend/application.scss similarity index 94% rename from app/frontend/packs/application.scss rename to app/frontend/application.scss index 47a92665f..35b05a8c7 100644 --- a/app/frontend/packs/application.scss +++ b/app/frontend/application.scss @@ -15,4 +15,4 @@ @import '~angular-aside/dist/css/angular-aside'; @import '~codemirror/lib/codemirror'; -@import '../src/stylesheets/application.scss'; +@import 'src/stylesheets/application.scss'; diff --git a/app/frontend/packs/printer.scss b/app/frontend/packs/printer.scss deleted file mode 100644 index 3217d3129..000000000 --- a/app/frontend/packs/printer.scss +++ /dev/null @@ -1,2 +0,0 @@ - -@import '../src/stylesheets/app.printer'; diff --git a/app/frontend/packs/plugins.scss.erb b/app/frontend/plugins.scss.erb similarity index 100% rename from app/frontend/packs/plugins.scss.erb rename to app/frontend/plugins.scss.erb diff --git a/app/frontend/printer.scss b/app/frontend/printer.scss new file mode 100644 index 000000000..90a027da3 --- /dev/null +++ b/app/frontend/printer.scss @@ -0,0 +1,2 @@ + +@import 'src/stylesheets/app.printer'; diff --git a/app/frontend/src/javascript/api/space.ts b/app/frontend/src/javascript/api/space.ts index 6f1d9c9b9..ea2f7b5ff 100644 --- a/app/frontend/src/javascript/api/space.ts +++ b/app/frontend/src/javascript/api/space.ts @@ -3,7 +3,7 @@ import { AxiosResponse } from 'axios'; import { Space } from '../models/space'; export default class SpaceAPI { - static async index (): Promise> { + static async index (): Promise> { const res: AxiosResponse> = await apiClient.get('/api/spaces'); return res?.data; } @@ -12,5 +12,4 @@ export default class SpaceAPI { const res: AxiosResponse = await apiClient.get(`/api/spaces/${id}`); return res?.data; } - } diff --git a/app/frontend/src/javascript/app.js b/app/frontend/src/javascript/app.js index 429365a3f..dcd13a2b4 100644 --- a/app/frontend/src/javascript/app.js +++ b/app/frontend/src/javascript/app.js @@ -5,6 +5,7 @@ * creating namespaces and moduled for controllers, filters, services, and directives. */ +// eslint-disable-next-line no-var -- Application is a global variable. var Application = Application || {}; Application.Components = angular.module('application.components', []); @@ -17,22 +18,17 @@ angular.module('application', ['ngCookies', 'ngResource', 'ngSanitize', 'ui.rout 'ngUpload', 'duScroll', 'application.filters', 'application.services', 'application.directives', 'frapontillo.bootstrap-switch', 'application.controllers', 'application.router', 'application.components', 'ui.select', 'ui.calendar', 'angularMoment', 'Devise', 'angular-growl', 'xeditable', - 'checklist-model', 'unsavedChanges', 'angular-loading-bar', 'ngTouch', 'angular-google-analytics', + 'checklist-model', 'unsavedChanges', 'angular-loading-bar', 'ngTouch', 'angularUtils.directives.dirDisqus', 'summernote', 'elasticsearch', 'angular-medium-editor', 'naif.base64', 'minicolors', 'pascalprecht.translate', 'ngFitText', 'ngAside', 'ngCapsLock', 'vcRecaptcha', 'ui.codemirror', 'bm.uiTour']) - .config(['$httpProvider', 'AuthProvider', 'growlProvider', 'unsavedWarningsConfigProvider', 'AnalyticsProvider', 'uibDatepickerPopupConfig', '$provide', '$translateProvider', 'TourConfigProvider', - function ($httpProvider, AuthProvider, growlProvider, unsavedWarningsConfigProvider, AnalyticsProvider, uibDatepickerPopupConfig, $provide, $translateProvider, TourConfigProvider) { + .config(['$httpProvider', 'AuthProvider', 'growlProvider', 'unsavedWarningsConfigProvider', 'uibDatepickerPopupConfig', '$provide', '$translateProvider', 'TourConfigProvider', '$sceDelegateProvider', + function ($httpProvider, AuthProvider, growlProvider, unsavedWarningsConfigProvider, uibDatepickerPopupConfig, $provide, $translateProvider, TourConfigProvider, $sceDelegateProvider) { // Google analytics // first we check the user acceptance const cookiesConsent = document.cookie.replace(/(?:(?:^|.*;\s*)fab-manager-cookies-consent\s*=\s*([^;]*).*$)|^.*$/, '$1'); if (cookiesConsent === 'accept') { - AnalyticsProvider.setAccount(Fablab.trackingId); - // track all routes (or not) - AnalyticsProvider.trackPages(true); - AnalyticsProvider.setDomainName(Fablab.baseHostUrl); - AnalyticsProvider.useAnalytics(true); - AnalyticsProvider.setPageEvent('$stateChangeSuccess'); + GTM.enableAnalytics(Fablab.trackingId); } else { // if the cookies were not explicitly accepted, delete them document.cookie = '_ga=; expires=Thu, 01 Jan 1970 00:00:00 GMT'; @@ -65,8 +61,10 @@ angular.module('application', ['ngCookies', 'ngResource', 'ngSanitize', 'ui.rout $translateProvider.preferredLanguage(Fablab.locale); // End the tour when the user clicks the forward or back buttons of the browser TourConfigProvider.enableNavigationInterceptors(); - }]).run(['$rootScope', '$log', 'Auth', 'amMoment', '$state', 'editableOptions', 'Analytics', - function ($rootScope, $log, Auth, amMoment, $state, editableOptions, Analytics) { + + $sceDelegateProvider.resourceUrlWhitelist(['self']); + }]).run(['$rootScope', '$transitions', '$log', 'Auth', 'amMoment', '$state', 'editableOptions', + function ($rootScope, $transitions, $log, Auth, amMoment, $state, editableOptions) { // Angular-moment (date-time manipulations library) amMoment.changeLocale(Fablab.moment_locale); @@ -75,9 +73,12 @@ angular.module('application', ['ngCookies', 'ngResource', 'ngSanitize', 'ui.rout // Alter the UI-Router's $state, registering into some information concerning the previous $state. // This is used to allow the user to navigate to the previous state - $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) { - $state.prevState = fromState; - $state.prevParams = fromParams; + $transitions.onSuccess({ }, function (trans) { + $state.prevState = trans.$from().name; + $state.prevParams = trans.$from().params; + + const path = trans.router.stateService.href(trans.$to(), {}, { absolute: true }); + GTM.trackPage(path, trans.$to().name); }); // Global function to allow the user to navigate to the previous screen (ie. $state). @@ -85,7 +86,7 @@ angular.module('application', ['ngCookies', 'ngResource', 'ngSanitize', 'ui.rout $rootScope.backPrevLocation = function (event) { event.preventDefault(); event.stopPropagation(); - if ($state.prevState.name === '') { + if ($state.prevState === '') { $state.prevState = 'app.public.home'; } $state.go($state.prevState, $state.prevParams); @@ -112,9 +113,9 @@ angular.module('application', ['ngCookies', 'ngResource', 'ngSanitize', 'ui.rout // Prevent the usage of the application for members with incomplete profiles: they will be redirected to // the 'profile completion' page. This is especially useful for user's accounts imported through SSO. - $rootScope.$on('$stateChangeStart', function (event, toState) { + $transitions.onStart({}, function (trans) { Auth.currentUser().then(function (currentUser) { - if (currentUser.need_completion && toState.name !== 'app.logged.profileCompletion') { + if (currentUser.need_completion && trans.$to().name !== 'app.logged.profileCompletion') { $state.go('app.logged.profileCompletion'); } }).catch(() => { @@ -122,10 +123,6 @@ angular.module('application', ['ngCookies', 'ngResource', 'ngSanitize', 'ui.rout }); }); - // This code does nothing but it is here to remember to not remove the Analytics dependency, - // see https://github.com/revolunet/angular-google-analytics#automatic-page-view-tracking - Analytics.pageView(); - /** * This helper method builds and return an array containing every integers between * the provided start and end. diff --git a/app/frontend/src/javascript/components/base/rhf-input.tsx b/app/frontend/src/javascript/components/base/rhf-input.tsx index 941bd5b88..152e477bd 100644 --- a/app/frontend/src/javascript/components/base/rhf-input.tsx +++ b/app/frontend/src/javascript/components/base/rhf-input.tsx @@ -1,5 +1,6 @@ import React, { ReactNode } from 'react'; import { FieldErrors, UseFormRegister, Validate } from 'react-hook-form'; +import { FieldValues } from 'react-hook-form/dist/types/fields'; type inputType = string|number|readonly string []; type ruleTypes = { @@ -9,12 +10,12 @@ type ruleTypes = { maxLenght?: number, min?: number, max?: number, - validate?: Validate; + validate?: Validate; }; interface RHFInputProps { id: string, - register: UseFormRegister, + register: UseFormRegister, label?: string, tooltip?: string, defaultValue?: inputType, diff --git a/app/frontend/src/javascript/components/base/text-editor/iframe.tsx b/app/frontend/src/javascript/components/base/text-editor/iframe.tsx index 0263800f9..8ef646560 100644 --- a/app/frontend/src/javascript/components/base/text-editor/iframe.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/iframe.tsx @@ -3,7 +3,7 @@ import { Node } from '@tiptap/core'; export interface IframeOptions { allowFullscreen: boolean, HTMLAttributes: { - [key: string]: any + [key: string]: string }, } diff --git a/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx b/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx index 75feb9514..f031ecca7 100644 --- a/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx +++ b/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx @@ -14,6 +14,7 @@ import WalletAPI from '../../api/wallet'; import { Invoice } from '../../models/invoice'; import SettingAPI from '../../api/setting'; import { SettingName } from '../../models/setting'; +import { GoogleTagManager } from '../../models/gtm'; import { ComputePriceResult } from '../../models/price'; import { Wallet } from '../../models/wallet'; import FormatLib from '../../lib/format'; @@ -52,6 +53,8 @@ interface AbstractPaymentModalProps { modalSize?: ModalSize, } +declare const GTM: GoogleTagManager; + /** * This component is an abstract modal that must be extended by each payment gateway to include its payment form. * @@ -90,7 +93,9 @@ export const AbstractPaymentModal: React.FC = ({ isOp CustomAssetAPI.get(CustomAssetName.CgvFile).then(asset => setCgv(asset)); SettingAPI.get(SettingName.PaymentGateway).then((setting) => { // we capitalize the first letter of the name - setGateway(setting.value.replace(/^\w/, (c) => c.toUpperCase())); + if (setting.value) { + setGateway(setting.value.replace(/^\w/, (c) => c.toUpperCase())); + } }); return () => { mounted.current = false; }; @@ -154,6 +159,7 @@ export const AbstractPaymentModal: React.FC = ({ isOp */ const handleFormSuccess = async (result: Invoice|PaymentSchedule): Promise => { setSubmitState(false); + GTM.trackPurchase(result.id, result.total); afterSuccess(result); }; diff --git a/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx b/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx index 3b62d3a89..04afd8922 100644 --- a/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx +++ b/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx @@ -11,7 +11,7 @@ import { PaymentSchedule } from '../../../models/payment-schedule'; * A form component to collect the credit card details and to create the payment method on Stripe. * The form validation button must be created elsewhere, using the attribute form={formId}. */ -export const StripeForm: React.FC = ({ onSubmit, onSuccess, onError, children, className, paymentSchedule = false, cart, customer, operator, formId }) => { +export const StripeForm: React.FC = ({ onSubmit, onSuccess, onError, children, className, paymentSchedule = false, cart, formId }) => { const { t } = useTranslation('shared'); const stripe = useStripe(); diff --git a/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx b/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx index 595d0ac8c..b31a6d544 100644 --- a/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx +++ b/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx @@ -26,7 +26,6 @@ interface FreeExtendModalProps { * Modal dialog shown to extend the current subscription of a customer, for free */ const FreeExtendModal: React.FC = ({ isOpen, toggleModal, subscription, customerId, onError, onSuccess }) => { - // we do not render the modal if the subscription was not provided if (!subscription) return null; diff --git a/app/frontend/src/javascript/controllers/admin/authentications.js b/app/frontend/src/javascript/controllers/admin/authentications.js index ee9638429..9bbe4a3d3 100644 --- a/app/frontend/src/javascript/controllers/admin/authentications.js +++ b/app/frontend/src/javascript/controllers/admin/authentications.js @@ -318,8 +318,8 @@ Application.Controllers.controller('NewAuthenticationController', ['$scope', '$s /** * Page to edit an already added authentication provider */ -Application.Controllers.controller('EditAuthenticationController', ['$scope', '$state', '$stateParams', '$rootScope', '$uibModal', 'dialogs', 'growl', 'providerPromise', 'mappingFieldsPromise', 'AuthProvider', '_t', - function ($scope, $state, $stateParams, $rootScope, $uibModal, dialogs, growl, providerPromise, mappingFieldsPromise, AuthProvider, _t) { +Application.Controllers.controller('EditAuthenticationController', ['$scope', '$state', '$rootScope', '$uibModal', 'dialogs', 'growl', 'providerPromise', 'mappingFieldsPromise', 'AuthProvider', '_t', + function ($scope, $state, $rootScope, $uibModal, dialogs, growl, providerPromise, mappingFieldsPromise, AuthProvider, _t) { // parameters of the currently edited authentication provider $scope.provider = providerPromise; diff --git a/app/frontend/src/javascript/controllers/admin/events.js b/app/frontend/src/javascript/controllers/admin/events.js index ecd75667d..879294c9a 100644 --- a/app/frontend/src/javascript/controllers/admin/events.js +++ b/app/frontend/src/javascript/controllers/admin/events.js @@ -619,12 +619,12 @@ Application.Controllers.controller('NewEventController', ['$scope', '$state', 'C /** * Controller used in the events edition page */ -Application.Controllers.controller('EditEventController', ['$scope', '$state', '$stateParams', 'CSRF', 'eventPromise', 'categoriesPromise', 'themesPromise', 'ageRangesPromise', 'priceCategoriesPromise', '$uibModal', 'growl', '_t', - function ($scope, $state, $stateParams, CSRF, eventPromise, categoriesPromise, themesPromise, ageRangesPromise, priceCategoriesPromise, $uibModal, growl, _t) { +Application.Controllers.controller('EditEventController', ['$scope', '$state', '$transition$', 'CSRF', 'eventPromise', 'categoriesPromise', 'themesPromise', 'ageRangesPromise', 'priceCategoriesPromise', '$uibModal', 'growl', '_t', + function ($scope, $state, $transition$, CSRF, eventPromise, categoriesPromise, themesPromise, ageRangesPromise, priceCategoriesPromise, $uibModal, growl, _t) { /* PUBLIC SCOPE */ // API URL where the form will be posted - $scope.actionUrl = `/api/events/${$stateParams.id}`; + $scope.actionUrl = `/api/events/${$transition$.params().id}`; // Form action on the above URL $scope.method = 'put'; diff --git a/app/frontend/src/javascript/controllers/admin/graphs.js b/app/frontend/src/javascript/controllers/admin/graphs.js index 03f55cb87..d5ec66f1b 100644 --- a/app/frontend/src/javascript/controllers/admin/graphs.js +++ b/app/frontend/src/javascript/controllers/admin/graphs.js @@ -4,7 +4,7 @@ no-undef, no-unreachable, no-unused-vars, - standard/no-callback-literal, + n/no-callback-literal, */ // TODO: This file was created by bulk-decaffeinate. // Fix any style issues and re-enable lint. @@ -17,8 +17,8 @@ */ 'use strict'; -Application.Controllers.controller('GraphsController', ['$scope', '$state', '$rootScope', 'es', 'Statistics', '_t', - function ($scope, $state, $rootScope, es, Statistics, _t) { +Application.Controllers.controller('GraphsController', ['$scope', '$state', '$rootScope', '$transitions', 'es', 'Statistics', '_t', + function ($scope, $state, $rootScope, $transitions, es, Statistics, _t) { /* PRIVATE STATIC CONSTANTS */ // height of the HTML/SVG charts elements in pixels @@ -167,8 +167,8 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro // workaround for angular-bootstrap::tabs behavior: on tab deletion, another tab will be selected // which will cause every tabs to reload, one by one, when the view is closed - $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) { - if ((fromState.name === 'app.admin.stats_graphs') && (Object.keys(fromParams).length === 0)) { + $transitions.onStart({ to: 'app.admin.stats_graphs' }, function (trans) { + if (Object.keys(trans.from().params).length === 0) { return $scope.preventRefresh = true; } }); @@ -179,7 +179,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param $event {Object} jQuery event object * @param datePicker {Object} settings object of the concerned datepicker. Must have an 'opened' property */ - var toggleDatePicker = function ($event, datePicker) { + const toggleDatePicker = function ($event, datePicker) { $event.preventDefault(); $event.stopPropagation(); return datePicker.opened = !datePicker.opened; @@ -188,7 +188,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro /** * Query elasticSearch according to the current parameters and update the chart */ - var refreshChart = function () { + const refreshChart = function () { if ($scope.selectedIndex && !$scope.preventRefresh) { return query($scope.selectedIndex, function (aggregations, error) { if (error) { @@ -239,7 +239,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * Format aggregations as retuned by elasticSearch to an understandable format for NVD3 * @param aggs {Object} as returned by elasticsearch */ - var formatAggregations = function (aggs) { + const formatAggregations = function (aggs) { const format = {}; angular.forEach(aggs, function (type, type_key) { // go through aggs[$TYPE] where $TYPE = month|year|hour|booking|... @@ -254,7 +254,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro const cur_subtype = cur_type.subtypes[it_st]; if (subgroup.key === cur_subtype.key) { // ... which match $SUBTYPE // then we construct NVD3 dataSource according to these information - var dataSource = { + const dataSource = { values: [], key: cur_subtype.label, total: 0, @@ -292,7 +292,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param limit {number} limit the number of stats in the bar chart * @param typeKey {String} field name witch results are grouped by */ - var formatRankingAggregations = function (aggs, limit, typeKey) { + const formatRankingAggregations = function (aggs, limit, typeKey) { const format = { ranking: [] }; @@ -325,7 +325,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param key {string} raw value of the label * @param typeKey {string} name of the field the results are grouped by */ - var getRankingLabel = function (key, typeKey) { + const getRankingLabel = function (key, typeKey) { if ($scope.selectedIndex) { if (typeKey === 'subType') { for (const type of Array.from($scope.selectedIndex.types)) { @@ -356,7 +356,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param callback {function} function be to run after results were retrieved, * it will receive two parameters : results {Array}, error {String} (if any) */ - var query = function (index, callback) { + const query = function (index, callback) { // invalid callback handeling if (typeof (callback) !== 'function') { console.error('[graphsController::query] Error: invalid callback provided'); @@ -384,7 +384,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro let type_it = 0; const results = {}; let error = ''; - var recursiveCb = function () { + const recursiveCb = function () { if (type_it < stat_types.length) { return queryElasticStats(index.es_type_key, stat_types[type_it], function (prevResults, prevError) { if (prevError) { @@ -418,7 +418,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param callback {function} function be to run after results were retrieved, * it will receive two parameters : results {Array}, error {String} (if any) */ - var queryElasticStats = function (esType, statType, callback) { + const queryElasticStats = function (esType, statType, callback) { // handle invalid callback if (typeof (callback) !== 'function') { console.error('[graphsController::queryElasticStats] Error: invalid callback provided'); @@ -457,7 +457,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param callback {function} function be to run after results were retrieved, * it will receive two parameters : results {Array}, error {String} (if any) */ - var queryElasticRanking = function (esType, groupKey, sortKey, callback) { + const queryElasticRanking = function (esType, groupKey, sortKey, callback) { // handle invalid callback if (typeof (callback) !== 'function') { return console.error('[graphsController::queryElasticRanking] Error: invalid callback provided'); @@ -497,15 +497,13 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param intervalBegin {moment} statitics interval beginning (moment.js type) * @param intervalEnd {moment} statitics interval ending (moment.js type) */ - var buildElasticAggregationsQuery = function (type, interval, intervalBegin, intervalEnd) { + const buildElasticAggregationsQuery = function (type, interval, intervalBegin, intervalEnd) { const q = { query: { bool: { must: [ { - match: { - type: type - } + match: { type } }, { range: { @@ -527,7 +525,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro intervals: { date_histogram: { field: 'date', - interval: interval, + interval, min_doc_count: 0, extended_bounds: { min: intervalBegin.valueOf(), @@ -566,7 +564,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param intervalBegin {moment} statitics interval beginning (moment.js type) * @param intervalEnd {moment} statitics interval ending (moment.js type) */ - var buildElasticAggregationsRankingQuery = function (groupKey, sortKey, intervalBegin, intervalEnd) { + const buildElasticAggregationsRankingQuery = function (groupKey, sortKey, intervalBegin, intervalEnd) { const q = { query: { bool: { @@ -635,7 +633,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param data {Array} array of NVD3 dataSources * @param type {String} which chart to update (statistic type key) */ - var updateChart = function (chart_type, data, type) { + const updateChart = function (chart_type, data, type) { const id = `#chart-${type} svg`; // clean old charts @@ -695,7 +693,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro /** * Given an NVD3 line chart axis, scale it to display ordinated dates, according to the given arguments */ - var setTimeScale = function (nvd3Axis, nvd3Scale, argsArray) { + const setTimeScale = function (nvd3Axis, nvd3Scale, argsArray) { const scale = d3.time.scale(); nvd3Axis.scale(scale); @@ -710,7 +708,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro /** * Translate line chart data in dates row to bar chart data, one bar per type. */ - var prepareDataForBarChart = function (data, type) { + const prepareDataForBarChart = function (data, type) { const newData = [{ key: type, values: [] @@ -738,7 +736,7 @@ Application.Controllers.controller('GraphsController', ['$scope', '$state', '$ro * @param getValue {function} the callback which will return the value on which the sort will occurs * @returns {Array} */ - var stableSort = function (array, order, getValue) { + const stableSort = function (array, order, getValue) { // prepare sorting const keys_order = []; const result = []; diff --git a/app/frontend/src/javascript/controllers/admin/groups.js b/app/frontend/src/javascript/controllers/admin/groups.js index e102117c6..a93e05caf 100644 --- a/app/frontend/src/javascript/controllers/admin/groups.js +++ b/app/frontend/src/javascript/controllers/admin/groups.js @@ -55,13 +55,13 @@ Application.Controllers.controller('GroupsController', ['$scope', 'groupsPromise $scope.saveGroup = function (data, id) { if (id != null) { return Group.update({ id }, { group: data }, response => growl.success(_t('app.admin.members.group_form.changes_successfully_saved')) - , error => growl.error(_t('app.admin.members.group_form.an_error_occurred_while_saving_changes'))); + , () => growl.error(_t('app.admin.members.group_form.an_error_occurred_while_saving_changes'))); } else { return Group.save({ group: data }, function (resp) { growl.success(_t('app.admin.members.group_form.new_group_successfully_saved')); return $scope.groups[$scope.groups.length - 1].id = resp.id; } - , function (error) { + , function () { growl.error(_t('app.admin.members.group_form.an_error_occurred_when_saving_the_new_group')); return $scope.groups.splice($scope.groups.length - 1, 1); }); @@ -77,7 +77,7 @@ Application.Controllers.controller('GroupsController', ['$scope', 'groupsPromise growl.success(_t('app.admin.members.group_form.group_successfully_deleted')); return $scope.groups.splice(index, 1); } - , error => growl.error(_t('app.admin.members.group_form.unable_to_delete_group_because_some_users_and_or_groups_are_still_linked_to_it'))); + , () => growl.error(_t('app.admin.members.group_form.unable_to_delete_group_because_some_users_and_or_groups_are_still_linked_to_it'))); /** * Enable/disable the group at the specified index @@ -92,7 +92,7 @@ Application.Controllers.controller('GroupsController', ['$scope', 'groupsPromise $scope.groups[index] = response; return growl.success(_t('app.admin.members.group_form.group_successfully_enabled_disabled', { STATUS: response.disabled })); } - , error => growl.error(_t('app.admin.members.group_form.unable_to_enable_disable_group', { STATUS: !group.disabled }))); + , () => growl.error(_t('app.admin.members.group_form.unable_to_enable_disable_group', { STATUS: !group.disabled }))); } }; } diff --git a/app/frontend/src/javascript/controllers/admin/invoices.js b/app/frontend/src/javascript/controllers/admin/invoices.js index c78f857ec..b8f554668 100644 --- a/app/frontend/src/javascript/controllers/admin/invoices.js +++ b/app/frontend/src/javascript/controllers/admin/invoices.js @@ -195,6 +195,14 @@ Application.Controllers.controller('InvoicesController', ['$scope', '$state', 'I name: 'accounting_Space_label', value: settings.accounting_Space_label }, + packCode: { + name: 'accounting_Pack_code', + value: settings.accounting_Pack_code + }, + packLabel: { + name: 'accounting_Pack_label', + value: settings.accounting_Pack_label + }, errorCode: { name: 'accounting_Error_code', value: settings.accounting_Error_code @@ -1239,7 +1247,7 @@ Application.Controllers.controller('AvoirModalController', ['$scope', '$uibModal function (avoir) { // success $uibModalInstance.close({ avoir, invoice: $scope.invoice }); }, - function (err) { // failed + function () { // failed growl.error(_t('app.admin.invoices.unable_to_create_the_refund')); } ); diff --git a/app/frontend/src/javascript/controllers/admin/members.js b/app/frontend/src/javascript/controllers/admin/members.js index e2670a1d8..959e243ad 100644 --- a/app/frontend/src/javascript/controllers/admin/members.js +++ b/app/frontend/src/javascript/controllers/admin/members.js @@ -650,12 +650,12 @@ Application.Controllers.controller('AdminMembersController', ['$scope', '$sce', /** * Controller used in the member edition page */ -Application.Controllers.controller('EditMemberController', ['$scope', '$state', '$stateParams', 'Member', 'Training', 'dialogs', 'growl', 'Group', 'Subscription', 'CSRF', 'memberPromise', 'tagsPromise', '$uibModal', 'Plan', '$filter', '_t', 'walletPromise', 'transactionsPromise', 'activeProviderPromise', 'Wallet', 'settingsPromise', - function ($scope, $state, $stateParams, Member, Training, dialogs, growl, Group, Subscription, CSRF, memberPromise, tagsPromise, $uibModal, Plan, $filter, _t, walletPromise, transactionsPromise, activeProviderPromise, Wallet, settingsPromise) { +Application.Controllers.controller('EditMemberController', ['$scope', '$state', '$transition$', 'Member', 'Training', 'dialogs', 'growl', 'Group', 'Subscription', 'CSRF', 'memberPromise', 'tagsPromise', '$uibModal', 'Plan', '$filter', '_t', 'walletPromise', 'transactionsPromise', 'activeProviderPromise', 'Wallet', 'settingsPromise', + function ($scope, $state, $transition$, Member, Training, dialogs, growl, Group, Subscription, CSRF, memberPromise, tagsPromise, $uibModal, Plan, $filter, _t, walletPromise, transactionsPromise, activeProviderPromise, Wallet, settingsPromise) { /* PUBLIC SCOPE */ // API URL where the form will be posted - $scope.actionUrl = `/api/members/${$stateParams.id}`; + $scope.actionUrl = `/api/members/${$transition$.params().id}`; // Form action on the above URL $scope.method = 'patch'; @@ -922,8 +922,8 @@ Application.Controllers.controller('EditMemberController', ['$scope', '$state', /** * Controller used in the member's creation page (admin view) */ -Application.Controllers.controller('NewMemberController', ['$scope', '$state', '$stateParams', 'Member', 'Training', 'Group', 'CSRF', 'settingsPromise', - function ($scope, $state, $stateParams, Member, Training, Group, CSRF, settingsPromise) { +Application.Controllers.controller('NewMemberController', ['$scope', '$state', 'Member', 'Training', 'Group', 'CSRF', 'settingsPromise', + function ($scope, $state, Member, Training, Group, CSRF, settingsPromise) { CSRF.setMetaTags(); /* PUBLIC SCOPE */ diff --git a/app/frontend/src/javascript/controllers/admin/plans.js b/app/frontend/src/javascript/controllers/admin/plans.js index 16b2835ce..81d6965f8 100644 --- a/app/frontend/src/javascript/controllers/admin/plans.js +++ b/app/frontend/src/javascript/controllers/admin/plans.js @@ -224,8 +224,8 @@ Application.Controllers.controller('NewPlanController', ['$scope', '$uibModal', /** * Controller used in the plan edition form */ -Application.Controllers.controller('EditPlanController', ['$scope', 'groups', 'plans', 'planPromise', 'machines', 'spaces', 'prices', 'partners', 'CSRF', '$state', '$stateParams', 'growl', '$filter', '_t', 'Plan', 'planCategories', - function ($scope, groups, plans, planPromise, machines, spaces, prices, partners, CSRF, $state, $stateParams, growl, $filter, _t, Plan, planCategories) { +Application.Controllers.controller('EditPlanController', ['$scope', 'groups', 'plans', 'planPromise', 'machines', 'spaces', 'prices', 'partners', 'CSRF', '$state', '$transition$', 'growl', '$filter', '_t', 'Plan', 'planCategories', + function ($scope, groups, plans, planPromise, machines, spaces, prices, partners, CSRF, $state, $transition$, growl, $filter, _t, Plan, planCategories) { /* PUBLIC SCOPE */ // List of spaces @@ -254,7 +254,7 @@ Application.Controllers.controller('EditPlanController', ['$scope', 'groups', 'p if ($scope.plan.disabled) { $scope.plan.disabled = 'true'; } // API URL where the form will be posted - $scope.actionUrl = `/api/plans/${$stateParams.id}`; + $scope.actionUrl = `/api/plans/${$transition$.params().id}`; // HTTP method for the rest API $scope.method = 'PATCH'; diff --git a/app/frontend/src/javascript/controllers/admin/pricing.js b/app/frontend/src/javascript/controllers/admin/pricing.js index 1337cbd22..3505bfcb1 100644 --- a/app/frontend/src/javascript/controllers/admin/pricing.js +++ b/app/frontend/src/javascript/controllers/admin/pricing.js @@ -403,7 +403,7 @@ Application.Controllers.controller('EditPricingController', ['$scope', '$state', $scope.spaceCredits[$scope.spaceCredits.length - 1].id = resp.id; return growl.success(_t('app.admin.pricing.credit_was_successfully_saved')); } - , function (err) { + , function () { $scope.spaceCredits.pop(); return growl.error(_t('app.admin.pricing.error_creating_credit')); }); diff --git a/app/frontend/src/javascript/controllers/admin/statistics.js b/app/frontend/src/javascript/controllers/admin/statistics.js index a08a5c2cb..102523e1c 100644 --- a/app/frontend/src/javascript/controllers/admin/statistics.js +++ b/app/frontend/src/javascript/controllers/admin/statistics.js @@ -2,7 +2,7 @@ no-constant-condition, no-return-assign, no-undef, - standard/no-callback-literal, + n/no-callback-literal, */ // TODO: This file was created by bulk-decaffeinate. // Fix any style issues and re-enable lint. @@ -15,8 +15,8 @@ */ 'use strict'; -Application.Controllers.controller('StatisticsController', ['$scope', '$state', '$rootScope', '$uibModal', 'es', 'Member', '_t', 'membersPromise', 'statisticsPromise', 'uiTourService', 'settingsPromise', - function ($scope, $state, $rootScope, $uibModal, es, Member, _t, membersPromise, statisticsPromise, uiTourService, settingsPromise) { +Application.Controllers.controller('StatisticsController', ['$scope', '$state', '$transitions', '$rootScope', '$uibModal', 'es', 'Member', '_t', 'membersPromise', 'statisticsPromise', 'uiTourService', 'settingsPromise', + function ($scope, $state, $transitions, $rootScope, $uibModal, es, Member, _t, membersPromise, statisticsPromise, uiTourService, settingsPromise) { /* PRIVATE STATIC CONSTANTS */ // search window size @@ -407,8 +407,8 @@ Application.Controllers.controller('StatisticsController', ['$scope', '$state', const initialize = function () { // workaround for angular-bootstrap::tabs behavior: on tab deletion, another tab will be selected // which will cause every tabs to reload, one by one, when the view is closed - $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) { - if ((fromState.name === 'app.admin.statistics') && (Object.keys(fromParams).length === 0)) { + $transitions.onStart({ to: 'app.admin.statistics' }, function (trans) { + if (Object.keys(trans.from().params).length === 0) { return $scope.preventRefresh = true; } }); @@ -522,9 +522,7 @@ Application.Controllers.controller('StatisticsController', ['$scope', '$state', bool: { must: [ { - term: { - type: type - } + term: { type } }, { range: { diff --git a/app/frontend/src/javascript/controllers/admin/tags.js b/app/frontend/src/javascript/controllers/admin/tags.js index 4faa51851..494718141 100644 --- a/app/frontend/src/javascript/controllers/admin/tags.js +++ b/app/frontend/src/javascript/controllers/admin/tags.js @@ -45,13 +45,13 @@ Application.Controllers.controller('TagsController', ['$scope', 'tagsPromise', ' $scope.saveTag = function (data, id) { if (id != null) { return Tag.update({ id }, { tag: data }, response => growl.success(_t('app.admin.members.tag_form.changes_successfully_saved')) - , error => growl.error(_t('app.admin.members.tag_form.an_error_occurred_while_saving_changes'))); + , () => growl.error(_t('app.admin.members.tag_form.an_error_occurred_while_saving_changes'))); } else { return Tag.save({ tag: data }, function (resp) { growl.success(_t('app.admin.members.tag_form.new_tag_successfully_saved')); return $scope.tags[$scope.tags.length - 1].id = resp.id; } - , function (error) { + , function () { growl.error(_t('app.admin.members.tag_form.an_error_occurred_while_saving_the_new_tag')); return $scope.tags.splice($scope.tags.length - 1, 1); }); @@ -78,7 +78,7 @@ Application.Controllers.controller('TagsController', ['$scope', 'tagsPromise', ' growl.success(_t('app.admin.members.tag_form.tag_successfully_deleted')); return $scope.tags.splice(index, 1); } - , error => growl.error(_t('app.admin.members.tag_form.an_error_occurred_and_the_tag_deletion_failed'))); + , () => growl.error(_t('app.admin.members.tag_form.an_error_occurred_and_the_tag_deletion_failed'))); }); } diff --git a/app/frontend/src/javascript/controllers/admin/trainings.js b/app/frontend/src/javascript/controllers/admin/trainings.js index f4d9aa6c4..ef0b8f302 100644 --- a/app/frontend/src/javascript/controllers/admin/trainings.js +++ b/app/frontend/src/javascript/controllers/admin/trainings.js @@ -114,15 +114,15 @@ Application.Controllers.controller('NewTrainingController', ['$scope', '$state', /** * Controller used in the training edition page (admin) */ -Application.Controllers.controller('EditTrainingController', ['$scope', '$state', '$stateParams', 'trainingPromise', 'machinesPromise', 'CSRF', - function ($scope, $state, $stateParams, trainingPromise, machinesPromise, CSRF) { +Application.Controllers.controller('EditTrainingController', ['$scope', '$state', '$transition$', 'trainingPromise', 'machinesPromise', 'CSRF', + function ($scope, $state, $transition$, trainingPromise, machinesPromise, CSRF) { /* PUBLIC SCOPE */ // Form action on the following URL $scope.method = 'patch'; // API URL where the form will be posted - $scope.actionUrl = `/api/trainings/${$stateParams.id}`; + $scope.actionUrl = `/api/trainings/${$transition$.params().id}`; // Details of the training to edit (id in URL) $scope.training = trainingPromise; diff --git a/app/frontend/src/javascript/controllers/application.js.erb b/app/frontend/src/javascript/controllers/application.js.erb index d456361d8..c78eda622 100644 --- a/app/frontend/src/javascript/controllers/application.js.erb +++ b/app/frontend/src/javascript/controllers/application.js.erb @@ -12,8 +12,8 @@ * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -Application.Controllers.controller('ApplicationController', ['$rootScope', '$scope', '$window', '$locale', '$timeout', 'Session', 'AuthService', 'Auth', '$uibModal', '$state', 'growl', 'Notification', '$interval', 'Setting', '_t', 'Version', 'Help', - function ($rootScope, $scope, $window, $locale, $timeout, Session, AuthService, Auth, $uibModal, $state, growl, Notification, $interval, Setting, _t, Version, Help) { +Application.Controllers.controller('ApplicationController', ['$rootScope', '$scope', '$transitions', '$window', '$locale', '$timeout', 'Session', 'AuthService', 'Auth', '$uibModal', '$state', 'growl', 'Notification', '$interval', 'Setting', '_t', 'Version', 'Help', + function ($rootScope, $scope, $transitions, $window, $locale, $timeout, Session, AuthService, Auth, $uibModal, $state, growl, Notification, $interval, Setting, _t, Version, Help) { /* PRIVATE STATIC CONSTANTS */ // User's notifications will get refreshed every 30s @@ -325,19 +325,18 @@ Application.Controllers.controller('ApplicationController', ['$rootScope', '$sco $rootScope.toCheckNotifications = false; }); - // bind to the $stateChangeStart event (AngularJS/UI-Router) - $rootScope.$on('$stateChangeStart', function (event, toState, toParams) { - if (!toState.data) { return; } + // bind to the $transitions.onStart event (UI-Router) + $transitions.onStart({}, function (trans) { + if (!trans.$to().data) { return; } - const { authorizedRoles } = toState.data; + const { authorizedRoles } = trans.$to().data; if (!AuthService.isAuthorized(authorizedRoles)) { - event.preventDefault(); if (AuthService.isAuthenticated()) { // user is not allowed console.error('[ApplicationController::initialize] user is not allowed'); } else { // user is not logged in - openLoginModal(toState, toParams); + openLoginModal(trans.$to().name, trans.$to().params); } } }); @@ -462,6 +461,7 @@ Application.Controllers.controller('ApplicationController', ['$rootScope', '$sco // what to do when the modal is closed // authentication succeeded, set the session, gather the notifications and redirect + GTM.trackLogin(); $scope.setCurrentUser(user); if ((toState !== null) && (toParams !== null)) { diff --git a/app/frontend/src/javascript/controllers/cookies.js b/app/frontend/src/javascript/controllers/cookies.js index 300818dba..c36443cae 100644 --- a/app/frontend/src/javascript/controllers/cookies.js +++ b/app/frontend/src/javascript/controllers/cookies.js @@ -13,28 +13,20 @@ Application.Controllers.controller('CookiesController', ['$scope', '$cookies', ' // link pointed by "learn more" $scope.learnMoreUrl = 'https://www.cookiesandyou.com/'; - // current user wallet + // add a cookie to the browser, saving the user choice to refuse cookies $scope.declineCookies = function () { const expires = moment().add(13, 'months').toDate(); $cookies.put('fab-manager-cookies-consent', 'decline', { expires }); readCookie(); }; - // current wallet transactions + // add a cookie to the browser, saving the user choice to accept cookies. + // Then enable the analytics $scope.acceptCookies = function () { const expires = moment().add(13, 'months').toDate(); $cookies.put('fab-manager-cookies-consent', 'accept', { expires }); readCookie(); - // enable tracking using code provided by google analytics - /* eslint-disable */ - (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) - })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); - - ga('create', Fablab.trackingId, 'auto'); - ga('send', 'pageview'); - /* eslint-enable */ + GTM.enableAnalytics(Fablab.trackingId); }; /* PRIVATE SCOPE */ @@ -44,7 +36,7 @@ Application.Controllers.controller('CookiesController', ['$scope', '$cookies', ' */ const initialize = function () { readCookie(); - // if the privacy policy was defined, redirect the user to it + // if the privacy policy was defined, redirect the user to it when clicking on "read more" Setting.get({ name: 'privacy_body' }, data => { if (data.setting.value) { $scope.learnMoreUrl = '#!/privacy-policy'; diff --git a/app/frontend/src/javascript/controllers/events.js.erb b/app/frontend/src/javascript/controllers/events.js.erb index b9f4f86ab..b9db09443 100644 --- a/app/frontend/src/javascript/controllers/events.js.erb +++ b/app/frontend/src/javascript/controllers/events.js.erb @@ -126,8 +126,8 @@ Application.Controllers.controller('EventsController', ['$scope', '$state', 'Eve } ]); -Application.Controllers.controller('ShowEventController', ['$scope', '$state', '$stateParams', '$rootScope', 'Event', '$uibModal', 'Member', 'Reservation', 'Price', 'CustomAsset', 'Slot', 'eventPromise', 'growl', '_t', 'Wallet', 'AuthService', 'helpers', 'dialogs', 'priceCategoriesPromise', 'settingsPromise', 'LocalPayment', - function ($scope, $state, $stateParams, $rootScope, Event, $uibModal, Member, Reservation, Price, CustomAsset, Slot, eventPromise, growl, _t, Wallet, AuthService, helpers, dialogs, priceCategoriesPromise, settingsPromise, LocalPayment) { +Application.Controllers.controller('ShowEventController', ['$scope', '$state', '$rootScope', 'Event', '$uibModal', 'Member', 'Reservation', 'Price', 'CustomAsset', 'Slot', 'eventPromise', 'growl', '_t', 'Wallet', 'AuthService', 'helpers', 'dialogs', 'priceCategoriesPromise', 'settingsPromise', 'LocalPayment', + function ($scope, $state,$rootScope, Event, $uibModal, Member, Reservation, Price, CustomAsset, Slot, eventPromise, growl, _t, Wallet, AuthService, helpers, dialogs, priceCategoriesPromise, settingsPromise, LocalPayment) { /* PUBLIC SCOPE */ // reservations for the currently shown event diff --git a/app/frontend/src/javascript/controllers/header.js b/app/frontend/src/javascript/controllers/header.js index a59536cdb..02fe583fb 100644 --- a/app/frontend/src/javascript/controllers/header.js +++ b/app/frontend/src/javascript/controllers/header.js @@ -1,11 +1,11 @@ 'use strict'; -Application.Controllers.controller('HeaderController', ['$scope', '$rootScope', '$state', 'settingsPromise', - function ($scope, $rootScope, $state, settingsPromise) { +Application.Controllers.controller('HeaderController', ['$scope', '$transitions', '$state', 'settingsPromise', + function ($scope, $transitions, $state, settingsPromise) { $scope.aboutPage = ($state.current.name === 'app.public.about'); - $rootScope.$on('$stateChangeStart', function (event, toState) { - $scope.aboutPage = (toState.name === 'app.public.about'); + $transitions.onStart({}, function (trans) { + $scope.aboutPage = (trans.$to().name === 'app.public.about'); }); /** diff --git a/app/frontend/src/javascript/controllers/home.js b/app/frontend/src/javascript/controllers/home.js index 14899a5bc..098428c4b 100644 --- a/app/frontend/src/javascript/controllers/home.js +++ b/app/frontend/src/javascript/controllers/home.js @@ -1,7 +1,7 @@ 'use strict'; -Application.Controllers.controller('HomeController', ['$scope', '$stateParams', '$translatePartialLoader', 'AuthService', 'settingsPromise', 'Member', 'uiTourService', '_t', - function ($scope, $stateParams, $translatePartialLoader, AuthService, settingsPromise, Member, uiTourService, _t) { +Application.Controllers.controller('HomeController', ['$scope', '$transition$', '$translatePartialLoader', 'AuthService', 'settingsPromise', 'Member', 'uiTourService', '_t', + function ($scope, $transition$, $translatePartialLoader, AuthService, settingsPromise, Member, uiTourService, _t) { /* PUBLIC SCOPE */ // Home page HTML content @@ -38,8 +38,8 @@ Application.Controllers.controller('HomeController', ['$scope', '$stateParams', const initialize = function () { // if we receive a token to reset the password as GET parameter, trigger the // changePassword modal from the parent controller - if ($stateParams.reset_password_token) { - return $scope.$parent.editPassword($stateParams.reset_password_token); + if ($transition$.params().reset_password_token) { + return $scope.$parent.editPassword($transition$.params().reset_password_token); } // We set the home page content, with the directives replacing the placeholders diff --git a/app/frontend/src/javascript/controllers/machines.js.erb b/app/frontend/src/javascript/controllers/machines.js.erb index 14c72e31c..26f83c140 100644 --- a/app/frontend/src/javascript/controllers/machines.js.erb +++ b/app/frontend/src/javascript/controllers/machines.js.erb @@ -245,12 +245,12 @@ Application.Controllers.controller('NewMachineController', ['$scope', '$state', /** * Controller used in the machine edition page (admin) */ -Application.Controllers.controller('EditMachineController', ['$scope', '$state', '$stateParams', 'machinePromise', 'CSRF', - function ($scope, $state, $stateParams, machinePromise, CSRF) { +Application.Controllers.controller('EditMachineController', ['$scope', '$state', '$transition$', 'machinePromise', 'CSRF', + function ($scope, $state, $transition$, machinePromise, CSRF) { /* PUBLIC SCOPE */ // API URL where the form will be posted - $scope.actionUrl = `/api/machines/${$stateParams.id}`; + $scope.actionUrl = `/api/machines/${$transition$.params().id}`; // Form action on the above URL $scope.method = 'put'; @@ -278,8 +278,8 @@ Application.Controllers.controller('EditMachineController', ['$scope', '$state', /** * Controller used in the machine details page (public) */ -Application.Controllers.controller('ShowMachineController', ['$scope', '$state', '$uibModal', '$stateParams', '_t', 'Machine', 'growl', 'machinePromise', 'dialogs', - function ($scope, $state, $uibModal, $stateParams, _t, Machine, growl, machinePromise, dialogs) { +Application.Controllers.controller('ShowMachineController', ['$scope', '$state', '$uibModal', '_t', 'Machine', 'growl', 'machinePromise', 'dialogs', + function ($scope, $state, $uibModal, _t, Machine, growl, machinePromise, dialogs) { // Retrieve the details for the machine id in the URL, if an error occurs redirect the user to the machines list $scope.machine = machinePromise; @@ -357,8 +357,8 @@ Application.Controllers.controller('ShowMachineController', ['$scope', '$state', * This controller workflow is pretty similar to the trainings reservation controller. */ -Application.Controllers.controller('ReserveMachineController', ['$scope', '$stateParams', '_t', 'moment', 'Auth', '$timeout', 'Member', 'Availability', 'plansPromise', 'groupsPromise', 'machinePromise', 'settingsPromise', 'uiCalendarConfig', 'CalendarConfig', 'Reservation', 'growl', - function ($scope, $stateParams, _t, moment, Auth, $timeout, Member, Availability, plansPromise, groupsPromise, machinePromise, settingsPromise, uiCalendarConfig, CalendarConfig, Reservation, growl) { +Application.Controllers.controller('ReserveMachineController', ['$scope', '$transition$', '_t', 'moment', 'Auth', '$timeout', 'Member', 'Availability', 'plansPromise', 'groupsPromise', 'machinePromise', 'settingsPromise', 'uiCalendarConfig', 'CalendarConfig', 'Reservation', 'growl', + function ($scope, $transition$, _t, moment, Auth, $timeout, Member, Availability, plansPromise, groupsPromise, machinePromise, settingsPromise, uiCalendarConfig, CalendarConfig, Reservation, growl) { /* PRIVATE STATIC CONSTANTS */ // Slot free to be booked @@ -660,7 +660,7 @@ Application.Controllers.controller('ReserveMachineController', ['$scope', '$stat const initialize = function () { $scope.eventSources.push({ events: function (start, end, timezone, callback) { - Availability.machine({ machineId: $stateParams.id }, function (availabilities) { + Availability.machine({ machineId: $transition$.params().id }, function (availabilities) { callback(availabilities); }); }, diff --git a/app/frontend/src/javascript/controllers/members.js b/app/frontend/src/javascript/controllers/members.js index 388bffbff..0b308def2 100644 --- a/app/frontend/src/javascript/controllers/members.js +++ b/app/frontend/src/javascript/controllers/members.js @@ -323,7 +323,7 @@ Application.Controllers.controller('ShowProfileController', ['$scope', 'memberPr * and return the filtered networks * @return {Array} */ - var filterNetworks = function () { + const filterNetworks = function () { const networks = []; for (const network of Array.from(SocialNetworks)) { if ($scope.user.profile[network] && ($scope.user.profile[network].length > 0)) { diff --git a/app/frontend/src/javascript/controllers/projects.js b/app/frontend/src/javascript/controllers/projects.js index 46bb5ab7d..ce7f6dc67 100644 --- a/app/frontend/src/javascript/controllers/projects.js +++ b/app/frontend/src/javascript/controllers/projects.js @@ -480,12 +480,12 @@ Application.Controllers.controller('NewProjectController', ['$rootScope', '$scop /** * Controller used in the project edition page */ -Application.Controllers.controller('EditProjectController', ['$rootScope', '$scope', '$state', '$stateParams', 'Project', 'Machine', 'Member', 'Component', 'Theme', 'Licence', '$document', 'CSRF', 'projectPromise', 'Diacritics', 'dialogs', 'allowedExtensions', '_t', - function ($rootScope, $scope, $state, $stateParams, Project, Machine, Member, Component, Theme, Licence, $document, CSRF, projectPromise, Diacritics, dialogs, allowedExtensions, _t) { +Application.Controllers.controller('EditProjectController', ['$rootScope', '$scope', '$state', '$transition$', 'Project', 'Machine', 'Member', 'Component', 'Theme', 'Licence', '$document', 'CSRF', 'projectPromise', 'Diacritics', 'dialogs', 'allowedExtensions', '_t', + function ($rootScope, $scope, $state, $transition$, Project, Machine, Member, Component, Theme, Licence, $document, CSRF, projectPromise, Diacritics, dialogs, allowedExtensions, _t) { /* PUBLIC SCOPE */ // API URL where the form will be posted - $scope.actionUrl = `/api/projects/${$stateParams.id}`; + $scope.actionUrl = `/api/projects/${$transition$.params().id}`; // Form action on the above URL $scope.method = 'put'; @@ -618,7 +618,7 @@ Application.Controllers.controller('ShowProjectController', ['$scope', '$state', growl.success(_t('app.public.projects_show.your_report_was_successful_thanks')); return $uibModalInstance.close(res); } - , function (error) { + , function () { // creation failed... growl.error(_t('app.public.projects_show.an_error_occured_while_sending_your_report')); } diff --git a/app/frontend/src/javascript/controllers/spaces.js.erb b/app/frontend/src/javascript/controllers/spaces.js.erb index 71a9c0d0e..c23d5e104 100644 --- a/app/frontend/src/javascript/controllers/spaces.js.erb +++ b/app/frontend/src/javascript/controllers/spaces.js.erb @@ -234,12 +234,12 @@ Application.Controllers.controller('NewSpaceController', ['$scope', '$state', 'C /** * Controller used in the space edition page (admin) */ -Application.Controllers.controller('EditSpaceController', ['$scope', '$state', '$stateParams', 'spacePromise', 'CSRF', - function ($scope, $state, $stateParams, spacePromise, CSRF) { +Application.Controllers.controller('EditSpaceController', ['$scope', '$state', '$transition$', 'spacePromise', 'CSRF', + function ($scope, $state, $transition$, spacePromise, CSRF) { CSRF.setMetaTags(); // API URL where the form will be posted - $scope.actionUrl = `/api/spaces/${$stateParams.id}`; + $scope.actionUrl = `/api/spaces/${$transition$.params().id}`; // Form action on the above URL $scope.method = 'put'; @@ -307,8 +307,8 @@ Application.Controllers.controller('ShowSpaceController', ['$scope', '$state', ' * per slots. */ -Application.Controllers.controller('ReserveSpaceController', ['$scope', '$stateParams', 'Auth', '$timeout', 'Availability', 'Member', 'plansPromise', 'groupsPromise', 'settingsPromise', 'spacePromise', '_t', 'uiCalendarConfig', 'CalendarConfig', 'Reservation', - function ($scope, $stateParams, Auth, $timeout, Availability, Member, plansPromise, groupsPromise, settingsPromise, spacePromise, _t, uiCalendarConfig, CalendarConfig, Reservation) { +Application.Controllers.controller('ReserveSpaceController', ['$scope', '$transition$', 'Auth', '$timeout', 'Availability', 'Member', 'plansPromise', 'groupsPromise', 'settingsPromise', 'spacePromise', '_t', 'uiCalendarConfig', 'CalendarConfig', 'Reservation', + function ($scope, $transition$, Auth, $timeout, Availability, Member, plansPromise, groupsPromise, settingsPromise, spacePromise, _t, uiCalendarConfig, CalendarConfig, Reservation) { /* PRIVATE STATIC CONSTANTS */ // Color of the selected event backgound @@ -601,7 +601,7 @@ Application.Controllers.controller('ReserveSpaceController', ['$scope', '$stateP // in the router because this allows to refetchEvents from fullCalendar API. $scope.eventSources.push({ events: function (start, end, timezone, callback) { - Availability.spaces({ spaceId: $stateParams.id }, function (availabilities) { + Availability.spaces({ spaceId: $transition$.params().id }, function (availabilities) { callback(availabilities); }); }, diff --git a/app/frontend/src/javascript/controllers/trainings.js.erb b/app/frontend/src/javascript/controllers/trainings.js.erb index 463681179..949b243d2 100644 --- a/app/frontend/src/javascript/controllers/trainings.js.erb +++ b/app/frontend/src/javascript/controllers/trainings.js.erb @@ -91,8 +91,8 @@ Application.Controllers.controller('ShowTrainingController', ['$scope', '$state' * training can be reserved during the reservation process (the shopping cart may contains only one training and a subscription). */ -Application.Controllers.controller('ReserveTrainingController', ['$scope', '$stateParams', 'Auth', 'AuthService', '$timeout', 'Availability', 'Member', 'plansPromise', 'groupsPromise', 'settingsPromise', 'trainingPromise', '_t', 'uiCalendarConfig', 'CalendarConfig', 'Reservation', - function ($scope, $stateParams, Auth, AuthService, $timeout, Availability, Member, plansPromise, groupsPromise, settingsPromise, trainingPromise, _t, uiCalendarConfig, CalendarConfig, Reservation) { +Application.Controllers.controller('ReserveTrainingController', ['$scope', '$transition$', 'Auth', 'AuthService', '$timeout', 'Availability', 'Member', 'plansPromise', 'groupsPromise', 'settingsPromise', 'trainingPromise', '_t', 'uiCalendarConfig', 'CalendarConfig', 'Reservation', + function ($scope, $transition$, Auth, AuthService, $timeout, Availability, Member, plansPromise, groupsPromise, settingsPromise, trainingPromise, _t, uiCalendarConfig, CalendarConfig, Reservation) { /* PRIVATE STATIC CONSTANTS */ // Color of the selected event backgound @@ -144,7 +144,7 @@ Application.Controllers.controller('ReserveTrainingController', ['$scope', '$sta $scope.training = trainingPromise; // 'all' OR training's slug - $scope.mode = $stateParams.id; + $scope.mode = $transition$.params().id; // fullCalendar (v2) configuration $scope.calendarConfig = CalendarConfig({ @@ -279,7 +279,7 @@ Application.Controllers.controller('ReserveTrainingController', ['$scope', '$sta if ($scope.ctrl.member) { Member.get({ id: $scope.ctrl.member.id }, function (member) { $scope.ctrl.member = member; - const id = $stateParams.id === 'all' ? $stateParams.id : $scope.training.id; + const id = $transition$.params().id === 'all' ? $transition$.params().id : $scope.training.id; return Availability.trainings({ trainingId: id, member_id: $scope.ctrl.member.id }, function (trainings) { uiCalendarConfig.calendars.calendar.fullCalendar('removeEvents'); return $scope.eventSources.splice(0, 1, { @@ -391,7 +391,7 @@ Application.Controllers.controller('ReserveTrainingController', ['$scope', '$sta // in the router because this allows to refetchEvents from fullCalendar API. $scope.eventSources.push({ events: function (start, end, timezone, callback) { - Availability.trainings({ trainingId: $stateParams.id }, function (availabilities) { + Availability.trainings({ trainingId: $transition$.params().id }, function (availabilities) { callback(availabilities); }); }, @@ -408,7 +408,7 @@ Application.Controllers.controller('ReserveTrainingController', ['$scope', '$sta */ const calendarEventClickCb = function (event, jsEvent, view) { $scope.selectedEvent = event; - if ($stateParams.id === 'all') { + if ($transition$.params().id === 'all') { $scope.training = event.training; } return $scope.selectionTime = new Date(); diff --git a/app/frontend/src/javascript/directives/bs-jasny-fileinput.js b/app/frontend/src/javascript/directives/bs-jasny-fileinput.js index 0055d2ffc..814b10509 100644 --- a/app/frontend/src/javascript/directives/bs-jasny-fileinput.js +++ b/app/frontend/src/javascript/directives/bs-jasny-fileinput.js @@ -4,9 +4,9 @@ Application.Directives.directive('bsJasnyFileinput', [function () { return { require: ['ngModel'], link: function ($scope, elm, attrs, requiredCtrls) { - var ngModelCtrl = requiredCtrls[0]; - var fileinput = elm.parents('[data-provides=fileinput]'); - var filetypeRegex = attrs.bsJasnyFileinput; + const ngModelCtrl = requiredCtrls[0]; + const fileinput = elm.parents('[data-provides=fileinput]'); + const filetypeRegex = attrs.bsJasnyFileinput; fileinput.on('clear.bs.fileinput', function (e) { if (ngModelCtrl) { ngModelCtrl.$setViewValue(null); diff --git a/app/frontend/src/javascript/filters/filters.js b/app/frontend/src/javascript/filters/filters.js index 466a5fb6a..ad943d5a4 100644 --- a/app/frontend/src/javascript/filters/filters.js +++ b/app/frontend/src/javascript/filters/filters.js @@ -1,8 +1,3 @@ -/* eslint-disable - no-undef, -*/ -// TODO: This file was created by bulk-decaffeinate. -// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS101: Remove unnecessary use of Array.from @@ -135,7 +130,7 @@ Application.Filters.filter('projectsCollabored', [function () { }; }]); -// depend on humanize.js lib in /vendor +// depend on app/frontend/src/javascript/lib/humanize.js Application.Filters.filter('humanize', [function () { return (element, param) => Humanize.truncate(element, param, null); }]); @@ -157,6 +152,8 @@ Application.Filters.filter('breakFilter', [function () { Application.Filters.filter('simpleText', [function () { return function (text) { if (text != null) { + // add a line break after specific closing tags + text = text.replace(/(<\/p>|<\/h4>|<\/h5>|<\/h6>|<\/pre>|<\/blockquote>)/g, '\n'); text = text.replace(//g, '\n'); return text.replace(/<\/?\w+[^>]*>/g, ''); } else { @@ -166,7 +163,7 @@ Application.Filters.filter('simpleText', [function () { }]); Application.Filters.filter('toTrusted', ['$sce', function ($sce) { - return text => $sce.getTrustedHtml(text); + return text => $sce.trustAsHtml(text); }]); Application.Filters.filter('planIntervalFilter', [function () { diff --git a/app/frontend/src/javascript/lib/devise-modal.js b/app/frontend/src/javascript/lib/devise-modal.js index ea4cff117..07b6d0261 100644 --- a/app/frontend/src/javascript/lib/devise-modal.js +++ b/app/frontend/src/javascript/lib/devise-modal.js @@ -11,7 +11,7 @@ 'Auth', '$rootScope', function ($uibModal, $http, Auth, $rootScope) { - var promise = null; + let promise = null; function reset () { promise = null; } diff --git a/app/frontend/src/javascript/lib/dirDisqus.js b/app/frontend/src/javascript/lib/dirDisqus.js index 4ab8120a7..02ae98907 100644 --- a/app/frontend/src/javascript/lib/dirDisqus.js +++ b/app/frontend/src/javascript/lib/dirDisqus.js @@ -46,7 +46,7 @@ angular.module('angularUtils.directives.dirDisqus', []) // get the remote Disqus script and insert it into the DOM, but only if it not already loaded (as that will cause warnings) if (!$window.DISQUS) { - var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; + const dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = '//' + scope.disqus_shortname + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); } else { diff --git a/app/frontend/src/javascript/lib/format.ts b/app/frontend/src/javascript/lib/format.ts index 14b21ddce..811630602 100644 --- a/app/frontend/src/javascript/lib/format.ts +++ b/app/frontend/src/javascript/lib/format.ts @@ -9,7 +9,7 @@ export default class FormatLib { */ static date = (date: Date): string => { return Intl.DateTimeFormat().format(moment(date).toDate()); - } + }; /** * Return the formatted localized time for the given date @@ -23,12 +23,12 @@ export default class FormatLib { */ static duration = (interval: unitOfTime.DurationConstructor, intervalCount: number): string => { return moment.duration(intervalCount, interval).locale(Fablab.moment_locale).humanize(); - } + }; /** * Return the formatted localized amount for the given price (eg. 20.5 => "20,50 €") */ static price = (price: number): string => { return new Intl.NumberFormat(Fablab.intl_locale, { style: 'currency', currency: Fablab.intl_currency }).format(price); - } + }; } diff --git a/app/frontend/src/javascript/lib/gtm.js b/app/frontend/src/javascript/lib/gtm.js new file mode 100644 index 000000000..e3057035e --- /dev/null +++ b/app/frontend/src/javascript/lib/gtm.js @@ -0,0 +1,43 @@ +// this script loads the google tag manager, used by Google Analytics V4 +(function () { + const GTM = {}; + + window.dataLayer = window.dataLayer || []; + function gtag () { window.dataLayer.push(arguments); } + + GTM.enableAnalytics = function (trackingId) { + gtag('js', new Date()); + gtag('config', trackingId); + + const node = document.createElement('script'); + const firstScript = document.getElementsByTagName('script')[0]; + node.async = true; + node.src = `//www.googletagmanager.com/gtag/js?id=${trackingId}`; + firstScript.parentNode.insertBefore(node, firstScript); + }; + + GTM.trackPage = function (url, title) { + gtag('event', 'page_view', { + page_location: url, + page_title: title + }); + }; + + GTM.trackLogin = function () { + gtag('event', 'login'); + }; + + GTM.trackPurchase = function (transactionId, value) { + gtag('event', 'purchase', { + transaction_id: transactionId, + value, + currency: Fablab.intl_currency + }); + }; + + this.GTM = GTM; + + if (typeof module !== 'undefined' && module !== null) { + module.exports = GTM; + } +}).call(this); diff --git a/app/frontend/src/javascript/lib/humanize.js b/app/frontend/src/javascript/lib/humanize.js index d337278f7..55ad7066a 100644 --- a/app/frontend/src/javascript/lib/humanize.js +++ b/app/frontend/src/javascript/lib/humanize.js @@ -1,23 +1,21 @@ (function () { - var Humanize, isArray, isFinite, isNaN, objectRef, timeFormats, toString; + const objectRef = new function () {}(); - objectRef = new function () {}(); + const toString = objectRef.toString; - toString = objectRef.toString; - - isNaN = function (value) { + const isNaN = function (value) { return Number.isNaN(value); }; - isFinite = function (value) { + const isFinite = function (value) { return ((typeof window !== 'undefined' && window !== null ? window.isFinite : undefined) || global.isFinite)(value) && !isNaN(parseFloat(value)); }; - isArray = function (value) { + const isArray = function (value) { return toString.call(value) === '[object Array]'; }; - timeFormats = [ + const timeFormats = [ { name: 'second', value: 1e3 @@ -36,7 +34,7 @@ } ]; - Humanize = {}; + const Humanize = {}; Humanize.intword = function (number, charWidth, decimals) { if (decimals == null) { @@ -51,18 +49,18 @@ }; Humanize.compactInteger = function (input, decimals) { - var bigNumPrefixes, decimalIndex, decimalPart, decimalPartArray, length, number, numberLength, numberLengths, output, outputNumber, signString, unsignedNumber, unsignedNumberCharacterArray, unsignedNumberString, wholePart, wholePartArray, _i, _len, _length; + let decimalPart, length, output, outputNumber, unsignedNumberString, _i, _len, _length; if (decimals == null) { decimals = 0; } decimals = Math.max(decimals, 0); - number = parseInt(input, 10); - signString = number < 0 ? '-' : ''; - unsignedNumber = Math.abs(number); + const number = parseInt(input, 10); + const signString = number < 0 ? '-' : ''; + const unsignedNumber = Math.abs(number); unsignedNumberString = '' + unsignedNumber; - numberLength = unsignedNumberString.length; - numberLengths = [13, 10, 7, 4]; - bigNumPrefixes = ['T', 'B', 'M', 'k']; + const numberLength = unsignedNumberString.length; + const numberLengths = [13, 10, 7, 4]; + const bigNumPrefixes = ['T', 'B', 'M', 'k']; if (unsignedNumber < 1000) { if (decimals > 0) { unsignedNumberString += '.' + (Array(decimals + 1).join('0')); @@ -79,11 +77,11 @@ break; } } - decimalIndex = numberLength - length + 1; - unsignedNumberCharacterArray = unsignedNumberString.split(''); - wholePartArray = unsignedNumberCharacterArray.slice(0, decimalIndex); - decimalPartArray = unsignedNumberCharacterArray.slice(decimalIndex, decimalIndex + decimals + 1); - wholePart = wholePartArray.join(''); + const decimalIndex = numberLength - length + 1; + const unsignedNumberCharacterArray = unsignedNumberString.split(''); + const wholePartArray = unsignedNumberCharacterArray.slice(0, decimalIndex); + const decimalPartArray = unsignedNumberCharacterArray.slice(decimalIndex, decimalIndex + decimals + 1); + const wholePart = wholePartArray.join(''); decimalPart = decimalPartArray.join(''); if (decimalPart.length < decimals) { decimalPart += '' + (Array(decimals - decimalPart.length + 1).join('0')); @@ -105,7 +103,7 @@ }; Humanize.filesize = Humanize.fileSize = function (filesize) { - var sizeStr; + let sizeStr; if (filesize >= 1073741824) { sizeStr = Humanize.formatNumber(filesize / 1073741824, 2, '') + ' GB'; } else if (filesize >= 1048576) { @@ -119,7 +117,6 @@ }; Humanize.formatNumber = function (number, precision, thousand, decimal) { - var base; var commas; var decimals; var firstComma; var mod; var negative; var usePrecision; if (precision == null) { precision = 0; } @@ -129,36 +126,35 @@ if (decimal == null) { decimal = '.'; } - firstComma = function (number, thousand, position) { + const firstComma = function (number, thousand, position) { if (position) { return number.substr(0, position) + thousand; } else { return ''; } }; - commas = function (number, thousand, position) { + const commas = function (number, thousand, position) { return number.substr(position).replace(/(\d{3})(?=\d)/g, '$1' + thousand); }; - decimals = function (number, decimal, usePrecision) { + const decimals = function (number, decimal, usePrecision) { if (usePrecision) { return decimal + Humanize.toFixed(Math.abs(number), usePrecision).split('.')[1]; } else { return ''; } }; - usePrecision = Humanize.normalizePrecision(precision); - negative = number < 0 ? '-' : ''; - base = parseInt(Humanize.toFixed(Math.abs(number || 0), usePrecision), 10) + ''; - mod = base.length > 3 ? base.length % 3 : 0; + const usePrecision = Humanize.normalizePrecision(precision); + const negative = number < 0 ? '-' : ''; + const base = parseInt(Humanize.toFixed(Math.abs(number || 0), usePrecision), 10) + ''; + const mod = base.length > 3 ? base.length % 3 : 0; return negative + firstComma(base, thousand, mod) + commas(base, thousand, mod) + decimals(number, decimal, usePrecision); }; Humanize.toFixed = function (value, precision) { - var power; if (precision == null) { precision = Humanize.normalizePrecision(precision, 0); } - power = Math.pow(10, precision); + const power = Math.pow(10, precision); return (Math.round(value * power) / power).toFixed(precision); }; @@ -172,16 +168,16 @@ }; Humanize.ordinal = function (value) { - var end, leastSignificant, number, specialCase; - number = parseInt(value, 10); + let end; + const number = parseInt(value, 10); if (number === 0) { return value; } - specialCase = number % 100; + const specialCase = number % 100; if (specialCase === 11 || specialCase === 12 || specialCase === 13) { return '' + number + 'th'; } - leastSignificant = number % 10; + const leastSignificant = number % 10; switch (leastSignificant) { case 1: end = 'st'; @@ -199,7 +195,7 @@ }; Humanize.times = function (value, overrides) { - var number, smallTimes, _ref; + let number, smallTimes, _ref; if (overrides == null) { overrides = {}; } @@ -243,8 +239,8 @@ }; Humanize.truncatewords = Humanize.truncateWords = function (string, length) { - var array, i, result; - array = string.split(' '); + let i, result; + const array = string.split(' '); result = ''; i = 0; while (i < length) { @@ -259,7 +255,7 @@ }; Humanize.truncatenumber = Humanize.boundedNumber = function (num, bound, ending) { - var result; + let result; if (bound == null) { bound = 100; } @@ -276,8 +272,8 @@ }; Humanize.oxford = function (items, limit, limitStr) { - var extra, limitIndex, numItems; - numItems = items.length; + let extra, limitIndex; + const numItems = items.length; if (numItems < 2) { return '' + items; } else if (numItems === 2) { @@ -296,7 +292,7 @@ }; Humanize.dictionary = function (object, joiner, separator) { - var defs, key, result, val; + let defs, key, result, val; if (joiner == null) { joiner = ' is '; } @@ -316,12 +312,12 @@ }; Humanize.frequency = function (list, verb) { - var len, str, times; + let str; if (!isArray(list)) { return; } - len = list.length; - times = Humanize.times(len); + const len = list.length; + const times = Humanize.times(len); if (len === 0) { str = '' + times + ' ' + verb; } else { @@ -331,7 +327,7 @@ }; Humanize.pace = function (value, intervalMs, unit) { - var f, prefix, rate, relativePace, roundedPace, timeUnit, _i, _len; + let f, prefix, relativePace, timeUnit, _i, _len; if (unit == null) { unit = 'time'; } @@ -340,7 +336,7 @@ } prefix = 'Approximately'; timeUnit = null; - rate = value / intervalMs; + const rate = value / intervalMs; for (_i = 0, _len = timeFormats.length; _i < _len; _i++) { f = timeFormats[_i]; relativePace = rate * f.value; @@ -354,7 +350,7 @@ relativePace = 1; timeUnit = timeFormats[timeFormats.length - 1].name; } - roundedPace = Math.round(relativePace); + const roundedPace = Math.round(relativePace); unit = Humanize.pluralize(roundedPace, unit); return '' + prefix + ' ' + roundedPace + ' ' + unit + ' per ' + timeUnit; }; @@ -387,21 +383,20 @@ }; Humanize.titlecase = Humanize.titleCase = function (string) { - var doTitleCase; var internalCaps; var smallWords; var splitOnHyphensRegex; var splitOnWhiteSpaceRegex; - smallWords = /\b(a|an|and|at|but|by|de|en|for|if|in|of|on|or|the|to|via|vs?\.?)\b/i; - internalCaps = /\S+[A-Z]+\S*/; - splitOnWhiteSpaceRegex = /\s+/; - splitOnHyphensRegex = /-/; - doTitleCase = function (_string, hyphenated, firstOrLast) { - var index, stringArray, titleCasedArray, word, _i, _len; + const smallWords = /\b(a|an|and|at|but|by|de|en|for|if|in|of|on|or|the|to|via|vs?\.?)\b/i; + const internalCaps = /\S+[A-Z]+\S*/; + const splitOnWhiteSpaceRegex = /\s+/; + const splitOnHyphensRegex = /-/; + const doTitleCase = function (_string, hyphenated, firstOrLast) { + let index, word, _i, _len; if (hyphenated == null) { hyphenated = false; } if (firstOrLast == null) { firstOrLast = true; } - titleCasedArray = []; - stringArray = _string.split(hyphenated ? splitOnHyphensRegex : splitOnWhiteSpaceRegex); + const titleCasedArray = []; + const stringArray = _string.split(hyphenated ? splitOnHyphensRegex : splitOnWhiteSpaceRegex); for (index = _i = 0, _len = stringArray.length; _i < _len; index = ++_i) { word = stringArray[index]; if (word.indexOf('-') !== -1) { diff --git a/app/frontend/src/javascript/lib/polyfill.js b/app/frontend/src/javascript/lib/polyfill.js index 5425e5460..ce3ce441c 100644 --- a/app/frontend/src/javascript/lib/polyfill.js +++ b/app/frontend/src/javascript/lib/polyfill.js @@ -7,13 +7,13 @@ if (typeof Object.assign !== 'function') { throw new TypeError('Cannot convert undefined or null to object'); } - var to = Object(target); + const to = Object(target); - for (var index = 1; index < arguments.length; index++) { - var nextSource = arguments[index]; + for (let index = 1; index < arguments.length; index++) { + const nextSource = arguments[index]; if (nextSource != null) { // Skip over if undefined or null - for (var nextKey in nextSource) { + for (const nextKey in nextSource) { // Avoid bugs when hasOwnProperty is shadowed if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { to[nextKey] = nextSource[nextKey]; diff --git a/app/frontend/src/javascript/lib/user.ts b/app/frontend/src/javascript/lib/user.ts index b8e350a76..ca773dbfd 100644 --- a/app/frontend/src/javascript/lib/user.ts +++ b/app/frontend/src/javascript/lib/user.ts @@ -18,5 +18,5 @@ export default class UserLib { } return false; - } + }; } diff --git a/app/frontend/src/javascript/lib/wallet.ts b/app/frontend/src/javascript/lib/wallet.ts index 11393e03b..d69464e5b 100644 --- a/app/frontend/src/javascript/lib/wallet.ts +++ b/app/frontend/src/javascript/lib/wallet.ts @@ -16,5 +16,5 @@ export default class WalletLib { } else { return price - this.wallet.amount; } - } + }; } diff --git a/app/frontend/src/javascript/models/gtm.ts b/app/frontend/src/javascript/models/gtm.ts new file mode 100644 index 000000000..995537077 --- /dev/null +++ b/app/frontend/src/javascript/models/gtm.ts @@ -0,0 +1,6 @@ +export interface GoogleTagManager { + enableAnalytics: (trackingId: string) => void, + trackPage: (url: string, title: string) => void, + trackLogin: () => void, + trackPurchase: (transactionId: number, value: number) => void, +} diff --git a/app/frontend/src/javascript/router.js b/app/frontend/src/javascript/router.js index 26b98543a..7e77abab0 100644 --- a/app/frontend/src/javascript/router.js +++ b/app/frontend/src/javascript/router.js @@ -1,14 +1,3 @@ -/* eslint-disable - no-return-assign, - no-undef, -*/ -// TODO: This file was created by bulk-decaffeinate. -// Fix any style issues and re-enable lint. -/* - * decaffeinate suggestions: - * DS102: Remove unnecessary code created because of implicit returns - * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md - */ angular.module('application.router', ['ui.router']) .config(['$stateProvider', '$urlRouterProvider', '$locationProvider', function ($stateProvider, $urlRouterProvider, $locationProvider) { $locationProvider.hashPrefix('!'); @@ -243,7 +232,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - memberPromise: ['$stateParams', 'Member', function ($stateParams, Member) { return Member.get({ id: $stateParams.id }).$promise; }] + memberPromise: ['$transition$', 'Member', function ($transition$, Member) { return Member.get({ id: $transition$.params().id }).$promise; }] } }) .state('app.logged.members', { @@ -297,7 +286,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - projectPromise: ['$stateParams', 'Project', function ($stateParams, Project) { return Project.get({ id: $stateParams.id }).$promise; }], + projectPromise: ['$transition$', 'Project', function ($transition$, Project) { return Project.get({ id: $transition$.params().id }).$promise; }], shortnamePromise: ['Setting', function (Setting) { return Setting.get({ name: 'disqus_shortname' }).$promise; }] } }) @@ -310,7 +299,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - projectPromise: ['$stateParams', 'Project', function ($stateParams, Project) { return Project.get({ id: $stateParams.id }).$promise; }], + projectPromise: ['$transition$', 'Project', function ($transition$, Project) { return Project.get({ id: $transition$.params().id }).$promise; }], allowedExtensions: ['Setting', function (Setting) { return Setting.get({ name: 'allowed_cad_extensions' }).$promise; }] } }) @@ -347,7 +336,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - machinePromise: ['Machine', '$stateParams', function (Machine, $stateParams) { return Machine.get({ id: $stateParams.id }).$promise; }] + machinePromise: ['Machine', '$transition$', function (Machine, $transition$) { return Machine.get({ id: $transition$.params().id }).$promise; }] } }) .state('app.logged.machines_reserve', { @@ -361,7 +350,7 @@ angular.module('application.router', ['ui.router']) resolve: { plansPromise: ['Plan', function (Plan) { return Plan.query().$promise; }], groupsPromise: ['Group', function (Group) { return Group.query().$promise; }], - machinePromise: ['Machine', '$stateParams', function (Machine, $stateParams) { return Machine.get({ id: $stateParams.id }).$promise; }], + machinePromise: ['Machine', '$transition$', function (Machine, $transition$) { return Machine.get({ id: $transition$.params().id }).$promise; }], settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: "['machine_explications_alert', 'booking_window_start', 'booking_window_end', 'booking_move_enable', " + @@ -380,7 +369,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - machinePromise: ['Machine', '$stateParams', function (Machine, $stateParams) { return Machine.get({ id: $stateParams.id }).$promise; }] + machinePromise: ['Machine', '$transition$', function (Machine, $transition$) { return Machine.get({ id: $transition$.params().id }).$promise; }] } }) @@ -419,7 +408,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - spacePromise: ['Space', '$stateParams', function (Space, $stateParams) { return Space.get({ id: $stateParams.id }).$promise; }] + spacePromise: ['Space', '$transition$', function (Space, $transition$) { return Space.get({ id: $transition$.params().id }).$promise; }] } }) .state('app.admin.space_edit', { @@ -432,7 +421,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - spacePromise: ['Space', '$stateParams', function (Space, $stateParams) { return Space.get({ id: $stateParams.id }).$promise; }] + spacePromise: ['Space', '$transition$', function (Space, $transition$) { return Space.get({ id: $transition$.params().id }).$promise; }] } }) .state('app.logged.space_reserve', { @@ -445,7 +434,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - spacePromise: ['Space', '$stateParams', function (Space, $stateParams) { return Space.get({ id: $stateParams.id }).$promise; }], + spacePromise: ['Space', '$transition$', function (Space, $transition$) { return Space.get({ id: $transition$.params().id }).$promise; }], plansPromise: ['Plan', function (Plan) { return Plan.query().$promise; }], groupsPromise: ['Group', function (Group) { return Group.query().$promise; }], settingsPromise: ['Setting', function (Setting) { @@ -482,7 +471,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - trainingPromise: ['Training', '$stateParams', function (Training, $stateParams) { return Training.get({ id: $stateParams.id }).$promise; }] + trainingPromise: ['Training', '$transition$', function (Training, $transition$) { return Training.get({ id: $transition$.params().id }).$promise; }] } }) .state('app.logged.trainings_reserve', { @@ -498,8 +487,8 @@ angular.module('application.router', ['ui.router']) explicationAlertPromise: ['Setting', function (Setting) { return Setting.get({ name: 'training_explications_alert' }).$promise; }], plansPromise: ['Plan', function (Plan) { return Plan.query().$promise; }], groupsPromise: ['Group', function (Group) { return Group.query().$promise; }], - trainingPromise: ['Training', '$stateParams', function (Training, $stateParams) { - if ($stateParams.id !== 'all') { return Training.get({ id: $stateParams.id }).$promise; } + trainingPromise: ['Training', '$transition$', function (Training, $transition$) { + if ($transition$.params().id !== 'all') { return Training.get({ id: $transition$.params().id }).$promise; } }], settingsPromise: ['Setting', function (Setting) { return Setting.query({ @@ -563,7 +552,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - eventPromise: ['Event', '$stateParams', function (Event, $stateParams) { return Event.get({ id: $stateParams.id }).$promise; }], + eventPromise: ['Event', '$transition$', function (Event, $transition$) { return Event.get({ id: $transition$.params().id }).$promise; }], priceCategoriesPromise: ['PriceCategory', function (PriceCategory) { return PriceCategory.query().$promise; }], settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: "['booking_move_enable', 'booking_move_delay', 'booking_cancel_enable', 'booking_cancel_delay', 'event_explications_alert', 'online_payment_module']" }).$promise; }] } @@ -694,7 +683,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - trainingPromise: ['Training', '$stateParams', function (Training, $stateParams) { return Training.get({ id: $stateParams.id }).$promise; }], + trainingPromise: ['Training', '$transition$', function (Training, $transition$) { return Training.get({ id: $transition$.params().id }).$promise; }], machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }] } }) @@ -740,7 +729,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - eventPromise: ['Event', '$stateParams', function (Event, $stateParams) { return Event.get({ id: $stateParams.id }).$promise; }], + eventPromise: ['Event', '$transition$', function (Event, $transition$) { return Event.get({ id: $transition$.params().id }).$promise; }], categoriesPromise: ['Category', function (Category) { return Category.query().$promise; }], themesPromise: ['EventTheme', function (EventTheme) { return EventTheme.query().$promise; }], ageRangesPromise: ['AgeRange', function (AgeRange) { return AgeRange.query().$promise; }], @@ -756,8 +745,8 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - eventPromise: ['Event', '$stateParams', function (Event, $stateParams) { return Event.get({ id: $stateParams.id }).$promise; }], - reservationsPromise: ['Reservation', '$stateParams', function (Reservation, $stateParams) { return Reservation.query({ reservable_id: $stateParams.id, reservable_type: 'Event' }).$promise; }] + eventPromise: ['Event', '$transition$', function (Event, $transition$) { return Event.get({ id: $transition$.params().id }).$promise; }], + reservationsPromise: ['Reservation', '$transition$', function (Reservation, $transition$) { return Reservation.query({ reservable_id: $transition$.params().id, reservable_type: 'Event' }).$promise; }] } }) @@ -820,7 +809,7 @@ angular.module('application.router', ['ui.router']) spaces: ['Space', function (Space) { return Space.query().$promise; }], machines: ['Machine', function (Machine) { return Machine.query().$promise; }], plans: ['Plan', function (Plan) { return Plan.query().$promise; }], - planPromise: ['Plan', '$stateParams', function (Plan, $stateParams) { return Plan.get({ id: $stateParams.id }).$promise; }], + planPromise: ['Plan', '$transition$', function (Plan, $transition$) { return Plan.get({ id: $transition$.params().id }).$promise; }], planCategories: ['PlanCategory', function (PlanCategory) { return PlanCategory.query().$promise; }] } }) @@ -854,7 +843,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - couponPromise: ['Coupon', '$stateParams', function (Coupon, $stateParams) { return Coupon.get({ id: $stateParams.id }).$promise; }] + couponPromise: ['Coupon', '$transition$', function (Coupon, $transition$) { return Coupon.get({ id: $transition$.params().id }).$promise; }] } }) @@ -879,7 +868,8 @@ angular.module('application.router', ['ui.router']) "'accounting_Machine_code', 'accounting_Machine_label', 'accounting_Training_code', 'accounting_Training_label', " + "'accounting_Event_code', 'accounting_Event_label', 'accounting_Space_code', 'accounting_Space_label', " + "'payment_gateway', 'accounting_Error_code', 'accounting_Error_label', 'payment_schedule_prefix', " + - "'feature_tour_display', 'online_payment_module', 'stripe_public_key', 'stripe_currency', 'invoice_prefix']" + "'feature_tour_display', 'online_payment_module', 'stripe_public_key', 'stripe_currency', 'invoice_prefix', " + + "'accounting_Pack_code', 'accounting_Pack_label']" }).$promise; }], stripeSecretKey: ['Setting', function (Setting) { return Setting.isPresent({ name: 'stripe_secret_key' }).$promise; }], @@ -958,7 +948,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - importItem: ['Import', '$stateParams', function (Import, $stateParams) { return Import.get({ id: $stateParams.id }).$promise; }] + importItem: ['Import', '$transition$', function (Import, $transition$) { return Import.get({ id: $transition$.params().id }).$promise; }] } }) .state('app.admin.members_edit', { @@ -970,9 +960,9 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - memberPromise: ['Member', '$stateParams', function (Member, $stateParams) { return Member.get({ id: $stateParams.id }).$promise; }], + memberPromise: ['Member', '$transition$', function (Member, $transition$) { return Member.get({ id: $transition$.params().id }).$promise; }], activeProviderPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.active().$promise; }], - walletPromise: ['Wallet', '$stateParams', function (Wallet, $stateParams) { return Wallet.getWalletByUser({ user_id: $stateParams.id }).$promise; }], + walletPromise: ['Wallet', '$transition$', function (Wallet, $transition$) { return Wallet.getWalletByUser({ user_id: $transition$.params().id }).$promise; }], transactionsPromise: ['Wallet', 'walletPromise', function (Wallet, walletPromise) { return Wallet.transactions({ id: walletPromise.id }).$promise; }], tagsPromise: ['Tag', function (Tag) { return Tag.query().$promise; }], settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: "['phone_required', 'address_required']" }).$promise; }] @@ -1027,7 +1017,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - providerPromise: ['AuthProvider', '$stateParams', function (AuthProvider, $stateParams) { return AuthProvider.get({ id: $stateParams.id }).$promise; }], + providerPromise: ['AuthProvider', '$transition$', function (AuthProvider, $transition$) { return AuthProvider.get({ id: $transition$.params().id }).$promise; }], mappingFieldsPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.mapping_fields().$promise; }] } }) @@ -1083,7 +1073,7 @@ angular.module('application.router', ['ui.router']) "'display_name_enable', 'machines_sort_by', 'fab_analytics', 'statistics_module', 'address_required', " + "'link_name', 'home_content', 'home_css', 'phone_required', 'upcoming_events_shown', 'public_agenda_module'," + "'renew_pack_threshold', 'pack_only_for_subscription', 'overlapping_categories', 'public_registrations'," + - "'extended_prices_in_same_day']" + "'extended_prices_in_same_day', 'recaptcha_site_key', 'recaptcha_secret_key']" }).$promise; }], privacyDraftsPromise: ['Setting', function (Setting) { return Setting.get({ name: 'privacy_draft', history: true }).$promise; }], diff --git a/app/frontend/src/javascript/services/diacritics.js b/app/frontend/src/javascript/services/diacritics.js index f22283a0f..7c507da3b 100755 --- a/app/frontend/src/javascript/services/diacritics.js +++ b/app/frontend/src/javascript/services/diacritics.js @@ -14,7 +14,7 @@ Application.Services.service('Diacritics', [ * @returns {string} without diacritics */ remove: function (str) { - var defaultDiacriticsRemovalap = [ + const defaultDiacriticsRemovalap = [ { base: 'A', letters: '\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F' }, { base: 'AA', letters: '\uA732' }, { base: 'AE', letters: '\u00C6\u01FC\u01E2' }, @@ -103,10 +103,10 @@ Application.Services.service('Diacritics', [ { base: 'z', letters: '\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763' } ]; - var diacriticsMap = {}; - for (var i = 0; i < defaultDiacriticsRemovalap.length; i++) { - var letters = defaultDiacriticsRemovalap[i].letters.split(''); - for (var j = 0; j < letters.length; j++) { + const diacriticsMap = {}; + for (let i = 0; i < defaultDiacriticsRemovalap.length; i++) { + const letters = defaultDiacriticsRemovalap[i].letters.split(''); + for (let j = 0; j < letters.length; j++) { diacriticsMap[letters[j]] = defaultDiacriticsRemovalap[i].base; } } diff --git a/app/frontend/src/stylesheets/app.functions.scss b/app/frontend/src/stylesheets/app.functions.scss index 44bc93ce1..6153ec37f 100644 --- a/app/frontend/src/stylesheets/app.functions.scss +++ b/app/frontend/src/stylesheets/app.functions.scss @@ -1,3 +1,5 @@ +@use "sass:math"; + // This is the default html and body font-size for the base rem value. $rem-base: 10px !default; @@ -20,12 +22,12 @@ $modules: () !default; // STRIP UNIT // It strips the unit of measure and returns it @function strip-unit($num) { - @return $num / ($num * 0 + 1); + @return math.div($num, $num * 0 + 1); } // CONVERT TO REM @function convert-to-rem($value, $base-value: $rem-base) { - $value: strip-unit($value) / strip-unit($base-value) * 1rem; + $value: math.div(strip-unit($value), strip-unit($base-value)) * 1rem; @if $value == 0rem { $value: 0; diff --git a/app/frontend/src/stylesheets/app.layout.scss b/app/frontend/src/stylesheets/app.layout.scss index b5eb89389..285ce6039 100644 --- a/app/frontend/src/stylesheets/app.layout.scss +++ b/app/frontend/src/stylesheets/app.layout.scss @@ -1,3 +1,5 @@ +@use 'sass:math'; + /*layout*/ .header, .footer { @@ -286,8 +288,8 @@ body.container { height: $header-md-height; .navbar-form { - margin-top: floor(($header-md-height - 30) / 2); - margin-bottom: floor(($header-md-height - 30) / 2); + margin-top: floor(math.div($header-md-height - 30, 2)); + margin-bottom: floor(math.div($header-md-height - 30, 2)); } } @@ -689,7 +691,7 @@ body.container { cursor: pointer; & .Event-picture {opacity: 0.7;} } - + &-picture { height: 250px; background-color: #fff; @@ -701,7 +703,7 @@ body.container { object-fit: cover; } } - + &-desc { position: relative; padding: 15px; diff --git a/app/frontend/src/stylesheets/app.nav.scss b/app/frontend/src/stylesheets/app.nav.scss index f632fd94f..1ddef5cfd 100644 --- a/app/frontend/src/stylesheets/app.nav.scss +++ b/app/frontend/src/stylesheets/app.nav.scss @@ -1,3 +1,5 @@ +@use 'sass:math'; + /*primary nav*/ .navbar-header { position: relative; @@ -42,7 +44,7 @@ .nav-primary { li { > a > i { - margin: floor(-($nav-primary-height - $line-height-computed) / 2) -10px; + margin: floor(math.div(-($nav-primary-height - $line-height-computed), 2)) -10px; line-height: $nav-primary-height; width: $nav-primary-height; float: left; @@ -61,7 +63,7 @@ ul.nav { > li { > a { - padding: floor(($nav-primary-height - $line-height-computed) / 2) 15px; + padding: floor(math.div($nav-primary-height - $line-height-computed, 2)) 15px; position: relative; font-size: 14px; @@ -245,7 +247,7 @@ > .vbox > .header, > .vbox > .footer { - padding: 0 floor(($nav-xs-width - 30px) / 2); + padding: 0 floor(math.div($nav-xs-width - 30px, 2)); } .hidden-nav-xs { @@ -309,7 +311,7 @@ > li { > a { .header-md & { - padding: floor(($header-md-height - $line-height-computed) / 2 - 1); + padding: floor(math.div($header-md-height - $line-height-computed, 2) - 1); } } } @@ -326,7 +328,7 @@ // + *{ // padding-top: 50px !important; // } - + } .nav-bar-fixed-bottom { @@ -518,7 +520,7 @@ border-left: 3px solid; // #870003; - + } } } diff --git a/app/frontend/src/stylesheets/app.printer.scss b/app/frontend/src/stylesheets/app.printer.scss index a67781ddc..1fc2e4669 100644 --- a/app/frontend/src/stylesheets/app.printer.scss +++ b/app/frontend/src/stylesheets/app.printer.scss @@ -1 +1,3 @@ -@import "~fullcalendar/dist/fullcalendar.print"; +@media print { + @import "~fullcalendar/dist/fullcalendar.print"; +} diff --git a/app/frontend/src/stylesheets/modules/cookies.scss b/app/frontend/src/stylesheets/modules/cookies.scss index 039bf2c60..eb386d59c 100644 --- a/app/frontend/src/stylesheets/modules/cookies.scss +++ b/app/frontend/src/stylesheets/modules/cookies.scss @@ -1,25 +1,28 @@ .cookies-consent { display: flex; position: fixed; - bottom: 3rem; - left: 3rem; - width: 40rem; + right: 0; + bottom: 0; + left: 0; background-color: #f5f5f5; padding: 3rem; flex-direction: column; z-index: 100; - -webkit-box-shadow: 0 4px 10px 2px rgba(224, 224, 224, 0.43); - -moz-box-shadow: 0 4px 10px 2px rgba(224, 224, 224, 0.43); - box-shadow: 0 4px 10px 2px rgba(224, 224, 224, 0.43); + -webkit-box-shadow: 0 4px 10px 2px rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 4px 10px 2px rgba(0, 0, 0, 0.25); + box-shadow: 0 4px 10px 2px rgba(0, 0, 0, 0.25); .cookies-actions { + flex-wrap: wrap; display: flex; - height: 45px; - + justify-content: space-between; + gap: 1rem; + margin-top: 1rem; + button { - flex-basis: 50%; + @extend .fab-button; + flex: 1; } - button.decline { background-color: transparent; border: 0; @@ -31,4 +34,10 @@ font-size: 17px; } } + + @media (min-width: 480px) { + bottom: 3rem; + left: 3rem; + width: 40rem; + } } diff --git a/app/frontend/templates/admin/authentications/_oauth2.html b/app/frontend/templates/admin/authentications/_oauth2.html index b86470397..4f1fc8c82 100644 --- a/app/frontend/templates/admin/authentications/_oauth2.html +++ b/app/frontend/templates/admin/authentications/_oauth2.html @@ -90,4 +90,15 @@
+
+ +
+ +
+
diff --git a/app/frontend/templates/admin/invoices/codes.html b/app/frontend/templates/admin/invoices/codes.html index 4fcffbcec..debcc75c5 100644 --- a/app/frontend/templates/admin/invoices/codes.html +++ b/app/frontend/templates/admin/invoices/codes.html @@ -106,6 +106,16 @@
+
+
+ + +
+
+ + +
+
diff --git a/app/frontend/templates/projects/index.html b/app/frontend/templates/projects/index.html index d9d88b243..953dd0c34 100644 --- a/app/frontend/templates/projects/index.html +++ b/app/frontend/templates/projects/index.html @@ -42,7 +42,7 @@
- +
diff --git a/app/models/accounting_period.rb b/app/models/accounting_period.rb index a0377c1d7..0926bd8de 100644 --- a/app/models/accounting_period.rb +++ b/app/models/accounting_period.rb @@ -19,6 +19,8 @@ class AccountingPeriod < ApplicationRecord validates_with PeriodOverlapValidator validates_with PeriodIntegrityValidator + belongs_to :user, class_name: 'User', foreign_key: 'closed_by' + def delete false end @@ -79,13 +81,15 @@ class AccountingPeriod < ApplicationRecord end def compute_totals - period_invoices = invoices_with_vat(invoices.where(type: nil)) - period_avoirs = invoices_with_vat(invoices.where(type: 'Avoir')) + period_invoices = invoices_with_vat(invoices.where(type: nil).includes([:invoice_items])) + period_avoirs = invoices_with_vat(invoices.where(type: 'Avoir').includes([:invoice_items])) self.period_total = (period_invoices.map(&method(:price_without_taxe)).reduce(:+) || 0) - (period_avoirs.map(&method(:price_without_taxe)).reduce(:+) || 0) - all_invoices = invoices_with_vat(Invoice.where('CAST(created_at AS DATE) <= :end_date AND type IS NULL', end_date: end_at)) - all_avoirs = invoices_with_vat(Invoice.where("CAST(created_at AS DATE) <= :end_date AND type = 'Avoir'", end_date: end_at)) + all_invoices = invoices_with_vat(Invoice.where('CAST(created_at AS DATE) <= :end_date AND type IS NULL', end_date: end_at) + .includes([:invoice_items])) + all_avoirs = invoices_with_vat(Invoice.where("CAST(created_at AS DATE) <= :end_date AND type = 'Avoir'", end_date: end_at) + .includes([:invoice_items])) self.perpetual_total = (all_invoices.map(&method(:price_without_taxe)).reduce(:+) || 0) - (all_avoirs.map(&method(:price_without_taxe)).reduce(:+) || 0) self.footprint = compute_footprint diff --git a/app/models/invoice_item.rb b/app/models/invoice_item.rb index 9d8cfe867..c9738ec8a 100644 --- a/app/models/invoice_item.rb +++ b/app/models/invoice_item.rb @@ -8,11 +8,6 @@ class InvoiceItem < Footprintable has_one :payment_gateway_object, as: :item belongs_to :object, polymorphic: true - belongs_to :reservation, foreign_type: 'Reservation', foreign_key: 'object_id' - belongs_to :subscription, foreign_type: 'Subscription', foreign_key: 'object_id' - belongs_to :wallet_transaction, foreign_type: 'WalletTransaction', foreign_key: 'object_id' - belongs_to :offer_day, foreign_type: 'OfferDay', foreign_key: 'object_id' - belongs_to :statistic_profile_prepaid_pack, foreign_type: 'StatisticProfilePrepaidPack', foreign_key: 'object_id' after_create :chain_record after_update :log_changes diff --git a/app/models/open_api/calls_count_tracing.rb b/app/models/open_api/calls_count_tracing.rb deleted file mode 100644 index c54338a12..000000000 --- a/app/models/open_api/calls_count_tracing.rb +++ /dev/null @@ -1,4 +0,0 @@ -class OpenAPI::CallsCountTracing < ApplicationRecord - belongs_to :projets, foreign_key: :open_api_client_id - validates :projets, :at, presence: true -end diff --git a/app/models/open_api/client.rb b/app/models/open_api/client.rb index a9815eaf7..9d537d379 100644 --- a/app/models/open_api/client.rb +++ b/app/models/open_api/client.rb @@ -2,8 +2,6 @@ # OpenAPI::Client keeps track of the authorized accesses to the 3-rd party API (aka. OpenAPI) class OpenAPI::Client < ApplicationRecord - has_many :calls_count_tracings, foreign_key: :open_api_client_id, dependent: :destroy - validates :name, presence: true validates_uniqueness_of :token diff --git a/app/models/setting.rb b/app/models/setting.rb index 2f5f65e40..3e0b7a567 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -128,7 +128,9 @@ class Setting < ApplicationRecord pack_only_for_subscription overlapping_categories extended_prices_in_same_day - public_registrations] } + public_registrations + accounting_Pack_code + accounting_Pack_label] } # WARNING: when adding a new key, you may also want to add it in: # - config/locales/en.yml#settings # - app/frontend/src/javascript/models/setting.ts#SettingName @@ -195,4 +197,11 @@ class Setting < ApplicationRecord setting = find_or_initialize_by(name: name) setting.save && setting.history_values.create(invoicing_profile: user.invoicing_profile, value: value.to_s) end + + ## + # Check if the given setting was set + ## + def self.set?(name) + find_by(name: name)&.value.nil? ? false : true + end end diff --git a/app/models/user.rb b/app/models/user.rb index 40efffd78..05c813900 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -49,6 +49,8 @@ class User < ApplicationRecord has_one :payment_gateway_object, as: :item + has_many :accounting_periods, foreign_key: 'closed_by', dependent: :nullify + # fix for create admin user before_save do email&.downcase! diff --git a/app/pdfs/pdf/invoice.rb b/app/pdfs/pdf/invoice.rb index 8036951b8..ab391869b 100644 --- a/app/pdfs/pdf/invoice.rb +++ b/app/pdfs/pdf/invoice.rb @@ -25,9 +25,9 @@ class PDF::Invoice < Prawn::Document ) # logo - img_b64 = Setting.find_by(name: 'invoice_logo') + img_b64 = Setting.get('invoice_logo') begin - image StringIO.new(Base64.decode64(img_b64.value)), fit: [415, 40] + image StringIO.new(Base64.decode64(img_b64)), fit: [415, 40] rescue StandardError => e puts "Unable to decode invoice logo from base64: #{e}" end @@ -97,9 +97,9 @@ class PDF::Invoice < Prawn::Document DATE: I18n.l(invoice.main_item.object.slots[0].start_at.to_date), TIME: I18n.l(invoice.main_item.object.slots[0].start_at, format: :hour_minute)) invoice.invoice_items.each do |item| - next unless item.subscription + next unless item.object_type == Subscription.name - subscription = item.subscription + subscription = item.object cancellation = invoice.is_a?(Avoir) ? I18n.t('invoices.cancellation') + ' - ' : '' object = "\n- #{object}\n- #{cancellation + subscription_verbose(subscription, name)}" break @@ -135,7 +135,7 @@ class PDF::Invoice < Prawn::Document details = invoice.is_a?(Avoir) ? I18n.t('invoices.cancellation') + ' - ' : '' if item.object_type == Subscription.name - subscription = item.subscription + subscription = item.object if invoice.main_item.object_type == 'OfferDay' details += I18n.t('invoices.subscription_extended_for_free_from_START_to_END', START: I18n.l(invoice.main_item.object.start_at.to_date), diff --git a/app/pdfs/pdf/payment_schedule.rb b/app/pdfs/pdf/payment_schedule.rb index 061bd8065..624949430 100644 --- a/app/pdfs/pdf/payment_schedule.rb +++ b/app/pdfs/pdf/payment_schedule.rb @@ -28,9 +28,9 @@ class PDF::PaymentSchedule < Prawn::Document ) # logo - img_b64 = Setting.find_by(name: 'invoice_logo') + img_b64 = Setting.get('invoice_logo') begin - image StringIO.new(Base64.decode64(img_b64.value)), fit: [415, 40] + image StringIO.new(Base64.decode64(img_b64)), fit: [415, 40] rescue StandardError => e puts "Unable to decode invoice logo from base64: #{e}" end diff --git a/app/policies/project_policy.rb b/app/policies/project_policy.rb index 514295bf9..8daad8143 100644 --- a/app/policies/project_policy.rb +++ b/app/policies/project_policy.rb @@ -20,6 +20,6 @@ class ProjectPolicy < ApplicationPolicy end def destroy? - user.admin? or record.author.user_id == user + user.admin? or record.author.user_id == user.id end end diff --git a/app/policies/subscription_policy.rb b/app/policies/subscription_policy.rb index 67de23c61..1718133b1 100644 --- a/app/policies/subscription_policy.rb +++ b/app/policies/subscription_policy.rb @@ -3,7 +3,7 @@ # Check the access policies for API::SubscriptionsController class SubscriptionPolicy < ApplicationPolicy def show? - user.admin? or record.user_id == user.id + user.admin? || user.manager? || record.user.id == user.id end def payment_details? diff --git a/app/services/accounting_export_service.rb b/app/services/accounting_export_service.rb index e9f15f302..05ae70ce0 100644 --- a/app/services/accounting_export_service.rb +++ b/app/services/accounting_export_service.rb @@ -69,6 +69,8 @@ class AccountingExportService end elsif invoice.main_item.object_type == 'WalletTransaction' rows << "#{wallet_row(invoice)}\n" + elsif invoice.main_item.object_type == 'StatisticProfilePrepaidPack' + rows << "#{pack_row(invoice)}\n" elsif invoice.main_item.object_type == 'Error' items = invoice.invoice_items.reject { |ii| ii.object_type == 'Subscription' } items.each do |item| @@ -131,6 +133,16 @@ class AccountingExportService ) end + def pack_row(invoice) + row( + invoice, + account(invoice, :pack), + account(invoice, :pack, type: :label), + invoice.invoice_items.first.net_amount / 100.00, + line_label: label(invoice) + ) + end + # Generate the "VAT" row, which contains the credit to the VAT account, with VAT amount only def vat_row(invoice) total = invoice.invoice_items.map(&:net_amount).sum @@ -195,29 +207,35 @@ class AccountingExportService def account(invoice, account, type: :code, means: :other) case account when :projets - Setting.find_by(name: "accounting_#{means}_client_#{type}")&.value + Setting.get("accounting_#{means}_client_#{type}") when :vat - Setting.find_by(name: "accounting_VAT_#{type}")&.value + Setting.get("accounting_VAT_#{type}") when :subscription if invoice.subscription_invoice? - Setting.find_by(name: "accounting_subscription_#{type}")&.value + Setting.get("accounting_subscription_#{type}") else puts "WARN: Invoice #{invoice.id} has no subscription" end when :reservation if invoice.main_item.object_type == 'Reservation' - Setting.find_by(name: "accounting_#{invoice.main_item.object.reservable_type}_#{type}")&.value + Setting.get("accounting_#{invoice.main_item.object.reservable_type}_#{type}") else puts "WARN: Invoice #{invoice.id} has no reservation" end when :wallet if invoice.main_item.object_type == 'WalletTransaction' - Setting.find_by(name: "accounting_wallet_#{type}")&.value + Setting.get("accounting_wallet_#{type}") else puts "WARN: Invoice #{invoice.id} is not a wallet credit" end + when :pack + if invoice.main_item.object_type == 'StatisticProfilePrepaidPack' + Setting.get("accounting_Pack_#{type}") + else + puts "WARN: Invoice #{invoice.id} has no prepaid-pack" + end when :error - Setting.find_by(name: "accounting_Error_#{type}")&.value + Setting.get("accounting_Error_#{type}") else puts "Unsupported account #{account}" end || '' diff --git a/app/services/members/members_service.rb b/app/services/members/members_service.rb index df90b1d4d..4026f4315 100644 --- a/app/services/members/members_service.rb +++ b/app/services/members/members_service.rb @@ -46,7 +46,7 @@ class Members::MembersService @member.update_statistic_profile @member.generate_subscription_invoice(current_user.id) @member.send_confirmation_instructions - UsersMailer.delay.notify_user_account_created(@member, @member.password) + UsersMailer.notify_user_account_created(@member, @member.password).deliver_later true else false diff --git a/app/services/statistic_service.rb b/app/services/statistic_service.rb index 3ccfb1097..45f752f93 100644 --- a/app/services/statistic_service.rb +++ b/app/services/statistic_service.rb @@ -126,13 +126,11 @@ class StatisticService def subscriptions_list(options = default_options) result = [] - InvoiceItem.where('invoice_items.created_at >= :start_date AND invoice_items.created_at <= :end_date', options) - .eager_load(invoice: [:coupon], subscription: [:plan, statistic_profile: [:group]]).each do |i| + InvoiceItem.where("object_type = '#{Subscription.name}' AND invoice_items.created_at >= :start_date AND invoice_items.created_at <= :end_date", options) + .eager_load(invoice: [:coupon]).each do |i| next if i.invoice.is_a?(Avoir) - sub = i.subscription - - next unless sub + sub = i.object ca = i.amount.to_i cs = CouponService.new diff --git a/app/services/user_service.rb b/app/services/user_service.rb index 77f40c6cf..83b1cf6e6 100644 --- a/app/services/user_service.rb +++ b/app/services/user_service.rb @@ -46,7 +46,7 @@ class UserService admin.send_confirmation_instructions admin.add_role(:admin) admin.remove_role(:member) - UsersMailer.delay.notify_user_account_created(admin, generated_password) + UsersMailer.notify_user_account_created(admin, generated_password).deliver_later end { saved: saved, user: admin } end @@ -61,7 +61,7 @@ class UserService manager.send_confirmation_instructions manager.add_role(:manager) manager.remove_role(:member) - UsersMailer.delay.notify_user_account_created(manager, generated_password) + UsersMailer.notify_user_account_created(manager, generated_password).deliver_later end { saved: saved, user: manager } end diff --git a/app/views/api/auth_providers/show.json.jbuilder b/app/views/api/auth_providers/show.json.jbuilder index 7bb61df29..78e7397b1 100644 --- a/app/views/api/auth_providers/show.json.jbuilder +++ b/app/views/api/auth_providers/show.json.jbuilder @@ -4,9 +4,9 @@ json.partial! 'api/auth_providers/auth_provider', auth_provider: @provider if @provider.providable_type == OAuth2Provider.name json.providable_attributes do - json.extract! @provider.providable, :id, :base_url, :token_endpoint, :authorization_endpoint, :profile_url, :client_id, :client_secret + json.extract! @provider.providable, :id, :base_url, :token_endpoint, :authorization_endpoint, :profile_url, :client_id, :client_secret, :scopes json.o_auth2_mappings_attributes @provider.providable.o_auth2_mappings do |m| json.extract! m, :id, :local_model, :local_field, :api_field, :api_endpoint, :api_data_type, :transformation end end -end \ No newline at end of file +end diff --git a/app/views/application/index.html.erb b/app/views/application/index.html.erb index c032f52bc..bc30d6274 100644 --- a/app/views/application/index.html.erb +++ b/app/views/application/index.html.erb @@ -67,9 +67,7 @@ Fablab.sessionTours = []; - <%= stylesheet_packs_with_chunks_tag 'application', media: 'all' %> - <%= stylesheet_packs_with_chunks_tag 'plugins', media: 'all' %> - <%= stylesheet_packs_with_chunks_tag 'printer', media: 'print' %> + <%= stylesheet_pack_tag 'application', 'plugins', 'printer' %> <% unless Stylesheet.theme.nil? %> <% end %> @@ -134,6 +132,6 @@ Powered by Fab-manager
-<%= javascript_packs_with_chunks_tag 'application' %> +<%= javascript_pack_tag 'application' %> diff --git a/app/workers/open_api_trace_calls_count_worker.rb b/app/workers/open_api_trace_calls_count_worker.rb deleted file mode 100644 index d54569567..000000000 --- a/app/workers/open_api_trace_calls_count_worker.rb +++ /dev/null @@ -1,10 +0,0 @@ -class OpenAPITraceCallsCountWorker < Sidekiq::Workers - include Sidekiq::Worker - sidekiq_options queue: 'default', retry: true - - def perform - OpenAPI::Client.find_each do |client| - OpenAPI::CallsCountTracing.create!(projets: client, calls_count: client.calls_count, at: DateTime.current) - end - end -end diff --git a/app/workers/openlab_worker.rb b/app/workers/openlab_worker.rb index c14200236..2a3ad9f79 100644 --- a/app/workers/openlab_worker.rb +++ b/app/workers/openlab_worker.rb @@ -7,7 +7,7 @@ class OpenlabWorker def initialize client = Openlab::Client.new(app_secret: Setting.get('openlab_app_secret')) - @projets = Openlab::Projects.new(client) + @projects = Openlab::Projects.new(client) super end @@ -17,12 +17,12 @@ class OpenlabWorker case action.to_s when /create/ project = Project.find(project_id) - response = @projets.create(project.openlab_attributes) + response = @projects.create(project.openlab_attributes) when /update/ project = Project.find(project_id) - response = @projets.update(project_id, project.openlab_attributes) + response = @projects.update(project_id, project.openlab_attributes) when /destroy/ - response = @projets.destroy(project_id) + response = @projects.destroy(project_id) else raise NotImplementedError end diff --git a/app/workers/reservation_reminder_worker.rb b/app/workers/reservation_reminder_worker.rb index 5d5b509cd..2967fa7a6 100644 --- a/app/workers/reservation_reminder_worker.rb +++ b/app/workers/reservation_reminder_worker.rb @@ -1,3 +1,6 @@ +# frozen_string_literal: true + +# Send a reminder email to the user who has made a reservation class ReservationReminderWorker include Sidekiq::Worker @@ -5,25 +8,24 @@ class ReservationReminderWorker DEFAULT_REMINDER_DELAY = 24.hours def perform - enabled = Setting.find_by(name: 'reminder_enable').try(:value) - if enabled == 'true' - delay = Setting.find_by(name: 'reminder_delay').try(:value).try(:to_i).try(:hours) || DEFAULT_REMINDER_DELAY + return unless Setting.get('reminder_enable') - starting = DateTime.current.beginning_of_hour + delay - ending = starting + 1.hour + delay = Setting.find_by(name: 'reminder_delay').try(:value).try(:to_i).try(:hours) || DEFAULT_REMINDER_DELAY - Reservation.joins(:slots).where('slots.start_at >= ? AND slots.start_at <= ? AND slots.canceled_at IS NULL', starting, ending).each do |r| - already_sent = Notification.where( - attached_object_type: Reservation.name, - attached_object_id: r.id, - notification_type_id: NotificationType.find_by_name('notify_member_reservation_reminder') - ).count - unless already_sent > 0 - NotificationCenter.call type: 'notify_member_reservation_reminder', - receiver: r.user, - attached_object: r - end - end + starting = DateTime.current.beginning_of_hour + delay + ending = starting + 1.hour + + Reservation.joins(:slots).where('slots.start_at >= ? AND slots.start_at <= ? AND slots.canceled_at IS NULL', starting, ending).each do |r| + already_sent = Notification.where( + attached_object_type: Reservation.name, + attached_object_id: r.id, + notification_type_id: NotificationType.find_by_name('notify_member_reservation_reminder') + ).count + next if already_sent.positive? + + NotificationCenter.call type: 'notify_member_reservation_reminder', + receiver: r.user, + attached_object: r end end -end \ No newline at end of file +end diff --git a/babel.config.js b/babel.config.js index af993a89e..cf0f741ec 100644 --- a/babel.config.js +++ b/babel.config.js @@ -4,7 +4,6 @@ module.exports = function (api) { const isDevelopmentEnv = api.env('development'); const isProductionEnv = api.env('production'); const isTestEnv = api.env('test'); - const isWebpackDevServer = process.env.WEBPACK_DEV_SERVER; if (!validEnv.includes(currentEnv)) { throw new Error( @@ -16,39 +15,20 @@ module.exports = function (api) { ); } - return { + const defaultConfigFunc = require('shakapacker/package/babel/preset.js'); + const resultConfig = defaultConfigFunc(api); + + const changesOnDefault = { presets: [ - isTestEnv && [ - '@babel/preset-env', - { - targets: { - node: 'current' - }, - modules: 'commonjs' - }, - '@babel/preset-react' - ], - (isProductionEnv || isDevelopmentEnv) && [ - '@babel/preset-env', - { - forceAllTransforms: true, - useBuiltIns: 'entry', - corejs: 3, - modules: false, - exclude: ['transform-typeof-symbol'] - } - ], [ '@babel/preset-react', { development: isDevelopmentEnv || isTestEnv, useBuiltIns: true } - ], - ['@babel/preset-typescript', { allExtensions: true, isTSX: true }] + ] ].filter(Boolean), plugins: [ - isWebpackDevServer && 'react-refresh/babel', 'babel-plugin-macros', '@babel/plugin-syntax-dynamic-import', isTestEnv && 'babel-plugin-dynamic-import-node', @@ -56,7 +36,7 @@ module.exports = function (api) { [ '@babel/plugin-proposal-class-properties', { - loose: false + loose: true } ], [ @@ -65,26 +45,28 @@ module.exports = function (api) { useBuiltIns: true } ], - [ - '@babel/plugin-transform-runtime', - { - helpers: false, - regenerator: true, - corejs: false - } - ], [ '@babel/plugin-transform-regenerator', { async: false } ], - isProductionEnv && [ - 'babel-plugin-transform-react-remove-prop-types', + isProductionEnv && ['babel-plugin-transform-react-remove-prop-types', { removeImport: true } + ], + process.env.WEBPACK_SERVE && [ + 'react-refresh/babel', + { + exclude: 'node_modules/**' + } ] ].filter(Boolean) }; + + resultConfig.presets = [...resultConfig.presets, ...changesOnDefault.presets]; + resultConfig.plugins = [...resultConfig.plugins, ...changesOnDefault.plugins]; + + return resultConfig; }; diff --git a/bin/webpacker b/bin/webpacker new file mode 100755 index 000000000..47ef0c4ca --- /dev/null +++ b/bin/webpacker @@ -0,0 +1,15 @@ +#!/usr/bin/env ruby + +require "pathname" +require "bundler/setup" +require "webpacker" +require "webpacker/webpack_runner" + +ENV["RAILS_ENV"] ||= "development" +ENV["NODE_ENV"] ||= ENV["RAILS_ENV"] +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", Pathname.new(__FILE__).realpath) + +APP_ROOT = File.expand_path("..", __dir__) +Dir.chdir(APP_ROOT) do + Webpacker::WebpackRunner.run(ARGV) +end diff --git a/bin/webpacker-dev-server b/bin/webpacker-dev-server new file mode 100755 index 000000000..6629114a7 --- /dev/null +++ b/bin/webpacker-dev-server @@ -0,0 +1,18 @@ +#!/usr/bin/env ruby + +ENV["RAILS_ENV"] ||= "development" +ENV["NODE_ENV"] ||= ENV["RAILS_ENV"] + +require "pathname" +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", + Pathname.new(__FILE__).realpath) + +require "bundler/setup" + +require "webpacker" +require "webpacker/dev_server_runner" + +APP_ROOT = File.expand_path("..", __dir__) +Dir.chdir(APP_ROOT) do + Webpacker::DevServerRunner.run(ARGV) +end diff --git a/bin/yarn b/bin/yarn index 460dd565b..fe7338622 100755 --- a/bin/yarn +++ b/bin/yarn @@ -1,9 +1,16 @@ #!/usr/bin/env ruby -APP_ROOT = File.expand_path('..', __dir__) + +APP_ROOT = File.expand_path("..", __dir__) Dir.chdir(APP_ROOT) do - begin - exec "yarnpkg", *ARGV - rescue Errno::ENOENT + yarn = ENV["PATH"].split(File::PATH_SEPARATOR). + select { |dir| File.expand_path(dir) != __dir__ }. + product(["yarn", "yarnpkg", "yarn.cmd", "yarn.ps1"]). + map { |dir, file| File.expand_path(file, dir) }. + find { |file| File.executable?(file) } + + if yarn + exec yarn, *ARGV + else $stderr.puts "Yarn executable was not detected in the system." $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install" exit 1 diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index d3bcaa5ec..0c70b1579 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -1,10 +1,14 @@ +# frozen_string_literal: true + # Be sure to restart your server when you modify this file. # Define an application-wide content security policy # For further information see the following documentation # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy -# Rails.application.config.content_security_policy do |policy| +Rails.application.config.content_security_policy do |policy| # # If you are using webpack-dev-server then specify webpack-dev-server host + policy.connect_src :self, :https, 'http://localhost:3035', 'ws://localhost:3035' if Rails.env.development? + # policy.default_src :self, :https # policy.font_src :self, :https, :data # policy.img_src :self, :https, :data @@ -14,7 +18,7 @@ # # Specify URI for violation reports # # policy.report_uri "/csp-violation-report-endpoint" -# end +end # If you are using UJS then enable automatic nonce generation # Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) } diff --git a/config/initializers/openlab_ruby.rb b/config/initializers/openlab_ruby.rb index e0c1ffd9e..ec13aa94f 100644 --- a/config/initializers/openlab_ruby.rb +++ b/config/initializers/openlab_ruby.rb @@ -1,3 +1,5 @@ Openlab.configure do |config| - config.base_uri = Rails.application.secrets.openlab_base_uri unless Rails.env.production? + config.base_uri = Rails.application.secrets.openlab_base_uri if Rails.application.secrets.openlab_base_uri + config.httparty_verify = Rails.application.secrets.openlab_ssl_verify + config.httparty_verify_peer = Rails.application.secrets.openlab_ssl_verify_peer end diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb index 27034b32b..8a62e32b6 100644 --- a/config/initializers/sidekiq.rb +++ b/config/initializers/sidekiq.rb @@ -1,25 +1,42 @@ # frozen_string_literal: true +require 'sidekiq' +require 'sidekiq-scheduler' + redis_host = ENV['REDIS_HOST'] || 'localhost' redis_url = "redis://#{redis_host}:6379" Sidekiq.configure_server do |config| config.redis = { url: redis_url } - # load sidekiq-cron schedule config - schedule_file = 'config/schedule.yml' + config.client_middleware do |chain| + chain.add SidekiqUniqueJobs::Middleware::Client + end - if File.exist?(schedule_file) - rendered_schedule_file = ERB.new(File.read(schedule_file)).result - Sidekiq::Cron::Job.load_from_hash YAML.safe_load(rendered_schedule_file) + config.server_middleware do |chain| + chain.add SidekiqUniqueJobs::Middleware::Server + end + + SidekiqUniqueJobs::Server.configure(config) + + config.on(:startup) do + # load sidekiq-scheduler schedule config + schedule_file = 'config/schedule.yml' + if File.exist?(schedule_file) + rendered_schedule_file = ERB.new(File.read(schedule_file)).result + Sidekiq.schedule = YAML.safe_load(rendered_schedule_file) + SidekiqScheduler::Scheduler.instance.reload_schedule! + end end end Sidekiq.configure_client do |config| config.redis = { url: redis_url } -end -Sidekiq::Extensions.enable_delay! + config.client_middleware do |chain| + chain.add SidekiqUniqueJobs::Middleware::Client + end +end # Quieting logging in the test environment if Rails.env.test? diff --git a/config/locales/app.admin.de.yml b/config/locales/app.admin.de.yml index 399ec8037..413b5e61f 100644 --- a/config/locales/app.admin.de.yml +++ b/config/locales/app.admin.de.yml @@ -78,8 +78,8 @@ de: slots_not_deleted: "Von {TOTAL} Slots {COUNT, plural, one {} =1{wurde einer wurde nicht gelöscht} other{wurden {COUNT} nicht gelöscht}}. Möglicherweise {COUNT, plural, =1{ist er} other{sind sie}} bereits reserviert." you_should_select_at_least_a_machine: "Sie sollten mindestens eine Maschine auf diesem Slot auswählen." inconsistent_times: "Fehler: das Ende der Verfügbarkeit liegt vor dem Beginn." - min_one_slot: "The availability must be split in one slot at least." - min_slot_duration: "You must specify a valid duration for the slots." + min_one_slot: "Die Verfügbarkeit muss auf mindestens einen Slot aufgeteilt werden." + min_slot_duration: "Sie müssen eine gültige Dauer für die Slots angeben." export_is_running_you_ll_be_notified_when_its_ready: "Export wird ausgeführt. Sie werden nach Fertigstellung benachrichtigt." actions: "Aktionen" block_reservations: "Reservierungen blockieren" @@ -98,8 +98,8 @@ de: delete_this_slot: "Nur diesen Slot" delete_this_and_next: "Diesen Slot und die folgenden" delete_all: "Alle Slots" - event_in_the_past: "Create a slot in the past" - confirm_create_event_in_the_past: "You are about to create a slot in the past. Are you sure you want to do this? Members will not be able to book this slot." + event_in_the_past: "Slot in der Vergangenheit erstellen" + confirm_create_event_in_the_past: "Sie erstellen einen Slot in der Vergangenheit. Sind Sie sicher? Mitglieder werden diesen Slot nicht buchen können." edit_event: "Veranstaltung bearbeiten" view_reservations: "Reservierungen anzeigen" legend: "Legende" @@ -370,70 +370,70 @@ de: status_disabled: "Deaktiviert" status_all: "Alle" spaces_pricing: - prices_match_space_hours_rates_html: "The prices below match one hour of space reservation, without subscription." - prices_calculated_on_hourly_rate_html: "All the prices will be automatically calculated based on the hourly rate defined here.
For example, if you define an hourly rate at {RATE}: a slot of {DURATION} minutes, will be charged {PRICE}." - you_can_override: "You can override this duration for each availability you create in the agenda. The price will then be adjusted accordingly." - extended_prices: "Moreover, you can define extended prices which will apply in priority over the hourly rate below. Extended prices allow you, for example, to set a favorable price for a booking of several hours." - spaces: "Spaces" - price_updated: "Price successfully updated" + prices_match_space_hours_rates_html: "Die unten aufgeführten Preise entsprechen einer Stunde Raumbelegung ohne Abonnement." + prices_calculated_on_hourly_rate_html: "Alle Preise werden automatisch nach dem hier definierten Stundensatz berechnet.
Zum Beispiel wird bei einem veranschlagten Stundensatz von {RATE} ein Slot von {DURATION} Minuten zum Preis von {PRICE} berechnet." + you_can_override: "Sie können diese Dauer für jede Verfügbarkeit überschreiben, die Sie in der Agenda erstellen. Der Preis wird dann entsprechend angepasst." + extended_prices: "Darüber hinaus können Sie erweiterte Preise festlegen, die vorrangig zum unten stehenden Stundensatz gelten. Mit erweiterten Preisen können Sie zum Beispiel einen günstigen Preis für eine Buchung über mehrere Stunden festlegen." + spaces: "Räume" + price_updated: "Preis erfolgreich aktualisiert" machines_pricing: prices_match_machine_hours_rates_html: "Die unten aufgeführten Preise entsprechen einer Stunde Maschinengebrauch, ohne Abonnement." prices_calculated_on_hourly_rate_html: "Alle Preise werden automatisch nach dem hier definierten Stundensatz berechnet.
Zum Beispiel wird bei einem veranschlagten Stundensatz von {RATE} ein Slot von {DURATION} Minuten, zum Preis von {PRICE} berechnet." you_can_override: "Sie können diese Dauer für jede Verfügbarkeit überschreiben, die Sie in der Agenda erstellen. Der Preis wird dann entsprechend angepasst." machines: "Maschinen" - price_updated: "Price successfully updated" + price_updated: "Preis erfolgreich aktualisiert" configure_packs_button: - packs: "Prepaid packs" - no_packs: "No packs for now" - pack_DURATION: "{DURATION} hours" + packs: "Vorausbezahlte Pakete" + no_packs: "Momentan keine Pakete" + pack_DURATION: "{DURATION} Stunden" configure_extended_prices_button: - extended_prices: "Extended prices" - no_extended_prices: "No extended price for now" - extended_price_DURATION: "{DURATION} hours" + extended_prices: "Erweiterter Preis" + no_extended_prices: "Momentan kein erweiterter Preis" + extended_price_DURATION: "{DURATION} Stunden" extended_price_form: - duration: "Duration (hours)" - amount: "Price" + duration: "Dauer (Stunden)" + amount: "Preis" pack_form: - hours: "Hours" - amount: "Price" - disabled: "Disabled" - validity_count: "Maximum validity" - select_interval: "Interval..." + hours: "Stunden" + amount: "Preis" + disabled: "Deaktiviert" + validity_count: "Maximale Gültigkeit" + select_interval: "Zeitraum..." intervals: - day: "{COUNT, plural, one{Day} other{Days}}" - week: "{COUNT, plural, one{Week} other{Weeks}}" - month: "{COUNT, plural, one{Month} other{Months}}" - year: "{COUNT, plural, one{Year} other{Years}}" + day: "{COUNT, plural, one {Tag} other {Tage}}" + week: "{COUNT, plural, one{Woche} other{Wochen}}" + month: "{COUNT, plural, one{Monat} other{Monate}}" + year: "{COUNT, plural, one {Jahr} other {Jahre}}" create_pack: - new_pack: "New prepaid pack" - new_pack_info: "A prepaid pack allows users to buy {TYPE, select, Machine{machine} Space{space} other{}} hours before booking any slots. These packs can provide discounts on volumes purchases." - create_pack: "Create this pack" - pack_successfully_created: "The new prepaid pack was successfully created." + new_pack: "Neues vorausbezahltes Paket" + new_pack_info: "Ein vorausbezahltes Paket erlaubt den Kauf von {TYPE, select, Machine{Maschinen-} Space{Raum-} other{}}Stunden vor der Buchung eines Slots. Diese Pakete können Rabatte auf Volumenkäufe bieten." + create_pack: "Dieses Paket erstellen" + pack_successfully_created: "Das neue Vorausbezahlungs-Paket wurde erfolgreich erstellt." delete_pack: - pack_deleted: "The prepaid pack was successfully deleted." - unable_to_delete: "Unable to delete the prepaid pack: " - delete_pack: "Delete the prepaid pack" - confirm_delete: "Delete" - delete_confirmation: "Are you sure you want to delete this prepaid pack? This won't be possible if the pack was already bought by users." + pack_deleted: "Das Vorausbezahlungs-Paket wurde erfolgreich gelöscht." + unable_to_delete: "Paket konnte nicht gelöscht werden: " + delete_pack: "Vorausbezahlungs-Paket löschen" + confirm_delete: "Löschen" + delete_confirmation: "Sind Sie sicher, dass Sie dieses Paket löschen möchten? Dies ist nicht möglich, wenn das Paket bereits von Benutzern gekauft wurde." edit_pack: - edit_pack: "Edit the pack" - confirm_changes: "Confirm changes" - pack_successfully_updated: "The prepaid pack was successfully updated." + edit_pack: "Das Paket bearbeiten" + confirm_changes: "Änderungen bestätigen" + pack_successfully_updated: "Das Vorausbezahlungs-Paket wurde erfolgreich aktualisiert." create_extended_price: - new_extended_price: "New extended price" - new_extended_price_info: "Extended prices allows you to define prices based on custom durations, instead of the default hourly rates." - create_extended_price: "Create extended price" - extended_price_successfully_created: "The new extended price was successfully created." + new_extended_price: "Neuer erweiterter Preis" + new_extended_price_info: "Erweiterte Preise erlauben Ihnen die Festlegung von Preisen basierend auf benutzerdefinierten Zeitdauern anstelle der Standard-Stundensätze." + create_extended_price: "Erweiterten Preis erstellen" + extended_price_successfully_created: "Der neue erweiterte Preis wurde erfolgreich erstellt." delete_extended_price: - extended_price_deleted: "The extended price was successfully deleted." - unable_to_delete: "Unable to delete the extended price: " - delete_extended_price: "Delete the extended price" - confirm_delete: "Delete" - delete_confirmation: "Are you sure you want to delete this extended price?" + extended_price_deleted: "Der erweiterte Preis wurde erfolgreich gelöscht." + unable_to_delete: "Der erweiterte Preis konnte nicht gelöscht werden: " + delete_extended_price: "Erweiterten Preis löschen" + confirm_delete: "Löschen" + delete_confirmation: "Sind Sie sicher, dass Sie diesen erweiterten Preis löschen möchten?" edit_extended_price: - edit_extended_price: "Edit the extended price" - confirm_changes: "Confirm changes" - extended_price_successfully_updated: "The extended price was successfully updated." + edit_extended_price: "Erweiterten Preis bearbeiten" + confirm_changes: "Änderungen bestätigen" + extended_price_successfully_updated: "Der erweiterte Preis wurde erfolgreich aktualisiert." #ajouter un code promotionnel coupons_new: add_a_coupon: "Gutschein hinzufügen" @@ -496,7 +496,7 @@ de: details: "Details" amount: "Betrag" machine_booking-3D_printer: "Maschinen-Buchung - 3D-Drucker" - training_booking-3D_print: "Training booking - initiation to 3d printing" + training_booking-3D_print: "Schulungsbuchung - Einstieg ins 3D-Drucken" total_amount: "Gesamtbetrag" total_including_all_taxes: "Gesamtpreis inkl. Steuern" VAT_disabled: "MwSt. deaktiviert" @@ -553,15 +553,15 @@ de: enable_VAT: "MwSt. aktivieren" VAT_rate: "MwSt.-Satz" VAT_history: "MwSt.-Sätze Historie" - VAT_notice: "This parameter configures the general case of the VAT rate and applies to everything sold by the Fablab. It is possible to override this parameter by setting a specific VAT rate for each object." - edit_multi_VAT_button: "More options" - multiVAT: "Advanced VAT" - multi_VAT_notice: "Please note: The current general rate is {RATE}%. Here you can define different VAT rates for each category.

For example, you can override this value, only for machine reservations, by filling in the corresponding field below. If no value is filled in, the general rate will apply." - VAT_rate_machine: "Machine reservation" - VAT_rate_space: "Space reservation" - VAT_rate_training: "Training reservation" - VAT_rate_event: "Event reservation" - VAT_rate_subscription: "Subscription" + VAT_notice: "Dieser Parameter legt den allgemeinen Fall des MwSt.-Satzes fest und gilt für alles, was der Fablab verkauft. Der Parameter kann überschreiben werden, indem ein spezieller Mehrwertsteuersatz für jedes Objekt festgelegt wird." + edit_multi_VAT_button: "Weitere Optionen" + multiVAT: "Erweiterte MwSt." + multi_VAT_notice: "Bitte beachten Sie: Der aktuelle allgemeine MwSt.-Satz beträgt {RATE}%. Hier können Sie unterschiedliche Mehrwertsteuersätze für jede Kategorie festlegen.

Zum Beispiel können Sie diesen Wert für Maschinenreservierungen überschreiben, indem Sie das entsprechende Feld unten ausfüllen. Wird kein Wert ausgefüllt, gilt der allgemeine Satz." + VAT_rate_machine: "Maschinenreservierung" + VAT_rate_space: "Raumreservierung" + VAT_rate_training: "Schulungsreservierung" + VAT_rate_event: "Veranstaltungsreservierung" + VAT_rate_subscription: "Abonnement" changed_at: "Geändert am" changed_by: "Von" deleted_user: "Gelöschter Nutzer" @@ -603,9 +603,9 @@ de: logo_successfully_saved: "Logo erfolgreich gespeichert." an_error_occurred_while_saving_the_logo: "Beim Speichern des Logos ist ein Fehler aufgetreten." filename: "Dateiname" - schedule_filename: "Schedule file name" + schedule_filename: "Dateiname des Zeitplans" prefix_info: "Die Rechnungen werden als PDF-Dateien generiert, die mit dem folgenden Präfix benannt sind." - schedule_prefix_info: "The payment schedules will be generated as PDF files, named with the following prefix." + schedule_prefix_info: "Die Zahlungspläne werden als PDF-Dateien mit dem folgenden Prefix generiert." prefix: "Präfix" prefix_successfully_saved: "Dateipräfix erfolgreich gespeichert" an_error_occurred_while_saving_the_prefix: "Beim Speichern des Dateipräfix ist ein Fehler aufgetreten" @@ -673,16 +673,20 @@ de: general_space_code: "Abrechnungscode für alle Räume" accounting_Space_label: "Raumbezeichnung" general_space_label: "Abrechnungs-Label für alle Räume" - accounting_Error_code: "Errors code" - general_error_code: "Accounting code for erroneous invoices" - accounting_Error_label: "Errors label" - general_error_label: "Account label for erroneous invoices" + accounting_Pack_code: "Prepaid-pack code" + general_pack_code: "Accounting code for prepaid-packs" + accounting_Pack_label: "Prepaid-pack label" + general_pack_label: "Account label for prepaid-packs" + accounting_Error_code: "Fehlercode" + general_error_code: "Rechnungscode für fehlerhafte Rechnungen" + accounting_Error_label: "Fehlerbezeichnung" + general_error_label: "Kontobezeichnung für fehlerhafte Rechnungen" codes_customization_success: "Anpassung der Abrechnungscodes erfolgreich gespeichert." unexpected_error_occurred: "Beim Speichern der Codes ist ein unerwarteter Fehler aufgetreten. Bitte versuchen Sie es später erneut." export_accounting_data: "Abrechnungsdaten exportieren" - export_what: "What do you want to export?" - export_VAT: "Export the collected VAT" - export_to_ACD: "Export all data to the accounting software ACD" + export_what: "Was möchten Sie exportieren?" + export_VAT: "Die gesammelte MwSt. exportieren" + export_to_ACD: "Alle Daten in die Buchhaltungssoftware ACD exportieren" export_is_running: "Export wird ausgeführt. Sie werden nach Fertigstellung benachrichtigt." export_form_date: "Exportieren ab" export_to_date: "Exportieren bis" @@ -706,10 +710,10 @@ de: debit_euro: "Soll in Euro" credit_euro: "Guthaben in Euro" lettering: "Beschriftung" - start_date: "Start date" - end_date: "End date" - vat_rate: "VAT rate" - amount: "Total amount" + start_date: "Startdatum" + end_date: "Enddatum" + vat_rate: "MwSt.-Satz" + amount: "Gesamtbetrag" payment: payment_settings: "Bezahlungseinstellungen" online_payment: "Online-Bezahlung" @@ -722,53 +726,53 @@ de: error_check_keys: "Fehler: Bitte überprüfen Sie Ihre Stripe-Schlüssel." stripe_keys_saved: "Stripe-Schlüssel erfolgreich gespeichert." error_saving_stripe_keys: "Die Stripe-Schlüssel konnten nicht gespeichert werden. Bitte versuchen Sie es später erneut." - payzen_keys_info_html: "

To be able to collect online payments, you must configure the PayZen identifiers and keys.

Retrieve them from your merchant back office.

" - client_keys: "Client key" - api_keys: "API keys" + payzen_keys_info_html: "

Um Online-Zahlungen zu erhalten, müssen Sie die PayZen Identifikatoren und Schlüssel konfigurieren.

Holen Sie sie aus Ihrem Händler-Backend.

" + client_keys: "Kundenschlüssel" + api_keys: "API-Schlüssel" edit_keys: "Schlüssel bearbeiten" currency: "Währung" currency_info_html: "Bitte geben Sie unten die Währung an, die für Online-Bezahlung verwendet wird. Sie sollten einen ISO-Code mit drei Buchstaben aus der Liste Stripe unterstützter Währungen eingeben." currency_alert_html: "Warnung: Die Währung kann nicht mehr geändert werden, nachdem die erste Online-Zahlung eingegangen ist. Bitte nehmen Sie diese Einstellung sorgfältig vor, bevor Sie Fab-Manager für Mitglieder öffnen." stripe_currency: "Stripe-Währung" - gateway_configuration_error: "An error occurred while configuring the payment gateway: " + gateway_configuration_error: "Fehler beim Konfigurieren des Zahlungs-Gateways: " payzen: - payzen_keys: "PayZen keys" + payzen_keys: "PayZen-Schlüssel" payzen_username: "Benutzername" payzen_password: "Passwort" - payzen_endpoint: "REST API server name" - payzen_hmac: "HMAC-SHA-256 key" - payzen_public_key: "Client public key" + payzen_endpoint: "REST API Server Name" + payzen_hmac: "HMAC-SHA-256 Schlüssel" + payzen_public_key: "Öffentlicher Schlüssel des Kunden" currency: "Währung" payzen_currency: "PayZen Währung" currency_info_html: "Bitte geben Sie unten die Währung an, die für Online-Bezahlung verwendet wird. Sie sollten einen ISO-Code mit drei Buchstaben aus der Liste PayZen unterstützter Währungen eingeben." save: "Speichern" - currency_error: "The inputted value is not a valid currency" - error_while_saving: "An error occurred while saving the currency: " - currency_updated: "The PayZen currency was successfully updated to {CURRENCY}." + currency_error: "Der eingegebene Wert ist keine gültige Währung" + error_while_saving: "Beim Speichern der Währung ist ein Fehler aufgetreten: " + currency_updated: "Die PayZen-Währung wurde erfolgreich auf {CURRENCY} aktualisiert." #select a payment gateway gateway_modal: - select_gateway_title: "Select a payment gateway" - gateway_info: "To securely collect and process payments online, Fab-manager needs to use an third-party service authorized by the financial institutions, called a payment gateway." - select_gateway: "Please select an available gateway" + select_gateway_title: "Zahlungs-Gateway auswählen" + gateway_info: "Um Zahlungen sicher online zu sammeln und zu verarbeiten, muss Fab-Manager einen von Finanzinstituten autorisierten Drittanbieter nutzen, der als Zahlungsgateway bezeichnet wird." + select_gateway: "Bitte wählen Sie ein verfügbares Gateway" stripe: "Stripe" payzen: "PayZen" - confirm_button: "Validate the gateway" + confirm_button: "Gateway überprüfen" payment_schedules: filter_schedules: "Pläne filtern" no_payment_schedules: "Keine Zahlungspläne zum Anzeigen" load_more: "Mehr laden" - card_updated_success: "The user's card was successfully updated" + card_updated_success: "Die Karte des Nutzers wurde erfolgreich aktualisiert" document_filters: reference: "Referenz" customer: "Kunde" date: "Datum" update_payment_mean_modal: - title: "Update the payment mean" - update_info: "Please specify below the new payment mean for this payment schedule to continue." - select_payment_mean: "Select a new payment mean" - method_Transfer: "By bank transfer" - method_Check: "By check" - confirm_button: "Update" + title: "Zahlungsmittel aktualisieren" + update_info: "Bitte geben Sie unten das neue Zahlungsmittel an, damit der Zahlungszeitplan fortgesetzt werden kann." + select_payment_mean: "Neues Zahlungsmittel auswählen" + method_Transfer: "Per Banküberweisung" + method_Check: "Per Scheck" + confirm_button: "Aktualisieren" #management of users, labels, groups, and so on members: users_management: "Benutzer-Verwaltung" @@ -918,7 +922,7 @@ de: expires_at: "Läuft ab am:" price_: "Preis:" offer_free_days: "Kostenlose Tage anbieten" - renew_subscription: "Renew the subscription" + renew_subscription: "Abonnement erneuern" user_has_no_current_subscription: "Benutzer hat kein aktuelles Abonnement." subscribe_to_a_plan: "Plan abonnieren" trainings: "Schulungen" @@ -944,7 +948,7 @@ de: a_problem_occurred_while_saving_the_date: "Beim Speichern des Datums ist ein Problem aufgetreten." new_subscription: "Neues Abonnement" you_are_about_to_purchase_a_subscription_to_NAME: "Sie sind dabei, ein Abonnement für {NAME} zu kaufen." - with_schedule: "Subscribe with a monthly payment schedule" + with_schedule: "Mit einem monatlichen Zahlungsplan abonnieren" subscription_successfully_purchased: "Abonnement erfolgreich gekauft." a_problem_occurred_while_taking_the_subscription: "Bei der Übernahme des Abonnements ist ein Problem aufgetreten" wallet: "Guthabenkonto" @@ -953,37 +957,37 @@ de: cannot_extend_own_subscription: "Sie können Ihr eigenes Abonnement nicht erweitern. Bitte fragen Sie einen anderen Manager oder einen Administrator." #extend a subscription for free free_extend_modal: - extend_subscription: "Extend the subscription" - offer_free_days_infos: "You are about to extend the user's subscription by offering him free additional days." - credits_will_remain_unchanged: "The balance of free credits (training / machines / spaces) of the user will remain unchanged." - current_expiration: "Current subscription will expire at:" + extend_subscription: "Abonnement verlängern" + offer_free_days_infos: "Sie sind dabei, das Abonnement des Benutzers zu verlängern, indem Sie ihm zusätzliche Tage kostenlos anbieten." + credits_will_remain_unchanged: "Der Saldo der freien Gutschriften (Schulungen / Maschinen / Räume) des Nutzers bleibt unverändert." + current_expiration: "Aktuelles Abonnement läuft ab um:" DATE_TIME: "{DATE} {TIME}" - new_expiration_date: "New expiration date:" - number_of_free_days: "Number of free days:" - extend: "Extend" - extend_success: "The subscription was successfully extended for free" + new_expiration_date: "Neues Ablaufdatum:" + number_of_free_days: "Anzahl der freien Tage:" + extend: "Erweitern" + extend_success: "Das Abonnement wurde erfolgreich kostenlos erweitert" #renew a subscription renew_subscription_modal: - renew_subscription: "Renew the subscription" - renew_subscription_info: "You are about to renew the user's subscription by charging him again for his current subscription." - credits_will_be_reset: "The balance of free credits (training / machines / spaces) of the user will be reset, unused credits will be lost." - current_expiration: "Current subscription will expire at:" - new_start: "The new subscription will start at:" - new_expiration_date: "The new subscription will expire at:" - pay_in_one_go: "Pay in one go" - renew: "Renew" - renew_success: "The subscription was successfully renewed" + renew_subscription: "Abonnement erneuern" + renew_subscription_info: "Sie verlängern das Abonnement des Benutzers, indem Sie ihm sein aktuelles Abonnement erneut berechnen." + credits_will_be_reset: "Der Saldo der freien Credits (Schulung / Maschinen / Räume) des Benutzers wird zurückgesetzt, nicht genutzte Credits gehen verloren." + current_expiration: "Aktuelles Abonnement läuft ab um:" + new_start: "Das neue Abonnement beginnt am:" + new_expiration_date: "Das neue Abonnement läuft ab um:" + pay_in_one_go: "In einem Schritt bezahlen" + renew: "Erneuern" + renew_success: "Das Abonnement wurde erfolgreich verlängert" #take a new subscription subscribe_modal: - subscribe_USER: "Subscribe {USER}" - subscribe: "Subscribe" - select_plan: "Please select a plan" - pay_in_one_go: "Pay in one go" + subscribe_USER: "{USER} abonnieren" + subscribe: "Abonnieren" + select_plan: "Bitte wählen Sie einen Plan" + pay_in_one_go: "In einem Schritt bezahlen" subscription_success: "" #add a new administrator to the platform admins_new: add_an_administrator: "Administrator hinzufügen" - administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "Administrator erfolgreich erstellt. {GENDER, select, female{Sie} other{Er}} erhält {GENDER, select, female{ihre} other{seine}} Verbindungsanweisungen per E-Mail." + administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "Administrator erfolgreich erstellt. Er erhält seine Verbindungsanweisungen per E-Mail." failed_to_create_admin: "Administrator konnte nicht erstellt werden:" man: "Männlich" woman: "Weiblich" @@ -1001,7 +1005,7 @@ de: #add a new manager to the platform manager_new: add_a_manager: "Manager hinzufügen" - manager_successfully_created: "Manager erfolgreich erstellt. {GENDER, select, female{Sie} other{Er}} erhält {GENDER, select, female{ihre} other{seine}} Verbindungsanweisungen per E-Mail." + manager_successfully_created: "Manager erfolgreich erstellt. Er erhält seine Verbindungsanweisungen per E-Mail." failed_to_create_manager: "Konnte den Manager nicht erstellen:" man: "Männlich" woman: "Weiblich" @@ -1032,7 +1036,7 @@ de: oauth2_provider_successfully_added: "OAuth 2.0 Provider erfolgreich hinzugefügt." #edit an authentication provider (SSO) authentication_edit: - provider: "Provider:" + provider: "Anbieter:" it_is_required_to_set_the_matching_between_User.uid_and_the_API_to_add_this_provider: "Um diesen Provider hinzuzufügen, muss die Übereinstimmung zwischen User.uid und der API festgelegt werden." provider_successfully_updated: "Anbieter erfolgreich aktualisiert." an_error_occurred_unable_to_update_the_provider: "Ein Fehler ist aufgetreten: Der Anbieter konnte nicht aktualisiert werden." @@ -1228,9 +1232,9 @@ de: error_SETTING_locked: "Die Einstellung konnte nicht aktualisiert werden: {SETTING} ist gesperrt. Bitte kontaktieren Sie Ihren Systemadministrator." an_error_occurred_saving_the_setting: "Beim Speichern der Einstellung ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut." book_overlapping_slots_info: "Erlauben / Verhindern der Reservierung von überlappenden Slots" - allow_booking: "Allow booking" - overlapping_categories: "Overlapping categories" - overlapping_categories_info: "Preventing booking on overlapping slots will be done by comparing the date and time of the following categories of reservations." + allow_booking: "Buchungen erlauben" + overlapping_categories: "Überlappende Kategorien" + overlapping_categories_info: "Die Buchung von überlappenden Zeitnischen wird durch einen Vergleich zwischen Datum und Uhrzeit der folgenden Buchungskategorien verhindert." default_slot_duration: "Standarddauer für Slots" duration_minutes: "Dauer (in Minuten)" default_slot_duration_info: "Die Verfügbarkeit von Maschinen und Räumen ist in mehrere Slots dieser Dauer aufgeteilt. Dieser Wert kann je Verfügbarkeit überschrieben werden." @@ -1243,10 +1247,10 @@ de: plans_info_html: "

Abonnements bieten eine Möglichkeit, Ihre Preise zu segmentieren und Vorteile für reguläre Benutzer zu bieten.

Warnung: Es wird nicht empfohlen, die Abonnements zu deaktivieren, wenn mindestens ein Abonnement auf dem System aktiv ist.

" enable_plans: "Pläne aktivieren" plans_module: "Plan-Modul" - trainings: "Trainings" - trainings_info_html: "

Trainings are fully integrated into the Fab-manger's agenda. If enabled, your members will be able to book and pay trainings.

Trainings provides a way to prevent members to book some machines, if they do have not taken the prerequisite course.

" - enable_trainings: "Enable the trainings" - trainings_module: "trainings module" + trainings: "Schulungen" + trainings_info_html: "

Schulungen sind vollständig in die Agenda von Fab-Manger integriert. Wenn aktiviert, können Mitglieder Schulungen buchen und bezahlen.

Schulungen können Mitglieder daran hindern, Maschinen zu buchen, für die sie noch nicht den Grundkurs absolviert haben.

" + enable_trainings: "Schulungen aktivieren" + trainings_module: "Schulungs-Modul" invoicing: "Rechnungsstellung" invoicing_info_html: "

Sie können das Rechnungsmodul komplett deaktivieren.

Das ist nützlich, wenn Sie über Ihr eigenes Rechnungssystem verfügen und nicht wollen, dass Fab-Manager Rechnungen generiert und an Mitglieder sendet.

Warnung: Auch wenn Sie das Rechnungsmodul deaktivieren, müssen Sie die Mehrwertsteuer konfigurieren, um Fehler in Rechnungslegung und Preisen zu vermeiden. Die Konfiguration erfolgt in der Sektion « Rechnungen > Einstellungen ».

" enable_invoicing: "Rechnungsstellung aktivieren" @@ -1256,7 +1260,7 @@ de: phone_is_required: "Telefonummer erforderlich" phone_required_info: "Sie können festlegen, ob die Telefonnummer erforderlich sein soll, um einen neuen Benutzer auf Fab-Manager zu registrieren." address: "Adresse" - address_required_info_html: "You can define if the address should be required to register a new user on Fab-manager.
Please note that, depending on your country, the regulations may requires addresses for the invoices to be valid." + address_required_info_html: "Sie können festlegen, ob eine Adresse für die Neuregistrierung eines Benutzers erforderlich sein soll.
Bitte beachten Sie dass in Abhängigkeit von Landesvorschriften Adressen für die Gültigkeit der Rechnungen erforderlich sein können." address_is_required: "Adresse ist erforderlich" captcha: "Captcha" captcha_info_html: "Sie können einen Schutz gegen Roboter einrichten, um zu verhindern, dass diese Accounts erstellen. Dieser Schutz verwendet Google reCAPTCHA. Melden Sie sich für ein API-Schlüsselpaar an, um reCaptcha zu verwenden." @@ -1278,24 +1282,24 @@ de: confirmation_required_info: "Optional können Sie die Bestätigung der E-Mail-Adresse für Benutzer obligatorisch machen, bevor Sie Zugriff auf Fab-Manager bekommen." confirmation_is_required: "Bestätigung erforderlich" wallet_module: "Guthabenkonto-Modul" - public_agenda_module: "public agenda module" + public_agenda_module: "öffentliches Agenda-Modul" statistics_module: "Statistik-Modul" upcoming_events_shown: "Anzeigelimit für anstehende Termine" - display_invite_to_renew_pack: "Display the invite to renew prepaid-packs" - packs_threshold_info_html: "You can define under how many hours the user will be invited to buy a new prepaid-pack, if his stock of prepaid hours is under this threshold.
You can set a number of hours (eg. 5) or a percentage of his current pack pack (eg. 0.05 means 5%)." - renew_pack_threshold: "threshold for packs renewal" - pack_only_for_subscription_info_html: "If this option is activated, the purchase and use of a prepaid pack is only possible for the user with a valid subscription." - pack_only_for_subscription: "Subscription valid for purchase and use of a prepaid pack" - pack_only_for_subscription_info: "Make subscription mandatory for prepaid packs" - extended_prices: "Extended prices" - extended_prices_info_html: "Spaces can have different prices depending on the cumulated duration of the booking. You can choose if this apply to all bookings or only to those starting within the same day." - extended_prices_in_same_day: "Extended prices in the same day" - public_registrations: "Public registrations" + display_invite_to_renew_pack: "Einladung zur Erneuerung der vorausbezahlten Pakete anzeigen" + packs_threshold_info_html: "Sie können festlegen, ab wievielen Reststunden der Benutzer auf den Kauf eines neuen Pakets an vorausbezahlten Stunden hingewiesen wird.
Sie können eine Anzahl von Stunden (z. B. 5) oder einen Prozentsatz seines aktuellen Pakets (z. B. 0,05 bedeutet 5%) angeben." + renew_pack_threshold: "Schwellenwert für Paketverlängerung" + pack_only_for_subscription_info_html: "Wenn diese Option aktiviert ist, können nur Benutzer mit einem gültigen Abonnement vorausbezahlte Pakete kaufen und nutzen." + pack_only_for_subscription: "Abonnement gültig für Kauf und Nutzung eines vorausbezahlten Pakets" + pack_only_for_subscription_info: "Abonnement für vorausbezahlte Pakete obligatorisch machen" + extended_prices: "Erweiterter Preis" + extended_prices_info_html: "Räume können je nach Dauer der Buchung unterschiedliche Preise haben. Sie können wählen, ob dies für alle Buchungen oder nur für diejenigen gilt, die am selben Tag beginnen." + extended_prices_in_same_day: "Erweiterte Preise am selben Tag" + public_registrations: "Öffentliche Registrierungen" overlapping_options: - training_reservations: "Trainings" - machine_reservations: "Machines" - space_reservations: "Spaces" - events_reservations: "Events" + training_reservations: "Schulungen" + machine_reservations: "Maschinen" + space_reservations: "Räume" + events_reservations: "Veranstaltungen" general: general: "Allgemein" title: "Titel" @@ -1317,9 +1321,9 @@ de: name: "Name" created_at: "Erstellungsdatum" updated_at: "Datum der letzten Aktualisierung" - public_registrations: "Public registrations" - public_registrations_info: "Allow everyone to register a new account on the platform. If disabled, only administrators and managers can create new accounts." - public_registrations_allowed: "Public registrations allowed" + public_registrations: "Öffentliche Registrierungen" + public_registrations_info: "Erlaube jedem, ein neues Konto auf der Plattform anzulegen. Wenn deaktiviert, können nur Administratoren und Manager neue Konten erstellen." + public_registrations_allowed: "Öffentliche Registrierungen erlaubt" help: "Hilfe" feature_tour: "Feature-Tour" feature_tour_info_html: "

Wenn sich ein Administrator oder Manager anmeldet, wird beim jeweils ersten Besuch eines Abschnitts der Anwendung die Feature-Tour ausgelöst. Sie können dieses Verhalten auf einen der folgenden Werte ändern:

  • « Einmal », um das Standardverhalten beizubehalten.
  • « Pro Sitzung », um die Tour jedes Mal anzuzeigen, wenn die Anwendung erneut geöffnet wird.
  • « Nur manuell », deaktiviert die automatische Anzeige der Touren. Es ist weiterhin möglich, sie durch Drücken der F1-Taste oder durch Klicken auf « Hilfe » im Benutzermenu zu starten.
" @@ -1335,9 +1339,9 @@ de: wallet: "Guthabenkonto" wallet_info_html: "

Mit dem Guthabenkonto können Sie Benutzern eine Geldsumme zuweisen. Diese können es nach Belieben im Fab-Manager ausgeben.

Mitglieder können ihr Guthabenkonto nicht selbst aufladen, das können nur Manager und Administratoren.

" enable_wallet: "Guthabenkonto aktivieren" - public_agenda: "Public agenda" - public_agenda_info_html: "

The public agenda offers to members and visitors a general overview of the Fablab's planning.

Please note that, even logged, users won't be able to book a reservation or modify anything from this agenda: this is a read-only page.

" - enable_public_agenda: "Enable public agenda" + public_agenda: "Öffentliche Agenda" + public_agenda_info_html: "

Die öffentliche Agenda bietet Mitgliedern und Besuchern eine allgemeine Übersicht über die Planung des Fablabs.

Bitte beachten Sie, dass selbst eingeloggte Benutzer keine Reservierung buchen oder die Agenda ändern können: Dies ist eine schreibgeschützte Seite.

" + enable_public_agenda: "Öffentliche Agenda aktivieren" statistics: "Statistiken" statistics_info_html: "

Aktivieren oder deaktivieren Sie das Statistik-Modul.

Wenn aktiviert, konsolidiert das Modul die Tagesdaten in der Datenbank einer leistungsstarken Analyse-Engine. Administratoren können im entsprechenden Abschnitt die erstellten Diagramme und Tabellen durchsuchen.

" enable_statistics: "Statistik-Modul aktivieren" @@ -1381,7 +1385,7 @@ de: online_payment: "Ist das Online-Zahlungsmodul aktiv?" invoices: "Ist das Rechnungsmodul aktiv?" openlab: "Ist das Projektteilungsmodul (OpenLab) aktiv?" - tracking_id_info_html: "

Um die statistische Analyse der Besuche mithilfe von Google Analytics zu ermöglichen, tragen Sie hier Ihre Tracking-ID in der Form UA-000000-0 ein. Besuchen Sie die Google Analytics Website, um eine Tracking-ID zu erstellen.
Warnung: wenn Sie dieses Feature aktivieren, muss in Ihrer Datenschutzrichtlinie darauf hingewiesen werden.

Um Google Analytics verwenden zu können, benötigen Sie auch den Hostnamen. Klicken Sie auf die angrenzende Schaltfläche. Dieser letzte Parameter wird auch an anderen Stellen verwendet, bitte verwenden Sie ihn vorsichtig.

" + tracking_id_info_html: "Um die statistische Analyse der Besuche mithilfe von Google Analytics V4 zu ermöglichen, tragen Sie hier Ihre Tracking-ID in der Form G-XXXXXX ein. Besuchen Sie die Google Analytics Website, um eine Tracking-ID zu erstellen.
Warnung: wenn Sie dieses Feature aktivieren, wird ein Cookie erstellt. Denken Sie daran, es oben in Ihrer Datenschutzrichtlinie darauf hingewiesen werden." tracking_id: "Tracking-ID" open_api_clients: add_new_client: "Neuen API-Client erstellen" @@ -1395,7 +1399,7 @@ de: client_name: "Kundenname" confirmation_required: "Bestätigung erforderlich" do_you_really_want_to_delete_this_open_api_client: "Möchten Sie diesen OpenAPI-Client wirklich löschen?" - do_you_really_want_to_revoke_this_open_api_access: "Möchten Sie diesen Zugriff wirklich widerrufen ? Er wird das aktuelle Token löschen und ersetzen." + do_you_really_want_to_revoke_this_open_api_access: "Möchten Sie diesen Zugriff wirklich widerrufen? Er wird das aktuelle Token löschen und ersetzen." client_successfully_created: "Client erfolgreich erstellt." client_successfully_updated: "Client erfolgreich aktualisiert." client_successfully_deleted: "Client erfolgreich gelöscht." @@ -1422,50 +1426,50 @@ de: report_removed: "Der Bericht wurde gelöscht" failed_to_remove: "Ein Fehler ist aufgetreten, der Bericht konnte nicht gelöscht werden" plans_categories: - manage_plans_categories: "Manage plans' categories" + manage_plans_categories: "Plan-Kategorien verwalten" plan_categories_list: - categories_list: "List of the plan's categories" + categories_list: "Liste der Kategorien des Plans" no_categories: "Keine Kategorien" name: "Name" - significance: "Significance" + significance: "Signifikanz" create_plan_category: - new_category: "New category" + new_category: "Neue Kategorie" name: "Name" - significance: "Significance" - significance_info: "Categories will be shown ordered by signifiance. The higher you set the significance, the first the category will be shown." - confirm_create: "Create the category" - category_created: "The new category was successfully created" - unable_to_create: "Unable to create the category: " + significance: "Signifikanz" + significance_info: "Kategorien werden nach Signifikanz sortiert. Je höher die Signifikanz, desto weiter oben wird die Kategorie angezeigt." + confirm_create: "Kategorie erstellen" + category_created: "Die neue Kategorie wurde erfolgreich erstellt" + unable_to_create: "Die Kategorie konnte nicht erstellt werden: " edit_plan_category: - edit_category: "Edit the category" + edit_category: "Kategorie bearbeiten" name: "Name" - significance: "Significance" - confirm_edition: "Validate" - category_updated: "The category was successfully updated" - unable_to_update: "Unable to update the category: " - significance_info: "Categories will be shown ordered by signifiance. The higher you set the significance, the first the category will be shown." + significance: "Signifikanz" + confirm_edition: "Bestätigen" + category_updated: "Die Kategorie wurde erfolgreich aktualisiert" + unable_to_update: "Die Kategorie konnte nicht aktualisiert werden: " + significance_info: "Kategorien werden nach Signifikanz sortiert. Je höher die Signifikanz, desto weiter oben wird die Kategorie angezeigt." delete_plan_category: - delete_category: "Delete a category" - confirm_delete: "Delete" - delete_confirmation: "Are you sure you want to delete this category? If you do, the plans associated with this category won't be sorted anymore." - category_deleted: "The category was successfully deleted" - unable_to_delete: "Unable to delete the category: " + delete_category: "Kategorie löschen" + confirm_delete: "Löschen" + delete_confirmation: "Sind Sie sicher, dass Sie diese Kategorie löschen möchten? Wenn Sie dies tun, werden die mit dieser Kategorie verbundenen Pläne nicht mehr sortiert." + category_deleted: "Die Kategorie wurde erfolgreich gelöscht" + unable_to_delete: "Die Kategorie konnte nicht gelöscht werden: " local_payment: - validate_cart: "Validate my cart" - offline_payment: "Payment on site" - about_to_cash: "You're about to confirm the cashing by an external payment mean. Please do not click on the button below until you have fully cashed the requested payment." - about_to_confirm: "You're about to confirm your {ITEM, select, subscription{subscription} other{reservation}}." - payment_method: "Payment method" - method_card: "Online by card" - method_check: "By check" - method_transfer: "By bank transfer" - card_collection_info: "By validating, you'll be prompted for the member's card number. This card will be automatically charged at the deadlines." - check_collection_info: "By validating, you confirm that you have {DEADLINES} checks, allowing you to collect all the monthly payments." - transfer_collection_info: "

By validating, you confirm that you set up {DEADLINES} bank direct debits, allowing you to collect all the monthly payments.

Please note: the bank transfers are not automatically handled by Fab-manager.

" - online_payment_disabled: "Online payment is not available. You cannot collect this payment schedule by online card." + validate_cart: "Bestätigen Sie den Warenkorb" + offline_payment: "Zahlung vor Ort" + about_to_cash: "Sie bestätigen die Zahlung über ein externes Zahlungsmittel. Bitte klicken Sie nicht auf die Schaltfläche unten, bis Sie die angeforderte Zahlung vollständig eingelöst haben." + about_to_confirm: "Sie bestätigen nun {ITEM, select, subscription{Ihr Abonnement} other{Ihre Reservierung}}" + payment_method: "Zahlungsmethode" + method_card: "Online per Karte" + method_check: "Per Scheck" + method_transfer: "Per Banküberweisung" + card_collection_info: "Nach der Validierung werden Sie nach der Kartennummer des Mitglieds gefragt. Diese Karte wird automatisch zu den Fristen belastet." + check_collection_info: "Durch die Validierung bestätigen Sie, dass Sie {DEADLINES} Schecks haben und so alle monatlichen Zahlungen abwickeln können." + transfer_collection_info: "

Durch die Validierung bestätigen Sie, dass Sie {DEADLINES} Bank-Lastschriften eingerichtet haben, so dass alle monatlichen Zahlungen eingezogen werden können.

Bitte beachten Sie: Banküberweisungen werden nicht automatisch vom Fab-Manager bearbeitet.

" + online_payment_disabled: "Online-Zahlung ist nicht verfügbar. Sie können diesen Zahlungsplan nicht per Karte online abwickeln." check_list_setting: - save: 'Save' - customization_of_SETTING_successfully_saved: "Customization of the {SETTING} successfully saved." + save: 'Speichern' + customization_of_SETTING_successfully_saved: "Anpassung von {SETTING} erfolgreich gespeichert." #feature tour tour: conclusion: @@ -1554,8 +1558,8 @@ de: title: "Gutschrift" content: "Ermöglicht die Erstellung einer Gutschrift für die Rechnung in dieser Zeile oder für ihre Unterelemente. Warnung: Nur das Rechnungsdokument wird generiert, die tatsächliche Gutschrift für den Benutzer wird immer in Ihrer Verantwortung liegen." payment-schedules: - title: "Payment schedules" - content: "

Some subscription plans may be configured to allow the members to pay them with a monthly payment schedule.

Here you can view all existing payment schedules and manage their deadlines.

Click on [+] at the beginning of a row to display all deadlines associated with a payment schedule, and run some actions on them.

" + title: "Zahlungspläne" + content: "

Einige Abonnements können so konfiguriert werden, dass die Mitglieder sie mit einem monatlichen Zahlungsplan bezahlen können.

Hier können Sie alle bestehenden Zahlungspläne einsehen und deren Fristen verwalten.

Klicken Sie auf [+] am Anfang einer Reihe, um alle mit einem Zahlungsplan verbundenen Fristen anzuzeigen, und führen Sie Aktionen aus.

" settings: title: "Einstellungen" content: "

Hier können Sie die Parameter für die Rechnungserstellung ändern. Klicken Sie auf das Element, das Sie bearbeiten wollen.

Insbesondere legen Sie hier fest, ob Sie der Mehrwertsteuer unterliegen und zu welchem Satz.

" diff --git a/config/locales/app.admin.en.yml b/config/locales/app.admin.en.yml index e62c3d2f4..10b2f3c34 100644 --- a/config/locales/app.admin.en.yml +++ b/config/locales/app.admin.en.yml @@ -15,7 +15,7 @@ en: trainings: "Trainings" machines: "Machines" spaces: "Spaces" - events: "Eventos" + events: "Events" availabilities: "Availabilities" availabilities_notice: "Export to an Excel workbook every slots available for reservation, and their occupancy rate." info: "Info" @@ -24,7 +24,7 @@ en: ongoing_reservations: "Ongoing reservations" without_reservation: "Without reservation" confirmation_required: "Confirmation required" - do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "Do you really {GENDER, select, other {want}} to cancel the {USER}'s reservation, the {DATE} at {TIME}, concerning {RESERVATION}?" + do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "Do you really want to cancel {USER}'s reservation, the {DATE} at {TIME}, concerning {RESERVATION}?" reservation_was_successfully_cancelled: "Reservation was successfully cancelled." reservation_cancellation_failed: "Reservation cancellation failed." unable_to_remove_the_last_machine_of_the_slot_delete_the_slot_rather: "Unable to remove the last machine of the slot. Delete the slot rather." @@ -184,7 +184,7 @@ en: NUMBER_reservation: "{NUMBER} {NUMBER, plural, one{reservation} other{reservations}}" none: "None" training_validation: "Training validation" - training_of_the_DATE_TIME_html : "Training of the {DATE} - {TIME}" + training_of_the_DATE_TIME_html: "Training of the {DATE} - {TIME}" you_can_validate_the_training_of_the_following_members: "You can validate the training of the following members:" deleted_user: "Deleted user" no_reservation: "No reservation" @@ -271,7 +271,7 @@ en: events_edit: edit_the_event: "Edit the event" confirmation_required: "Confirmation required" - edit_recurring_event: "You're about to update a periodic event. What do you want to update ?" + edit_recurring_event: "You're about to update a periodic event. What do you want to update?" edit_this_event: "Only this event" edit_this_and_next: "This event and the following" edit_all: "All events" @@ -322,10 +322,10 @@ en: none: "None" #grammar concordance with training. an_error_occurred_while_saving_the_number_of_credits: "An error occurred while saving the number of credits." an_error_occurred_while_deleting_credit_with_the_TRAINING: "An error occurred while deleting credit with the {TRAINING}." - an_error_occurred_unable_to_find_the_credit_to_revoke: "An error occurred : unable to find the credit to revoke." + an_error_occurred_unable_to_find_the_credit_to_revoke: "An error occurred: unable to find the credit to revoke." an_error_occurred_while_creating_credit_with_the_TRAINING: "An error occurred while creating credit with the {TRAINING}." not_set: "Not set" - error_a_credit_linking_this_machine_with_that_subscription_already_exists: "Error : a credit linking this machine with that subscription already exists." + error_a_credit_linking_this_machine_with_that_subscription_already_exists: "Error: a credit linking this machine with that subscription already exists." changes_have_been_successfully_saved: "Changes have been successfully saved." credit_was_successfully_saved: "Credit was successfully saved." error_creating_credit: "Unable to create credit, an error occurred" @@ -365,7 +365,7 @@ en: these_prices_match_space_hours_rates_html: "The prices below match one hour of space usage, without subscription." add_a_space_credit: "Add a Space credit" space: "Space" - error_a_credit_linking_this_space_with_that_subscription_already_exists: "Error : a credit linking this space with that subscription already exists." + error_a_credit_linking_this_space_with_that_subscription_already_exists: "Error: a credit linking this space with that subscription already exists." status_enabled: "Enabled" status_disabled: "Disabled" status_all: "All" @@ -511,7 +511,7 @@ en: no_invoices_for_now: "No invoices for now." payment_schedules_list: "Payment schedules" invoicing_settings: "Invoicing settings" - warning_invoices_disabled: "Warning : invoices are not enabled. No invoices will be generated by Fab-manager. Nevertheless, you must correctly fill the information below, especially VAT." + warning_invoices_disabled: "Warning: invoices are not enabled. No invoices will be generated by Fab-manager. Nevertheless, you must correctly fill the information below, especially VAT." change_logo: "Change logo" john_smith: "John Smith" john_smith_at_example_com: "jean.smith@example.com" @@ -702,6 +702,10 @@ en: general_space_code: "Accounting code for all spaces" accounting_Space_label: "Spaces label" general_space_label: "Account label for all spaces" + accounting_Pack_code: "Prepaid-pack code" + general_pack_code: "Accounting code for prepaid-packs" + accounting_Pack_label: "Prepaid-pack label" + general_pack_label: "Account label for prepaid-packs" accounting_Error_code: "Errors code" general_error_code: "Accounting code for erroneous invoices" accounting_Error_label: "Errors label" @@ -1012,7 +1016,7 @@ en: #add a new administrator to the platform admins_new: add_an_administrator: "Add an administrator" - administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "Administrator successfully created. {GENDER, select, female{She} other{He}} receive {GENDER, select, female{her} other{his}} connection directives by e-mail." + administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "Successful creation. Connection directives were sent to the new administrator by e-mail." failed_to_create_admin: "Unable to create the administrator:" man: "Man" woman: "Woman" @@ -1030,7 +1034,7 @@ en: #add a new manager to the platform manager_new: add_a_manager: "Add a manager" - manager_successfully_created: "Manager successfully created. {GENDER, select, female{She} other{He}} receive {GENDER, select, female{her} other{his}} connection directives by e-mail." + manager_successfully_created: "Successful creation. Connection directives were sent to the new manager by e-mail." failed_to_create_manager: "Unable to create the manager:" man: "Man" woman: "Woman" @@ -1061,7 +1065,7 @@ en: oauth2_provider_successfully_added: "OAuth 2.0 provider successfully added." #edit an authentication provider (SSO) authentication_edit: - provider: "Provider :" + provider: "Provider:" it_is_required_to_set_the_matching_between_User.uid_and_the_API_to_add_this_provider: "It is required to set the matching between User.uid and the API to add this provider." provider_successfully_updated: "Provider successfully updated." an_error_occurred_unable_to_update_the_provider: "An error occurred: unable to update the provider." @@ -1351,7 +1355,7 @@ en: public_registrations_allowed: "Public registrations allowed" help: "Help" feature_tour: "Feature tour" - feature_tour_info_html: "

When an administrator or a manager in logged-in, a feature tour will be triggered the first time he/she visits each section of the application. You can change this behavior to one of the following values:

  • « Once » to keep the default behavior.
  • « By session » to display the tours each time you reopen the application.
  • « Manual trigger » to prevent displaying the tours automatically. It'll still be possible to trigger them by pressing the F1 key or by clicking on « Help » in the user's menu.
" + feature_tour_info_html: "

When an administrator or a manager in logged-in, a feature tour will be triggered the first time he visits each section of the application. You can change this behavior to one of the following values:

  • « Once » to keep the default behavior.
  • « By session » to display the tours each time you reopen the application.
  • « Manual trigger » to prevent displaying the tours automatically. It'll still be possible to trigger them by pressing the F1 key or by clicking on « Help » in the user's menu.
" feature_tour_display_mode: "Feature tour display mode" display_mode: once: "Once" @@ -1410,7 +1414,7 @@ en: online_payment: "Is the online payment module active?" invoices: "Is the invoicing module active?" openlab: "Is the project sharing module (OpenLab) active?" - tracking_id_info_html: "

To enable the statistical tracking of the visits using Google Analytics, set your tracking ID here. It is in the form UA-000000-2. Visit the Google Analytics website to get one.
Warning: if you enable this feature, remember to write it in your privacy policy, above.

The host name is also required to use Google Analytics. You can get it by clicking on the adjacent button. This last parameter is used elsewhere, please set it carefully.

" + tracking_id_info_html: "To enable the statistical tracking of the visits using Google Analytics V4, set your tracking ID here. It is in the form G-XXXXXX. Visit the Google Analytics website to get one.
Warning: if you enable this feature, a cookie will be created. Remember to write it down in your privacy policy, above." tracking_id: "Tracking ID" open_api_clients: add_new_client: "Create new API client" @@ -1424,7 +1428,7 @@ en: client_name: "Client's name" confirmation_required: "Confirmation required" do_you_really_want_to_delete_this_open_api_client: "Do you really want to delete this OpenAPI client?" - do_you_really_want_to_revoke_this_open_api_access: "Do you really want to revoke this access ? It will erase and replace the current token." + do_you_really_want_to_revoke_this_open_api_access: "Do you really want to revoke this access? It will erase and replace the current token." client_successfully_created: "Client successfully created." client_successfully_updated: "Client successfully updated." client_successfully_deleted: "Client successfully deleted." diff --git a/config/locales/app.admin.es.yml b/config/locales/app.admin.es.yml index 813bfdacf..995b97e9b 100644 --- a/config/locales/app.admin.es.yml +++ b/config/locales/app.admin.es.yml @@ -24,7 +24,7 @@ es: ongoing_reservations: "Reservas en curso" without_reservation: "Sin reserva" confirmation_required: "Confirmación requerida" - do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "Realmente quieres cancelar la reserva del {USER}, en {DATE} a las {TIME}, respecto {RESERVATION}?" + do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "¿Realmente quieres cancelar la reserva del {USER}, en {DATE} a las {TIME}, respecto {RESERVATION}?" reservation_was_successfully_cancelled: "La reserva fué cancelada con éxito." reservation_cancellation_failed: "Fallo al cancelar la reserva." unable_to_remove_the_last_machine_of_the_slot_delete_the_slot_rather: "No se puede quitar la última máquina de la ranura. Eliminar la ranura en su lugar." @@ -271,7 +271,7 @@ es: events_edit: edit_the_event: "Editar el evento" confirmation_required: "Confirmation required" - edit_recurring_event: "You're about to update a periodic event. What do you want to update ?" + edit_recurring_event: "You're about to update a periodic event. What do you want to update?" edit_this_event: "Only this event" edit_this_and_next: "This event and the following" edit_all: "All events" @@ -482,7 +482,7 @@ es: no_invoices_for_now: "Sin facturas por ahora." payment_schedules_list: "Payment schedules" invoicing_settings: "Configuración de facturación" - warning_invoices_disabled: "Warning : invoices are not enabled. No invoices will be generated by Fab-manager. Nevertheless, you must correctly fill the information below, especially VAT." + warning_invoices_disabled: "Warning: invoices are not enabled. No invoices will be generated by Fab-manager. Nevertheless, you must correctly fill the information below, especially VAT." change_logo: "Cambio de logotipo" john_smith: "John Smith" john_smith_at_example_com: "jean.smith@example.com" @@ -673,6 +673,10 @@ es: general_space_code: "Accounting code for all spaces" accounting_Space_label: "Spaces label" general_space_label: "Account label for all spaces" + accounting_Pack_code: "Prepaid-pack code" + general_pack_code: "Accounting code for prepaid-packs" + accounting_Pack_label: "Prepaid-pack label" + general_pack_label: "Account label for prepaid-packs" accounting_Error_code: "Errors code" general_error_code: "Accounting code for erroneous invoices" accounting_Error_label: "Errors label" @@ -838,7 +842,7 @@ es: active: "Activo" pending: "Pendiente" previous_provider: "Proveedor anteriorr" - confirmation_required: "Delete the provider?" + confirmation_required: "¿Eliminar el proveedor?" do_you_really_want_to_delete_the_TYPE_authentication_provider_NAME: "¿Realmente desea eliminar la {TYPE} proveedor de autenticación: {NAME}?" authentication_provider_successfully_deleted: "El proveedor de autenticación se eliminó correctamente." an_error_occurred_unable_to_delete_the_specified_provider: "Se ha producido un error: no se puede eliminar el proveedor especificado." @@ -983,7 +987,7 @@ es: #add a new administrator to the platform admins_new: add_an_administrator: "Agregar un administrador" - administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "administrador creado correctamente. {GENDER, select, female{She} other{He}} receive {GENDER, select, female{her} other{his}} directivas de conexión por e-mail." + administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "Successful creation. Connection directives were sent to the new administrator by e-mail." failed_to_create_admin: "No se puede crear el administrador :" man: "Man" woman: "Woman" @@ -1001,7 +1005,7 @@ es: #add a new manager to the platform manager_new: add_a_manager: "Add a manager" - manager_successfully_created: "Manager successfully created. {GENDER, select, female{She} other{He}} receive {GENDER, select, female{her} other{his}} connection directives by e-mail." + manager_successfully_created: "Successful creation. Connection directives were sent to the new manager by e-mail." failed_to_create_manager: "Unable to create the manager:" man: "Man" woman: "Woman" @@ -1032,7 +1036,7 @@ es: oauth2_provider_successfully_added: "OAuth 2.0 proveedor agregado correctamente." #edit an authentication provider (SSO) authentication_edit: - provider: "Proveedor :" + provider: "Proveedor:" it_is_required_to_set_the_matching_between_User.uid_and_the_API_to_add_this_provider: "Es necesario establecer la coincidencia entre User.uid y la API para agregar este proveedor." provider_successfully_updated: "Proveedor actualizado correctamente." an_error_occurred_unable_to_update_the_provider: "Se ha producido un error: no se puede actualizar el proveedor." @@ -1322,7 +1326,7 @@ es: public_registrations_allowed: "Public registrations allowed" help: "Help" feature_tour: "Feature tour" - feature_tour_info_html: "

When an administrator or a manager in logged-in, a feature tour will be triggered the first time he/she visits each section of the application. You can change this behavior to one of the following values:

  • « Once » to keep the default behavior.
  • « By session » to display the tours each time you reopen the application.
  • « Manual trigger » to prevent displaying the tours automatically. It'll still be possible to trigger them by pressing the F1 key or by clicking on « Help » in the user's menu.
" + feature_tour_info_html: "

When an administrator or a manager in logged-in, a feature tour will be triggered the first time he visits each section of the application. You can change this behavior to one of the following values:

  • « Once » to keep the default behavior.
  • « By session » to display the tours each time you reopen the application.
  • « Manual trigger » to prevent displaying the tours automatically. It'll still be possible to trigger them by pressing the F1 key or by clicking on « Help » in the user's menu.
" feature_tour_display_mode: "Feature tour display mode" display_mode: once: "Once" @@ -1381,7 +1385,7 @@ es: online_payment: "Is the online payment module active?" invoices: "Is the invoicing module active?" openlab: "Is the project sharing module (OpenLab) active?" - tracking_id_info_html: "

To enable the statistical tracking of the visits using Google Analytics, set your tracking ID here. It is in the form UA-000000-2. Visit the Google Analytics website to get one.
Warning: if you enable this feature, remember to write it in your privacy policy, above.

The host name is also required to use Google Analytics. You can get it by clicking on the adjacent button. This last parameter is used elsewhere, please set it carefully.

" + tracking_id_info_html: "To enable the statistical tracking of the visits using Google Analytics V4, set your tracking ID here. It is in the form G-XXXXXX. Visit the Google Analytics website to get one.
Warning: if you enable this feature, a cookie will be created. Remember to write it down in your privacy policy, above." tracking_id: "Tracking ID" open_api_clients: add_new_client: "Crear un nuevo cliente de API" @@ -1395,7 +1399,7 @@ es: client_name: "Nombre del cliente" confirmation_required: "Confirmation required" do_you_really_want_to_delete_this_open_api_client: "¿Desea realmente eliminar este cliente OpenAPI?" - do_you_really_want_to_revoke_this_open_api_access: "¿Realmente desea revocar este acceso? Se borrará y reemplazará el token actual." + do_you_really_want_to_revoke_this_open_api_access: "Do you really want to revoke this access? It will erase and replace the current token." client_successfully_created: "Cliente creado correctamente." client_successfully_updated: "Cliente actualizado correctamente." client_successfully_deleted: "Cliente borrado correctamente." diff --git a/config/locales/app.admin.fr.yml b/config/locales/app.admin.fr.yml index 37ca82754..0185b4aff 100644 --- a/config/locales/app.admin.fr.yml +++ b/config/locales/app.admin.fr.yml @@ -24,7 +24,7 @@ fr: ongoing_reservations: "Réservations en cours" without_reservation: "Sans réservation" confirmation_required: "Confirmation requise" - do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "Êtes-vous {GENDER, select, female{sûre} other{sûr}} de vouloir annuler la réservation de {USER}, le {DATE} à {TIME}, concernant {RESERVATION} ?" + do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "Voulez-vous vraiment annuler la réservation de {USER}, le {DATE} à {TIME}, concernant {RESERVATION} ?" reservation_was_successfully_cancelled: "La réservation a bien été annulée." reservation_cancellation_failed: "L'annulation de la réservation a échouée." unable_to_remove_the_last_machine_of_the_slot_delete_the_slot_rather: "Impossible de supprimer la dernière machine du créneau. Supprimez plutôt le créneau." @@ -271,7 +271,7 @@ fr: events_edit: edit_the_event: "Éditer l’événement" confirmation_required: "Confirmation requise" - edit_recurring_event: "Vous êtes sur le point de modifier un événement périodique. Que voulez-vous modifier ?" + edit_recurring_event: "Vous êtes sur le point de mettre à jour un événement périodique. Que voulez-vous mettre à jour ?" edit_this_event: "Uniquement cet événement" edit_this_and_next: "Cet événement et tous les suivants" edit_all: "Tous les événements" @@ -673,6 +673,10 @@ fr: general_space_code: "Code comptable pour tous les espaces" accounting_Space_label: "Libellé espaces" general_space_label: "Libellé du compte pour tous les espaces" + accounting_Pack_code: "Code pack prépayé" + general_pack_code: "Code comptable pour tous les packs prépayés" + accounting_Pack_label: "Libellé pack prépayé" + general_pack_label: "Libellé du compte pour tous les packs prépayés" accounting_Error_code: "Code erreurs" general_error_code: "Code comptable pour les factures en erreur" accounting_Error_label: "Libellé erreurs" @@ -983,7 +987,7 @@ fr: #add a new administrator to the platform admins_new: add_an_administrator: "Ajouter un administrateur" - administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "L'administrateur a bien été créé. {GENDER, select, female{Elle} other{Il}} recevra ses instructions de connexion par email." + administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "Création réussie. Les directives de connexion ont été envoyées à l'administrateur par e-mail." failed_to_create_admin: "Impossible de créer l'administrateur :" man: "Homme" woman: "Femme" @@ -1001,7 +1005,7 @@ fr: #add a new manager to the platform manager_new: add_a_manager: "Ajouter un gestionnaire" - manager_successfully_created: "Le gestionnaire a bien été créé. {GENDER, select, female{Elle} other{Il}} recevra ses instructions de connexion par courriel." + manager_successfully_created: "Création réussie. Les directives de connexion ont été envoyées au nouveau gestionnaire par e-mail." failed_to_create_manager: "Impossible de créer le gestionnaire :" man: "Homme" woman: "Femme" @@ -1381,7 +1385,7 @@ fr: online_payment: "Le module de paiement par carte bancaire est-il actif ?" invoices: "Le module est facturation est-il actif ?" openlab: "Le module de partage de projets (OpenLab) est-il actif ?" - tracking_id_info_html: "

Pour activer les suivi statistique des visites utilisant Google Analytics, définissez ici votre ID de suivi. Il se présente sous la forme UA-000000-2. Visitez le site web de Google Analytics pour en obtenir un.
Attention : si vous activez cette fonctionnalité, pensez à l'indiquer dans votre politique de confidentialité, ci-dessus.

Le nom d'hôte est également requis pour pouvoir utiliser Google Analytics. Vous pouvez l'obtenir en cliquant sur le bouton adjacent. Ce dernier paramètre est utilisé ailleurs, veuillez le définir avec soin.

" + tracking_id_info_html: "Pour activer les suivi statistique des visites utilisant Google Analytics V4, définissez ici votre ID de suivi. Il se présente sous la forme G-XXXXXX. Visitez le site web de Google Analytics pour en obtenir un.
Attention : si vous activez cette fonctionnalité, une cookie sera créé. Pensez à l'indiquer dans votre politique de confidentialité, ci-dessus." tracking_id: "ID de suivi" open_api_clients: add_new_client: "Créer un compte client" diff --git a/config/locales/app.admin.no.yml b/config/locales/app.admin.no.yml index 9eec2bc77..672626240 100644 --- a/config/locales/app.admin.no.yml +++ b/config/locales/app.admin.no.yml @@ -24,7 +24,7 @@ ongoing_reservations: "Pågående reservasjoner" without_reservation: "Ikke reservert" confirmation_required: "Bekreftelse nødvendig" - do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "{GENDER, select, other {Ønsker du å}} kansellere {USER} sin reservasjon {DATE}, {TIME} for {RESERVATION}?" + do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "Ønsker du å kansellere {USER} sin reservasjon {DATE}, {TIME} for {RESERVATION}?" reservation_was_successfully_cancelled: "Kansellering av reservasjon er gjennomført." reservation_cancellation_failed: "Det gikk ikke an å kansellere reservasjonen." unable_to_remove_the_last_machine_of_the_slot_delete_the_slot_rather: "Kan ikke fjerne siste maskinen fra reservasjonen. Slett reservasjonen." @@ -325,7 +325,7 @@ an_error_occurred_unable_to_find_the_credit_to_revoke: "En feil oppstod: kunne ikke finne kreditten som skal tilbakekalles." an_error_occurred_while_creating_credit_with_the_TRAINING: "Det oppstod en feil under oppretting av kreditt med {TRAINING}." not_set: "Ikke angitt" - error_a_credit_linking_this_machine_with_that_subscription_already_exists: "Feil : en kreditnota på denne maskinen med dette abonnementet finnes allerede." + error_a_credit_linking_this_machine_with_that_subscription_already_exists: "Feil: en kreditnota på denne maskinen med dette abonnementet finnes allerede." changes_have_been_successfully_saved: "Endringene er lagret." credit_was_successfully_saved: "Kreditten ble lagret." error_creating_credit: "Kan ikke opprette kreditt, feil oppstod" @@ -365,7 +365,7 @@ these_prices_match_space_hours_rates_html: "Prisene under samsvarer med en time maskinbruk uten abonnement." add_a_space_credit: "Legg til en plass/romkreditt" space: "Plass/rom" - error_a_credit_linking_this_space_with_that_subscription_already_exists: "Feil : en kreditnota på denne maskinen med dette abonnementet finnes allerede." + error_a_credit_linking_this_space_with_that_subscription_already_exists: "Feil: en kreditnota på denne maskinen med dette abonnementet finnes allerede." status_enabled: "Aktivert" status_disabled: "Deaktivert" status_all: "Alle" @@ -673,6 +673,10 @@ general_space_code: "Regnskapskode for plasser/rom" accounting_Space_label: "Etikett, plasser/rom" general_space_label: "Regnskapskode for alle plasser/rom" + accounting_Pack_code: "Prepaid-pack code" + general_pack_code: "Accounting code for prepaid-packs" + accounting_Pack_label: "Prepaid-pack label" + general_pack_label: "Account label for prepaid-packs" accounting_Error_code: "Kode for feil" general_error_code: "Regnskapskode for fakturafeil" accounting_Error_label: "Etikett for feil" @@ -1295,7 +1299,7 @@ training_reservations: "Trainings" machine_reservations: "Machines" space_reservations: "Spaces" - events_reservations: "Events" + events_reservations: "Arrangementer" general: general: "Generelt" title: "Tittel" @@ -1322,7 +1326,7 @@ public_registrations_allowed: "Public registrations allowed" help: "Hjelp" feature_tour: "Funksjonsgjennomgang" - feature_tour_info_html: "

When an administrator or a manager in logged-in, a feature tour will be triggered the first time he/she visits each section of the application. You can change this behavior to one of the following values:

  • « Once » to keep the default behavior.
  • « By session » to display the tours each time you reopen the application.
  • « Manual trigger » to prevent displaying the tours automatically. It'll still be possible to trigger them by pressing the F1 key or by clicking on « Help » in the user's menu.
" + feature_tour_info_html: "

Når en administrator eller en leder er innlogget En fremvisning utløses første gang han besøker hver del av applikasjonen. Du kan endre denne adferden til en av følgende verdier:

  • « Once » for å beholde standardvirkemåten.
  • « By session » to display the tours each time you reopen the application.
  • « Manual trigger » for å forhindre at turene vises automatisk. Det vil fortsatt være mulig å utløse dem ved å trykke F1-tasten eller ved å klikke på « Hjelp » i brukermenyen.
" feature_tour_display_mode: "Modus for funksjonsgjennomgang" display_mode: once: "Én gang" @@ -1381,7 +1385,7 @@ online_payment: "Is the online payment module active?" invoices: "Is the invoicing module active?" openlab: "Is the project sharing module (OpenLab) active?" - tracking_id_info_html: "

To enable the statistical tracking of the visits using Google Analytics, set your tracking ID here. It is in the form UA-000000-2. Visit the Google Analytics website to get one.
Warning: if you enable this feature, remember to write it in your privacy policy, above.

The host name is also required to use Google Analytics. You can get it by clicking on the adjacent button. This last parameter is used elsewhere, please set it carefully.

" + tracking_id_info_html: "To enable the statistical tracking of the visits using Google Analytics V4, set your tracking ID here. It is in the form G-XXXXXX. Visit the Google Analytics website to get one.
Warning: if you enable this feature, a cookie will be created. Remember to write it down in your privacy policy, above." tracking_id: "Tracking ID" open_api_clients: add_new_client: "Lage ny API-klient" @@ -1395,7 +1399,7 @@ client_name: "Klientens navn" confirmation_required: "Confirmation required" do_you_really_want_to_delete_this_open_api_client: "Do you really want to delete this OpenAPI client?" - do_you_really_want_to_revoke_this_open_api_access: "Do you really want to revoke this access ? It will erase and replace the current token." + do_you_really_want_to_revoke_this_open_api_access: "Do you really want to revoke this access? It will erase and replace the current token." client_successfully_created: "Client successfully created." client_successfully_updated: "Client successfully updated." client_successfully_deleted: "Client successfully deleted." @@ -1595,7 +1599,7 @@ content: "Create and manage promotional coupons allowing to offer punctual discounts to their holders." events: welcome: - title: "Events" + title: "Arrangementer" content: "Create events, track their reservations and organize them from this page." list: title: "The events" diff --git a/config/locales/app.admin.pt.yml b/config/locales/app.admin.pt.yml index e4c40ae9e..dfa8991af 100755 --- a/config/locales/app.admin.pt.yml +++ b/config/locales/app.admin.pt.yml @@ -15,7 +15,7 @@ pt: trainings: "Treinamentos" machines: "Máquinas" spaces: "Espaços" - events: "Eventos" + events: "Events" availabilities: "Disponíveis" availabilities_notice: "Exportar para Excel livro com todos os slots disponíveis para reserva, e suas ocupações." info: "Informações" @@ -24,7 +24,7 @@ pt: ongoing_reservations: "Reservas em curso" without_reservation: "Sem reservas" confirmation_required: "Confirmação Obrigatória" - do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "Você realmente deseja cancelar a reserva do usuário {USER}, em {DATE} ás {TIME}, sobre {RESERVATION}?" + do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "Realmente deseja cancelar a reserva do usuário {USER}, em {DATE} ás {TIME}, sobre {RESERVATION}?" reservation_was_successfully_cancelled: "A reserva foi cancelada com sucesso" reservation_cancellation_failed: "Cancelamento da reserva falhou." unable_to_remove_the_last_machine_of_the_slot_delete_the_slot_rather: "Não é possível remover a última máquina do slot. Delete o slot primeiramente." @@ -271,7 +271,7 @@ pt: events_edit: edit_the_event: "Editar evento" confirmation_required: "Confirmação obrigatória" - edit_recurring_event: "Você está prestes a atualizar um evento periódico. O que você quer atualizar ?" + edit_recurring_event: "Você está prestes a atualizar um evento periódico. O que você quer atualizar?" edit_this_event: "Apenas este evento" edit_this_and_next: "Este evento e os seguintes" edit_all: "Todos eventos" @@ -322,10 +322,10 @@ pt: none: "Vazio" #grammar concordance with training. an_error_occurred_while_saving_the_number_of_credits: "Um erro ocorreu enquanto era salvo o número de créditos." an_error_occurred_while_deleting_credit_with_the_TRAINING: "Um erro ocorreu enquanto o crédito era deletado do {TRAINING}." - an_error_occurred_unable_to_find_the_credit_to_revoke: "Um erro ocorreu : incapaz de encontrar o crédito para revogar." + an_error_occurred_unable_to_find_the_credit_to_revoke: "An error occurred: unable to find the credit to revoke." an_error_occurred_while_creating_credit_with_the_TRAINING: "Ocorreu um erro ao criar o crédito com o {TRAINING}." not_set: "Não definido" - error_a_credit_linking_this_machine_with_that_subscription_already_exists: "Erro : um link de crédito entre esta máquina e esta assinatura já existe." + error_a_credit_linking_this_machine_with_that_subscription_already_exists: "Erro: uma conexão de crédito entre esta máquina e esta assinatura já existe." changes_have_been_successfully_saved: "As modificações foram salvas com sucesso." credit_was_successfully_saved: "Crédito salvo com sucesso." error_creating_credit: "Não foi possível criar crédito, um erro ocorreu" @@ -673,6 +673,10 @@ pt: general_space_code: "Código de contabilidade para todos os espaços" accounting_Space_label: "Rótulo de espaços" general_space_label: "Rótulo de conta para todos os espaços" + accounting_Pack_code: "Prepaid-pack code" + general_pack_code: "Accounting code for prepaid-packs" + accounting_Pack_label: "Prepaid-pack label" + general_pack_label: "Account label for prepaid-packs" accounting_Error_code: "Código do erro" general_error_code: "Código de contabilidade para faturas erradas" accounting_Error_label: "Rótulo dos erros" @@ -983,7 +987,7 @@ pt: #add a new administrator to the platform admins_new: add_an_administrator: "Adicionar administrador" - administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "Administrator criado com sucesso. {GENDER, select, female{Ela} other{Ele}} receberá {GENDER, select, female{sua} other{seu}} diretivas de conexão por e-mail." + administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "Successful creation. Connection directives were sent to the new administrator by e-mail." failed_to_create_admin: "Não é possível criar administrador:" man: "Homem" woman: "Mulher" @@ -1001,7 +1005,7 @@ pt: #add a new manager to the platform manager_new: add_a_manager: "Adicionar Gestor" - manager_successfully_created: "Gerente criado com sucesso. {GENDER, select, female{Ela} other{Ele}} receberá {GENDER, select, female{Suas diretrizes de conexão por e-mail} other{Suas diretrizes de conexão por e-mail}}" + manager_successfully_created: "Successful creation. Connection directives were sent to the new manager by e-mail." failed_to_create_manager: "Não foi possível criar o gerente:" man: "Homem" woman: "Mulher" @@ -1032,7 +1036,7 @@ pt: oauth2_provider_successfully_added: "Provedor OAuth 2.0 adicionado com sucesso." #edit an authentication provider (SSO) authentication_edit: - provider: "Provedor :" + provider: "Provedor:" it_is_required_to_set_the_matching_between_User.uid_and_the_API_to_add_this_provider: "É necessário definir a correspondência entre User.uid ea API para adicionar este fornecedor." provider_successfully_updated: "Provedor modificado com sucesso." an_error_occurred_unable_to_update_the_provider: "Um erro ocorreu: não é possível atualizar provedor." @@ -1322,7 +1326,7 @@ pt: public_registrations_allowed: "Public registrations allowed" help: "Ajuda" feature_tour: "Tour de recursos" - feature_tour_info_html: "

Quando um administrador ou um gerente está logado, um tour de recurso será acionado na primeira vez que ele/ela visita cada seção do aplicativo. Você pode mudar esse comportamento para um dos seguintes valores:

  • « Uma vez » para manter o comportamento padrão.
  • « Por sessão » para exibir os tours cada vez que você reabrir o aplicativo.
  • « Ativação manual » para evitar a exibição automática dos tours. Ainda será possível ativá-los pressionando a tecla F1 ou clicando em « Ajuda » no menu do usuário.
" + feature_tour_info_html: "

Quando um administrador ou um gerente está logado, um tour de recurso será acionado na primeira vez que ele visita cada seção do aplicativo. Você pode mudar esse comportamento para um dos seguintes valores:

  • « Uma vez » para manter o comportamento padrão.
  • « Por sessão » para exibir os tours cada vez que você reabrir o aplicativo.
  • « Ativação manual » para evitar a exibição automática dos tours. Ainda será possível ativá-los pressionando a tecla F1 ou clicando em « Ajuda » no menu do usuário.
" feature_tour_display_mode: "Modo de exibição de recursos do tour" display_mode: once: "Uma vez" @@ -1381,7 +1385,7 @@ pt: online_payment: "O módulo de pagamento online está ativo?" invoices: "O módulo de faturação está ativo?" openlab: "O módulo de compartilhamento de projetos (OpenLab) está ativo?" - tracking_id_info_html: "

Para ativar o rastreamento estatístico das visitas usando o Google Analytics, defina seu ID de rastreamento aqui. Está na forma de UA-000000-2. Visite o site do Google Analytics para obter um.
Aviso: se você ativar este recurso, lembre-se de escrevê-lo na sua política de privacidade.

O nome do host também é necessário para usar o Google Analytics. Você pode obtê-lo clicando no botão adjacente. Este último parâmetro é usado em outro lugar, por favor, defina-o com cuidado.

" + tracking_id_info_html: "Para ativar o rastreamento estatístico das visitas usando o Google Analytics, defina seu ID de rastreamento aqui. Está na forma de G-XXXXXX. Visite o site do Google Analytics para obter um.
Aviso: se você ativar este recurso, um cookie será criado. Lembre-se de escrevê-lo na sua política de privacidade." tracking_id: "ID de rastreamento" open_api_clients: add_new_client: "Criar novo cliente de API" diff --git a/config/locales/app.admin.zu.yml b/config/locales/app.admin.zu.yml index d1550645e..1641ab695 100644 --- a/config/locales/app.admin.zu.yml +++ b/config/locales/app.admin.zu.yml @@ -15,7 +15,7 @@ zu: trainings: "crwdns6709:0crwdne6709:0" machines: "crwdns6711:0crwdne6711:0" spaces: "crwdns6713:0crwdne6713:0" - events: "crwdns6715:0crwdne6715:0" + events: "crwdns22406:0crwdne22406:0" availabilities: "crwdns6717:0crwdne6717:0" availabilities_notice: "crwdns6719:0crwdne6719:0" info: "crwdns20468:0crwdne20468:0" @@ -24,7 +24,7 @@ zu: ongoing_reservations: "crwdns6721:0crwdne6721:0" without_reservation: "crwdns20326:0crwdne20326:0" confirmation_required: "crwdns6725:0crwdne6725:0" - do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "crwdns20296:0GENDER={GENDER}crwdnd20296:0USER={USER}crwdnd20296:0DATE={DATE}crwdnd20296:0TIME={TIME}crwdnd20296:0RESERVATION={RESERVATION}crwdne20296:0" + do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "crwdns22408:0{USER}crwdnd22408:0{DATE}crwdnd22408:0{TIME}crwdnd22408:0{RESERVATION}crwdne22408:0" reservation_was_successfully_cancelled: "crwdns6729:0crwdne6729:0" reservation_cancellation_failed: "crwdns6731:0crwdne6731:0" unable_to_remove_the_last_machine_of_the_slot_delete_the_slot_rather: "crwdns6733:0crwdne6733:0" @@ -271,7 +271,7 @@ zu: events_edit: edit_the_event: "crwdns7095:0crwdne7095:0" confirmation_required: "crwdns19784:0crwdne19784:0" - edit_recurring_event: "crwdns19786:0crwdne19786:0" + edit_recurring_event: "crwdns22410:0crwdne22410:0" edit_this_event: "crwdns19788:0crwdne19788:0" edit_this_and_next: "crwdns19790:0crwdne19790:0" edit_all: "crwdns19792:0crwdne19792:0" @@ -322,10 +322,10 @@ zu: none: "crwdns19808:0crwdne19808:0" #grammar concordance with training. an_error_occurred_while_saving_the_number_of_credits: "crwdns7173:0crwdne7173:0" an_error_occurred_while_deleting_credit_with_the_TRAINING: "crwdns7175:0{TRAINING}crwdne7175:0" - an_error_occurred_unable_to_find_the_credit_to_revoke: "crwdns7177:0crwdne7177:0" + an_error_occurred_unable_to_find_the_credit_to_revoke: "crwdns22412:0crwdne22412:0" an_error_occurred_while_creating_credit_with_the_TRAINING: "crwdns7179:0{TRAINING}crwdne7179:0" not_set: "crwdns7181:0crwdne7181:0" - error_a_credit_linking_this_machine_with_that_subscription_already_exists: "crwdns7183:0crwdne7183:0" + error_a_credit_linking_this_machine_with_that_subscription_already_exists: "crwdns22414:0crwdne22414:0" changes_have_been_successfully_saved: "crwdns7185:0crwdne7185:0" credit_was_successfully_saved: "crwdns7187:0crwdne7187:0" error_creating_credit: "crwdns7189:0crwdne7189:0" @@ -365,7 +365,7 @@ zu: these_prices_match_space_hours_rates_html: "crwdns20480:0crwdne20480:0" add_a_space_credit: "crwdns7259:0crwdne7259:0" space: "crwdns7261:0crwdne7261:0" - error_a_credit_linking_this_space_with_that_subscription_already_exists: "crwdns7263:0crwdne7263:0" + error_a_credit_linking_this_space_with_that_subscription_already_exists: "crwdns22416:0crwdne22416:0" status_enabled: "crwdns7265:0crwdne7265:0" status_disabled: "crwdns7267:0crwdne7267:0" status_all: "crwdns7269:0crwdne7269:0" @@ -482,7 +482,7 @@ zu: no_invoices_for_now: "crwdns7337:0crwdne7337:0" payment_schedules_list: "crwdns21058:0crwdne21058:0" invoicing_settings: "crwdns7339:0crwdne7339:0" - warning_invoices_disabled: "crwdns7341:0crwdne7341:0" + warning_invoices_disabled: "crwdns22418:0crwdne22418:0" change_logo: "crwdns7343:0crwdne7343:0" john_smith: "crwdns7345:0crwdne7345:0" john_smith_at_example_com: "crwdns7347:0crwdne7347:0" @@ -673,6 +673,10 @@ zu: general_space_code: "crwdns7677:0crwdne7677:0" accounting_Space_label: "crwdns7679:0crwdne7679:0" general_space_label: "crwdns7681:0crwdne7681:0" + accounting_Pack_code: "crwdns22446:0crwdne22446:0" + general_pack_code: "crwdns22448:0crwdne22448:0" + accounting_Pack_label: "crwdns22450:0crwdne22450:0" + general_pack_label: "crwdns22452:0crwdne22452:0" accounting_Error_code: "crwdns21470:0crwdne21470:0" general_error_code: "crwdns21472:0crwdne21472:0" accounting_Error_label: "crwdns21474:0crwdne21474:0" @@ -983,7 +987,7 @@ zu: #add a new administrator to the platform admins_new: add_an_administrator: "crwdns8027:0crwdne8027:0" - administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "crwdns8029:0GENDER={GENDER}crwdnd8029:0GENDER={GENDER}crwdne8029:0" + administrator_successfully_created_he_will_receive_his_connection_directives_by_email: "crwdns22420:0crwdne22420:0" failed_to_create_admin: "crwdns8031:0crwdne8031:0" man: "crwdns8033:0crwdne8033:0" woman: "crwdns8035:0crwdne8035:0" @@ -1001,7 +1005,7 @@ zu: #add a new manager to the platform manager_new: add_a_manager: "crwdns20348:0crwdne20348:0" - manager_successfully_created: "crwdns20350:0GENDER={GENDER}crwdnd20350:0GENDER={GENDER}crwdne20350:0" + manager_successfully_created: "crwdns22422:0crwdne22422:0" failed_to_create_manager: "crwdns20352:0crwdne20352:0" man: "crwdns20354:0crwdne20354:0" woman: "crwdns20356:0crwdne20356:0" @@ -1032,7 +1036,7 @@ zu: oauth2_provider_successfully_added: "crwdns8081:0crwdne8081:0" #edit an authentication provider (SSO) authentication_edit: - provider: "crwdns8083:0crwdne8083:0" + provider: "crwdns22424:0crwdne22424:0" it_is_required_to_set_the_matching_between_User.uid_and_the_API_to_add_this_provider: "crwdns20208:0crwdne20208:0" provider_successfully_updated: "crwdns20210:0crwdne20210:0" an_error_occurred_unable_to_update_the_provider: "crwdns8089:0crwdne8089:0" @@ -1322,7 +1326,7 @@ zu: public_registrations_allowed: "crwdns22283:0crwdne22283:0" help: "crwdns20764:0crwdne20764:0" feature_tour: "crwdns20766:0crwdne20766:0" - feature_tour_info_html: "crwdns20768:0crwdne20768:0" + feature_tour_info_html: "crwdns22426:0crwdne22426:0" feature_tour_display_mode: "crwdns20770:0crwdne20770:0" display_mode: once: "crwdns20772:0crwdne20772:0" @@ -1381,7 +1385,7 @@ zu: online_payment: "crwdns19892:0crwdne19892:0" invoices: "crwdns19894:0crwdne19894:0" openlab: "crwdns19896:0crwdne19896:0" - tracking_id_info_html: "crwdns20812:0crwdne20812:0" + tracking_id_info_html: "crwdns22442:0crwdne22442:0" tracking_id: "crwdns20814:0crwdne20814:0" open_api_clients: add_new_client: "crwdns8443:0crwdne8443:0" @@ -1395,7 +1399,7 @@ zu: client_name: "crwdns8459:0crwdne8459:0" confirmation_required: "crwdns8461:0crwdne8461:0" do_you_really_want_to_delete_this_open_api_client: "crwdns8463:0crwdne8463:0" - do_you_really_want_to_revoke_this_open_api_access: "crwdns8465:0crwdne8465:0" + do_you_really_want_to_revoke_this_open_api_access: "crwdns22428:0crwdne22428:0" client_successfully_created: "crwdns8467:0crwdne8467:0" client_successfully_updated: "crwdns8469:0crwdne8469:0" client_successfully_deleted: "crwdns8471:0crwdne8471:0" diff --git a/config/locales/app.logged.de.yml b/config/locales/app.logged.de.yml index a9a68014f..ccc49d942 100644 --- a/config/locales/app.logged.de.yml +++ b/config/locales/app.logged.de.yml @@ -109,10 +109,10 @@ de: your_previous_trainings: "Ihre vorigen Schulungen" your_approved_trainings: "Ihre bestätigten Trainings" no_trainings: "Keine Schulungen" - your_training_credits: "Your training credits" - subscribe_for_credits: "Subscribe to benefit from free trainings" - register_for_free: "Register for free to the following trainings:" - book_here: "Book here" + your_training_credits: "Dein Trainingsguthaben" + subscribe_for_credits: "Abonnement abschließen, um kostenlose Schulungen zu erhalten" + register_for_free: "Melden Sie sich kostenlos für folgende Schulungen an:" + book_here: "Hier buchen" #dashboard: my events events: your_next_events: "Ihre nächsten Termine" @@ -132,7 +132,7 @@ de: payment_schedules: no_payment_schedules: "Keine Zahlungspläne zum Anzeigen" load_more: "Mehr laden" - card_updated_success: "Your card was successfully updated" + card_updated_success: "Ihre Karte wurde erfolgreich aktualisiert" #public profil of a member members_show: members_list: "Mitgliederliste" @@ -173,30 +173,30 @@ de: DATE_TIME: "{DATE} {TIME}" #modal telling users that they need to pass a training before booking a machine required_training_modal: - to_book_MACHINE_requires_TRAINING_html: "To book the \"{MACHINE}\" you must have completed the training {TRAINING}." - training_or_training_html: " or the training " + to_book_MACHINE_requires_TRAINING_html: "Um \"{MACHINE}\" zu buchen, müssen Sie {TRAINING} abgeschlossen haben." + training_or_training_html: " oder die Schulung " enroll_now: "Zur Schulung anmelden" no_enroll_for_now: "Ich möchte mich jetzt nicht anmelden" close: "Schließen" propose_packs_modal: - available_packs: "Prepaid packs available" - packs_proposed: "You can buy a prepaid pack of hours for this machine. These packs allows you to benefit from volume discounts." + available_packs: "Prepaid-Pakete verfügbar" + packs_proposed: "Sie können ein Paket vorausbezahlter Stunden für diese Maschine kaufen. Über diese Pakete können Sie einen Mengenrabatt erhalten." no_thanks: "Nein, danke" - pack_DURATION: "{DURATION} hours" - buy_this_pack: "Buy this pack" - pack_bought_success: "You have successfully bought this pack of prepaid-hours. Your invoice will ba available soon from your dashboard." - validity: "Usable for {COUNT} {PERIODS}" + pack_DURATION: "{DURATION} Stunden" + buy_this_pack: "Dieses Paket kaufen" + pack_bought_success: "Sie haben erfolgreich dieses Paket vorbezahlter Stunden gekauft. Ihre Rechnung wird bald in Ihrem Dashboard verfügbar sein." + validity: "Verwendbar für {COUNT} {PERIODS}" period: - day: "{COUNT, plural, one{day} other{days}}" - week: "{COUNT, plural, one{week} other{weeks}}" - month: "{COUNT, plural, one{month} other{months}}" - year: "{COUNT, plural, one{year} other{years}}" + day: "{COUNT, plural, one {Tag} other {Tage}}" + week: "{COUNT, plural, one{Woche} other{Wochen}}" + month: "{COUNT, plural, one{Monat} other{Monate}}" + year: "{COUNT, plural, one {Jahr} other {Jahre}}" packs_summary: - prepaid_hours: "Prepaid hours" - remaining_HOURS: "You have {HOURS} prepaid hours remaining for this {ITEM, select, Machine{machine} Space{space} other{}}." - no_hours: "You don't have any prepaid hours for this {ITEM, select, Machine{machine} Space{space} other{}}." - buy_a_new_pack: "Buy a new pack" - unable_to_use_pack_for_subsription_is_expired: "You must have a valid subscription to use your remaining hours." + prepaid_hours: "Vorausbezahlte Stunden" + remaining_HOURS: "Sie haben {HOURS} vorausbezahlte Stunden für {ITEM, select, Machine{diese Maschine} Space{diesen Raum} other{}} übrig." + no_hours: "Sie haben keine vorausbezahlte Nutzungsdauer für {ITEM, select, Machine{diese Maschine} Space{diesen Raum} other{}}." + buy_a_new_pack: "Ein neues Paket kaufen" + unable_to_use_pack_for_subsription_is_expired: "Sie benötigen für die verbleibenden Stunden ein gültiges Abonnement." #book a training trainings_reserve: trainings_planning: "Schulungsplanung" diff --git a/config/locales/app.logged.es.yml b/config/locales/app.logged.es.yml index ac536350d..0d8161bab 100644 --- a/config/locales/app.logged.es.yml +++ b/config/locales/app.logged.es.yml @@ -7,7 +7,7 @@ es: you_ve_just_created_a_new_account_on_the_fablab_by_logging_from: "Acaba de crear una nueva cuenta en {GENDER, select, male{el} female{la} neutral{} other{las}} {NAME}, al iniciar sesión desde" we_need_some_more_details: "Para finalizar la configuración de la plataforma, necesitamos algunos detalles más." your_email_is_already_used_by_another_account_on_the_platform: "Parece que su dirección de correo electrónico ya está siendo utilizada por otro usuario. Compruebe su dirección de correo electrónico e ingrese debajo del código que le hemos enviado." - or: "or" + or: "o" please_fill_the_following_form: "rellene el siguiente formulario, por favor" some_data_may_have_already_been_provided_by_provider_and_cannot_be_modified: "Algunos datos pueden haber sido proporcionados ya por {NAME} y no pueden modificarse" then_click_on_: "haz click en" @@ -25,20 +25,20 @@ es: an_unexpected_error_occurred_check_your_authentication_code: "Ha ocurrido un error inesperado, por favor, revise su código de autentificación." send_code_again: "Enviar el código de nuevo" email_address_associated_with_your_account: "Email asociado con su cuenta" - email_is_required: "Email address is required" + email_is_required: "Se requiere una dirección de email" email_format_is_incorrect: "El formato de email incorrecto" code_successfully_sent_again: "El mail ha sido enviado otra vez con éxito" - used_for_statistics: "This data will be used for statistical purposes" - your_user_s_profile: "Your user's profile" - user_s_profile_is_required: "User's profile is required." - i_ve_read_and_i_accept_: "I've read and I accept" - _the_fablab_policy: "the FabLab policy" - change_my_data: "Change my data" - sync_my_profile: "Sync my profile" - once_your_data_are_up_to_date_: "Once your data are up to date," - _click_on_the_synchronization_button_opposite_: "click on the synchronization button opposite" - _disconnect_then_reconnect_: "disconnect then reconnect" - _for_your_changes_to_take_effect: "for your changes to take effect." + used_for_statistics: "Estos datos se utilizarán para fines estadísticos" + your_user_s_profile: "Perfil de tu usuario" + user_s_profile_is_required: "Se requiere perfil de usuario." + i_ve_read_and_i_accept_: "He leído y acepto" + _the_fablab_policy: "la política de FabLab" + change_my_data: "Cambiar mis datos" + sync_my_profile: "Sincronizar mi perfil" + once_your_data_are_up_to_date_: "Una vez sus datos hayan sido actualizados," + _click_on_the_synchronization_button_opposite_: "haga clic en el botón de sincronización" + _disconnect_then_reconnect_: "desconectar y volver a conectar" + _for_your_changes_to_take_effect: "para que los cambios surtan efecto." dashboard: #dashboard: public profile profile: @@ -65,20 +65,20 @@ es: edit_my_profile: "Editar mi perfil" your_group_has_been_successfully_changed: "Su grupo ha sido cambiado con exito." an_unexpected_error_prevented_your_group_from_being_changed: "Un error inesperado impidió que su grupo fuese cambiado." - confirmation_required: "Confirmation required" + confirmation_required: "Confirmación requerida" confirm_delete_your_account: "¿Está seguro de querer eliminar su cuenta?" - all_data_will_be_lost: "All your data will be destroyed and won't be recoverable." - invoicing_data_kept: "According to regulation, all data related to your invoices will be kept separately for 10 years." - statistic_data_anonymized: "Some data (sex, date of birth, group) will be anonymized and kept for statistical purposes." - no_further_access_to_projects: "Your published projects will be anonymized and you won't get any further ability to edit them." + all_data_will_be_lost: "Todos tus datos serán destruidos y no serán recuperables." + invoicing_data_kept: "Según la regulación, todos los datos relacionados con sus facturas se mantendrán por separado durante 10 años." + statistic_data_anonymized: "Algunos datos (sexo, fecha de nacimiento, grupo) serán anonimizados y conservados con fines estadísticos." + no_further_access_to_projects: "Tus proyectos publicados serán anónimos y no tendrás más capacidad para editarlos." your_user_account_has_been_successfully_deleted_goodbye: "Su cuenta ha sido eliminada con éxito. Adiós" an_error_occured_preventing_your_account_from_being_deleted: "Un error inesperado impidió que su cuenta fuese eliminada." - used_for_statistics: "This data will be used for statistical purposes" - used_for_invoicing: "This data will be used for billing purposes" - used_for_reservation: "This data will be used in case of change on one of your bookings" - used_for_profile: "This data will only be displayed on your profile" - used_for_pricing_stats: "This data will be used to determine the prices to which you are entitled, and for statistical purposes" - public_profile: "You will have a public profile and other users will be able to associate you in their projects" + used_for_statistics: "Estos datos se utilizarán para fines estadísticos" + used_for_invoicing: "Estos datos se utilizarán para fines de facturación" + used_for_reservation: "Estos datos se utilizarán en caso de cambio en una de sus reservas" + used_for_profile: "Estos datos sólo se mostrarán en tu perfil" + used_for_pricing_stats: "Estos datos se utilizarán para determinar los precios a los que tiene derecho, y con fines estadísticos" + public_profile: "Tendrás un perfil público y otros usuarios podrán asociarte en sus proyectos" trainings: "Cursos" no_trainings: "Sin cursos" subscription: "Suscripción" @@ -94,32 +94,32 @@ es: #dashboard: my projects projects: you_dont_have_any_projects: "Aún no tiene proyectos." - add_a_project: "Add a project" + add_a_project: "Añadir un proyecto" author: "Autor" collaborator: "Colaborador" - rough_draft: "Draft" - description: "Description" - machines_and_materials: "Machines and materials" - machines: "Machines" - materials: "Materials" - collaborators: "Collaborators" + rough_draft: "Borrador" + description: "Descripción" + machines_and_materials: "Máquinas y materiales" + machines: "Máquinas" + materials: "Materiales" + collaborators: "Colaboradores" #dashboard: my trainings trainings: your_next_trainings: "Sus próximos cursos" your_previous_trainings: "Sus cursos anteriores" your_approved_trainings: "Sus cursos aprobados" - no_trainings: "No trainings" - your_training_credits: "Your training credits" - subscribe_for_credits: "Subscribe to benefit from free trainings" - register_for_free: "Register for free to the following trainings:" - book_here: "Book here" + no_trainings: "Sin cursos" + your_training_credits: "Tus créditos de entrenamiento" + subscribe_for_credits: "Suscríbete para beneficiarte de entrenamientos gratuitos" + register_for_free: "Regístrate gratis en los siguientes entrenamientos:" + book_here: "Reservar aquí" #dashboard: my events events: your_next_events: "Sus próximos eventos" no_events_to_come: "No hay próximos eventos" your_previous_events: "Sus eventos anteriores" - no_passed_events: "No passed events" - NUMBER_normal_places_reserved: "{NUMBER} {NUMBER, plural, =0{} =1{normal place reserved} other{normal places reserved}}" + no_passed_events: "Sin eventos anteriores" + NUMBER_normal_places_reserved: "¡{NUMBER} {NUMBER, plural, one {} =0{} =1{lugar normal reservado} other{lugares normales reservados}}" NUMBER_of_NAME_places_reserved: "{NUMBER} {NUMBER, plural, =0{} =1{of {NAME} place reserved} other{of {NAME} places reserved}}" #dashboard: my invoices invoices: @@ -215,7 +215,7 @@ es: notifications: notifications_center: "Centro de notificaciones" mark_all_as_read: "Marcar como leido" - date: "Date" + date: "Fecha" notif_title: "Titulo" no_new_notifications: "No hay notificaciones nuevas." archives: "Archivos" diff --git a/config/locales/app.public.de.yml b/config/locales/app.public.de.yml index 36688b6a5..be389b6a8 100644 --- a/config/locales/app.public.de.yml +++ b/config/locales/app.public.de.yml @@ -19,7 +19,7 @@ de: my_trainings: "Meine Trainings" my_events: "Meine Veranstaltungen" my_invoices: "Meine Rechnungen" - my_payment_schedules: "My payment schedules" + my_payment_schedules: "Meine Zahlungspläne" my_wallet: "Mein Guthaben" #contextual help help: "Hilfe" @@ -84,8 +84,8 @@ de: birth_date_is_required: "Geburtsdatum ist erforderlich." phone_number: "Telefonnummer" phone_number_is_required: "Die Angabe der Telefonnummer ist erforderlich." - address: "Address" - address_is_required: "Address is required" + address: "Adresse" + address_is_required: "Adresse ist erforderlich" i_authorize_Fablab_users_registered_on_the_site_to_contact_me: "Angemeldete Benutzer dürfen mich kontaktieren" i_accept_to_receive_information_from_the_fablab: "Das Fablab darf mir Informationen schicken" i_ve_read_and_i_accept_: "Ich habe gelesen und akzeptiere" @@ -165,6 +165,7 @@ de: openlab_search_not_available_at_the_moment: "Suche über das gesamte Netzwerk ist derzeit nicht verfügbar. Sie können nach Projekten auf dieser Plattform suchen." project_search_result_is_empty: "Leider haben wir keine Ergebnisse gefunden, die Ihren Suchkriterien entsprechen." reset_all_filters: "Alle Filter zurücksetzen" + keywords: "Schlüsselwörter" search: "Suche" all_projects: "Alle Projekte" my_projects: "Meine Projekte" @@ -211,7 +212,7 @@ de: book: "Buchen" _or_the_: " oder die " machines_filters: - show_machines: "Show machines" + show_machines: "Maschinen anzeigen" status_enabled: "Aktiviert" status_disabled: "Deaktiviert" status_all: "Alle" @@ -251,9 +252,9 @@ de: no_plans: "Für Ihre Gruppe sind keine Pläne verfügbar" AMOUNT_per_month: "{AMOUNT} / monate" my_group: "Meine Gruppe" - his_group: "{GENDER, select, male{Seine} female{Ihre} other{Seine}} Gruppe" - he_wants_to_change_group: "{ROLE, select, member{Ich möchte} other{Der Benutzer möchte}} die Gruppe wechseln" - change_my_group: "Ändere {ROLE, select, member{meine} other{{GENDER, select, male{seine} female{ihre} other{seine}}}} Gruppe" + his_group: "User's group" + he_wants_to_change_group: "Change group" + change_my_group: "Validate group change" summary: "Zusammenfassung" your_subscription_has_expired_on_the_DATE: "Ihr Abonnement ist am {DATE} abgelaufen" subscription_price: "Abonnementspreis" @@ -266,10 +267,10 @@ de: an_error_prevented_to_change_the_user_s_group: "Fehler beim Ändern der Benutzergruppe." plans_filter: i_am: "Ich bin" - select_group: "select a group" - i_want_duration: "I want to subscribe for" - all_durations: "All durations" - select_duration: "select a duration" + select_group: "Wählen Sie eine Gruppe aus" + i_want_duration: "Ich möchte mich anmelden für" + all_durations: "Alle Laufzeiten" + select_duration: "Wählen Sie eine Laufzeit" #Fablab's events list events_list: the_fablab_s_events: "Veranstaltungen des Fablabs" diff --git a/config/locales/app.public.en.yml b/config/locales/app.public.en.yml index 22482bae2..b1956079e 100644 --- a/config/locales/app.public.en.yml +++ b/config/locales/app.public.en.yml @@ -165,6 +165,7 @@ en: openlab_search_not_available_at_the_moment: "Search over the whole network is not available at the moment. You still can search over the projects of this platform." project_search_result_is_empty: "Sorry, we found no results matching your search criteria." reset_all_filters: "Reset all filters" + keywords: "Keywords" search: "Search" all_projects: "All projects" my_projects: "My projects" @@ -251,9 +252,9 @@ en: no_plans: "No plans are available for your group" AMOUNT_per_month: "{AMOUNT} / month" my_group: "My group" - his_group: "{GENDER, select, male{His} female{Her} other{Its}} group" - he_wants_to_change_group: "{ROLE, select, member{I want} other{The user wants}} to change group" - change_my_group: "Change {ROLE, select, member{my} other{{GENDER, select, male{his} female{her} other{its}}}} group" + his_group: "User's group" + he_wants_to_change_group: "Change group" + change_my_group: "Validate group change" summary: "Summary" your_subscription_has_expired_on_the_DATE: "Your subscription has expired on the {DATE}" subscription_price: "Subscription price" diff --git a/config/locales/app.public.es.yml b/config/locales/app.public.es.yml index 778b531f1..ad4d62969 100644 --- a/config/locales/app.public.es.yml +++ b/config/locales/app.public.es.yml @@ -165,6 +165,7 @@ es: openlab_search_not_available_at_the_moment: "La busqueda en toda la red no está disponible en este momento. Puede seguir buscando proyectos en este FabLab." project_search_result_is_empty: "Lo sentimos, no hemos encontrado nada." reset_all_filters: "Limpiar filtros" + keywords: "Keywords" search: "Buscar" all_projects: "Todos los proyectos" my_projects: "Mis proyectos" @@ -251,9 +252,9 @@ es: no_plans: "No plans are available for your group" AMOUNT_per_month: "{AMOUNT} / month" my_group: "My grupo" - his_group: "{GENDER, select, male{His} female{Her} other{Its}} group" - he_wants_to_change_group: "{ROLE, select, member{Quiero} other{El usuario quiere}} cambiar el grupo" - change_my_group: "Cambiar {ROLE, select, member{mi} other{{GENDER, select, other{su}}}} grupo" + his_group: "User's group" + he_wants_to_change_group: "Change group" + change_my_group: "Validate group change" summary: "Summary" your_subscription_has_expired_on_the_DATE: "Sus suscripcion expiró el {DATE}" subscription_price: "Subscription price" diff --git a/config/locales/app.public.fr.yml b/config/locales/app.public.fr.yml index b9e326629..179831e08 100644 --- a/config/locales/app.public.fr.yml +++ b/config/locales/app.public.fr.yml @@ -165,6 +165,7 @@ fr: openlab_search_not_available_at_the_moment: "La recherche sur tout le réseau n'est pas disponible pour le moment. Vous pouvez cependant effectuer une recherche parmi les projets de cette plateforme." project_search_result_is_empty: "Il n'y a pas de projets correspondant à vos critères de recherche." reset_all_filters: "Réinitialiser tous les filtres" + keywords: "Mots-clés" search: "Rechercher" all_projects: "Tous les projets" my_projects: "Mes projets" @@ -251,9 +252,9 @@ fr: no_plans: "Aucun abonnement n'est disponible pour votre groupe" AMOUNT_per_month: "{AMOUNT} / mois" my_group: "Mon groupe" - his_group: "Son groupe" - he_wants_to_change_group: "{ROLE, select, member{Je veux} other{L'utilisateur veut}} changer de groupe" - change_my_group: "Changer {ROLE, select, member{mon} other{{GENDER, select, other{son}}}} groupe" + his_group: "Groupe de l'utilisateur" + he_wants_to_change_group: "Changer de groupe" + change_my_group: "Valider le changement" summary: "Résumé" your_subscription_has_expired_on_the_DATE: "Votre abonnement a expiré au {DATE}" subscription_price: "Coût de l'abonnement" diff --git a/config/locales/app.public.no.yml b/config/locales/app.public.no.yml index 0c4fcb6f1..0c071324b 100644 --- a/config/locales/app.public.no.yml +++ b/config/locales/app.public.no.yml @@ -165,6 +165,7 @@ openlab_search_not_available_at_the_moment: "Det er ikke mulig å søke over hele nettverket for øyeblikket. Du kan fortsatt søke over prosjektene her." project_search_result_is_empty: "Beklager, fant vi ingen resultater som samsvarte med dine søkekriterier." reset_all_filters: "Tilbakestill alle filtre" + keywords: "Keywords" search: "Søk" all_projects: "Alle prosjekter" my_projects: "Mine prosjekter" @@ -251,9 +252,9 @@ no_plans: "Ingen planer er tilgjengelige for din gruppe" AMOUNT_per_month: "{AMOUNT} / måned" my_group: "Min gruppe" - his_group: "Gruppen" - he_wants_to_change_group: "{ROLE, select, member{Jeg vil} other{Brukeren vil}} endre gruppe" - change_my_group: "Endre {ROLE, select, member{min} other{{GENDER, select, male{hans} female{henne} other{den! den}}}} gruppe" + his_group: "User's group" + he_wants_to_change_group: "Change group" + change_my_group: "Validate group change" summary: "Sammendrag" your_subscription_has_expired_on_the_DATE: "Ditt abonnement har utløpt {DATE}" subscription_price: "Pris, medlemskap/abonnement" diff --git a/config/locales/app.public.pt.yml b/config/locales/app.public.pt.yml index 78405048b..a54963698 100755 --- a/config/locales/app.public.pt.yml +++ b/config/locales/app.public.pt.yml @@ -165,6 +165,7 @@ pt: openlab_search_not_available_at_the_moment: "A busca em toda a rede de FabLabs não está disponível no momento. Você pode procurar por projetos nesta plataforma." project_search_result_is_empty: "Desculpe, nós não achamos nenhum resultado para sua pesquisa." reset_all_filters: "Resetar todos os filtros" + keywords: "Keywords" search: "Procurar" all_projects: "Todos os projetos" my_projects: "Meus Projetos" @@ -251,9 +252,9 @@ pt: no_plans: "Não há planos disponíveis para o seu grupo" AMOUNT_per_month: "{AMOUNT} / meses" my_group: "Meu grupo" - his_group: "{GENDER, select, male{Ele} female{Ela} other{Esses}} grupo" - he_wants_to_change_group: "{ROLE, select, member{Eu quero} other{O usuário quer}} trocar de grupo" - change_my_group: "Mudar {ROLE, select, member{meu} other{{GENDER, select, other{seu}}}} grupo" + his_group: "User's group" + he_wants_to_change_group: "Change group" + change_my_group: "Validate group change" summary: "Sumário" your_subscription_has_expired_on_the_DATE: "Sua inscrição expirou em {DATE}" subscription_price: "Preço da assinatura" diff --git a/config/locales/app.public.zu.yml b/config/locales/app.public.zu.yml index 7656b9658..d0524ed8b 100644 --- a/config/locales/app.public.zu.yml +++ b/config/locales/app.public.zu.yml @@ -165,6 +165,7 @@ zu: openlab_search_not_available_at_the_moment: "crwdns9045:0crwdne9045:0" project_search_result_is_empty: "crwdns9047:0crwdne9047:0" reset_all_filters: "crwdns9049:0crwdne9049:0" + keywords: "crwdns22404:0crwdne22404:0" search: "crwdns9051:0crwdne9051:0" all_projects: "crwdns9053:0crwdne9053:0" my_projects: "crwdns9055:0crwdne9055:0" @@ -251,9 +252,9 @@ zu: no_plans: "crwdns20912:0crwdne20912:0" AMOUNT_per_month: "crwdns21052:0{AMOUNT}crwdne21052:0" my_group: "crwdns9181:0crwdne9181:0" - his_group: "crwdns9183:0GENDER={GENDER}crwdne9183:0" - he_wants_to_change_group: "crwdns20396:0ROLE={ROLE}crwdne20396:0" - change_my_group: "crwdns20398:0ROLE={ROLE}crwdnd20398:0GENDER={GENDER}crwdne20398:0" + his_group: "crwdns22430:0crwdne22430:0" + he_wants_to_change_group: "crwdns22432:0crwdne22432:0" + change_my_group: "crwdns22434:0crwdne22434:0" summary: "crwdns9189:0crwdne9189:0" your_subscription_has_expired_on_the_DATE: "crwdns9191:0{DATE}crwdne9191:0" subscription_price: "crwdns9193:0crwdne9193:0" diff --git a/config/locales/app.shared.de.yml b/config/locales/app.shared.de.yml index 7dd724516..5690b9b2f 100644 --- a/config/locales/app.shared.de.yml +++ b/config/locales/app.shared.de.yml @@ -22,7 +22,7 @@ de: you_will_lose_any_unsaved_modification_if_you_quit_this_page: "Sie verlieren jede ungespeicherte Änderung, wenn Sie diese Seite verlassen" you_will_lose_any_unsaved_modification_if_you_reload_this_page: "Ungespeicherte Änderungen gehen verloren, wenn Sie die Seite neu laden" payment_card_error: "Mit Ihrer Kreditkarte ist ein Problem aufgetreten:" - payment_card_declined: "Your card was declined." + payment_card_declined: "Deine Kreditkarte wurde abgelehnt." #user edition form user: man: "Männlich" @@ -58,7 +58,7 @@ de: phone_number: "Telefonnummer" phone_number_is_required: "Die Angabe der Telefonnummer ist erforderlich." i_authorize_Fablab_users_registered_on_the_site_to_contact_me: "Angemeldete Benutzer dürfen mich kontaktieren" - i_accept_to_receive_information_from_the_fablab: "I accept to receive information from the FabLab" + i_accept_to_receive_information_from_the_fablab: "Das Fablab darf mir Informationen schicken" used_for_statistics: "Diese Daten werden für statistische Zwecke verwendet" used_for_invoicing: "Diese Daten werden für Abrechnungszwecke verwendet" used_for_reservation: "Diese Daten werden im Fall einer Buchungsänderung verwendet" @@ -123,9 +123,9 @@ de: online_payment: "Online-Bezahlung" i_have_read_and_accept_: "Ich habe gelesen und akzeptiere " _the_general_terms_and_conditions: "die allgemeinen Nutzungs- und Geschäftsbedingungen." - payment_schedule_html: "

You're about to subscribe to a payment schedule of {DEADLINES} months.

By paying this bill, you agree to send instructions to the financial institution that issue your card, to take payments from your card account, for the whole duration of this subscription. This imply that your card data are saved by {GATEWAY} and a series of payments will be initiated on your behalf, conforming to the payment schedule previously shown.

" + payment_schedule_html: "

Sie abonnieren einen Zahlungszeitraum von {DEADLINES} Monaten.

Mit der Zahlung dieser Rechnung erklären Sie sich damit einverstanden, Ihr kartenausstellendes Finanzinstitut anzuweisen, Zahlungen von Ihrem Kartenkonto für die gesamte Dauer dieses Abonnements zu übernehmen. Das bedeutet auch, dass Kartendaten von {GATEWAY} gespeichert werden und eine Reihe von Zahlungen in Ihrem Namen und entsprechend dem angezeigten Zahlungsplan gestartet werden.

" confirm_payment_of_: "Bezahlen: {AMOUNT}" - validate: "Validate" + validate: "Bestätigen" #dialog of on site payment for reservations valid_reservation_modal: booking_confirmation: "Buchungsbestätigung" @@ -133,10 +133,10 @@ de: subscription_confirmation: "Abonnementbestätigung" here_is_the_subscription_summary: "Hier ist die Zusammenfassung des -Abonnements:" payment_method: "Zahlungsmethode" - method_card: "Online by card" - method_check: "By check" - card_collection_info: "By validating, you'll be prompted for the member's card number. This card will be automatically charged at the deadlines." - check_collection_info: "By validating, you confirm that you have {DEADLINES} checks, allowing you to collect all the monthly payments." + method_card: "Online per Karte" + method_check: "Per Scheck" + card_collection_info: "Nach der Validierung werden Sie nach der Kartennummer des Mitglieds gefragt. Diese Karte wird automatisch zu den Fristen belastet." + check_collection_info: "Durch die Validierung bestätigen Sie, dass Sie {DEADLINES} Schecks haben und so alle monatlichen Zahlungen abwickeln können." #event edition form event: title: "Titel" @@ -161,9 +161,9 @@ de: 0_equal_free: "0 = kostenlos" tickets_available: "Tickets verfügbar" event_themes: "Veranstaltungsthemen" - select_theme: "Pick up a theme..." + select_theme: "Ein Theme auswählen..." age_range: "Altersklasse" - add_price: "Add a price" + add_price: "Preis hinzufügen" #subscription plan edition form plan: general_information: "Allgemeine Informationen" @@ -179,7 +179,7 @@ de: all: "Alle" transversal_all_groups: "Transversal (alle Gruppen)" group_is_required: "Gruppe ist erforderlich." - category: "Category" + category: "Kategorie" number_of_periods: "Anzahl der Zeiträume" number_of_periods_is_required: "Anzahl der Zeiträume ist erforderlich." period: "Zeitraum" @@ -189,17 +189,17 @@ de: period_is_required: "Zeitraum ist erforderlich." subscription_price: "Abonnementspreis" price_is_required: "Preis ist erforderlich." - edit_amount_info: "Please note that if you change the price of this plan, the new price will only apply to new subscribers. Current subscriptions will stay unchanged, even those with running payment schedule." + edit_amount_info: "Bitte beachten Sie, nach einer Preisänderung der neue Preis nur für neue Abonnenten gilt. Der Preis aktueller Abonnements bleibt unverändert, auch für die mit laufendem Zahlungszeitplan." visual_prominence_of_the_subscription: "Sichtbarkeit des Abonnements" on_the_subscriptions_page_the_most_prominent_subscriptions_will_be_placed_at_the_top_of_the_list: "Auf der Abonnement-Seite werden die prominentesten Abonnements ganz oben auf der Liste platziert." an_evelated_number_means_a_higher_prominence: "Eine höhere Zahl bedeutet einen höheren Stellenwert." rolling_subscription: "Rollendes Abonnement?" a_rolling_subscription_will_begin_the_day_of_the_first_training: "Ein rollendes Abonnement beginnt mit dem Tag der ersten Schulung." otherwise_it_will_begin_as_soon_as_it_is_bought: "Andernfalls beginnt es ab Kaufdatum." - monthly_payment: "Monthly payment?" - monthly_payment_info: "If monthly payment is enabled, the members will be able to choose between a one-time payment or a payment schedule staged each months." - description: "Description" - type_a_short_description: "Type a short description" + monthly_payment: "Monatliche Zahlung?" + monthly_payment_info: "Wenn die monatliche Zahlung aktiviert ist, können die Mitglieder zwischen einer einmaligen Zahlung oder einem monatlichen Zahlungsplan wählen." + description: "Beschreibung" + type_a_short_description: "Geben Sie eine kurze Beschreibung an." information_sheet: "Informationsblatt" attach_an_information_sheet: "Ein Informationsblatt anhängen" notified_partner: "Benachrichtigter Partner" @@ -252,7 +252,7 @@ de: mappings: "Zuordnungen" #edition/creation form of an OAuth2 authentication provider oauth2: - common_url: "Server root URL" + common_url: "Server-Root-URL" common_url_is_required: "Gemeinsame URL ist erforderlich." provided_url_is_not_a_valid_url: "Die angegebene URL ist keine gültige URL." authorization_endpoint: "Authentifizierungs-Endpunkt" @@ -267,6 +267,7 @@ de: obtain_it_when_registering_with_your_provider: "Wird während der Registrierung bei Ihrem Provider erhalten." client_secret: "Client-Geheimnis" oauth2_client_secret_is_required: "OAuth 2.0 Client-Geheimnis ist erforderlich." + scopes: "Scopes" define_the_fields_mapping: "Definieren Sie die Zuordnung der Felder" add_a_match: "Fügen Sie eine Zuordnung hinzu" model: "Modell" @@ -274,7 +275,7 @@ de: api_endpoint_url: "URL des API-Endpunkts" api_type: "API-Typ" api_fields: "API-Felder" - api_field_help: "JsonPath syntax is supported.\n If many fields are selected, the first one will be used.\n Example: $.data[*].name" + api_field_help: "JsonPath Syntax wird unterstützt.\nWenn mehrere Felder ausgewählt sind, wird das erste verwendet.\nBeispiel: $.data[*].name" #machine/training slot modification modal confirm_modify_slot_modal: change_the_slot: "Slot ändern" @@ -331,16 +332,16 @@ de: warning_uneditable_credit: "Warnung: Nach der Bestätigung kann der gutgeschriebene Betrag nicht mehr bearbeitet werden." wallet_info: you_have_AMOUNT_in_wallet: "Ihr Gutgaben beträgt {AMOUNT}" - wallet_pay_ITEM: "You pay your {ITEM} directly." - item_reservation: "reservation" - item_subscription: "subscription" - item_first_deadline: "first deadline" - item_other: "purchase" - credit_AMOUNT_for_pay_ITEM: "You still have {AMOUNT} to pay to validate your {ITEM}." - client_have_AMOUNT_in_wallet: "The member has {AMOUNT} on his wallet" - client_wallet_pay_ITEM: "The member can directly pay his {ITEM}." - client_credit_AMOUNT_for_pay_ITEM: "{AMOUNT} are remaining to pay to validate the {ITEM}" - other_deadlines_no_wallet: "Warning: the remaining wallet balance cannot be used for the next deadlines." + wallet_pay_ITEM: "Sie bezahlen {ITEM} direkt." + item_reservation: "Reservierung" + item_subscription: "Abonnement" + item_first_deadline: "erste Frist" + item_other: "Kauf" + credit_AMOUNT_for_pay_ITEM: "{AMOUNT} muss noch bezahlt werden, um die Buchung von {ITEM} abzuschließen." + client_have_AMOUNT_in_wallet: "Das Mitglied hat {AMOUNT} in seinem Guthaben" + client_wallet_pay_ITEM: "Das Mitglied kann {ITEM} direkt bezahlen." + client_credit_AMOUNT_for_pay_ITEM: "{AMOUNT} ausstehend, um die Bezahlung von {ITEM} abzuschließen" + other_deadlines_no_wallet: "Warnung: Das verbleibende Konto-Guthaben kann nicht für die nächsten Fristen verwendet werden." #coupon (promotional) (creation/edition form) coupon: name: "Name" @@ -358,8 +359,8 @@ de: validity_per_user: "Gültigkeit pro Benutzer" once: "Nur einmal" forever: "Jede Nutzung" - warn_validity_once: "Please note that when this coupon will be used with a payment schedule, the discount will be applied to the first deadline only." - warn_validity_forever: "Please note that when this coupon will be used with a payment schedule, the discount will be applied to each deadlines." + warn_validity_once: "Bitte beachten Sie, dass die Verwendung dieses Gutscheins in einem Zahlungsplan nur auf die erste Zahlungsfrist einen Rabatt gewährt." + warn_validity_forever: "Bitte beachten Sie, dass die Verwendung dieses Gutscheins in einem Zahlungsplan Rabatt auf alle Zahlungstermine gewährt." validity_per_user_is_required: "Validität pro Benutzer ist erforderlich." valid_until: "Gültig bis (inklusive)" leave_empty_for_no_limit: "Geben Sie keine Befristung an, indem Sie das Feld leer lassen." @@ -372,7 +373,7 @@ de: code_: "Code:" the_coupon_has_been_applied_you_get_PERCENT_discount: "Der Gutschein wurde angewendet. Sie erhalten einen Rabatt von {PERCENT}%." the_coupon_has_been_applied_you_get_AMOUNT_CURRENCY: "Der Gutschein wurde angewendet. Sie erhalten einen Rabatt von {AMOUNT} {CURRENCY}." - coupon_validity_once: "This coupon is valid only once. In case of payment schedule, only for the first deadline." + coupon_validity_once: "Dieser Gutschein ist nur einmal gültig, im Falle eines Zahlungszeitraums nur für den ersten Zahlungstermin." unable_to_apply_the_coupon_because_disabled: "Der Gutschein konnte nicht angewendet werden: Dieser Code wurde deaktiviert." unable_to_apply_the_coupon_because_expired: "Der Gutschein konnte nicht angewendet werden: Dieser Code ist abgelaufen." unable_to_apply_the_coupon_because_sold_out: "Der Gutschein kann nicht angewendet werden: Dieser Code hat sein Kontingent erreicht." @@ -400,7 +401,7 @@ de: cart: summary: "Zusammenfassung" select_one_or_more_slots_in_the_calendar: "Wähle einen {SINGLE, select, true{Slot} other{oder mehrere Slots}} im Kalender" - select_a_plan: "Select a plan here" + select_a_plan: "Wählen Sie hier einen Tarif" you_ve_just_selected_the_slot: "Sie haben gerade den Slot ausgewählt:" datetime_to_time: "{START_DATETIME} bis {END_TIME}" #eg: Thursday, September 4, 1986 8:30 PM to 10:00 PM cost_of_TYPE: "Kosten für den {TYPE, select, Machine{Maschinenslot} Training{Schulungsslot} Space{Raum-Slot} other{anderes Element}}" @@ -411,15 +412,15 @@ de: view_our_subscriptions: "Lassen Sie sich unsere Abonnements vorstellen" or: "oder" cost_of_the_subscription: "Kosten des Abonnements" - subscription_price: "Subscription price" + subscription_price: "Abonnementspreis" you_ve_just_selected_a_subscription_html: "Sie haben ein Abonnement ausgewählt:" - monthly_payment: "Monthly payment" - your_payment_schedule: "Your payment schedule" - monthly_payment_NUMBER: "{NUMBER}{NUMBER, plural, =1{st} =2{nd} =3{rd} other{th}} monthly payment: " - NUMBER_monthly_payment_of_AMOUNT: "{NUMBER} monthly {NUMBER, plural, =1{payment} other{payments}} of {AMOUNT}" - first_debit: "First debit on the day of the order." - debit: "Debit on the day of the order." - view_full_schedule: "View the complete payment schedule" + monthly_payment: "Monatliche Zahlung" + your_payment_schedule: "Ihr Zahlungsplan" + monthly_payment_NUMBER: "{NUMBER}{NUMBER, plural, one {} =1{.} =2{.} =3{.} other{.}} monatliche Zahlung:" + NUMBER_monthly_payment_of_AMOUNT: "{NUMBER} monatliche {NUMBER, plural, one {} =1{Zahlung} other{Zahlungen}} von {AMOUNT}" + first_debit: "Erstbelastung am Tag der Bestellung." + debit: "Kontobelastung am Tag der Bestellung." + view_full_schedule: "Den kompletten Zahlungsplan anzeigen" confirm_and_pay: "Bestätigen und bezahlen" you_have_settled_the_following_TYPE: "Sie haben die folgenden {TYPE, select, Machine{Maschinenslots} Training{Schulungen} other{Elemente}} beglichen:" you_have_settled_a_: "Sie haben beglichen" @@ -443,7 +444,7 @@ de: do_you_really_want_to_cancel_this_reservation_html: "

Möchten Sie diese Reservierung wirklich stornieren?

Achtung: wenn diese Reservierung kostenlos, als Teil eines Abonnements erfolgt, wird das aufgewendete Guthaben nicht zurückerstattet.

" reservation_was_cancelled_successfully: "Die Reservierung wurde erfolgreich storniert." cancellation_failed: "Stornierung fehlgeschlagen." - confirm_payment_of_html: "{METHOD, select, card{Pay by card} other{Pay on site}}: {AMOUNT}" + confirm_payment_of_html: "{METHOD, select, card{per Karte bezahlen} other{vor Ort bezahlen}}: {AMOUNT}" a_problem_occurred_during_the_payment_process_please_try_again_later: "Während des Zahlungsvorgangs ist ein Problem aufgetreten. Bitte versuchen Sie es später erneut." none: "Keine" online_payment_disabled: "Online-Zahlung ist nicht verfügbar. Bitte kontaktieren Sie die FabLab-Rezeption direkt." @@ -475,53 +476,53 @@ de: guide: "Benutzerhandbuch öffnen" #2nd factor authentication for card payments stripe_confirm: - pending: "Pending for action..." - success: "Thank you, your card setup is complete. The payment will be proceeded shortly." + pending: "Warten auf Aktion..." + success: "Danke, Ihre Karteneinrichtung ist abgeschlossen. Die Zahlung wird in Kürze fortgesetzt." #the summary table of all payment schedules schedules_table: - schedule_num: "Schedule #" - date: "Date" - price: "Price" - customer: "Customer" - deadline: "Deadline" - amount: "Amount" - state: "State" - download: "Download" - state_new: "Not yet due" - state_pending_check: "Waiting for the cashing of the check" - state_pending_transfer: "Waiting for the tranfer confirmation" - state_requires_payment_method: "The credit card must be updated" - state_requires_action: "Action required" - state_paid: "Paid" - state_error: "Error" - state_gateway_canceled: "Canceled by the payment gateway" - state_canceled: "Canceled" - method_card: "by card" - method_check: "by check" - method_transfer: "by transfer" + schedule_num: "Zeitplan #" + date: "Datum" + price: "Preis" + customer: "Kunde" + deadline: "Fälligkeitsdatum" + amount: "Betrag" + state: "Status" + download: "Herunterladen" + state_new: "Noch nicht fällig" + state_pending_check: "Warten auf die Auszahlung des Schecks" + state_pending_transfer: "Warten auf die Buchungsbestätigung" + state_requires_payment_method: "Kreditkarte abgelaufen" + state_requires_action: "Aktion erforderlich" + state_paid: "Bezahlt" + state_error: "Fehler" + state_gateway_canceled: "Vom Zahlungs-Gateway abgebrochen" + state_canceled: "Storniert" + method_card: "Per Karte" + method_check: "per Scheck" + method_transfer: "per Banküberweisung" payment_schedule_item_actions: - download: "Download" - cancel_subscription: "Cancel the subscription" - confirm_payment: "Confirm payment" - confirm_check: "Confirm cashing" - resolve_action: "Resolve the action" - update_card: "Update the card" - update_payment_mean: "Update the payment mean" - please_ask_reception: "For any questions, please contact the FabLab's reception." - confirm_button: "Confirm" - confirm_check_cashing: "Confirm the cashing of the check" - confirm_check_cashing_body: "You must cash a check of {AMOUNT} for the deadline of {DATE}. By confirming the cashing of the check, an invoice will be generated for this due date." - confirm_bank_transfer: "Confirm the bank transfer" - confirm_bank_transfer_body: "You must confirm the receipt of {AMOUNT} for the deadline of {DATE}. By confirming the bank transfer, an invoice will be generated for this due date." - confirm_cancel_subscription: "You're about to cancel this payment schedule and the related subscription. Are you sure?" + download: "Herunterladen" + cancel_subscription: "Abonnement kündigen" + confirm_payment: "Zahlung bestätigen" + confirm_check: "Einlösen bestätigen" + resolve_action: "Aktion auflösen" + update_card: "Karte aktualisieren" + update_payment_mean: "Zahlungsmittel aktualisieren" + please_ask_reception: "Bei Fragen wenden Sie sich bitte an die Rezeption des FabLabs." + confirm_button: "Bestätigen" + confirm_check_cashing: "Bestätigen Sie die Auszahlung des Schecks" + confirm_check_cashing_body: "Sie müssen einen Scheck von {AMOUNT} für den Zeitraum bis {DATE} einlösen. Nach bestätigter Scheckeinlösung wird eine Rechnung für dieses Fälligkeitsdatum erstellt." + confirm_bank_transfer: "Banküberweisung bestätigen" + confirm_bank_transfer_body: "Sie müssen den Erhalt von {AMOUNT} für den Zeitraum bis {DATE} bestätigen. Mit der Bestätigung der Banküberweisung wird für dieses Fälligkeitsdatum eine Rechnung generiert." + confirm_cancel_subscription: "Sie sind dabei, diesen Zahlungsplan und das zugehörige Abonnement zu kündigen. Sind Sie sicher?" payment_modal: - online_payment_disabled: "Online payment is not available. Please contact the FabLab's reception directly." - unexpected_error: "An error occurred. Please report this issue to the Fab-Manager's team." + online_payment_disabled: "Online-Zahlung ist nicht verfügbar. Bitte kontaktieren Sie die FabLab-Rezeption direkt." + unexpected_error: "Ein Fehler ist aufgetreten. Bitte melden Sie dieses Problem dem Fab-Manager-Team." update_card_modal: - unexpected_error: "An error occurred. Please report this issue to the Fab-Manager's team." + unexpected_error: "Ein Fehler ist aufgetreten. Bitte melden Sie dieses Problem dem Fab-Manager-Team." stripe_card_update_modal: - update_card: "Update the card" - validate_button: "Validate the new card" + update_card: "Karte aktualisieren" + validate_button: "Neue Karte validieren" payzen_card_update_modal: - update_card: "Update the card" - validate_button: "Validate the new card" + update_card: "Karte aktualisieren" + validate_button: "Neue Karte validieren" diff --git a/config/locales/app.shared.en.yml b/config/locales/app.shared.en.yml index 0f0cf5138..5727de6a9 100644 --- a/config/locales/app.shared.en.yml +++ b/config/locales/app.shared.en.yml @@ -276,6 +276,7 @@ en: obtain_it_when_registering_with_your_provider: "Obtain it when registering with your provider." client_secret: "Client secret" oauth2_client_secret_is_required: "OAuth 2.0 client secret is required." + scopes: "Scopes" define_the_fields_mapping: "Define the fields mapping" add_a_match: "Add a match" model: "Model" @@ -432,7 +433,7 @@ en: confirm_and_pay: "Confirm and pay" you_have_settled_the_following_TYPE: "You have settled the following {TYPE, select, Machine{machine slots} Training{training} other{elements}}:" you_have_settled_a_: "You have settled a" - total_: "TOTAL :" + total_: "TOTAL:" thank_you_your_payment_has_been_successfully_registered: "Thank you. Your payment has been successfully registered !" your_invoice_will_be_available_soon_from_your_: "Your invoice will be available soon form your" dashboard: "Dashboard" diff --git a/config/locales/app.shared.es.yml b/config/locales/app.shared.es.yml index e9ddb2f5c..692915093 100644 --- a/config/locales/app.shared.es.yml +++ b/config/locales/app.shared.es.yml @@ -267,6 +267,7 @@ es: obtain_it_when_registering_with_your_provider: "Obtengalo al registrarse con su proveedor." client_secret: "Secreto del cliente" oauth2_client_secret_is_required: "Se requiere el secreto de cliente OAuth 2.0." + scopes: "Scopes" define_the_fields_mapping: "Definir el mapeo de campos" add_a_match: "agregar coincidencia" model: "Model" @@ -423,7 +424,7 @@ es: confirm_and_pay: "Confirmar y pagar" you_have_settled_the_following_TYPE: "Acaba de seleccionar {TYPE, select, Machine{machine slots} Training{training} other{elements}}:" you_have_settled_a_: "Ha establecido una" - total_: "TOTAL :" + total_: "TOTAL:" thank_you_your_payment_has_been_successfully_registered: "Gracias. Su pago se ha registrado con éxito." your_invoice_will_be_available_soon_from_your_: "Su factura pronto estará disponible" dashboard: "Panel" diff --git a/config/locales/app.shared.fr.yml b/config/locales/app.shared.fr.yml index 4aa867e36..4ddfca19f 100644 --- a/config/locales/app.shared.fr.yml +++ b/config/locales/app.shared.fr.yml @@ -267,6 +267,7 @@ fr: obtain_it_when_registering_with_your_provider: "Enregistrez-vous auprès du fournisseur pour l'obtenir." client_secret: "Secret client" oauth2_client_secret_is_required: "Le secret client OAuth 2 est requis." + scopes: "Portée de l’autorisation" define_the_fields_mapping: "Définir la correspondance des champs" add_a_match: "Ajouter une correspondance" model: "Modèle" diff --git a/config/locales/app.shared.no.yml b/config/locales/app.shared.no.yml index 79920272f..b241457f0 100644 --- a/config/locales/app.shared.no.yml +++ b/config/locales/app.shared.no.yml @@ -267,6 +267,7 @@ obtain_it_when_registering_with_your_provider: "Få det når du registrerer deg hos leverandøren din." client_secret: "Klienthemmelighet" oauth2_client_secret_is_required: "OAuth 2.0 klient-hemmelighet er nødvendig." + scopes: "Scopes" define_the_fields_mapping: "Definer tilordning av felter" add_a_match: "Legg til en match" model: "Modell" @@ -423,7 +424,7 @@ confirm_and_pay: "Bekreft og betal" you_have_settled_the_following_TYPE: "Du har betalt for følgende {TYPE, select, Machine{maskinplasser} Training{opplæring/kurs} other{elementer}}:" you_have_settled_a_: "Du har gjort opp en" - total_: "TOTALT :" + total_: "TOTALT:" thank_you_your_payment_has_been_successfully_registered: "Tusen takk, betalingen din er registrert!" your_invoice_will_be_available_soon_from_your_: "Din faktura vil snart være tilgjengelig" dashboard: "Kontrollpanel" diff --git a/config/locales/app.shared.pt.yml b/config/locales/app.shared.pt.yml index ff6fa60a5..2e85e3b1a 100755 --- a/config/locales/app.shared.pt.yml +++ b/config/locales/app.shared.pt.yml @@ -267,6 +267,7 @@ pt: obtain_it_when_registering_with_your_provider: "Obtenha-o ao se registrar no seu provedor." client_secret: "Chave secreta" oauth2_client_secret_is_required: "A senha do cliente OAuth 2.0 é necessário." + scopes: "Scopes" define_the_fields_mapping: "Defina o mapeamento dos campos" add_a_match: "Adicionar uma correspondência" model: "Modelo" @@ -423,7 +424,7 @@ pt: confirm_and_pay: "Confirmar e pagar" you_have_settled_the_following_TYPE: "Você liquidou o seguinte {TYPE, select, Machine{slots de máquina} Training{training} other{elements}}:" you_have_settled_a_: "Você tem liquidado:" - total_: "TOTAL :" + total_: "TOTAL:" thank_you_your_payment_has_been_successfully_registered: "Obrigado. Seu pagamento foi registrado com sucesso !" your_invoice_will_be_available_soon_from_your_: "Sua fatura estará disponível em breve" dashboard: "Painel de controle" diff --git a/config/locales/app.shared.zu.yml b/config/locales/app.shared.zu.yml index 7cf22640d..b5bb13608 100644 --- a/config/locales/app.shared.zu.yml +++ b/config/locales/app.shared.zu.yml @@ -267,6 +267,7 @@ zu: obtain_it_when_registering_with_your_provider: "crwdns9801:0crwdne9801:0" client_secret: "crwdns9803:0crwdne9803:0" oauth2_client_secret_is_required: "crwdns9805:0crwdne9805:0" + scopes: "crwdns22444:0crwdne22444:0" define_the_fields_mapping: "crwdns9807:0crwdne9807:0" add_a_match: "crwdns9809:0crwdne9809:0" model: "crwdns9811:0crwdne9811:0" @@ -423,7 +424,7 @@ zu: confirm_and_pay: "crwdns10057:0crwdne10057:0" you_have_settled_the_following_TYPE: "crwdns10059:0TYPE={TYPE}crwdne10059:0" you_have_settled_a_: "crwdns10061:0crwdne10061:0" - total_: "crwdns10063:0crwdne10063:0" + total_: "crwdns22436:0crwdne22436:0" thank_you_your_payment_has_been_successfully_registered: "crwdns10065:0crwdne10065:0" your_invoice_will_be_available_soon_from_your_: "crwdns10067:0crwdne10067:0" dashboard: "crwdns10069:0crwdne10069:0" diff --git a/config/locales/de.yml b/config/locales/de.yml index abad0363f..47c7bf63f 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -37,10 +37,10 @@ de: end_before_start: "Das Enddatum darf nicht vor dem Startdatum liegen. Wählen Sie ein Datum nach %{START}" invalid_duration: "Der zulässige Zeitraum muss zwischen 1 Tag und 1 Jahr lang sein. Ihr Zeitraum ist %{DAYS} Tage lang." must_be_in_the_past: "Der Zeitraum darf ausschließlich vor dem heutigen Datum liegen." - registration_disabled: "Registration is disabled" + registration_disabled: "Registrierung ist deaktiviert" apipie: api_documentation: "API-Dokumentation" - code: "HTTP code" + code: "HTTP-Code" #error messages when importing an account from a SSO omniauth: email_already_linked_to_another_account_please_input_your_authentication_code: "E-Mail-Adresse \"%{OLD_MAIL}\" ist bereits mit einem Konto verknüpft. Bitte geben Sie Ihren Authentifizierungscode ein." @@ -113,21 +113,21 @@ de: subscription_of_NAME_extended_starting_from_STARTDATE_until_ENDDATE: "Abonnement von %{NAME} verlängert (kostenlose Tage) ab %{STARTDATE} bis %{ENDDATE}" and: 'und' invoice_text_example: "Unsere Einrichtung ist nicht mehrwertsteuerpflichtig" - error_invoice: "Erroneous invoice. The items below ware not booked. Please contact the FabLab for a refund." - prepaid_pack: "Prepaid pack of hours" - pack_item: "Pack of %{COUNT} hours for the %{ITEM}" + error_invoice: "Fehlerhafte Rechnung. Die folgenden Artikel sind nicht gebucht. Bitte kontaktieren Sie das FabLab für eine Rückerstattung." + prepaid_pack: "Prepaid-Stundenpaket" + pack_item: "Paket von %{COUNT} Stunden für %{ITEM}" #PDF payment schedule generation payment_schedules: - schedule_reference: "Payment schedule reference: %{REF}" - schedule_issued_on_DATE: "Schedule issued on %{DATE}" - object: "Object: Payment schedule for %{ITEM}" - subscription_of_NAME_for_DURATION_starting_from_DATE: "the subscription of %{NAME} for %{DURATION} starting from %{DATE}" - deadlines: "Table of your deadlines" - deadline_date: "Payment date" + schedule_reference: "Zahlungsplan Referenz: %{REF}" + schedule_issued_on_DATE: "Zeitplan erstellt am %{DATE}" + object: "Objekt: Zahlungsplan für %{ITEM}" + subscription_of_NAME_for_DURATION_starting_from_DATE: "das Abonnement von %{NAME} für %{DURATION} ab %{DATE}" + deadlines: "Tabelle Ihrer Fristen" + deadline_date: "Zahlungsdatum" deadline_amount: "Betrag inklusive Steuern" - total_amount: "Total amount" - settlement_by_METHOD: "Debits will be made by {METHOD, select, card{card} transfer{bank transfer} other{check}} for each deadlines." - settlement_by_wallet: "%{AMOUNT} will be debited from your wallet to settle the first deadline." + total_amount: "Gesamtbetrag" + settlement_by_METHOD: "Buchungen werden per {METHOD, select, card{Karte} transfer{Banküberweisung} other{Scheck}} zu jeder Frist vorgenommen." + settlement_by_wallet: "%{AMOUNT} wird von Ihrem Guthaben zum Ausgleich der ersten Frist abgebucht." #CVS accounting export (columns headers) accounting_export: journal_code: "Journalcode" @@ -149,10 +149,10 @@ de: Space_reservation: "Raumreservierung" wallet: "Guthabenkonto" vat_export: - start_date: "Start date" - end_date: "End date" - vat_rate: "VAT rate" - amount: "Total amount" + start_date: "Anfangsdatum" + end_date: "Enddatum" + vat_rate: "Mehrwertsteuersatz" + amount: "Gesamtbetrag" #training availabilities trainings: i_ve_reserved: "Ich reservierte" @@ -268,9 +268,9 @@ de: notify_admin_subscription_will_expire_in_7_days: USER_s_subscription_will_expire_in_7_days: "Das Abonnement von %{USER} wird in 7 Tagen ablaufen." notify_admin_user_group_changed: - user_NAME_changed_his_group_html: "Benutzer {NAME} hat {GENDER, select, true{seine} other{ihre}} Gruppe geändert." #messageFormat interpolation + user_NAME_changed_his_group_html: "User {NAME} changed group." #messageFormat interpolation notify_admin_user_merged: - user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "Nutzer {NAME} hat {GENDER, select, true{seinen} other{ihren}} Account mit dem von {PROVIDER} ({UID}) importierten Account zusammengeführt." #messageFormat interpolation + user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "{NAME}'s account was merged with the one imported from {PROVIDER} ({%UID})." #messageFormat interpolation notify_admin_when_project_published: project_NAME_has_been_published_html: "Projekt %{NAME} wurde veröffentlicht." notify_admin_when_user_is_created: @@ -337,7 +337,7 @@ de: users_reservations: "der Reservierungsliste" availabilities_index: "der Verfügbarkeit der Reservierungen" accounting_acd: "der Rechnungsdaten für ACD" - accounting_vat: "of the collected VAT" + accounting_vat: "der erhobenen Mehrwertsteuer" is_over: "ist beendet." download_here: "Hier herunterladen" notify_admin_import_complete: @@ -366,23 +366,23 @@ de: notify_admin_objects_stripe_sync: all_objects_sync: "Alle daten wurden erfolgreich auf Stripe synchronisiert." notify_user_when_payment_schedule_ready: - your_schedule_is_ready_html: "Your payment schedule #%{REFERENCE}, of %{AMOUNT}, is ready. Click here to download." + your_schedule_is_ready_html: "Ihr Zahlungsplan #%{REFERENCE}, über %{AMOUNT}, ist bereit. Zum Herunterladen klicken Sie hier." notify_admin_payment_schedule_error: - schedule_error: "An error occurred for the card debit of the %{DATE} deadline, for schedule %{REFERENCE}" + schedule_error: "Ein Fehler ist aufgetreten beim Buchen via Karte zum Termin am %{DATE}, für den Zeitplan %{REFERENCE}" notify_member_payment_schedule_error: - schedule_error: "An error occurred for the card debit of the %{DATE} deadline, for your schedule %{REFERENCE}" + schedule_error: "Ein Fehler ist aufgetreten beim Buchen via Karte zum Termin am %{DATE}, für Ihren Zeitplan %{REFERENCE}" notify_admin_payment_schedule_failed: - schedule_failed: "Failed card debit for the %{DATE} deadline, for schedule %{REFERENCE}" + schedule_failed: "Fehlgeschlagene Kartenbelastung für die %{DATE} -Frist, für Zeitplan %{REFERENCE}" notify_member_payment_schedule_failed: - schedule_failed: "Failed card debit for the %{DATE} deadline, for your schedule %{REFERENCE}" + schedule_failed: "Fehlgeschlagene Kartenbelastung für die %{DATE} -Frist, für Ihren Zeitplan %{REFERENCE}" notify_admin_payment_schedule_gateway_canceled: - schedule_canceled: "The payment schedule %{REFERENCE} was canceled by the gateway. An action is required." + schedule_canceled: "Der Zahlungsplan %{REFERENCE} wurde vom Gateway abgebrochen. Eine Aktion ist erforderlich." notify_member_payment_schedule_gateway_canceled: - schedule_canceled: "Your payment schedule %{REFERENCE} was canceled by the gateway." + schedule_canceled: "Ihr Zahlungsplan %{REFERENCE} wurde vom Gateway storniert." notify_admin_payment_schedule_check_deadline: - schedule_deadline: "You must cash the check for the %{DATE} deadline, for schedule %{REFERENCE}" + schedule_deadline: "Sie müssen den Scheck zur %{DATE} -Frist einlösen, für den Zeitplan %{REFERENCE}" notify_admin_payment_schedule_transfer_deadline: - schedule_deadline: "You must confirm the bank direct debit for the %{DATE} deadline, for schedule %{REFERENCE}" + schedule_deadline: "Sie müssen das Lastschriftverfahren für die %{DATE} -Frist bestätigen, für Zeitplan %{REFERENCE}" #statistics tools for admins statistics: subscriptions: "Abonnements" @@ -434,123 +434,123 @@ de: #name of the user's group for administrators admins: 'Administratoren' cart_items: - free_extension: "Free extension of a subscription, until %{DATE}" + free_extension: "Kostenlose Verlängerung eines Abonnements bis %{DATE}" statistic_profile: - birthday_in_past: "The date of birth must be in the past" + birthday_in_past: "Geburtsdatum muss in der Vergangenheit liegen" settings: - locked_setting: "the setting is locked." - about_title: "\"About\" page title" - about_body: "\"About\" page content" - about_contacts: "\"About\" page contacts" - privacy_draft: "Privacy policy draft" - privacy_body: "Privacy policy" - privacy_dpo: "Data protection officer address" - twitter_name: "Twitter feed name" - home_blogpost: "Homepage's brief" - machine_explications_alert: "Explanation message on the machine reservation page" - training_explications_alert: "Explanation message on the training reservation page" - training_information_message: "Information message on the machine reservation page" - subscription_explications_alert: "Explanation message on the subscription page" - invoice_logo: "Invoices' logo" - invoice_reference: "Invoice's reference" - invoice_code-active: "Activation of the invoices' code" - invoice_code-value: "Invoices' code" - invoice_order-nb: "Invoice's order number" - invoice_VAT-active: "Activation of the VAT" - invoice_VAT-rate: "VAT rate" - invoice_text: "Invoices' text" - invoice_legals: "Invoices' legal information" - booking_window_start: "Opening time" - booking_window_end: "Closing time" - booking_move_enable: "Activation of reservations moving" - booking_move_delay: "Preventive delay before any reservation move" - booking_cancel_enable: "Activation of reservations cancelling" - booking_cancel_delay: "Preventive delay before any reservation cancellation" - main_color: "Main colour" - secondary_color: "Secondary colour" - fablab_name: "Fablab's name" - name_genre: "Title concordance" - reminder_enable: "Activation of reservations reminding" - reminder_delay: "Delay before sending the reminder" - event_explications_alert: "Explanation message on the event reservation page" - space_explications_alert: "Explanation message on the space reservation page" - visibility_yearly: "Maximum visibility for annual subscribers" - visibility_others: "Maximum visibility for other members" - display_name_enable: "Display names in the calendar" - machines_sort_by: "Machines display order" - accounting_journal_code: "Journal code" - accounting_card_client_code: "Card clients code" - accounting_card_client_label: "Card clients label" - accounting_wallet_client_code: "Wallet clients code" - accounting_wallet_client_label: "Wallet clients label" - accounting_other_client_code: "Other means client code" - accounting_other_client_label: "Other means client label" - accounting_wallet_code: "Wallet code" - accounting_wallet_label: "Wallet label" - accounting_VAT_code: "VAT code" - accounting_VAT_label: "VAT label" - accounting_subscription_code: "Subscriptions code" - accounting_subscription_label: "Subscriptions label" - accounting_Machine_code: "Machines code" - accounting_Machine_label: "Machines label" - accounting_Training_code: "Trainings code" - accounting_Training_label: "Trainings label" - accounting_Event_code: "Events code" - accounting_Event_label: "Events label" - accounting_Space_code: "Spaces code" - accounting_Space_label: "Spaces label" - hub_last_version: "Last Fab-manager's version" - hub_public_key: "Instance public key" - fab_analytics: "Fab Analytics" - link_name: "Link title to the \"About\" page" - home_content: "The home page" - home_css: "Stylesheet of the home page" - origin: "Instance URL" - uuid: "Instance ID" - phone_required: "Phone required?" - tracking_id: "Tracking ID" - book_overlapping_slots: "Book overlapping slots" - slot_duration: "Default duration of booking slots" - events_in_calendar: "Display events in the calendar" - spaces_module: "Spaces module" - plans_module: "Plans modules" - invoicing_module: "Invoicing module" - facebook_app_id: "Facebook App ID" - twitter_analytics: "Twitter analytics account" - recaptcha_site_key: "reCAPTCHA Site Key" - recaptcha_secret_key: "reCAPTCHA Secret Key" - feature_tour_display: "Feature tour display mode" - email_from: "Expeditor's address" - disqus_shortname: "Disqus shortname" - allowed_cad_extensions: "Allowed CAD files extensions" - allowed_cad_mime_types: "Allowed CAD files MIME types" - openlab_app_id: "OpenLab ID" - openlab_app_secret: "OpenLab secret" - openlab_default: "Default projects gallery view" - online_payment_module: "Online payments module" - stripe_public_key: "Stripe public key" - stripe_secret_key: "Stripe secret key" - stripe_currency: "Stripe currency" - invoice_prefix: "Invoices' files prefix" - confirmation_required: "Confirmation required" - wallet_module: "Wallet module" - statistics_module: "Statistics module" - upcoming_events_shown: "Display limit for upcoming events" - payment_schedule_prefix: "Payment schedule's files prefix" - trainings_module: "Trainings module" - address_required: "Address required" - accounting_Error_code: "Errors code" - accounting_Error_label: "Errors label" - payment_gateway: "Payment gateway" - payzen_username: "PayZen username" - payzen_password: "PayZen password" - payzen_endpoint: "PayZen API endpoint" - payzen_public_key: "PayZen client public key" - payzen_hmac: "PayZen HMAC-SHA-256 key" - payzen_currency: "PayZen currency" - public_agenda_module: "Public agenda module" - renew_pack_threshold: "Threshold for packs renewal" - pack_only_for_subscription: "Restrict packs for subscribers" - overlapping_categories: "Categories for overlapping booking prevention" - extended_prices_in_same_day: "Extended prices in the same day" - public_registrations: "Public registrations" + locked_setting: "die Einstellung ist gesperrt." + about_title: "Seitentitel \"Über\"" + about_body: "Seiteninhalt \"Über\"" + about_contacts: "Kontakte auf der \"Über\"-Seite" + privacy_draft: "Entwurf der Datenschutzerklärung" + privacy_body: "Datenschutzerklärung" + privacy_dpo: "Adresse des Datenschutzbeauftragten" + twitter_name: "Twitter-Benutzername" + home_blogpost: "Homepage Kurzinfo" + machine_explications_alert: "Erklärungstext auf der Seite für die Maschinen-Reservierung" + training_explications_alert: "Erklärungstext auf der Seite für die Schulungs-Reservierung" + training_information_message: "Informationstext auf der Seite für die Maschinen-Reservierung" + subscription_explications_alert: "Erklärungstext auf der Seite für die Abonnements" + invoice_logo: "Rechnungslogo" + invoice_reference: "Rechnungsbezug" + invoice_code-active: "Aktivierung des Rechnungscodes" + invoice_code-value: "Rechnungscode" + invoice_order-nb: "Bestellnummer der Rechnung" + invoice_VAT-active: "Aktivierung der Mehrwertsteuer" + invoice_VAT-rate: "MwSt.-Satz" + invoice_text: "Rechnungstext" + invoice_legals: "Rechtliche Informationen auf den Rechnungen" + booking_window_start: "Öffnungszeit Beginn" + booking_window_end: "Öffnungszeit Ende" + booking_move_enable: "Aktivierung verschiebbarer Reservierungen" + booking_move_delay: "Vorbeugende Verzögerung vor einer Reservierungsverschiebung" + booking_cancel_enable: "Aktivierung stornierbarer Reservierungen" + booking_cancel_delay: "Vorbeugende Verzögerung vor Stornierung einer Reservierung" + main_color: "Hauptfarbe" + secondary_color: "Sekundärfarbe" + fablab_name: "FabLab-Name" + name_genre: "Titel-Konkordanz" + reminder_enable: "Aktivierung der Erinnerung an Reservierungen" + reminder_delay: "Verzögerung vor dem Versand der Erinnerung" + event_explications_alert: "Erklärungstext auf der Seite für die Veranstaltungs-Reservierung" + space_explications_alert: "Erklärungstext auf der Seite für die Raum-Reservierung" + visibility_yearly: "Maximale Sichtbarkeit für jährliche Abonnenten" + visibility_others: "Maximale Sichtbarkeit für andere Mitglieder" + display_name_enable: "Namen im Kalender anzeigen" + machines_sort_by: "Anzeigereihenfolge der Maschinen" + accounting_journal_code: "Journalcode" + accounting_card_client_code: "Kreditkarten-Kunde Code" + accounting_card_client_label: "Kreditkarten-Kunde Label" + accounting_wallet_client_code: "Guthabenkonto-Kunde Code" + accounting_wallet_client_label: "Guthabenkonto-Kunde Label" + accounting_other_client_code: "Code für anders bezahlende Kunden" + accounting_other_client_label: "Label für anders bezahlende Kunden" + accounting_wallet_code: "Guthabenkonto-Code" + accounting_wallet_label: "Guthabenkonto-Label" + accounting_VAT_code: "MwSt.-Code" + accounting_VAT_label: "MwSt.-Bezeichnung" + accounting_subscription_code: "Abonnement-Code" + accounting_subscription_label: "Abonnement-Label" + accounting_Machine_code: "Maschinencode" + accounting_Machine_label: "Maschinenbezeichnug" + accounting_Training_code: "Trainings-Code" + accounting_Training_label: "Schulungsbezeichnung" + accounting_Event_code: "Veranstaltungs-Code" + accounting_Event_label: "Veranstaltungsbezeichnung" + accounting_Space_code: "Raum-Code" + accounting_Space_label: "Raumbezeichnung" + hub_last_version: "Letzte Version des Fab-Managers" + hub_public_key: "Öffentlicher Schlüssel der Instanz" + fab_analytics: "Fab-Analytics" + link_name: "Link-Titel zur \"Über\" Seite" + home_content: "Die Startseite" + home_css: "Stylesheet der Startseite" + origin: "Instanz-URL" + uuid: "Instanz-ID" + phone_required: "Telefonummer erforderlich?" + tracking_id: "Tracking-ID" + book_overlapping_slots: "Überlappende Slots buchen" + slot_duration: "Standarddauer für Slotbuchungen" + events_in_calendar: "Veranstaltungen im Kalender anzeigen" + spaces_module: "Raum-Modul" + plans_module: "Plan-Modul" + invoicing_module: "Rechnungs-Modul" + facebook_app_id: "Facebook App-ID" + twitter_analytics: "Twitter Analytics-Konto" + recaptcha_site_key: "ReCAPTCHA Site-Key" + recaptcha_secret_key: "ReCAPTCHA Geheimschlüssel" + feature_tour_display: "Anzeigemodus für die Feature-Tour" + email_from: "Adresse des Senders" + disqus_shortname: "Disqus Kurzname" + allowed_cad_extensions: "Zulässige Dateierweiterungen für CAD-Dateien" + allowed_cad_mime_types: "Zulässige MIME-Typen für CAD-Dateien" + openlab_app_id: "OpenLab-ID" + openlab_app_secret: "OpenLab App-Geheimnis" + openlab_default: "Standard-Galerieansicht der Projekte" + online_payment_module: "Online-Zahlungsmodul" + stripe_public_key: "Öffentlicher Stripe-Schlüssel" + stripe_secret_key: "Geheimer Stripe-Schlüssel" + stripe_currency: "Stripe-Währung" + invoice_prefix: "Präfix der Rechnungsdateien" + confirmation_required: "Bestätigung erforderlich" + wallet_module: "Guthabenkonto-Modul" + statistics_module: "Statistik-Modul" + upcoming_events_shown: "Limit für anstehende Termine anzeigen" + payment_schedule_prefix: "Präfix der Zahlungsplan-Dateien" + trainings_module: "Schulungs-Modul" + address_required: "Adresse erforderlich" + accounting_Error_code: "Fehlercode" + accounting_Error_label: "Fehlerbezeichnung" + payment_gateway: "Zahlungs-Gateway" + payzen_username: "PayZen-Benutzername" + payzen_password: "PayZen Passwort" + payzen_endpoint: "PayZen API-Endpunkt" + payzen_public_key: "Öffentlicher Schlüssel des PayZen-Clients" + payzen_hmac: "HMAC-SHA-256-Schlüssel von PayZen" + payzen_currency: "PayZen Währung" + public_agenda_module: "Öffentliches Agenda-Modul" + renew_pack_threshold: "Schwellenwert für Paketverlängerung" + pack_only_for_subscription: "Pakete für Abonnenten einschränken" + overlapping_categories: "Kategorien zur Vorbeugung überlappender Buchungen" + extended_prices_in_same_day: "Erweiterte Preise am selben Tag" + public_registrations: "Öffentliche Registrierungen" diff --git a/config/locales/en.yml b/config/locales/en.yml index eb1bfe4d6..4ad225bab 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -268,9 +268,9 @@ en: notify_admin_subscription_will_expire_in_7_days: USER_s_subscription_will_expire_in_7_days: "%{USER}'s subscription will expire in 7 days." notify_admin_user_group_changed: - user_NAME_changed_his_group_html: "User {NAME} changed {GENDER, select, true{his} other{her}} group." #messageFormat interpolation + user_NAME_changed_his_group_html: "User {NAME} changed group." #messageFormat interpolation notify_admin_user_merged: - user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "User {NAME} has merged {GENDER, select, true{his} other{her}} account with the one imported from {PROVIDER} ({UID})." #messageFormat interpolation + user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "{NAME}'s account was merged with the one imported from {PROVIDER} ({%UID})." #messageFormat interpolation notify_admin_when_project_published: project_NAME_has_been_published_html: "Project %{NAME} has been published." notify_admin_when_user_is_created: diff --git a/config/locales/es.yml b/config/locales/es.yml index 65a5e39ba..4df65c2b5 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -268,9 +268,9 @@ es: notify_admin_subscription_will_expire_in_7_days: USER_s_subscription_will_expire_in_7_days: "La suscripción de %{USER} expirará en 7 días." notify_admin_user_group_changed: - user_NAME_changed_his_group_html: "El usuario {NAME} ha cambiado {GENDER, select, true{his} other{her}} el grupo." #messageFormat interpolation + user_NAME_changed_his_group_html: "User {NAME} changed group." #messageFormat interpolation notify_admin_user_merged: - user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "El usuario {NAME} se ha fusionado {GENDER, select, true{his} other{her}} con la cuenta importada desde {PROVIDER} ({UID})." #messageFormat interpolation + user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "{NAME}'s account was merged with the one imported from {PROVIDER} ({%UID})." #messageFormat interpolation notify_admin_when_project_published: project_NAME_has_been_published_html: "Proyecto %{NAME} ha sido publicado." notify_admin_when_user_is_created: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 2d372dc51..18392c278 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -270,7 +270,7 @@ fr: notify_admin_user_group_changed: user_NAME_changed_his_group_html: "L'utilisateur {NAME} a changé de groupe." #messageFormat interpolation notify_admin_user_merged: - user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "L'utilisateur {NAME} a fusionné son compte avec le compte importé depuis {PROVIDER} ({UID})." #messageFormat interpolation + user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "Le compte de {NAME} a été fusionné à celui importé de {PROVIDER} ({%UID})." #messageFormat interpolation notify_admin_when_project_published: project_NAME_has_been_published_html: "Le projet %{NAME} vient d'être publié." notify_admin_when_user_is_created: diff --git a/config/locales/mails.de.yml b/config/locales/mails.de.yml index cb5b56cb8..b44103d8d 100644 --- a/config/locales/mails.de.yml +++ b/config/locales/mails.de.yml @@ -100,7 +100,7 @@ de: subject: "Ein Benutzerkonto wurde erstellt" body: new_account_created: "Ein neues Benutzerkonto wurde auf der Website erstellt:" - user_of_group_html: "The user has registered in the group %{GROUP}" + user_of_group_html: "Der Benutzer hat sich in der Gruppe %{GROUP} registriert" account_for_organization: "Dieses Konto verwaltet eine Organisation:" notify_admin_subscribed_plan: subject: "Ein Abonnement wurde gekauft" @@ -231,8 +231,8 @@ de: users_subscriptions: "der Abonnementliste" users_reservations: "der Reservierungsliste" availabilities_index: "der Verfügbarkeit der Reservierungen" - accounting_acd: "of the accounting data to ACD" - accounting_vat: "of the collected VAT data" + accounting_acd: "der Rechnungsdaten für ACD" + accounting_vat: "der gesammelten MwSt-Daten" click_to_download: "Excel-Datei erfolgreich erstellt. Zum Herunterladen klicken Sie" here: "hier" file_type: @@ -274,7 +274,7 @@ de: subject: "Eine Rückerstattung wurde durchgeführt" body: refund_created: "Eine Rückerstattung von %{AMOUNT} wurde auf die Rechnung %{INVOICE} des Benutzers %{USER} generiert" - wallet_refund_created: "A refund of %{AMOUNT} has been generated for the credit of the wallet of user %{USER}" + wallet_refund_created: "Eine Rückerstattung von %{AMOUNT} wurde für das Guthabenkonto des Benutzers %{USER} generiert" download: "Hier klicken, um diese Erstattungsrechnung herunterzuladen" notify_admins_role_update: subject: "Die Rolle eines Benutzers hat sich geändert" @@ -291,57 +291,57 @@ de: body: objects_sync: "Alle Mitglieder, Coupons, Maschinen, Schulungen, Räume und Pläne wurden erfolgreich auf Stripe synchronisiert." notify_member_payment_schedule_ready: - subject: "Your payment schedule" + subject: "Ihr Zahlungsplan" body: - please_find_attached_html: "Please find attached your payment schedule, issued on {DATE}, with an amount of {AMOUNT} concerning your {TYPE, select, Reservation{reservation} other{subscription}}." #messageFormat interpolation - schedule_in_your_dashboard_html: "You can find this payment schedule at any time from %{DASHBOARD} on the Fab Lab's website." - your_dashboard: "your dashboard" + please_find_attached_html: "Die angehängte Datei enthält Ihren Zahlungsplan vom {DATE}, über den Betrag von {AMOUNT} in Bezug auf {TYPE, select, Reservation{Ihre Reservierung} other{Ihr Abonnement}}." #messageFormat interpolation + schedule_in_your_dashboard_html: "Dieser Zahlungsplan ist jederzeit vom %{DASHBOARD} auf der Webseite des FabLabs abrufbar." + your_dashboard: "Ihr Dashboard" notify_admin_payment_schedule_error: - subject: "[URGENT] Card debit error" + subject: "[URGENT] Kartenbelastungsfehler" body: - remember: "In accordance with the %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}." - error: "Unfortunately, an error occurred and this card debit was unable to complete successfully." - action: "Please then consult the %{GATEWAY} dashboard and contact the member as soon as possible to resolve the problem." + remember: "Gemäß dem Zahlungsplan von %{REFERENCE} wurde für %{DATE} eine Belastung der Karte in Höhe von %{AMOUNT} geplant." + error: "Leider ist ein Fehler aufgetreten und die Abbuchung über die Karte konnte nicht erfolgreich abgeschlossen werden." + action: "Bitte rufen Sie das Dashboard von %{GATEWAY} auf und kontaktieren Sie das Mitglied so bald wie möglich, um das Problem zu lösen." notify_member_payment_schedule_error: - subject: "[URGENT] Card debit error" + subject: "[URGENT] Kartenbelastungsfehler" body: - remember: "In accordance with your %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}." - error: "Unfortunately, an error occurred and this card debit was unable to complete successfully." - action: "Please contact a manager as soon as possible to resolve the problem." + remember: "Gemäß dem Zahlungsplan von %{REFERENCE} wurde für %{DATE} eine Belastung der Karte in Höhe von %{AMOUNT} geplant." + error: "Leider ist ein Fehler aufgetreten und die Abbuchung über die Karte konnte nicht erfolgreich abgeschlossen werden." + action: "Bitte wenden Sie sich so schnell wie möglich an einen Manager, um das Problem zu lösen." notify_admin_payment_schedule_failed: - subject: "[URGENT] Card debit failure" + subject: "[URGENT] Kartenbelastungsfehler" body: - remember: "In accordance with the %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}." - error: "Unfortunately, this card debit was unable to complete successfully." - action: "Please contact the member as soon as possible, then go to the payment schedule management interface to resolve the problem. After about 24 hours, the card subscription will be cancelled." + remember: "Gemäß dem Zahlungsplan von %{REFERENCE} wurde für %{DATE} eine Belastung der Karte in Höhe von %{AMOUNT} geplant." + error: "Leider konnte die Abbuchung über die Karte nicht erfolgreich abgeschlossen werden." + action: "Please contact the member as soon as possible, then go to the payment schedule management interface to resolve the problem. After a certain period of time, the card subscription could be cancelled." notify_member_payment_schedule_failed: - subject: "[URGENT] Card debit failure" + subject: "[URGENT] Kartenbelastungsfehler" body: - remember: "In accordance with your %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}." - error: "Unfortunately, this card debit was unable to complete successfully." - action_html: "Please check %{DASHBOARD} or contact a manager before 24 hours, otherwise your subscription may be interrupted." - your_dashboard: "your dashboard" + remember: "Gemäß Ihrem Zahlungsplan von %{REFERENCE} wurde für %{DATE} eine Belastung der Karte in Höhe von %{AMOUNT} geplant." + error: "Leider konnte die Abbuchung über die Karte nicht erfolgreich abgeschlossen werden." + action_html: "Please check %{DASHBOARD} or contact a manager quickly, otherwise your subscription may be interrupted." + your_dashboard: "Ihr Dashboard" notify_admin_payment_schedule_gateway_canceled: - subject: "[URGENT] Payment schedule canceled by the payment gateway" + subject: "[URGENT] Zahlungsplan vom Zahlungs-Gateway abgebrochen" body: - error: "The payment schedule %{REFERENCE} was canceled by the payment gateway (%{GATEWAY}). No further debits will be made on this payment mean." - action: "Please consult the payment schedule management interface and contact the member as soon as possible to resolve the problem." + error: "Der Zahlungsplan %{REFERENCE} wurde vom Zahlungsdienstleister (%{GATEWAY}) storniert. Über diese Zahlungsart werden keine weiteren Abbuchungen mehr durchgeführt." + action: "Bitte konsultieren Sie die Schnittstelle zur Verwaltung des Zahlungszeitplans und wenden Sie sich so schnell wie möglich an das Mitglied, um das Problem zu lösen." notify_member_payment_schedule_gateway_canceled: - subject: "[URGENT] Payment schedule canceled by the payment gateway" + subject: "[URGENT] Zahlungsplan vom Zahlungs-Gateway abgebrochen" body: - error: "Your payment schedule %{REFERENCE} was canceled by the payment gateway. No further debits will be made on this payment mean." - action: "Please contact a manager as soon as possible to resolve the problem." + error: "Ihr Zahlungsplan %{REFERENCE} wurde vom Zahlungsdienstleister storniert. Über diese Zahlungsart werden keine weiteren Abbuchungen mehr durchgeführt." + action: "Bitte wenden Sie sich so schnell wie möglich an einen Manager, um das Problem zu lösen." notify_admin_payment_schedule_check_deadline: - subject: "Payment deadline" + subject: "Zahlungsfrist" body: - remember: "In accordance with the %{REFERENCE} payment schedule, %{AMOUNT} was due to be debited on %{DATE}." - date: "This is a reminder to cash the scheduled check as soon as possible." - confirm: "Do not forget to confirm the receipt in your payment schedule management interface, so that the corresponding invoice will be generated." + remember: "Gemäß dem Zahlungsplan von %{REFERENCE} wurde zum %{DATE} eine Belastung der Karte in Höhe von %{AMOUNT} geplant." + date: "Dies ist eine Erinnerung, den geplanten Scheck so schnell wie möglich zu bezahlen." + confirm: "Vergessen Sie nicht, die Quittung in Ihrer Zahlungsverwaltung zu bestätigen, damit die entsprechende Rechnung generiert werden kann." notify_member_payment_schedule_transfer_deadline: - subject: "Payment deadline" + subject: "Zahlungsfrist" body: - remember: "In accordance with your %{REFERENCE} payment schedule, %{AMOUNT} was due to be debited on %{DATE}." - date: "This is a reminder to verify that the direct bank debit was successfull." - confirm: "Please confirm the receipt of funds in your payment schedule management interface, so that the corresponding invoice will be generated." + remember: "Gemäß Ihrem Zahlungsplan von %{REFERENCE} wurde zum %{DATE} eine Belastung der Karte in Höhe von %{AMOUNT} geplant." + date: "Dies ist eine Erinnerung zur Prüfung, ob das Bankkonto erfolgreich belastet werden konnte." + confirm: "Bitte bestätigen Sie den Erhalt des Guthabens in Ihrer Zahlungsverwaltung, damit die entsprechende Rechnung generiert werden kann." shared: hello: "Hallo %{user_name}" diff --git a/config/locales/mails.en.yml b/config/locales/mails.en.yml index 149f681d5..92cf1b735 100644 --- a/config/locales/mails.en.yml +++ b/config/locales/mails.en.yml @@ -313,13 +313,13 @@ en: body: remember: "In accordance with the %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}." error: "Unfortunately, this card debit was unable to complete successfully." - action: "Please contact the member as soon as possible, then go to the payment schedule management interface to resolve the problem. After about 24 hours, the card subscription will be cancelled." + action: "Please contact the member as soon as possible, then go to the payment schedule management interface to resolve the problem. After a certain period of time, the card subscription could be cancelled." notify_member_payment_schedule_failed: subject: "[URGENT] Card debit failure" body: remember: "In accordance with your %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}." error: "Unfortunately, this card debit was unable to complete successfully." - action_html: "Please check %{DASHBOARD} or contact a manager before 24 hours, otherwise your subscription may be interrupted." + action_html: "Please check %{DASHBOARD} or contact a manager quickly, otherwise your subscription may be interrupted." your_dashboard: "your dashboard" notify_admin_payment_schedule_gateway_canceled: subject: "[URGENT] Payment schedule canceled by the payment gateway" diff --git a/config/locales/mails.es.yml b/config/locales/mails.es.yml index f0d05d3f7..b706e774f 100644 --- a/config/locales/mails.es.yml +++ b/config/locales/mails.es.yml @@ -100,7 +100,7 @@ es: subject: "Se ha creado una nueva cuenta" body: new_account_created: "Se ha creado un nuevo usuario en la web:" - user_of_group_html: "The user has registered in the group %{GROUP}" + user_of_group_html: "El usuario se ha registrado en el grupo %{GROUP}" account_for_organization: "Esta cuenta gestiona una organización :" notify_admin_subscribed_plan: subject: "Se ha adquirido un plan de suscripción" @@ -206,9 +206,9 @@ es: signaled_by: "marcado por:" signaled_on: "marcado el:" message: "Mensaje:" - visit_management_interface: "Refer to the Reporting Management Interface for more information." + visit_management_interface: "Consulte la Interfaz de Gestión de Informes para obtener más información." notify_user_wallet_is_credited: - subject: "Your wallet has been credited" + subject: "Su cartera ha sido acreditada" body: wallet_credit_html: "Se han ingresado %{AMOUNT} por el administrador." notify_admin_user_wallet_is_credited: @@ -231,19 +231,19 @@ es: users_subscriptions: "de la lista de suscripciones" users_reservations: "de la lista de reservas" availabilities_index: "de las reservas disponibles" - accounting_acd: "of the accounting data to ACD" - accounting_vat: "of the collected VAT data" + accounting_acd: "de los datos contables para ACD" + accounting_vat: "de los datos del IVA recopilados" click_to_download: " archivo Excel generado correctamente. Para descargarlo, haga clic " here: "aquí" file_type: xlsx: "Excel" csv: "CSV" notify_admin_import_complete: - subject: "Import completed" + subject: "Importación completada" body: - you_made_an_import: "You have initiated an import %{CATEGORY}" - category_members: "of the members" - click_to_view_results: "Click here to view results" + you_made_an_import: "Ha iniciado una importación de %{CATEGORY}" + category_members: "de los miembros" + click_to_view_results: "Haga clic aquí para ver los resultados" notify_member_about_coupon: subject: "Cupón" body: @@ -251,33 +251,33 @@ es: enjoy_a_discount_of_AMOUNT_with_code_CODE: "Disfruta de un descuento de %{AMOUNT} en toda la web con el código %{CODE}." this_coupon_is_valid_USAGE_times_until_DATE_for_all_your_purchases: "Este cupón es válido {USAGE, plural, =1{just once} other{many times}}: para todas tus compras {TYPE, select, amount_off{at least equal to the amount of the coupon} other{}}, desde ahora {DATE, select, NO-DATE{and without time limit} other{and until {DATE}}}." notify_admin_free_disk_space: - subject: "Low disk space" - body: "Warning: available disk space on the server hosting Fab-manager is less than %{THRESHOLD} MiB. This can affect its operation and prevent saving some data. Currently, %{AVAILABLE} MiB of free disk space remains available on the mount point." + subject: "Poco espacio libre en disco" + body: "Advertencia: el espacio disponible en el servidor que aloja Fab-manager es inferior a %{THRESHOLD} MiB. Esto puede afectar a su funcionamiento y evitar que se guarden algunos datos. Actualmente, hay %{AVAILABLE} MiB de espacio libre en el disco del punto de montaje." notify_admin_close_period_reminder: - subject: "Remind to close your accounting periods" + subject: "Recuerde cerrar sus períodos contables" body: - warning_last_closed_period_over_1_year: "Please remind to periodically close your accounting periods. Last closed period ended at %{LAST_END}." - warning_no_closed_periods: "Please remind to periodically close your accounting periods. You have to close periods from %{FIRST_DATE}." + warning_last_closed_period_over_1_year: "Por favor, recuerde cerrar periódicamente sus periodos de contabilidad. Último período cerrado a las %{LAST_END}." + warning_no_closed_periods: "Por favor, recuerde cerrar periódicamente sus períodos contables. Tiene que cerrar los periodos del %{FIRST_DATE}." notify_admin_archive_complete: - subject: "Archiving completed" + subject: "Archivo completado" body: - archive_complete: "You have closed the accounting period from %{START} to %{END}. Archiving of data is now complete." - click_to_download: "To download the ZIP archive, click" - here: "here." - save_on_secured: "Remember that you must save this archive on a secured external support, which may be requested by the tax authorities during a check." + archive_complete: "Ha cerrado el período contable de %{START} a %{END}. Se ha completado el archivo de datos." + click_to_download: "Para descargar el archivo ZIP, haga clic" + here: "aquí." + save_on_secured: "Recuerde que debe guardar este archivo en un soporte externo seguro, que puede ser solicitado por las autoridades fiscales durante una auditoría." notify_privacy_policy_changed: - subject: "Privacy policy updated" + subject: "Política de privacidad actualizada" body: - content_html: "

We wish to inform you that we have just updated our privacy policy.

We may change our privacy policy regularly. In accordance with the regulations, you will receive a notification for each update.

By accessing or using our services after the privacy policy update, we will consider that you agree its terms, updates included.

" + content_html: "

Queremos informarle de que acabamos de actualizar nuestra política de privacidad.

Podemos cambiar nuestra política de privacidad regularmente. De acuerdo con la normativa, usted recibirá una notificación por cada actualización.

Al acceder o utilizar nuestros servicios después de la actualización de la política de privacidad, consideraremos que usted acepta sus términos, actualizaciones incluidas.

" link_to_policy: "Haga clic aquí para ver la política de privacidad." notify_admin_refund_created: - subject: "A refund has been generated" + subject: "Se ha generado un reembolso" body: - refund_created: "A refund of %{AMOUNT} has been generated on invoice %{INVOICE} of user %{USER}" - wallet_refund_created: "A refund of %{AMOUNT} has been generated for the credit of the wallet of user %{USER}" - download: "Click here to download this refund invoice" + refund_created: "Se ha generado un reembolso de %{AMOUNT} en la factura %{INVOICE} del usuario %{USER}" + wallet_refund_created: "Se ha generado un reembolso de %{AMOUNT} en el monedero del usuario %{USER}" + download: "Haga clic aquí para descargar la factura de reembolso" notify_admins_role_update: - subject: "The role of a user has changed" + subject: "El rol de un usuario ha cambiado" body: user_role_changed_html: "The role of the user %{NAME} has changed." previous_role: "Previous role:" @@ -313,13 +313,13 @@ es: body: remember: "In accordance with the %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}." error: "Unfortunately, this card debit was unable to complete successfully." - action: "Please contact the member as soon as possible, then go to the payment schedule management interface to resolve the problem. After about 24 hours, the card subscription will be cancelled." + action: "Please contact the member as soon as possible, then go to the payment schedule management interface to resolve the problem. After a certain period of time, the card subscription could be cancelled." notify_member_payment_schedule_failed: subject: "[URGENT] Card debit failure" body: remember: "In accordance with your %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}." error: "Unfortunately, this card debit was unable to complete successfully." - action_html: "Please check %{DASHBOARD} or contact a manager before 24 hours, otherwise your subscription may be interrupted." + action_html: "Please check %{DASHBOARD} or contact a manager quickly, otherwise your subscription may be interrupted." your_dashboard: "your dashboard" notify_admin_payment_schedule_gateway_canceled: subject: "[URGENT] Payment schedule canceled by the payment gateway" diff --git a/config/locales/mails.fr.yml b/config/locales/mails.fr.yml index 3de801a1d..3611b3d80 100644 --- a/config/locales/mails.fr.yml +++ b/config/locales/mails.fr.yml @@ -313,13 +313,13 @@ fr: body: remember: "Conformément à l'échéancier de paiement %{REFERENCE}, un prélèvement par carte de %{AMOUNT} était prévu le %{DATE}." error: "Malheureusement, ce prélèvement n'a pas pu être effectué correctement." - action: "Veuillez vous mettre en relation avec le membre au plus tôt, puis vous rendre dans l'interface de gestion des échéanciers afin de régler le problème. Au delà d'environ 24 heures, l'abonnement par carte bancaire sera annulé." + action: "Veuillez vous mettre en relation avec le membre au plus tôt, puis vous rendre dans l'interface de gestion des échéanciers afin de régler le problème. Au delà d'un certain délai, l'abonnement par carte bancaire pourrait être annulé." notify_member_payment_schedule_failed: subject: "[URGENT] Échec du prélèvement par carte" body: remember: "Conformément à votre échéancier de paiement %{REFERENCE}, un prélèvement par carte de %{AMOUNT} était prévu le %{DATE}." error: "Malheureusement, ce prélèvement n'a pas pu être effectué correctement." - action_html: "Veuillez vous rendre dans %{DASHBOARD} ou prendre contact avec un gestionnaire sous 24 heures, faute de quoi votre abonnement risque d'être interrompu." + action_html: "Veuillez vous rendre dans %{DASHBOARD} ou prendre contact avec un gestionnaire rapidement, faute de quoi votre abonnement risque d'être interrompu." your_dashboard: "votre tableau de bord" notify_admin_payment_schedule_gateway_canceled: subject: "[URGENT] Échéancier de paiement annulé par la passerelle de paiement" diff --git a/config/locales/mails.no.yml b/config/locales/mails.no.yml index 3685f5538..b02fdc717 100644 --- a/config/locales/mails.no.yml +++ b/config/locales/mails.no.yml @@ -313,13 +313,13 @@ body: remember: "In accordance with the %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}." error: "Unfortunately, this card debit was unable to complete successfully." - action: "Please contact the member as soon as possible, then go to the payment schedule management interface to resolve the problem. After about 24 hours, the card subscription will be cancelled." + action: "Please contact the member as soon as possible, then go to the payment schedule management interface to resolve the problem. After a certain period of time, the card subscription could be cancelled." notify_member_payment_schedule_failed: subject: "[URGENT] Card debit failure" body: remember: "In accordance with your %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}." error: "Unfortunately, this card debit was unable to complete successfully." - action_html: "Please check %{DASHBOARD} or contact a manager before 24 hours, otherwise your subscription may be interrupted." + action_html: "Please check %{DASHBOARD} or contact a manager quickly, otherwise your subscription may be interrupted." your_dashboard: "your dashboard" notify_admin_payment_schedule_gateway_canceled: subject: "[URGENT] Payment schedule canceled by the payment gateway" diff --git a/config/locales/mails.pt.yml b/config/locales/mails.pt.yml index fcc81dda8..112b236f5 100755 --- a/config/locales/mails.pt.yml +++ b/config/locales/mails.pt.yml @@ -313,13 +313,13 @@ pt: body: remember: "De acordo com o calendário de pagamento de %{REFERENCE}, um débito por cartão de %{AMOUNT} foi agendado em %{DATE}." error: "Infelizmente, não foi possível completar o débito no cartão com sucesso." - action: "Por favor, entre em contato com o membro assim que possível, depois vá à interface de gestão de horários de pagamento para resolver o problema. Após cerca de 24 horas, a assinatura do cartão será cancelada." + action: "Please contact the member as soon as possible, then go to the payment schedule management interface to resolve the problem. After a certain period of time, the card subscription could be cancelled." notify_member_payment_schedule_failed: subject: "[URGENT] Falha no débito do cartão" body: remember: "De acordo com a sua agenda de pagamentos %{REFERENCE}, um débito por cartão de %{AMOUNT} foi agendado para %{DATE}." error: "Infelizmente, não foi possível completar o débito no cartão com sucesso." - action_html: "Por favor, verifique %{DASHBOARD} ou entre em contato com um gerente antes de 24 horas, caso contrário sua assinatura pode ser interrompida." + action_html: "Please check %{DASHBOARD} or contact a manager quickly, otherwise your subscription may be interrupted." your_dashboard: "seu dashboard" notify_admin_payment_schedule_gateway_canceled: subject: "[URGENT] Payment schedule canceled by the payment gateway" diff --git a/config/locales/mails.zu.yml b/config/locales/mails.zu.yml index d01b5f847..aebe7a467 100644 --- a/config/locales/mails.zu.yml +++ b/config/locales/mails.zu.yml @@ -313,13 +313,13 @@ zu: body: remember: "crwdns21134:0%{REFERENCE}crwdnd21134:0%{AMOUNT}crwdnd21134:0%{DATE}crwdne21134:0" error: "crwdns21136:0crwdne21136:0" - action: "crwdns21138:0crwdne21138:0" + action: "crwdns22400:0crwdne22400:0" notify_member_payment_schedule_failed: subject: "crwdns21140:0[URGENT]crwdne21140:0" body: remember: "crwdns21142:0%{REFERENCE}crwdnd21142:0%{AMOUNT}crwdnd21142:0%{DATE}crwdne21142:0" error: "crwdns21144:0crwdne21144:0" - action_html: "crwdns21146:0%{DASHBOARD}crwdne21146:0" + action_html: "crwdns22402:0%{DASHBOARD}crwdne22402:0" your_dashboard: "crwdns21148:0crwdne21148:0" notify_admin_payment_schedule_gateway_canceled: subject: "crwdns22389:0[URGENT]crwdne22389:0" diff --git a/config/locales/no.yml b/config/locales/no.yml index eb75f1b4b..404366f3f 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -268,9 +268,9 @@ notify_admin_subscription_will_expire_in_7_days: USER_s_subscription_will_expire_in_7_days: "%{USER} sitt abonnement utløper om 7 dager." notify_admin_user_group_changed: - user_NAME_changed_his_group_html: "Bruker {NAME} har endret gruppe." #messageFormat interpolation + user_NAME_changed_his_group_html: "User {NAME} changed group." #messageFormat interpolation notify_admin_user_merged: - user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "Bruker {NAME} har slått sammen sin konto med den som er importert fra {PROVIDER} ({UID})." #messageFormat interpolation + user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "{NAME}'s account was merged with the one imported from {PROVIDER} ({%UID})." #messageFormat interpolation notify_admin_when_project_published: project_NAME_has_been_published_html: "Prosjekt %{NAME} har blitt publisert." notify_admin_when_user_is_created: diff --git a/config/locales/pt.yml b/config/locales/pt.yml index db5f4411d..b0300eb88 100755 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -268,9 +268,9 @@ pt: notify_admin_subscription_will_expire_in_7_days: USER_s_subscription_will_expire_in_7_days: "A assinatura do usuário %{USER} expira em 7 dias." notify_admin_user_group_changed: - user_NAME_changed_his_group_html: "Usuário {NAME} mudou {GENDER, select, true{seu} other{seu}} grupo." #messageFormat interpolation + user_NAME_changed_his_group_html: "User {NAME} changed group." #messageFormat interpolation notify_admin_user_merged: - user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "Usuário {NAME} vinculou {GENDER, select, true{sua} other{sua}} conta com a importada de {PROVIDER} ({UID}) ." #messageFormat interpolation + user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "{NAME}'s account was merged with the one imported from {PROVIDER} ({%UID})." #messageFormat interpolation notify_admin_when_project_published: project_NAME_has_been_published_html: "Projeto %{NAME} foi publicado." notify_admin_when_user_is_created: diff --git a/config/locales/zu.yml b/config/locales/zu.yml index 469e1dd81..d798bef18 100644 --- a/config/locales/zu.yml +++ b/config/locales/zu.yml @@ -268,9 +268,9 @@ zu: notify_admin_subscription_will_expire_in_7_days: USER_s_subscription_will_expire_in_7_days: "crwdns3577:0%{USER}crwdne3577:0" notify_admin_user_group_changed: - user_NAME_changed_his_group_html: "crwdns3579:0NAME={NAME}crwdnd3579:0GENDER={GENDER}crwdne3579:0" #messageFormat interpolation + user_NAME_changed_his_group_html: "crwdns22438:0{NAME}crwdne22438:0" #messageFormat interpolation notify_admin_user_merged: - user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "crwdns3581:0NAME={NAME}crwdnd3581:0GENDER={GENDER}crwdnd3581:0PROVIDER={PROVIDER}crwdnd3581:0UID={UID}crwdne3581:0" #messageFormat interpolation + user_NAME_has_merged_his_account_with_the_one_imported_from_PROVIDER_UID_html: "crwdns22440:0{NAME}crwdnd22440:0{PROVIDER}crwdne22440:0" #messageFormat interpolation notify_admin_when_project_published: project_NAME_has_been_published_html: "crwdns3583:0%{ID}crwdnd3583:0%{NAME}crwdne3583:0" notify_admin_when_user_is_created: diff --git a/config/routes.rb b/config/routes.rb index c9a0728ab..f931ca7ef 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'sidekiq_unique_jobs/web' -require 'sidekiq/cron/web' +require 'sidekiq-scheduler/web' Rails.application.routes.draw do if AuthProvider.active.providable_type == DatabaseProvider.name diff --git a/config/schedule.yml b/config/schedule.yml index af0ecf6b4..b83e7d469 100644 --- a/config/schedule.yml +++ b/config/schedule.yml @@ -1,55 +1,51 @@ subscription_expire_in_7_days: cron: "0 0 * * *" - class: "SubscriptionExpireWorker" + class: SubscriptionExpireWorker queue: default args: [7] subscription_is_expired: cron: "0 23 * * *" - class: "SubscriptionExpireWorker" + class: SubscriptionExpireWorker queue: default args: [0] generate_statistic: cron: "0 1 * * *" - class: "StatisticWorker" + class: StatisticWorker queue: default i_calendar_import: cron: "0 * * * *" - class: "ICalendarImportWorker" + class: ICalendarImportWorker queue: default -open_api_trace_calls_count: - cron: "0 4 * * 0" # every sunday at 4am - class: "OpenAPITraceCallsCountWorker" - reservation_reminder: cron: "1 * * * *" - class: "ReservationReminderWorker" + class: ReservationReminderWorker queue: default close_period_reminder_worker: cron: "0 12 * * 1" # every monday at 12pm - class: "ClosePeriodReminderWorker" + class: ClosePeriodReminderWorker queue: default free_disk_space: cron: "0 5 * * 0" # every sunday at 5am - class: "FreeDiskSpaceWorker" + class: FreeDiskSpaceWorker queue: system # schedule a version check, every week at the current day+time # this will prevent that all the instances query the hub simultaneously -<% m = DateTime.current.minute - 1; h = DateTime.current.hour; d = DateTime.current.cwday %> +<% h = DateTime.current - 1.minute %> version_check: - cron: <%="#{m} #{h} * * #{d}" %> - class: 'VersionCheckWorker' + cron: <%="#{h.strftime('%M %H')} * * #{h.cwday}" %> + class: VersionCheckWorker queue: system payment_schedule_item: cron: "0 * * * *" # every day, every hour - class: 'PaymentScheduleItemWorker' + class: PaymentScheduleItemWorker queue: default <%= PluginRegistry.insert_code('yml.schedule') %> diff --git a/config/secrets.yml b/config/secrets.yml index 94050689c..603de1d48 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -18,11 +18,11 @@ development: smtp_port: <%= ENV["SMTP_PORT"] %> time_zone: <%= ENV["TIME_ZONE"] %> week_starting_day: <%= ENV["WEEK_STARTING_DAY"] %> - d3_date_format: <%= ENV["D3_DATE_FORMAT"].dump %> # .dump is needed as the value may start by a '%', see https://github.com/tenderlove/psych/issues/75 + d3_date_format: <%= ENV.fetch("D3_DATE_FORMAT", '%y-%m-%d').dump %> # .dump is needed as the value may start by a '%', see https://github.com/tenderlove/psych/issues/75 uib_date_format: <%= ENV["UIB_DATE_FORMAT"] %> excel_date_format: <%= ENV["EXCEL_DATE_FORMAT"]%> - rails_locale: <%= ENV["RAILS_LOCALE"].dump %> - app_locale: <%= ENV["APP_LOCALE"].dump %> + rails_locale: <%= ENV.fetch("RAILS_LOCALE", 'en').dump %> + app_locale: <%= ENV.fetch("APP_LOCALE", 'en').dump %> moment_locale: <%= ENV["MOMENT_LOCALE"] %> summernote_locale: <%= ENV["SUMMERNOTE_LOCALE"] %> angular_locale: <%= ENV["ANGULAR_LOCALE"] %> @@ -31,6 +31,8 @@ development: fullcalendar_locale: <%= ENV["FULLCALENDAR_LOCALE"] %> postgresql_language_analyzer: <%= ENV.fetch("POSTGRESQL_LANGUAGE_ANALYZER", 'simple') %> openlab_base_uri: <%= ENV["OPENLAB_BASE_URI"] %> + openlab_ssl_verify: <%= ENV.fetch("OPENLAB_SSL_VERIFY", true) %> + openlab_ssl_verify_peer: <%= ENV.fetch("OPENLAB_SSL_VERIFY_PEER", true) %> navinum_api_login: <%= ENV["NAVINUM_API_LOGIN"] %> navinum_api_password: <%= ENV["NAVINUM_API_PASSWORD"] %> elaticsearch_host: <%= ENV["ELASTICSEARCH_HOST"] %> @@ -61,6 +63,8 @@ test: fullcalendar_locale: en postgresql_language_analyzer: french openlab_base_uri: + openlab_ssl_verify: + openlab_ssl_verify_peer: navinum_api_login: navinum_api_password: elaticsearch_host: <%= ENV["ELASTICSEARCH_HOST"] %> @@ -76,7 +80,7 @@ staging: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> default_host: <%= ENV["DEFAULT_HOST"] %> default_protocol: <%= ENV["DEFAULT_PROTOCOL"] %> - delivery_method: <%= ENV['DELIVERY_METHOD'] %> + delivery_method: <%= ENV.fetch('DELIVERY_METHOD', 'smtp') %> smtp_address: <%= ENV["SMTP_ADDRESS"] %> smtp_port: <%= ENV["SMTP_PORT"] %> smtp_user_name: <%= ENV["SMTP_USER_NAME"] %> @@ -86,11 +90,11 @@ staging: smtp_openssl_verify_mode: <%= ENV["SMTP_OPENSSL_VERIFY_MODE"] %> time_zone: <%= ENV["TIME_ZONE"] %> week_starting_day: <%= ENV["WEEK_STARTING_DAY"] %> - d3_date_format: <%= ENV["D3_DATE_FORMAT"].dump %> + d3_date_format: <%= ENV.fetch("D3_DATE_FORMAT", '%y-%m-%d').dump %> uib_date_format: <%= ENV["UIB_DATE_FORMAT"] %> excel_date_format: <%= ENV["EXCEL_DATE_FORMAT"]%> - rails_locale: <%= ENV["RAILS_LOCALE"].dump %> - app_locale: <%= ENV["APP_LOCALE"].dump %> + rails_locale: <%= ENV.fetch("RAILS_LOCALE", 'en').dump %> + app_locale: <%= ENV.fetch("APP_LOCALE", 'en').dump %> moment_locale: <%= ENV["MOMENT_LOCALE"] %> summernote_locale: <%= ENV["SUMMERNOTE_LOCALE"] %> angular_locale: <%= ENV["ANGULAR_LOCALE"] %> @@ -99,6 +103,8 @@ staging: fullcalendar_locale: <%= ENV["FULLCALENDAR_LOCALE"] %> postgresql_language_analyzer: <%= ENV.fetch("POSTGRESQL_LANGUAGE_ANALYZER", 'simple') %> openlab_base_uri: <%= ENV["OPENLAB_BASE_URI"] %> + openlab_ssl_verify: <%= ENV.fetch("OPENLAB_SSL_VERIFY", true) %> + openlab_ssl_verify_peer: <%= ENV.fetch("OPENLAB_SSL_VERIFY_PEER", true) %> navinum_api_login: <%= ENV["NAVINUM_API_LOGIN"] %> navinum_api_password: <%= ENV["NAVINUM_API_PASSWORD"] %> elaticsearch_host: <%= ENV["ELASTICSEARCH_HOST"] %> @@ -117,7 +123,7 @@ production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> default_host: <%= ENV["DEFAULT_HOST"] %> default_protocol: <%= ENV["DEFAULT_PROTOCOL"] %> - delivery_method: <%= ENV['DELIVERY_METHOD'] %> + delivery_method: <%= ENV.fetch('DELIVERY_METHOD', 'smtp') %> smtp_address: <%= ENV["SMTP_ADDRESS"] %> smtp_port: <%= ENV["SMTP_PORT"] %> smtp_user_name: <%= ENV["SMTP_USER_NAME"] %> @@ -127,11 +133,11 @@ production: smtp_enable_starttls_auto: <%= ENV["SMTP_ENABLE_STARTTLS_AUTO"] %> smtp_openssl_verify_mode: <%= ENV["SMTP_OPENSSL_VERIFY_MODE"] %> week_starting_day: <%= ENV["WEEK_STARTING_DAY"] %> - d3_date_format: <%= ENV["D3_DATE_FORMAT"].dump %> + d3_date_format: <%= ENV.fetch("D3_DATE_FORMAT", '%y-%m-%d').dump %> uib_date_format: <%= ENV["UIB_DATE_FORMAT"] %> excel_date_format: <%= ENV["EXCEL_DATE_FORMAT"]%> - rails_locale: <%= ENV["RAILS_LOCALE"].dump %> - app_locale: <%= ENV["APP_LOCALE"].dump %> + rails_locale: <%= ENV.fetch("RAILS_LOCALE", 'en').dump %> + app_locale: <%= ENV.fetch("APP_LOCALE", 'en').dump %> moment_locale: <%= ENV["MOMENT_LOCALE"] %> summernote_locale: <%= ENV["SUMMERNOTE_LOCALE"] %> angular_locale: <%= ENV["ANGULAR_LOCALE"] %> @@ -140,6 +146,8 @@ production: fullcalendar_locale: <%= ENV["FULLCALENDAR_LOCALE"] %> postgresql_language_analyzer: <%= ENV.fetch("POSTGRESQL_LANGUAGE_ANALYZER", 'simple') %> openlab_base_uri: <%= ENV["OPENLAB_BASE_URI"] %> + openlab_ssl_verify: <%= ENV.fetch("OPENLAB_SSL_VERIFY", true) %> + openlab_ssl_verify_peer: <%= ENV.fetch("OPENLAB_SSL_VERIFY_PEER", true) %> navinum_api_login: <%= ENV["NAVINUM_API_LOGIN"] %> navinum_api_password: <%= ENV["NAVINUM_API_PASSWORD"] %> elaticsearch_host: <%= ENV["ELASTICSEARCH_HOST"] %> diff --git a/config/webpack/development.js b/config/webpack/development.js deleted file mode 100644 index 1b2e7a9b3..000000000 --- a/config/webpack/development.js +++ /dev/null @@ -1,20 +0,0 @@ -process.env.NODE_ENV = process.env.NODE_ENV || 'development'; - -const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); -const environment = require('./environment'); - -const isWebpackDevServer = process.env.WEBPACK_DEV_SERVER; - -// plugins -if (isWebpackDevServer) { - environment.plugins.append( - 'ReactRefreshWebpackPlugin', - new ReactRefreshWebpackPlugin({ - overlay: { - sockPort: 3035 - } - }) - ); -} - -module.exports = environment.toWebpackConfig(); diff --git a/config/webpack/environment.js b/config/webpack/environment.js deleted file mode 100644 index 4240dac80..000000000 --- a/config/webpack/environment.js +++ /dev/null @@ -1,38 +0,0 @@ -const { environment } = require('@rails/webpacker'); -const webpack = require('webpack'); -const path = require('path'); - -const htmlErb = require('./loaders/html_erb'); -const js = require('./loaders/js'); -const jsErb = require('./loaders/js_erb'); -const sass = require('./loaders/sass'); -const sassErb = require('./loaders/sass_erb'); -const html = require('./loaders/html'); -const uiTour = require('./loaders/ui-tour'); - -environment.plugins.prepend('Provide', new webpack.ProvidePlugin({ - $: 'jquery', - jQuery: 'jquery', - 'window.jQuery': 'jquery', - _: 'lodash', - Hone: 'hone', - Tether: 'tether', - Holder: 'holderjs', - 'window.CodeMirror': 'codemirror', - MediumEditor: 'medium-editor', - Humanize: path.resolve(path.join(__dirname, '../../app/frontend/src/javascript/lib/humanize.js')), - moment: 'moment', - Application: [path.resolve(path.join(__dirname, '../../app/frontend/src/javascript/app.js')), 'Application'] -})); - -environment.loaders.prepend('js-erb', jsErb); -environment.loaders.prepend('html-erb', htmlErb); -environment.loaders.prepend('sass-erb', sassErb); -environment.loaders.prepend('js', js); -environment.loaders.append('html', html); -environment.loaders.append('sass', sass); -environment.loaders.append('uiTour', uiTour); - -environment.splitChunks(); - -module.exports = environment; diff --git a/config/webpack/loaders/js.js b/config/webpack/loaders/js.js deleted file mode 100644 index de5ed5438..000000000 --- a/config/webpack/loaders/js.js +++ /dev/null @@ -1,14 +0,0 @@ -const path = require('path'); - -module.exports = { - test: /\.js$/, - exclude: /node_modules/, - use: [ - { - loader: 'auto-ngtemplate-loader', - options: { - pathResolver: (templatePath) => path.join(__dirname, `../../../app/frontend/templates${templatePath}`) - } - } - ] -}; diff --git a/config/webpack/loaders/sass.js b/config/webpack/loaders/sass.js deleted file mode 100644 index 051ca5360..000000000 --- a/config/webpack/loaders/sass.js +++ /dev/null @@ -1,19 +0,0 @@ -const getStyleRule = require('@rails/webpacker/package/utils/get_style_rule'); - -module.exports = getStyleRule(/\.(scss|sass)$/i, false, [ - { - loader: 'resolve-url-loader', - options: { - sourceMap: true - } - }, - { - loader: 'sass-loader', - options: { - sourceMap: true, - sassOptions: { - includePaths: ['app/frontend/src/stylesheets'] - } - } - } -]); diff --git a/config/webpack/loaders/sass_erb.js b/config/webpack/loaders/sass_erb.js deleted file mode 100644 index 3466fb766..000000000 --- a/config/webpack/loaders/sass_erb.js +++ /dev/null @@ -1,22 +0,0 @@ -const getStyleRule = require('@rails/webpacker/package/utils/get_style_rule'); - -module.exports = getStyleRule(/\.(scss|sass)\.erb$/, false, [ - { - loader: 'resolve-url-loader', - options: { - sourceMap: true - } - }, - { - loader: 'sass-loader', - options: { - sourceMap: true, - sassOptions: { - includePaths: ['app/frontend/src/stylesheets'] - } - } - }, - { - loader: 'rails-erb-loader' - } -]); diff --git a/config/webpack/modules/hmr.js b/config/webpack/modules/hmr.js new file mode 100644 index 000000000..40262e1ce --- /dev/null +++ b/config/webpack/modules/hmr.js @@ -0,0 +1,14 @@ +const isDevelopment = process.env.NODE_ENV !== 'production'; + +module.exports = { + test: /\.[jt]sx?$/, + exclude: /node_modules/, + use: [ + { + loader: 'babel-loader', + options: { + plugins: [isDevelopment && require.resolve('react-refresh/babel')].filter(Boolean) + } + } + ] +}; diff --git a/config/webpack/loaders/html.js b/config/webpack/modules/html.js similarity index 92% rename from config/webpack/loaders/html.js rename to config/webpack/modules/html.js index cd3506af1..c325c76d2 100644 --- a/config/webpack/loaders/html.js +++ b/config/webpack/modules/html.js @@ -3,6 +3,7 @@ const path = require('path'); module.exports = { test: /\.html$/i, exclude: /node_modules/, + type: 'javascript/auto', use: [ { loader: 'ngtemplate-loader', diff --git a/config/webpack/loaders/html_erb.js b/config/webpack/modules/html_erb.js similarity index 100% rename from config/webpack/loaders/html_erb.js rename to config/webpack/modules/html_erb.js diff --git a/config/webpack/loaders/js_erb.js b/config/webpack/modules/js_erb.js similarity index 53% rename from config/webpack/loaders/js_erb.js rename to config/webpack/modules/js_erb.js index d55ac02ad..29b37db1e 100644 --- a/config/webpack/loaders/js_erb.js +++ b/config/webpack/modules/js_erb.js @@ -1,16 +1,8 @@ -const path = require('path'); - module.exports = { test: /\.js\.erb$/, enforce: 'pre', exclude: /node_modules/, use: [ - { - loader: 'auto-ngtemplate-loader', - options: { - pathResolver: (templatePath) => path.join(__dirname, `../../../app/frontend/templates${templatePath}`) - } - }, { loader: 'rails-erb-loader', options: { diff --git a/config/webpack/modules/sass.js b/config/webpack/modules/sass.js new file mode 100644 index 000000000..8d30efb0b --- /dev/null +++ b/config/webpack/modules/sass.js @@ -0,0 +1,21 @@ +module.exports = { + test: /\.(scss|sass)$/i, + exclude: /node_modules/, + use: [ + { + loader: 'resolve-url-loader', + options: { + sourceMap: true + } + }, + { + loader: 'sass-loader', + options: { + sourceMap: true, + sassOptions: { + includePaths: ['app/frontend/src/stylesheets'] + } + } + } + ] +}; diff --git a/config/webpack/modules/sass_erb.js b/config/webpack/modules/sass_erb.js new file mode 100644 index 000000000..c3b28cf5c --- /dev/null +++ b/config/webpack/modules/sass_erb.js @@ -0,0 +1,24 @@ +module.exports = { + test: /\.(scss|sass)\.erb$/, + exclude: /node_modules/, + use: [ + { + loader: 'resolve-url-loader', + options: { + sourceMap: true + } + }, + { + loader: 'sass-loader', + options: { + sourceMap: true, + sassOptions: { + includePaths: ['app/frontend/src/stylesheets'] + } + } + }, + { + loader: 'rails-erb-loader' + } + ] +}; diff --git a/config/webpack/loaders/ui-tour.js b/config/webpack/modules/ui-tour.js similarity index 92% rename from config/webpack/loaders/ui-tour.js rename to config/webpack/modules/ui-tour.js index 89b56f971..c8a26eb65 100644 --- a/config/webpack/loaders/ui-tour.js +++ b/config/webpack/modules/ui-tour.js @@ -2,6 +2,7 @@ const path = require('path'); module.exports = { test: /angular-ui-tour\/.*\.html$/i, + type: 'javascript/auto', use: [ { loader: 'ngtemplate-loader', diff --git a/config/webpack/production.js b/config/webpack/production.js deleted file mode 100644 index 7684a100b..000000000 --- a/config/webpack/production.js +++ /dev/null @@ -1,5 +0,0 @@ -process.env.NODE_ENV = process.env.NODE_ENV || 'production'; - -const environment = require('./environment'); - -module.exports = environment.toWebpackConfig(); diff --git a/config/webpack/test.js b/config/webpack/test.js deleted file mode 100644 index 89d35d938..000000000 --- a/config/webpack/test.js +++ /dev/null @@ -1,5 +0,0 @@ -process.env.NODE_ENV = process.env.NODE_ENV || 'development'; - -const environment = require('./environment'); - -module.exports = environment.toWebpackConfig(); diff --git a/config/webpack/webpack.config.js b/config/webpack/webpack.config.js new file mode 100644 index 000000000..16cb74a71 --- /dev/null +++ b/config/webpack/webpack.config.js @@ -0,0 +1,61 @@ +const { webpackConfig, merge } = require('shakapacker'); +const webpack = require('webpack'); +const path = require('path'); + +const htmlErb = require('./modules/html_erb'); +const jsErb = require('./modules/js_erb'); +const sass = require('./modules/sass'); +const sassErb = require('./modules/sass_erb'); +const html = require('./modules/html'); +const uiTour = require('./modules/ui-tour'); +const hmr = require('./modules/hmr'); + +const isDevelopment = process.env.NODE_ENV !== 'production'; + +// See the shakacode/shakapacker README and docs directory for advice on customizing your webpackConfig. +const customConfig = { + plugins: [ + new webpack.ProvidePlugin({ + $: 'jquery', + jQuery: 'jquery', + 'window.jQuery': 'jquery', + _: 'lodash', + Hone: 'hone', + Tether: 'tether', + Holder: 'holderjs', + 'window.CodeMirror': 'codemirror', + MediumEditor: 'medium-editor', + Humanize: path.resolve(path.join(__dirname, '../../app/frontend/src/javascript/lib/humanize.js')), + GTM: path.resolve(path.join(__dirname, '../../app/frontend/src/javascript/lib/gtm.js')), + moment: 'moment', + Application: [path.resolve(path.join(__dirname, '../../app/frontend/src/javascript/app.js')), 'Application'], + process: 'process/browser' + }), + isDevelopment && new (require('@pmmmwh/react-refresh-webpack-plugin'))(), + isDevelopment && new (require('eslint-webpack-plugin'))({ + extensions: ['js', 'ts', 'tsx'], + }) + ].filter(Boolean), + module: { + rules: [ + jsErb, + htmlErb, + sassErb, + html, + sass, + uiTour, + hmr + ] + }, + resolve: { + extensions: ['.jpg', '.jpeg', '.png', '.gif', '.tiff', '.ico', + '.svg', '.eot', '.otf', '.ttf', '.woff', '.woff2', + '.tsx', '.ts', '.erb', '.html', '.mjs', '.js', '.jsx', + '.sass', '.scss', '.css', '.module.sass', '.module.scss', '.module.css'], + fallback: { + assert: require.resolve('assert') + } + } +}; + +module.exports = merge(webpackConfig, customConfig); diff --git a/config/webpacker.yml b/config/webpacker.yml index 3ef1c19cc..8ab70885d 100644 --- a/config/webpacker.yml +++ b/config/webpacker.yml @@ -1,82 +1,54 @@ -# Note: You must restart bin/webpack-dev-server for changes to take effect +# Note: You must restart bin/webpacker-dev-server for changes to take effect default: &default source_path: app/frontend - source_entry_path: packs + source_entry_path: / public_root_path: public public_output_path: packs - cache_path: tmp/cache/webpacker + cache_path: tmp/webpacker webpack_compile_output: true - # Additional paths webpack should lookup modules + # Additional paths webpack should look up modules # ['app/assets', 'engine/foo/app/assets'] additional_paths: [] # Reload manifest.json on all requests so we reload latest compiled packs cache_manifest: false - # Extract and emit a css file - extract_css: true - - static_assets_extensions: - - .jpg - - .jpeg - - .png - - .gif - - .tiff - - .ico - - .svg - - .eot - - .otf - - .ttf - - .woff - - .woff2 - - extensions: - - .tsx - - .ts - - .erb - - .html - - .mjs - - .js - - .jsx - - .sass - - .scss - - .css - - .module.sass - - .module.scss - - .module.css - - .png - - .svg - - .gif - - .jpeg - - .jpg + # Select loader to use, available options are 'babel' (default), 'swc' or 'esbuild' + webpack_loader: 'babel' development: <<: *default compile: true - extract_css: false # Reference: https://webpack.js.org/configuration/dev-server/ dev_server: https: false host: localhost port: 3035 - public: localhost:3035 + # Hot Module Replacement updates modules while the application is running without a full reload hmr: true - # Inline should be set to true if using HMR - inline: true - overlay: true + # Defaults to the inverse of hmr. Uncomment to manually set this. + # live_reload: true + client: + # Should we show a full-screen overlay in the browser when there are compiler errors or warnings? + overlay: true + # May also be a string + # webSocketURL: + # hostname: "0.0.0.0" + # pathname: "/ws" + # port: 8080 + # Should we use gzip compression? compress: true - disable_host_check: true - use_local_ip: false - quiet: false - pretty: false + # Note that apps that do not check the host are vulnerable to DNS rebinding attacks + allowed_hosts: "all" + pretty: true headers: 'Access-Control-Allow-Origin': '*' - watch_options: - ignored: '**/node_modules/**' - + static: + watch: + ignored: '**/node_modules/**' test: <<: *default @@ -91,8 +63,5 @@ production: # Production depends on precompilation of packs prior to booting for performance. compile: false - # Extract and emit a css file - extract_css: true - # Cache manifest.json for performance cache_manifest: true diff --git a/db/migrate/20220225143203_drop_table_open_api_calls_count_tracings.rb b/db/migrate/20220225143203_drop_table_open_api_calls_count_tracings.rb new file mode 100644 index 000000000..9c73380e6 --- /dev/null +++ b/db/migrate/20220225143203_drop_table_open_api_calls_count_tracings.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +# OpenApiCallsCountTracings was an unused table probably from a wrong copy/paste. We removed this dead code. +class DropTableOpenAPICallsCountTracings < ActiveRecord::Migration[5.2] + def up + drop_table :open_api_calls_count_tracings + end + + def down + create_table :open_api_calls_count_tracings do |t| + t.belongs_to :open_api_client, foreign_key: true, index: true + t.integer :calls_count, null: false + t.datetime :at, null: false + t.timestamps null: false + end + end +end diff --git a/db/migrate/20220316133304_allow_update_closed_by_on_accounting_periods.rb b/db/migrate/20220316133304_allow_update_closed_by_on_accounting_periods.rb new file mode 100644 index 000000000..de7f5b39a --- /dev/null +++ b/db/migrate/20220316133304_allow_update_closed_by_on_accounting_periods.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +# This migration allows to update the closed_by column on the accounting_periods table. +# This is needed because the previous rule prevented to delete an admin who closed an accounting period. +class AllowUpdateClosedByOnAccountingPeriods < ActiveRecord::Migration[5.2] + def up + execute <<~SQL + CREATE OR REPLACE RULE accounting_periods_upd_protect AS ON UPDATE + TO accounting_periods + WHERE ( + new.start_at <> old.start_at OR + new.end_at <> old.end_at OR + new.closed_at <> old.closed_at OR + new.period_total <> old.period_total OR + new.perpetual_total <> old.perpetual_total) + DO INSTEAD NOTHING; + SQL + end + + def down + execute <<~SQL + CREATE OR REPLACE RULE accounting_periods_upd_protect AS ON UPDATE + TO accounting_periods DO INSTEAD NOTHING; + SQL + end +end diff --git a/db/migrate/20220322135836_add_scopes_to_o_auth2_provider.rb b/db/migrate/20220322135836_add_scopes_to_o_auth2_provider.rb new file mode 100644 index 000000000..59c6c88dd --- /dev/null +++ b/db/migrate/20220322135836_add_scopes_to_o_auth2_provider.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +# This migration saves the scopes of the OAuth2 provider to the database. +# Previously, the scopes were defined in the OAUTH2_SCOPE environment variable. +class AddScopesToOAuth2Provider < ActiveRecord::Migration[5.2] + def change + add_column :o_auth2_providers, :scopes, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index eaef1c8e7..18ea2c102 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_01_18_123741) do +ActiveRecord::Schema.define(version: 2022_03_22_135836) do # These are extensions that must be enabled in order to support this database enable_extension "fuzzystrmatch" @@ -19,8 +19,8 @@ ActiveRecord::Schema.define(version: 2022_01_18_123741) do enable_extension "unaccent" create_table "abuses", id: :serial, force: :cascade do |t| - t.integer "signaled_id" t.string "signaled_type" + t.integer "signaled_id" t.string "first_name" t.string "last_name" t.string "email" @@ -49,8 +49,8 @@ ActiveRecord::Schema.define(version: 2022_01_18_123741) do t.string "locality" t.string "country" t.string "postal_code" - t.integer "placeable_id" t.string "placeable_type" + t.integer "placeable_id" t.datetime "created_at" t.datetime "updated_at" end @@ -64,8 +64,8 @@ ActiveRecord::Schema.define(version: 2022_01_18_123741) do end create_table "assets", id: :serial, force: :cascade do |t| - t.integer "viewable_id" t.string "viewable_type" + t.integer "viewable_id" t.string "attachment" t.string "type" t.datetime "created_at" @@ -133,8 +133,8 @@ ActiveRecord::Schema.define(version: 2022_01_18_123741) do end create_table "credits", id: :serial, force: :cascade do |t| - t.integer "creditable_id" t.string "creditable_type" + t.integer "creditable_id" t.integer "plan_id" t.integer "hours" t.datetime "created_at" @@ -356,15 +356,15 @@ ActiveRecord::Schema.define(version: 2022_01_18_123741) do create_table "notifications", id: :serial, force: :cascade do |t| t.integer "receiver_id" - t.integer "attached_object_id" t.string "attached_object_type" + t.integer "attached_object_id" t.integer "notification_type_id" t.boolean "is_read", default: false t.datetime "created_at" t.datetime "updated_at" t.string "receiver_type" t.boolean "is_send", default: false - t.jsonb "meta_data", default: {} + t.jsonb "meta_data", default: "{}" t.index ["notification_type_id"], name: "index_notifications_on_notification_type_id" t.index ["receiver_id"], name: "index_notifications_on_receiver_id" end @@ -391,6 +391,7 @@ ActiveRecord::Schema.define(version: 2022_01_18_123741) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "profile_url" + t.string "scopes" end create_table "offer_days", id: :serial, force: :cascade do |t| @@ -402,15 +403,6 @@ ActiveRecord::Schema.define(version: 2022_01_18_123741) do t.index ["subscription_id"], name: "index_offer_days_on_subscription_id" end - create_table "open_api_calls_count_tracings", id: :serial, force: :cascade do |t| - t.integer "open_api_client_id" - t.integer "calls_count", null: false - t.datetime "at", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["open_api_client_id"], name: "index_open_api_calls_count_tracings_on_open_api_client_id" - end - create_table "open_api_clients", id: :serial, force: :cascade do |t| t.string "name" t.integer "calls_count", default: 0 @@ -550,8 +542,8 @@ ActiveRecord::Schema.define(version: 2022_01_18_123741) do create_table "prices", id: :serial, force: :cascade do |t| t.integer "group_id" t.integer "plan_id" - t.integer "priceable_id" t.string "priceable_type" + t.integer "priceable_id" t.integer "amount" t.datetime "created_at", null: false t.datetime "updated_at", null: false @@ -661,8 +653,8 @@ ActiveRecord::Schema.define(version: 2022_01_18_123741) do t.text "message" t.datetime "created_at" t.datetime "updated_at" - t.integer "reservable_id" t.string "reservable_type" + t.integer "reservable_id" t.integer "nb_reserve_places" t.integer "statistic_profile_id" t.index ["reservable_type", "reservable_id"], name: "index_reservations_on_reservable_type_and_reservable_id" @@ -671,8 +663,8 @@ ActiveRecord::Schema.define(version: 2022_01_18_123741) do create_table "roles", id: :serial, force: :cascade do |t| t.string "name" - t.integer "resource_id" t.string "resource_type" + t.integer "resource_id" t.datetime "created_at" t.datetime "updated_at" t.index ["name", "resource_type", "resource_id"], name: "index_roles_on_name_and_resource_type_and_resource_id" @@ -1009,7 +1001,6 @@ ActiveRecord::Schema.define(version: 2022_01_18_123741) do add_foreign_key "invoices", "wallet_transactions" add_foreign_key "invoicing_profiles", "users" add_foreign_key "o_auth2_mappings", "o_auth2_providers" - add_foreign_key "open_api_calls_count_tracings", "open_api_clients" add_foreign_key "organizations", "invoicing_profiles" add_foreign_key "payment_gateway_objects", "payment_gateway_objects" add_foreign_key "payment_schedule_items", "invoices" diff --git a/doc/environment.md b/doc/environment.md index ba07e7ec4..8f73d88ca 100644 --- a/doc/environment.md +++ b/doc/environment.md @@ -138,16 +138,11 @@ Please, ensure you know what you're doing, as this can lead to serious security A comma separated list of settings that cannot be changed from the UI. Please refer to https://github.com/sleede/fab-manager/blob/master/app/models/setting.rb for a list of possible values. Only the system administrator can change them, with the command: `ENV=value rails fablab:setup:env_to_db` - - - OAUTH2_SCOPE - -A comma separated list of scopes that will be requested when authenticating with OAuth2. SSO_DEBUG -If set to `true`, the SSO authentication process will print more debug logs. +If set to `true`, the SSO authentication process will print more debug logs. Use in accordance with LOG_LEVEL=debug. Please do not enable this in production, as it can expose sensitive information. @@ -275,7 +270,19 @@ Accordingly, `RAILS_LOCALE` and `APP_LOCALE` must be configured to `zu`. OPENLAB_BASE_URI Set this variable to `https://openprojects.fab-manager.com` if you want to use the common projects repository or set it to your own OpenLab server. +Typically, `DEFAULT_PROTOCOL` will be `https` (`http` if you are in development, or if you set `ALLOW_INSECURE_HTTP`). +The variable `DEFAULT_HOST` should be your domain name (eg. fabmanager.example.com), and is also used for visits statistics (configuration of Google Analytics). +These two variables are also used for SSO authentication. + + OPENLAB_SSL_VERIFY + +Set this variable to `false` if you do not want to verify the OpenLab's server's certificate against the CA certificate. + + + OPENLAB_SSL_VERIFY_PEER + +Set this variable to `false` if you want to turn off the OpenLab's server's verification but still send client certificate. ## Other settings diff --git a/env.example b/env.example index 79e7f25d8..9c3331803 100644 --- a/env.example +++ b/env.example @@ -54,6 +54,7 @@ EXCEL_DATE_FORMAT=dd/mm/yyyy # OpenLab Projects # do not change this URL OPENLAB_BASE_URI=https://openprojects.fab-manager.com +OPENLAB_SSL_VERIFY=true # System settings LOG_LEVEL=debug diff --git a/lib/omni_auth/strategies/sso_oauth2_provider.rb b/lib/omni_auth/strategies/sso_oauth2_provider.rb index 7c6d60f31..af59688ad 100644 --- a/lib/omni_auth/strategies/sso_oauth2_provider.rb +++ b/lib/omni_auth/strategies/sso_oauth2_provider.rb @@ -28,7 +28,7 @@ module OmniAuth::Strategies def authorize_params super.tap do |params| - params[:scope] = ENV['OAUTH2_SCOPE'] + params[:scope] = active_provider.providable.scopes end end diff --git a/lib/tasks/fablab/maintenance.rake b/lib/tasks/fablab/maintenance.rake index 2924d38e8..47bd64bc5 100644 --- a/lib/tasks/fablab/maintenance.rake +++ b/lib/tasks/fablab/maintenance.rake @@ -111,7 +111,7 @@ namespace :fablab do desc 'regenerate statistics' task :regenerate_statistics, %i[year month] => :environment do |_task, args| - return unless Setting.get('statistics_module') + exit unless Setting.get('statistics_module') yesterday = 1.day.ago year = args.year || yesterday.year diff --git a/package.json b/package.json index 217b476c7..ac800a492 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fab-manager", - "version": "5.3.2", + "version": "5.3.7", "description": "Fab-manager is the FabLab management solution. It provides a comprehensive, web-based, open-source tool to simplify your administrative tasks and your marker's projects.", "keywords": [ "fablab", @@ -16,46 +16,38 @@ "url": "https://github.com/sleede/fab-manager/issues" }, "scripts": { - "lint": "eslint ./app/frontend/src", - "lint-ts": "eslint ./app/frontend/src --ext .ts --ext .tsx" + "lint": "eslint ./app/frontend/src" }, "license": "AGPL-3.0-only", "devDependencies": { + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.4", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "~8.12.0", + "eslint-config-standard": "~17.0.0-1", + "eslint-plugin-html-erb": "^1.0.1", + "eslint-plugin-import": "~2.25.4", + "eslint-plugin-n": "^15.1.0", + "eslint-plugin-promise": "~6.0.0", + "eslint-plugin-react": "^7.29.4", + "eslint-webpack-plugin": "^3.1.1", + "react-refresh": "^0.11.0", + "webpack-dev-server": "^4.7.4" + }, + "dependencies": { + "@babel/core": "7", "@babel/plugin-proposal-class-properties": "^7.14.5", "@babel/plugin-proposal-object-rest-spread": "^7.15.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-runtime": "^7.15.0", - "@babel/preset-env": "^7.15.6", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.1", - "@typescript-eslint/eslint-plugin": "^4.28.1", - "@typescript-eslint/parser": "^4.28.1", - "auto-ngtemplate-loader": "^3.1.0", - "babel-loader": "^8.2.2", - "eslint": "~6.8.0", - "eslint-config-standard": "~14.1.1", - "eslint-plugin-import": "~2.20.1", - "eslint-plugin-lint-erb": "https://github.com/sleede/eslint-plugin-lint-erb.git#master", - "eslint-plugin-node": "~11.0.0", - "eslint-plugin-promise": "~4.2.1", - "eslint-plugin-react": "^7.21.5", - "eslint-plugin-standard": "~4.0.1", - "html-loader": "^1.3.0", - "ngtemplate-loader": "^2.1.0", - "rails-erb-loader": "^5.5.2", - "react-refresh": "^0.10.0", - "resolve-url-loader": "^4.0.0", - "webpack": "^4.44.1", - "webpack-dev-server": "^3.11.0" - }, - "dependencies": { - "@babel/core": "^7.0.0-0", + "@babel/plugin-transform-runtime": "7", + "@babel/preset-env": "7", "@babel/preset-react": "^7.12.1", - "@babel/preset-typescript": "^7.12.1", + "@babel/preset-typescript": "^7.16.7", + "@babel/runtime": "^7.17.2", "@claviska/jquery-minicolors": "^2.3.5", "@fortawesome/fontawesome-free": "5.14.0", "@lyracom/embedded-form-glue": "^0.3.3", - "@rails/webpacker": "5.4.3", "@stripe/react-stripe-js": "^1.4.0", "@stripe/stripe-js": "^1.13.2", "@tiptap/core": "^2.0.0-beta.174", @@ -66,9 +58,11 @@ "@tiptap/extension-underline": "^2.0.0-beta.22", "@tiptap/react": "^2.0.0-beta.108", "@tiptap/starter-kit": "^2.0.0-beta.183", + "@types/angular": "^1.7.3", + "@types/prop-types": "^15.7.2", "@types/react": "^17.0.3", "@types/react-dom": "^17.0.3", - "@uirouter/angularjs": "0.4", + "@uirouter/angularjs": "1.0.30", "AngularDevise": "https://github.com/cloudspace/angular_devise.git#1.0.2", "angular": "1.8", "angular-animate": "1.7", @@ -76,7 +70,6 @@ "angular-base64-upload": "^0.0.9", "angular-bootstrap-switch": "https://github.com/sleede/angular-bootstrap-switch.git#develop", "angular-cookies": "1.7", - "angular-google-analytics": "1.1", "angular-growl-v2": "https://github.com/JanStevens/angular-growl-2.git#0.7.9", "angular-i18n": "1.7", "angular-loading-bar": "^0.9.0", @@ -98,49 +91,72 @@ "angular-ui-tour": "https://github.com/sleede/angular-ui-tour.git#master", "angular-unsavedchanges": "0.2", "angular-xeditable": "0.10", + "assert": "^2.0.0", "axios": "^0.21.2", + "babel-loader": "^8.2.3", + "babel-plugin-macros": "^3.1.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", - "bootstrap-sass": "3.4.1", + "bootstrap-sass": "3.4.3", "checklist-model": "0.2", "codemirror": "^5.58.2", + "compression-webpack-plugin": "9", + "core-js": "^3.21.1", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^3.4.1", "d3": "3.5", "elasticsearch-browser": "3.1", "fullcalendar": "3.10.2", "holderjs": "2.6", - "i18next": "^19.8.3", - "i18next-http-backend": "^1.0.21", - "i18next-icu": "^1.4.2", + "html-loader": "^1.3.0", + "i18next": "^21.6.13", + "i18next-http-backend": "^1.3.2", + "i18next-icu": "^2.0.3", "immer": "^9.0.6", + "intl-messageformat": "^9.11.4", "jasny-bootstrap": "3.1", "jquery": ">=3.5.0", "jquery-ujs": "^1.2.2", "medium-editor": "^5.23.3", - "moment": "2.22", + "mini-css-extract-plugin": "^2.6.0", + "moment": "2.29", "moment-timezone": "0.5", "ng-caps-lock": "https://github.com/FabioMR/ng-caps-lock.git#1.0.3", "ng-fittext": "https://github.com/patrickmarabeas/ng-FitText.js.git#4.1.1", "ngUpload": "0.5", + "ngtemplate-loader": "^2.1.0", "nvd3": "1.8", "phosphor-react": "^1.4.0", + "process": "^0.11.10", "prop-types": "^15.7.2", + "rails-erb-loader": "^5.5.2", "react": "^17.0.2", "react-cool-onclickoutside": "^1.7.0", "react-dom": "^17.0.2", "react-hook-form": "^7.25.3", - "react-i18next": "^11.7.3", + "react-i18next": "^11.15.6", "react-modal": "^3.11.2", "react-select": "^4.3.1", "react-switch": "^6.0.0", "react2angular": "^4.0.6", + "resolve-url-loader": "^4.0.0", + "sass": "^1.49.9", + "sass-loader": "^12.6.0", + "shakapacker": "6.2.0", + "style-loader": "^3.3.1", "summernote": "0.8.18", + "terser-webpack-plugin": "5", "twitter-fetcher": "^18.0.2", - "typescript": "^4.0.5", + "typescript": "^4.6.3", "ui-select": "0.19", "underscore": "1.12", - "use-immer": "^0.5.1" + "use-immer": "^0.5.1", + "webpack": "5", + "webpack-assets-manifest": "5", + "webpack-cli": "4", + "webpack-merge": "5", + "webpack-sources": "^3.2.3" }, - "peerDependencies": { - "@types/angular": "^1.7.3", - "@types/prop-types": "^15.7.2" - } + "browserslist": [ + "defaults" + ] } diff --git a/scripts/cve-2021-44228.sh b/scripts/cve-2021-44228.sh new file mode 100644 index 000000000..257690056 --- /dev/null +++ b/scripts/cve-2021-44228.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +# This script fixes the log4j CVE-2021-44228 vulnerability for instances using Elasticsearch 5.x + +yq() { + docker run --rm -i -v "${PWD}:/workdir" mikefarah/yq:4 "$@" +} + +config() { + SERVICE="$(yq eval '.services.*.image | select(. == "elasticsearch:5*") | path | .[-2]' docker-compose.yml)" + if [ -z "$SERVICE" ]; then + echo "No Elasticsearch 5 image found in docker-compose.yml" + exit 0 + fi +} + +add_var() { + HAS_OPTS="$(yq eval ".services.$SERVICE.environment | .[] | select(. == \"ES_JAVA_OPTS*\")" docker-compose.yml)" + if [ -z "$HAS_OPTS" ]; then + yq -i eval ".services.$SERVICE.environment += \"ES_JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true\"" docker-compose.yml + else + yq -i eval "(.services.$SERVICE.environment | .[] | select(. == \"ES_JAVA_OPTS*\")) += \" -Dlog4j2.formatMsgNoLookups=true\"" docker-compose.yml + fi +} + +proceed() +{ + config + add_var +} + +proceed "$@" diff --git a/setup/env.example b/setup/env.example index fef13b330..ca617a7fe 100644 --- a/setup/env.example +++ b/setup/env.example @@ -39,6 +39,7 @@ UIB_DATE_FORMAT=dd/MM/yyyy EXCEL_DATE_FORMAT=dd/mm/yyyy OPENLAB_BASE_URI=https://openprojects.fab-manager.com +OPENLAB_SSL_VERIFY=true LOG_LEVEL=debug DISK_SPACE_MB_ALERT=1024 diff --git a/setup/upgrade.sh b/setup/upgrade.sh index a0634286d..ba4e6cf67 100644 --- a/setup/upgrade.sh +++ b/setup/upgrade.sh @@ -269,13 +269,13 @@ Options: -p Run the preprocessing command (TODO DEPLOY) -c Provides additional upgrade command, run in the context of the app (TODO DEPLOY) -s Executes a remote script (TODO DEPOY) - -e Adds the environment variable to config/env\n" "$(basename "$0") + -e Adds the environment variable to config/env Return codes: 0 Upgrade terminated successfully 1 Configuration required 2 Aborted by user 3 Version not supported - 4 Unexpected error" 1>&2 + 4 Unexpected error\n" "$(basename "$0")" 1>&2 exit 1 } diff --git a/test/fixtures/open_api_calls_count_tracings.yml b/test/fixtures/open_api_calls_count_tracings.yml deleted file mode 100644 index e69de29bb..000000000 diff --git a/test/integration/events/as_user_test.rb b/test/integration/events/as_user_test.rb index 701a87f57..97f5a33a4 100644 --- a/test/integration/events/as_user_test.rb +++ b/test/integration/events/as_user_test.rb @@ -19,13 +19,8 @@ class Events::AsUserTest < ActionDispatch::IntegrationTest wallet_transactions_count = WalletTransaction.count # Enable the VAT at 19.6% - vat_active = Setting.find_by(name: 'invoice_VAT-active') - vat_active.value = 'true' - vat_active.save! - - vat_rate = Setting.find_by(name: 'invoice_VAT-rate') - vat_rate.value = '19.6' - vat_rate.save! + Setting.set('invoice_VAT-active', true) + Setting.set('invoice_VAT-rate', '19.6') # Reserve the 'radio' event VCR.use_cassette('reserve_event_with_many_prices_and_payment_means') do diff --git a/test/integration/reservations/create_as_admin_test.rb b/test/integration/reservations/create_as_admin_test.rb index 0af1e4a68..a4421dfcd 100644 --- a/test/integration/reservations/create_as_admin_test.rb +++ b/test/integration/reservations/create_as_admin_test.rb @@ -499,7 +499,7 @@ class Reservations::CreateAsAdminTest < ActionDispatch::IntegrationTest # invoice_items invoice_items = InvoiceItem.last(2) - assert(invoice_items.any? { |ii| ii.amount == plan.amount && !ii.subscription.nil? }) + assert(invoice_items.any? { |ii| ii.amount == plan.amount && ii.object_type == Subscription.name }) assert(invoice_items.any? { |ii| ii.amount.zero? }) # invoice assertions diff --git a/test/integration/reservations/create_test.rb b/test/integration/reservations/create_test.rb index 415b9799b..6aea7ab1f 100644 --- a/test/integration/reservations/create_test.rb +++ b/test/integration/reservations/create_test.rb @@ -622,7 +622,7 @@ class Reservations::CreateTest < ActionDispatch::IntegrationTest assert_not_nil subscription_item - subscription = subscription_item.subscription + subscription = subscription_item.object assert_equal subscription_item.amount, plan.amount assert_equal subscription.plan_id, plan.id diff --git a/test/integration/settings_test.rb b/test/integration/settings_test.rb index c0b2c7deb..03decf6fa 100644 --- a/test/integration/settings_test.rb +++ b/test/integration/settings_test.rb @@ -22,7 +22,7 @@ class SettingsTest < ActionDispatch::IntegrationTest assert_equal 'Test Fablab', resp[:setting][:value] # Check record - setting = Setting.find_by_name(resp[:setting][:name]) + setting = Setting.find_by(name: resp[:setting][:name]) assert_not_nil setting, 'setting was not found in database' assert_equal 2, setting.history_values.count, 'all historical values were not found' assert_includes setting.history_values.map(&:value), 'Fab Lab de La Casemate', 'previous parameter was not saved' diff --git a/yarn.lock b/yarn.lock index 35555b727..0b81d2997 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@ampproject/remapping@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" + integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== + dependencies: + "@jridgewell/trace-mapping" "^0.3.0" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" @@ -9,6 +16,13 @@ dependencies: "@babel/highlight" "^7.14.5" +"@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz#8ef4c18e58e801c5c95d3c1c0f2874a2680fadea" @@ -19,47 +33,31 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== -"@babel/core@^7.0.0-0": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" - integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helpers" "^7.14.6" - "@babel/parser" "^7.14.6" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" +"@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" + integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== -"@babel/core@^7.15.0": - version "7.15.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.5.tgz#f8ed9ace730722544609f90c9bb49162dc3bf5b9" - integrity sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg== +"@babel/core@7": + version "7.17.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225" + integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA== dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.15.4" - "@babel/helper-compilation-targets" "^7.15.4" - "@babel/helper-module-transforms" "^7.15.4" - "@babel/helpers" "^7.15.4" - "@babel/parser" "^7.15.5" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.3" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.17.2" + "@babel/parser" "^7.17.3" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.1.2" semver "^6.3.0" - source-map "^0.5.0" "@babel/generator@^7.14.5": version "7.14.5" @@ -70,38 +68,31 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.4.tgz#85acb159a267ca6324f9793986991ee2022a05b0" - integrity sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw== +"@babel/generator@^7.17.3": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200" + integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.17.0" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" - integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== +"@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.16.7" -"@babel/helper-annotate-as-pure@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" - integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== dependencies: - "@babel/types" "^7.15.4" + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" - integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5": +"@babel/helper-compilation-targets@^7.13.0": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== @@ -121,7 +112,17 @@ browserslist "^4.16.6" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.14.6": +"@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.14.5": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg== @@ -133,17 +134,18 @@ "@babel/helper-replace-supers" "^7.14.5" "@babel/helper-split-export-declaration" "^7.14.5" -"@babel/helper-create-class-features-plugin@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e" - integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw== +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" + integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-function-name" "^7.15.4" - "@babel/helper-member-expression-to-functions" "^7.15.4" - "@babel/helper-optimise-call-expression" "^7.15.4" - "@babel/helper-replace-supers" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" "@babel/helper-create-regexp-features-plugin@^7.14.5": version "7.14.5" @@ -153,10 +155,18 @@ "@babel/helper-annotate-as-pure" "^7.14.5" regexpu-core "^4.7.1" -"@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" + integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^5.0.1" + +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" @@ -167,12 +177,19 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" - integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.16.7" + +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== + dependencies: + "@babel/types" "^7.16.7" "@babel/helper-function-name@^7.14.5": version "7.14.5" @@ -183,14 +200,14 @@ "@babel/template" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helper-function-name@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" - integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== dependencies: - "@babel/helper-get-function-arity" "^7.15.4" - "@babel/template" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" "@babel/helper-get-function-arity@^7.14.5": version "7.14.5" @@ -199,12 +216,12 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-get-function-arity@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" - integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.7" "@babel/helper-hoist-variables@^7.14.5": version "7.14.5" @@ -213,12 +230,12 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-hoist-variables@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" - integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.7" "@babel/helper-member-expression-to-functions@^7.14.5": version "7.14.5" @@ -227,54 +244,40 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-member-expression-to-functions@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" - integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA== +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": +"@babel/helper-module-imports@^7.12.13": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== dependencies: "@babel/types" "^7.14.5" -"@babel/helper-module-imports@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" - integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== +"@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" - integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== +"@babel/helper-module-transforms@^7.16.7": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz#3c3b03cc6617e33d68ef5a27a67419ac5199ccd0" + integrity sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA== dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-module-transforms@^7.15.4": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz#7da80c8cbc1f02655d83f8b79d25866afe50d226" - integrity sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw== - dependencies: - "@babel/helper-module-imports" "^7.15.4" - "@babel/helper-replace-supers" "^7.15.4" - "@babel/helper-simple-access" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" - "@babel/helper-validator-identifier" "^7.15.7" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.6" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" "@babel/helper-optimise-call-expression@^7.14.5": version "7.14.5" @@ -283,35 +286,31 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-optimise-call-expression@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171" - integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw== +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-remap-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" - integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-wrap-function" "^7.14.5" - "@babel/types" "^7.14.5" +"@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== -"@babel/helper-remap-async-to-generator@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz#2637c0731e4c90fbf58ac58b50b2b5a192fc970f" - integrity sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ== +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-wrap-function" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" "@babel/helper-replace-supers@^7.14.5": version "7.14.5" @@ -323,43 +322,30 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helper-replace-supers@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a" - integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw== +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.15.4" - "@babel/helper-optimise-call-expression" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-simple-access@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" - integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.16.7" -"@babel/helper-simple-access@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" - integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg== +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" - integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz#707dbdba1f4ad0fa34f9114fc8197aec7d5da2eb" - integrity sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A== - dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" "@babel/helper-split-export-declaration@^7.14.5": version "7.14.5" @@ -368,65 +354,41 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-split-export-declaration@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" - integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.7" -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== -"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== +"@babel/helper-validator-option@^7.14.5", "@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== - -"@babel/helper-wrap-function@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" - integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" -"@babel/helper-wrap-function@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz#6f754b2446cfaf3d612523e6ab8d79c27c3a3de7" - integrity sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw== +"@babel/helpers@^7.17.2": + version "7.17.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" + integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== dependencies: - "@babel/helper-function-name" "^7.15.4" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/helpers@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" - integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== - dependencies: - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helpers@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" - integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ== - dependencies: - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.0" + "@babel/types" "^7.17.0" "@babel/highlight@^7.14.5": version "7.14.5" @@ -437,32 +399,48 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.14.5", "@babel/parser@^7.14.6": +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.14.5": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.6.tgz#d85cc68ca3cac84eae384c06f032921f5227f4b2" integrity sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ== -"@babel/parser@^7.15.4", "@babel/parser@^7.15.5": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.7.tgz#0c3ed4a2eb07b165dfa85b3cc45c727334c4edae" - integrity sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g== +"@babel/parser@^7.16.7", "@babel/parser@^7.17.3": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" + integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e" - integrity sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-async-generator-functions@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz#f82aabe96c135d2ceaa917feb9f5fca31635277e" - integrity sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.15.4" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + +"@babel/plugin-proposal-async-generator-functions@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-class-properties@^7.14.5": @@ -473,64 +451,72 @@ "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-class-static-block@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz#3e7ca6128453c089e8b477a99f970c63fc1cb8d7" - integrity sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA== +"@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== dependencies: - "@babel/helper-create-class-features-plugin" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" + integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.17.6" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-dynamic-import@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" - integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" - integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" - integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" - integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" - integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" - integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.14.7", "@babel/plugin-proposal-object-rest-spread@^7.15.6": +"@babel/plugin-proposal-object-rest-spread@^7.15.6": version "7.15.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz#ef68050c8703d07b25af402cb96cf7f34a68ed11" integrity sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg== @@ -541,42 +527,61 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.15.4" -"@babel/plugin-proposal-optional-catch-binding@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" - integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== +"@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" + integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/compat-data" "^7.17.0" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" - integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== +"@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" - integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== +"@babel/plugin-proposal-private-methods@^7.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.10" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-private-property-in-object@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz#55c5e3b4d0261fd44fe637e3f624cfb0f484e3e5" - integrity sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA== +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-create-class-features-plugin" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== @@ -626,12 +631,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201" - integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw== +"@babel/plugin-syntax-jsx@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" + integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" @@ -689,62 +694,63 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716" - integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q== +"@babel/plugin-syntax-typescript@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" + integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-arrow-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" - integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== +"@babel/plugin-transform-arrow-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" - integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== +"@babel/plugin-transform-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" -"@babel/plugin-transform-block-scoped-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" - integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-block-scoping@^7.15.3": - version "7.15.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf" - integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q== +"@babel/plugin-transform-block-scoping@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-classes@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz#50aee17aaf7f332ae44e3bce4c2e10534d5d3bf1" - integrity sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg== +"@babel/plugin-transform-classes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-function-name" "^7.15.4" - "@babel/helper-optimise-call-expression" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" - integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== +"@babel/plugin-transform-computed-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-destructuring@^7.14.7": version "7.14.7" @@ -753,7 +759,22 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": +"@babel/plugin-transform-destructuring@^7.16.7": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz#c445f75819641788a27a0a3a759d9df911df6abc" + integrity sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-dotall-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-dotall-regex@^7.4.4": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== @@ -761,109 +782,110 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-duplicate-keys@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" - integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-exponentiation-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" - integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-for-of@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz#25c62cce2718cfb29715f416e75d5263fb36a8c2" - integrity sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA== +"@babel/plugin-transform-for-of@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" - integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" - integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== +"@babel/plugin-transform-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-member-expression-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" - integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-modules-amd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" - integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1" - integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA== +"@babel/plugin-transform-modules-commonjs@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" + integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== dependencies: - "@babel/helper-module-transforms" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.15.4" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz#b42890c7349a78c827719f1d2d0cd38c7d268132" - integrity sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw== +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== dependencies: - "@babel/helper-hoist-variables" "^7.15.4" - "@babel/helper-module-transforms" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.9" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" - integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" - integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" -"@babel/plugin-transform-new-target@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" - integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== +"@babel/plugin-transform-new-target@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-object-super@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" - integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" "@babel/plugin-transform-parameters@^7.15.4": version "7.15.4" @@ -872,157 +894,165 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" - integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== +"@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-display-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz#baa92d15c4570411301a85a74c13534873885b65" - integrity sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ== +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-jsx-development@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz#1a6c73e2f7ed2c42eebc3d2ad60b0c7494fcb9af" - integrity sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ== +"@babel/plugin-transform-react-display-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" + integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== dependencies: - "@babel/plugin-transform-react-jsx" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-jsx@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz#39749f0ee1efd8a1bd729152cf5f78f1d247a44a" - integrity sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q== +"@babel/plugin-transform-react-jsx-development@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" + integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-jsx" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/plugin-transform-react-jsx" "^7.16.7" -"@babel/plugin-transform-react-pure-annotations@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz#18de612b84021e3a9802cbc212c9d9f46d0d11fc" - integrity sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g== +"@babel/plugin-transform-react-jsx@^7.16.7": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" + integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.16.7" + "@babel/types" "^7.17.0" -"@babel/plugin-transform-regenerator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" - integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== +"@babel/plugin-transform-react-pure-annotations@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" + integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-regenerator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" - integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-runtime@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.0.tgz#d3aa650d11678ca76ce294071fda53d7804183b3" - integrity sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw== +"@babel/plugin-transform-runtime@7": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz#0a2e08b5e2b2d95c4b1d3b3371a2180617455b70" + integrity sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A== dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" - babel-plugin-polyfill-regenerator "^0.2.2" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" - integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-spread@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" - integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== +"@babel/plugin-transform-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@babel/plugin-transform-sticky-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" - integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-template-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" - integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== +"@babel/plugin-transform-template-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typeof-symbol@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" - integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typescript@^7.14.5": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz#6e9c2d98da2507ebe0a883b100cde3c7279df36c" - integrity sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA== +"@babel/plugin-transform-typescript@^7.16.7": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" + integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.6" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-typescript" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-typescript" "^7.16.7" -"@babel/plugin-transform-unicode-escapes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" - integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-unicode-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" - integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/preset-env@^7.15.0", "@babel/preset-env@^7.15.6": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.6.tgz#0f3898db9d63d320f21b17380d8462779de57659" - integrity sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw== +"@babel/preset-env@7": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-compilation-targets" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4" - "@babel/plugin-proposal-async-generator-functions" "^7.15.4" - "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-class-static-block" "^7.15.4" - "@babel/plugin-proposal-dynamic-import" "^7.14.5" - "@babel/plugin-proposal-export-namespace-from" "^7.14.5" - "@babel/plugin-proposal-json-strings" "^7.14.5" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" - "@babel/plugin-proposal-numeric-separator" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.15.6" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-private-methods" "^7.14.5" - "@babel/plugin-proposal-private-property-in-object" "^7.15.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" + "@babel/compat-data" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.8" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" @@ -1037,50 +1067,50 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.14.5" - "@babel/plugin-transform-async-to-generator" "^7.14.5" - "@babel/plugin-transform-block-scoped-functions" "^7.14.5" - "@babel/plugin-transform-block-scoping" "^7.15.3" - "@babel/plugin-transform-classes" "^7.15.4" - "@babel/plugin-transform-computed-properties" "^7.14.5" - "@babel/plugin-transform-destructuring" "^7.14.7" - "@babel/plugin-transform-dotall-regex" "^7.14.5" - "@babel/plugin-transform-duplicate-keys" "^7.14.5" - "@babel/plugin-transform-exponentiation-operator" "^7.14.5" - "@babel/plugin-transform-for-of" "^7.15.4" - "@babel/plugin-transform-function-name" "^7.14.5" - "@babel/plugin-transform-literals" "^7.14.5" - "@babel/plugin-transform-member-expression-literals" "^7.14.5" - "@babel/plugin-transform-modules-amd" "^7.14.5" - "@babel/plugin-transform-modules-commonjs" "^7.15.4" - "@babel/plugin-transform-modules-systemjs" "^7.15.4" - "@babel/plugin-transform-modules-umd" "^7.14.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9" - "@babel/plugin-transform-new-target" "^7.14.5" - "@babel/plugin-transform-object-super" "^7.14.5" - "@babel/plugin-transform-parameters" "^7.15.4" - "@babel/plugin-transform-property-literals" "^7.14.5" - "@babel/plugin-transform-regenerator" "^7.14.5" - "@babel/plugin-transform-reserved-words" "^7.14.5" - "@babel/plugin-transform-shorthand-properties" "^7.14.5" - "@babel/plugin-transform-spread" "^7.14.6" - "@babel/plugin-transform-sticky-regex" "^7.14.5" - "@babel/plugin-transform-template-literals" "^7.14.5" - "@babel/plugin-transform-typeof-symbol" "^7.14.5" - "@babel/plugin-transform-unicode-escapes" "^7.14.5" - "@babel/plugin-transform-unicode-regex" "^7.14.5" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.15.6" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" - babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.16.0" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.8" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.8" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.20.2" semver "^6.3.0" -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -1089,37 +1119,37 @@ esutils "^2.0.2" "@babel/preset-react@^7.12.1": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c" - integrity sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" + integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-transform-react-display-name" "^7.14.5" - "@babel/plugin-transform-react-jsx" "^7.14.5" - "@babel/plugin-transform-react-jsx-development" "^7.14.5" - "@babel/plugin-transform-react-pure-annotations" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-react-display-name" "^7.16.7" + "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/plugin-transform-react-jsx-development" "^7.16.7" + "@babel/plugin-transform-react-pure-annotations" "^7.16.7" -"@babel/preset-typescript@^7.12.1": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz#aa98de119cf9852b79511f19e7f44a2d379bcce0" - integrity sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw== +"@babel/preset-typescript@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" + integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-transform-typescript" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-typescript" "^7.16.7" -"@babel/runtime@^7.12.0", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.12.0", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.15.3": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" - integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== +"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2": + version "7.17.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" + integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== dependencies: regenerator-runtime "^0.13.4" @@ -1132,14 +1162,14 @@ "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/template@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" - integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== +"@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5": version "7.14.5" @@ -1156,22 +1186,31 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" - integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== +"@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" + integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.15.4" - "@babel/helper-function-name" "^7.15.4" - "@babel/helper-hoist-variables" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" - "@babel/parser" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.3" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.17.3" + "@babel/types" "^7.17.0" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.14.5", "@babel/types@^7.4.4": +"@babel/types@^7.14.5", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@babel/types@^7.4.4": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== @@ -1179,23 +1218,15 @@ "@babel/helper-validator-identifier" "^7.14.5" to-fast-properties "^2.0.0" -"@babel/types@^7.15.4", "@babel/types@^7.15.6": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" - integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== - dependencies: - "@babel/helper-validator-identifier" "^7.14.9" - to-fast-properties "^2.0.0" - "@claviska/jquery-minicolors@^2.3.5": version "2.3.5" resolved "https://registry.yarnpkg.com/@claviska/jquery-minicolors/-/jquery-minicolors-2.3.5.tgz#b802fcf2a7b75f169e68a7321d8a8d03f9fcd17c" integrity sha512-LpiN8hyqRPYB2tEzFD4lI54GxKHQXhzrJMnKnsumElYxjkjbdAPmiIm+1k/Mkfn92HepL7t9uaK5iQSFP/19aw== -"@csstools/convert-colors@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" - integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== +"@discoveryjs/json-ext@^0.5.0": + version "0.5.6" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f" + integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA== "@emotion/cache@^11.4.0": version "11.4.0" @@ -1262,11 +1293,97 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@eslint/eslintrc@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.1.tgz#8b5e1c49f4077235516bc9ec7d41378c0f69b8c6" + integrity sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.3.1" + globals "^13.9.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@formatjs/ecma402-abstract@1.11.3": + version "1.11.3" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.3.tgz#f25276dfd4ef3dac90da667c3961d8aa9732e384" + integrity sha512-kP/Buv5vVFMAYLHNvvUzr0lwRTU0u2WTy44Tqwku1X3C3lJ5dKqDCYVqA8wL+Y19Bq+MwHgxqd5FZJRCIsLRyQ== + dependencies: + "@formatjs/intl-localematcher" "0.2.24" + tslib "^2.1.0" + +"@formatjs/fast-memoize@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz#e6f5aee2e4fd0ca5edba6eba7668e2d855e0fc21" + integrity sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg== + dependencies: + tslib "^2.1.0" + +"@formatjs/icu-messageformat-parser@2.0.18": + version "2.0.18" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.18.tgz#b09e8f16b88e988fd125e7c5810300e8a6dd2c42" + integrity sha512-vquIzsAJJmZ5jWVH8dEgUKcbG4yu3KqtyPet+q35SW5reLOvblkfeCXTRW2TpIwNXzdVqsJBwjbTiRiSU9JxwQ== + dependencies: + "@formatjs/ecma402-abstract" "1.11.3" + "@formatjs/icu-skeleton-parser" "1.3.5" + tslib "^2.1.0" + +"@formatjs/icu-skeleton-parser@1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.5.tgz#babc93a1c36383cf87cbb3d2f2145d26c2f7cb40" + integrity sha512-Nhyo2/6kG7ZfgeEfo02sxviOuBcvtzH6SYUharj3DLCDJH3A/4OxkKcmx/2PWGX4bc6iSieh+FA94CsKDxnZBQ== + dependencies: + "@formatjs/ecma402-abstract" "1.11.3" + tslib "^2.1.0" + +"@formatjs/intl-localematcher@0.2.24": + version "0.2.24" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.24.tgz#b49fd753c0f54421f26a3c1d0e9cf98a3966e78f" + integrity sha512-K/HRGo6EMnCbhpth/y3u4rW4aXkmQNqRe1L2G+Y5jNr3v0gYhvaucV8WixNju/INAMbPBlbsRBRo/nfjnoOnxQ== + dependencies: + tslib "^2.1.0" + "@fortawesome/fontawesome-free@5.14.0": version "5.14.0" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.14.0.tgz#a371e91029ebf265015e64f81bfbf7d228c9681f" integrity sha512-OfdMsF+ZQgdKHP9jUbmDcRrP0eX90XXrsXIdyjLbkmSBzmMXPABB8eobUJtivaupucYaByz6WNe1PI1JuYm3qA== +"@humanwhocodes/config-array@^0.9.2": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" + integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" + integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.11" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" + integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== + +"@jridgewell/trace-mapping@^0.3.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" + integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@lyracom/embedded-form-glue@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@lyracom/embedded-form-glue/-/embedded-form-glue-0.3.3.tgz#e1f1450a67678526da03500f13743fd4d749c734" @@ -1295,18 +1412,10 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@pmmmwh/react-refresh-webpack-plugin@^0.5.1": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.1.tgz#7e98d6f22c360e1dd00909f5fa9d0f6ecc263292" - integrity sha512-ccap6o7+y5L8cnvkZ9h8UXCGyy2DqtwCD+/N3Yru6lxMvcdkPKtdx13qd7sAC9s5qZktOmWf9lfUjsGOvSdYhg== +"@pmmmwh/react-refresh-webpack-plugin@^0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.4.tgz#df0d0d855fc527db48aac93c218a0bf4ada41f99" + integrity sha512-zZbZeHQDnoTlt2AF+diQT0wsSXpvWiaIOZwBRdltNFhG1+I3ozyaw7U/nBiUwyJ0D+zwdXp0E3bWOl38Ag2BMw== dependencies: ansi-html-community "^0.0.8" common-path-prefix "^3.0.0" @@ -1323,50 +1432,6 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9" integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA== -"@rails/webpacker@5.4.3": - version "5.4.3" - resolved "https://registry.yarnpkg.com/@rails/webpacker/-/webpacker-5.4.3.tgz#cfe2d8faffe7db5001bad50a1534408b4f2efb2f" - integrity sha512-tEM8tpUtfx6FxKwcuQ9+v6pzgqM5LeAdhT6IJ4Te3BPKFO1xrGrXugqeRuZ+gE8ASDZRTOK6yuQkapOpuX5JdA== - dependencies: - "@babel/core" "^7.15.0" - "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.14.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.14.7" - "@babel/plugin-transform-regenerator" "^7.14.5" - "@babel/plugin-transform-runtime" "^7.15.0" - "@babel/preset-env" "^7.15.0" - "@babel/runtime" "^7.15.3" - babel-loader "^8.2.2" - babel-plugin-dynamic-import-node "^2.3.3" - babel-plugin-macros "^2.8.0" - case-sensitive-paths-webpack-plugin "^2.4.0" - compression-webpack-plugin "^4.0.1" - core-js "^3.16.2" - css-loader "^3.6.0" - file-loader "^6.2.0" - flatted "^3.2.2" - glob "^7.1.7" - js-yaml "^3.14.1" - mini-css-extract-plugin "^0.9.0" - optimize-css-assets-webpack-plugin "^5.0.8" - path-complete-extname "^1.0.0" - pnp-webpack-plugin "^1.7.0" - postcss-flexbugs-fixes "^4.2.1" - postcss-import "^12.0.1" - postcss-loader "^3.0.0" - postcss-preset-env "^6.7.0" - postcss-safe-parser "^4.0.2" - regenerator-runtime "^0.13.9" - sass "^1.38.0" - sass-loader "10.1.1" - style-loader "^1.3.0" - terser-webpack-plugin "^4.2.3" - webpack "^4.46.0" - webpack-assets-manifest "^3.1.1" - webpack-cli "^3.3.12" - webpack-sources "^1.4.3" - "@stripe/react-stripe-js@^1.4.0": version "1.4.1" resolved "https://registry.yarnpkg.com/@stripe/react-stripe-js/-/react-stripe-js-1.4.1.tgz#884d59286fff00ba77389b32c045516f65d7a340" @@ -1587,24 +1652,121 @@ "@tiptap/extension-strike" "^2.0.0-beta.27" "@tiptap/extension-text" "^2.0.0-beta.15" +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + "@types/angular@^1.6.39": version "1.8.1" resolved "https://registry.yarnpkg.com/@types/angular/-/angular-1.8.1.tgz#940b16476adff7b66608aae778e5e9f1c57ab847" integrity sha512-8zEjTC3gpkva6/dbUkiSxIUGUxYm9HD/pJJ0lbqfEM2TWqi/3vs4VtgoFxVXt5bmuJ+6G2caO2HaMD+NzB1VwA== -"@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== +"@types/angular@^1.7.3": + version "1.8.4" + resolved "https://registry.yarnpkg.com/@types/angular/-/angular-1.8.4.tgz#a2cc163e508389c51d4c4119ebff6b9395cec472" + integrity sha512-wPS/ncJWhyxJsndsW1B6Ta8D4mi97x1yItSu+rkLDytU3oRIh2CFAjMuJceYwFAh9+DIohndWM0QBA9OU2Hv0g== + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== dependencies: - "@types/minimatch" "*" + "@types/connect" "*" "@types/node" "*" -"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7": +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" + integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.4.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.1.tgz#c48251553e8759db9e656de3efc846954ac32304" + integrity sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/eslint@^7.28.2": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" + integrity sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": + version "4.17.28" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" + integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/http-proxy@^1.17.8": + version "1.17.8" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.8.tgz#968c66903e7e42b483608030ee85800f22d03f55" + integrity sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA== + dependencies: + "@types/node" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + +"@types/json-schema@^7.0.5": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/lodash.frompairs@^4.0.5": version "4.0.6" resolved "https://registry.yarnpkg.com/@types/lodash.frompairs/-/lodash.frompairs-4.0.6.tgz#09b082c10fa753dc2001302b75ac79ca1e0a9ea3" @@ -1617,10 +1779,10 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.170.tgz#0d67711d4bf7f4ca5147e9091b847479b87925d6" integrity sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q== -"@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== "@types/node@*": version "15.12.4" @@ -1642,6 +1804,11 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== +"@types/prop-types@^15.7.2": + version "15.7.4" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" + integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== + "@types/prosemirror-commands@*", "@types/prosemirror-commands@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@types/prosemirror-commands/-/prosemirror-commands-1.0.4.tgz#d08551415127d93ae62e7239d30db0b5e7208e22" @@ -1725,10 +1892,15 @@ "@types/prosemirror-state" "*" "@types/prosemirror-transform" "*" -"@types/q@^1.5.1": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" - integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react-dom@^17.0.3": version "17.0.8" @@ -1746,231 +1918,274 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/retry@^0.12.0": + version "0.12.1" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" + integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== + "@types/scheduler@*": version "0.16.1" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== -"@typescript-eslint/eslint-plugin@^4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.1.tgz#c045e440196ae45464e08e20c38aff5c3a825947" - integrity sha512-9yfcNpDaNGQ6/LQOX/KhUFTR1sCKH+PBr234k6hI9XJ0VP5UqGxap0AnNwBnWFk1MNyWBylJH9ZkzBXC+5akZQ== +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== dependencies: - "@typescript-eslint/experimental-utils" "4.28.1" - "@typescript-eslint/scope-manager" "4.28.1" - debug "^4.3.1" + "@types/express" "*" + +"@types/serve-static@*": + version "1.13.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" + integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/ws@^8.2.2": + version "8.5.2" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.2.tgz#77e0c2e360e9579da930ffcfa53c5975ea3bdd26" + integrity sha512-VXI82ykONr5tacHEojnErTQk+KQSoYbW1NB6iz6wUwrNd+BqfkfggQNoNdCqhJSzbNumShPERbM+Pc5zpfhlbw== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@^5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.17.0.tgz#704eb4e75039000531255672bf1c85ee85cf1d67" + integrity sha512-qVstvQilEd89HJk3qcbKt/zZrfBZ+9h2ynpAGlWjWiizA7m/MtLT9RoX6gjtpE500vfIg8jogAkDzdCxbsFASQ== + dependencies: + "@typescript-eslint/scope-manager" "5.17.0" + "@typescript-eslint/type-utils" "5.17.0" + "@typescript-eslint/utils" "5.17.0" + debug "^4.3.2" functional-red-black-tree "^1.0.1" - regexpp "^3.1.0" + ignore "^5.1.8" + regexpp "^3.2.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.1.tgz#3869489dcca3c18523c46018b8996e15948dbadc" - integrity sha512-n8/ggadrZ+uyrfrSEchx3jgODdmcx7MzVM2sI3cTpI/YlfSm0+9HEUaWw3aQn2urL2KYlWYMDgn45iLfjDYB+Q== +"@typescript-eslint/parser@^5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.17.0.tgz#7def77d5bcd8458d12d52909118cf3f0a45f89d5" + integrity sha512-aRzW9Jg5Rlj2t2/crzhA2f23SIYFlF9mchGudyP0uiD6SenIxzKoLjwzHbafgHn39dNV/TV7xwQkLfFTZlJ4ig== dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.28.1" - "@typescript-eslint/types" "4.28.1" - "@typescript-eslint/typescript-estree" "4.28.1" + "@typescript-eslint/scope-manager" "5.17.0" + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/typescript-estree" "5.17.0" + debug "^4.3.2" + +"@typescript-eslint/scope-manager@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz#4cea7d0e0bc0e79eb60cad431c89120987c3f952" + integrity sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w== + dependencies: + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/visitor-keys" "5.17.0" + +"@typescript-eslint/type-utils@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.17.0.tgz#1c4549d68c89877662224aabb29fbbebf5fc9672" + integrity sha512-3hU0RynUIlEuqMJA7dragb0/75gZmwNwFf/QJokWzPehTZousP/MNifVSgjxNcDCkM5HI2K22TjQWUmmHUINSg== + dependencies: + "@typescript-eslint/utils" "5.17.0" + debug "^4.3.2" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.17.0.tgz#861ec9e669ffa2aa9b873dd4d28d9b1ce26d216f" + integrity sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw== + +"@typescript-eslint/typescript-estree@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz#a7cba7dfc8f9cc2ac78c18584e684507df4f2488" + integrity sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg== + dependencies: + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/visitor-keys" "5.17.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.17.0.tgz#549a9e1d491c6ccd3624bc3c1b098f5cfb45f306" + integrity sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.17.0" + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/typescript-estree" "5.17.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@^4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.1.tgz#5181b81658414f47291452c15bf6cd44a32f85bd" - integrity sha512-UjrMsgnhQIIK82hXGaD+MCN8IfORS1CbMdu7VlZbYa8LCZtbZjJA26De4IPQB7XYZbL8gJ99KWNj0l6WD0guJg== +"@typescript-eslint/visitor-keys@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz#52daae45c61b0211b4c81b53a71841911e479128" + integrity sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA== dependencies: - "@typescript-eslint/scope-manager" "4.28.1" - "@typescript-eslint/types" "4.28.1" - "@typescript-eslint/typescript-estree" "4.28.1" - debug "^4.3.1" + "@typescript-eslint/types" "5.17.0" + eslint-visitor-keys "^3.0.0" -"@typescript-eslint/scope-manager@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.1.tgz#fd3c20627cdc12933f6d98b386940d8d0ce8a991" - integrity sha512-o95bvGKfss6705x7jFGDyS7trAORTy57lwJ+VsYwil/lOUxKQ9tA7Suuq+ciMhJc/1qPwB3XE2DKh9wubW8YYA== +"@uirouter/angularjs@1.0.30": + version "1.0.30" + resolved "https://registry.yarnpkg.com/@uirouter/angularjs/-/angularjs-1.0.30.tgz#5cea4076300ce5ec6926e2c6e3707745753baefc" + integrity sha512-qkc3RFZc91S5K0gc/QVAXc9LGDPXjR04vDgG/11j8+yyZEuQojXxKxdLhKIepiPzqLmGRVqzBmBc27gtqaEeZg== dependencies: - "@typescript-eslint/types" "4.28.1" - "@typescript-eslint/visitor-keys" "4.28.1" + "@uirouter/core" "6.0.8" -"@typescript-eslint/types@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.1.tgz#d0f2ecbef3684634db357b9bbfc97b94b828f83f" - integrity sha512-4z+knEihcyX7blAGi7O3Fm3O6YRCP+r56NJFMNGsmtdw+NCdpG5SgNz427LS9nQkRVTswZLhz484hakQwB8RRg== +"@uirouter/core@6.0.8": + version "6.0.8" + resolved "https://registry.yarnpkg.com/@uirouter/core/-/core-6.0.8.tgz#a1e919a4743be729751aafc4ce353d0dc0ffd26c" + integrity sha512-Gc/BAW47i4L54p8dqYCJJZuv2s3tqlXQ0fvl6Zp2xrblELPVfxmjnc0eurx3XwfQdaqm3T6uls6tQKkof/4QMw== -"@typescript-eslint/typescript-estree@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz#af882ae41740d1f268e38b4d0fad21e7e8d86a81" - integrity sha512-GhKxmC4sHXxHGJv8e8egAZeTZ6HI4mLU6S7FUzvFOtsk7ZIDN1ksA9r9DyOgNqowA9yAtZXV0Uiap61bIO81FQ== +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== dependencies: - "@typescript-eslint/types" "4.28.1" - "@typescript-eslint/visitor-keys" "4.28.1" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" -"@typescript-eslint/visitor-keys@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz#162a515ee255f18a6068edc26df793cdc1ec9157" - integrity sha512-K4HMrdFqr9PFquPu178SaSb92CaWe2yErXyPumc8cYWxFmhgJsNY9eSePmO05j0JhBvf2Cdhptd6E6Yv9HVHcg== +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== dependencies: - "@typescript-eslint/types" "4.28.1" - eslint-visitor-keys "^2.0.0" + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" -"@uirouter/angularjs@0.4": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@uirouter/angularjs/-/angularjs-0.4.3.tgz#7e2630c59b2bd69ca485ff124f53b0169edddf39" - integrity sha512-jLmZ+VcsvS63E01wJWEqNLND6/6Ju9dZP6t21T+v6q8s9+Xzr8RX6QrrnRt35S0ARugFwJxFlmNFZSIef3jvDw== +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== dependencies: - angular "^1.0.8" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" + "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== +"@webpack-cli/configtest@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.1.tgz#9f53b1b7946a6efc2a749095a4f450e2932e8356" + integrity sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg== + +"@webpack-cli/info@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.1.tgz#2360ea1710cbbb97ff156a3f0f24556e0fc1ebea" + integrity sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.6.1": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.1.tgz#0de2875ac31b46b6c5bb1ae0a7d7f0ba5678dffe" + integrity sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -1999,20 +2214,20 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-jsx@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== -acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== adjust-sourcemap-loader@^4.0.0: version "4.0.0" @@ -2030,17 +2245,26 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: +ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2050,10 +2274,15 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= +ajv@^8.0.0, ajv@^8.8.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.10.0.tgz#e573f719bd3af069017e3b66538ab968d040e54d" + integrity sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" angular-animate@1.7: version "1.7.9" @@ -2088,11 +2317,6 @@ angular-cookies@1.7: resolved "https://registry.yarnpkg.com/angular-cookies/-/angular-cookies-1.7.9.tgz#0f0cd2a9d1c81e5b8d6c6711d41f0909f9d0b8e0" integrity sha512-3eRq/aPrtCZKDWQnc3nW3sFoMbLiHkCkyDF2O9u7VXnqvVsUPaipk5R1ZqahgcSQHQrN/F5IU4T4nrz52qAZmA== -angular-google-analytics@1.1: - version "1.1.8" - resolved "https://registry.yarnpkg.com/angular-google-analytics/-/angular-google-analytics-1.1.8.tgz#e497926c0f77cd6eec0c0cbdf0b20e58938cf8a0" - integrity sha1-5JeSbA93zW7sDAy98LIOWJOM+KA= - "angular-growl-v2@https://github.com/JanStevens/angular-growl-2.git#0.7.9": version "0.7.9" resolved "https://github.com/JanStevens/angular-growl-2.git#2a3a40e01419af879f80f582baaeceef3408e295" @@ -2228,49 +2452,27 @@ angular-xeditable@0.10: dependencies: angular "~1.x" -angular@1.8, angular@>=1.5, angular@>=1.5.0, angular@>=1.8.0, angular@^1.0.8, angular@^1.8.0, angular@~1.x: +angular@1.8, angular@>=1.5, angular@>=1.5.0, angular@>=1.8.0, angular@^1.8.0, angular@~1.x: version "1.8.2" resolved "https://registry.yarnpkg.com/angular/-/angular-1.8.2.tgz#5983bbb5a9fa63e213cb7749199e0d352de3a2f1" integrity sha512-IauMOej2xEe7/7Ennahkbb5qd/HFADiNuLSESz9Q27inmi32zB0lnAsFeLEWcox3Gd1F6YhNd1CP7/9IukJ0Gw== -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - ansi-html-community@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -2284,14 +2486,6 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -2300,32 +2494,10 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-flatten@1.1.1: version "1.1.1" @@ -2337,7 +2509,7 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.0.3, array-includes@^3.1.2, array-includes@^3.1.3: +array-includes@^3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== @@ -2348,84 +2520,49 @@ array-includes@^3.0.3, array-includes@^3.1.2, array-includes@^3.1.3: get-intrinsic "^1.1.1" is-string "^1.0.5" -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= +array-includes@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" + integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== dependencies: - array-uniq "^1.0.1" + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + is-string "^1.0.7" array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= +array.prototype.flat@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" + integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -array.prototype.flat@^1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" - integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== +array.prototype.flatmap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446" + integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA== dependencies: call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.19.0" -array.prototype.flatmap@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" - integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== +assert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" + integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - function-bind "^1.1.1" - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + es6-object-assign "^1.1.0" + is-nan "^1.2.1" + object-is "^1.0.1" + util "^0.12.0" async@^2.6.2: version "2.6.3" @@ -2434,34 +2571,10 @@ async@^2.6.2: dependencies: lodash "^4.17.14" -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -auto-ngtemplate-loader@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/auto-ngtemplate-loader/-/auto-ngtemplate-loader-3.1.0.tgz#2b71b8943c976d64e08a2ca84ca85beb2579e6d2" - integrity sha512-HUvEuVZ45EW74ejU2H4zgSRxKdpGgtOIt619g9gwZGHlaRLsCwA50HiH0JcC968j6mbBmijV5fZgLSLlItaltA== - dependencies: - html-loader "~1.3.0" - loader-utils "~2.0.0" - lodash "~4.17.20" - ngtemplate-loader "~2.1.0" - var-validator "0.0.3" - -autoprefixer@^9.6.1: - version "9.8.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" - integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - colorette "^1.2.1" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== axios@^0.21.2: version "0.21.2" @@ -2470,10 +2583,10 @@ axios@^0.21.2: dependencies: follow-redirects "^1.14.0" -babel-loader@^8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" - integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== +babel-loader@^8.2.3: + version "8.2.3" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.3.tgz#8986b40f1a64cacfcb4b8429320085ef68b1342d" + integrity sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw== dependencies: find-cache-dir "^3.3.1" loader-utils "^1.4.0" @@ -2487,38 +2600,38 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-macros@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" - integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== dependencies: - "@babel/runtime" "^7.7.2" - cosmiconfig "^6.0.0" - resolve "^1.12.0" + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== dependencies: "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.2" + "@babel/helper-define-polyfill-provider" "^0.3.1" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz#72add68cf08a8bf139ba6e6dfc0b1d504098e57b" - integrity sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g== +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.14.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" + "@babel/helper-define-polyfill-provider" "^0.3.1" babel-plugin-transform-react-remove-prop-types@^0.4.24: version "0.4.24" @@ -2530,24 +2643,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -2558,38 +2653,11 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -2618,12 +2686,17 @@ bonjour@^3.5.0: multicast-dns "^6.0.1" multicast-dns-service-types "^1.1.0" -boolbase@^1.0.0, boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -bootstrap-sass@3.4.1, bootstrap-sass@>=3.4.1: +bootstrap-sass@3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.4.3.tgz#742cc8f4286303ae9fe8e4c95237321eae73766c" + integrity sha512-vPgFnGMp1jWZZupOND65WS6mkR8rxhJxndT/AcMbqcq1hHMdkcH4sMPhznLzzoHOHkSCrd6J9F8pWBriPCKP2Q== + +bootstrap-sass@>=3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.4.1.tgz#6843c73b1c258a0ac5cb2cc6f6f5285b664a8e9a" integrity sha512-p5rxsK/IyEDQm2CwiHxxUi0MZZtvVFbhWmyMOt4lLkA4bujDA1TGoKT0i1FKIWiugAdP+kK8T5KMDFIKQCLYIA== @@ -2641,22 +2714,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -2664,73 +2721,18 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.17.5, browserslist@^4.19.1: + version "4.20.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.0.tgz#35951e3541078c125d36df76056e94738a52ebe9" + integrity sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ== dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" + caniuse-lite "^1.0.30001313" + electron-to-chromium "^1.4.76" + escalade "^3.1.1" + node-releases "^2.0.2" + picocolors "^1.0.0" -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.6.4: +browserslist@^4.16.6: version "4.16.6" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== @@ -2741,45 +2743,22 @@ browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4 escalade "^3.1.1" node-releases "^1.1.71" -browserslist@^4.17.1: - version "4.17.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.2.tgz#aa15dbd2fab399a399fe4df601bb09363c5458a6" - integrity sha512-jSDZyqJmkKMEMi7SZAgX5UltFdR5NAO43vY0AwTpu4X3sGH7GLLQ83KiUomgrnvZRCeW0yPPnKqnxPqQOER9zQ== - dependencies: - caniuse-lite "^1.0.30001261" - electron-to-chromium "^1.3.854" - escalade "^3.1.1" - nanocolors "^0.2.12" - node-releases "^1.1.76" - buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-indexof@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== +builtins@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-4.1.0.tgz#1edd016dd91ce771a1ed6fc3b2b71fb918953250" + integrity sha512-1bPRZQtmKaO6h7qV1YHXNtr6nCK28k0Zo95KM4dXfILcZZwoHJBN1m3lfLv9LPkcOZlrSr+J1bzMaZFO98Yq0w== dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + semver "^7.0.0" bytes@3.0.0: version "3.0.0" @@ -2791,65 +2770,6 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cacache@^15.0.5: - version "15.2.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389" - integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw== - dependencies: - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -2858,25 +2778,6 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2890,11 +2791,6 @@ camel-case@^4.1.1: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -2905,17 +2801,17 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001261: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001313: + version "1.0.30001314" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001314.tgz#65c7f9fb7e4594fca0a333bec1d8939662377596" + integrity sha512-0zaSO+TnCHtHJIbpLroX7nsD+vYuOVjl3uzFbJO1wMVbuveJA0RK2WcQA9ZUIOiO0/ArMiMgHJLxfEZhQiC0kw== + +caniuse-lite@^1.0.30001219: version "1.0.30001296" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz" integrity sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q== -case-sensitive-paths-webpack-plugin@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" - integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== - -chalk@^2.0, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2924,28 +2820,23 @@ chalk@^2.0, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== +chalk@^4.0, chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - checklist-model@0.2: version "0.2.4" resolved "https://registry.yarnpkg.com/checklist-model/-/checklist-model-0.2.4.tgz#123edfb21c338db2e9f8d5525348d9df3ce6b5a1" integrity sha1-Ej7fshwzjbLp+NVSU0jZ3zzmtaE= -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -2957,62 +2848,15 @@ checklist-model@0.2: optionalDependencies: fsevents "~2.3.2" -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - clean-css@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + version "4.2.4" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" + integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== dependencies: source-map "~0.6.0" @@ -3021,50 +2865,21 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: - restore-cursor "^3.1.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" codemirror@^5.58.2: version "5.62.0" resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.62.0.tgz#e9ecd012e6f9eaf2e05ff4a449ff750f51619e22" integrity sha512-Xnl3304iCc8nyVZuRkzDVVwc794uc9QNX0UcPGeNic1fbzkSrO4l4GVXho9tRNKBgPYZXgocUqXyfIv3BILhCQ== -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.1: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -3083,32 +2898,26 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" - integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" +colord@^2.9.1: + version "2.9.2" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1" + integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== -color@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" - integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.4" - -colorette@^1.2.1, colorette@^1.2.2: +colorette@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== +colorette@^2.0.10, colorette@^2.0.14: + version "2.0.16" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" + integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -3119,6 +2928,11 @@ commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^7.0.0, commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" @@ -3129,11 +2943,6 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - compressible@~2.0.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -3141,16 +2950,13 @@ compressible@~2.0.16: dependencies: mime-db ">= 1.43.0 < 2" -compression-webpack-plugin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-4.0.1.tgz#33eda97f1170dd38c5556771de10f34245aa0274" - integrity sha512-0mg6PgwTsUe5LEcUrOu3ob32vraDx2VdbMGAT1PARcOV+UJWDYZFdkSo6RbHoGQ061mmmkC7XpRKOlvwm/gzJQ== +compression-webpack-plugin@9: + version "9.2.0" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-9.2.0.tgz#57fd539d17c5907eebdeb4e83dcfe2d7eceb9ef6" + integrity sha512-R/Oi+2+UHotGfu72fJiRoVpuRifZT0tTC6UqFD/DUo+mv8dbOow9rVOuTvDv5nPPm3GZhHL/fKkwxwIHnJ8Nyw== dependencies: - cacache "^15.0.5" - find-cache-dir "^3.3.1" - schema-utils "^2.7.0" - serialize-javascript "^4.0.0" - webpack-sources "^1.4.3" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" compression@^1.7.4: version "1.7.4" @@ -3170,36 +2976,11 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - connect-history-api-fallback@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -3229,219 +3010,101 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== +core-js-compat@^3.20.2, core-js-compat@^3.21.0: + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" + integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.14.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.0.tgz#e14a371123db9d1c5b41206d3f420643d238b8fa" - integrity sha512-8X6lWsG+s7IfOKzV93a7fRYfWRZobOfjw5V5rrq43Vh/W+V6qYxl7Akalsvgab4PFT/4L/pjQbdBUEM36NXKrw== - dependencies: - browserslist "^4.16.6" - semver "7.0.0" - -core-js-compat@^3.16.0: - version "3.18.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.1.tgz#01942a0877caf9c6e5007c027183cf0bdae6a191" - integrity sha512-XJMYx58zo4W0kLPmIingVZA10+7TuKrMLPt83+EzDmxFJQUMcTVVmQ+n5JP4r6Z14qSzhQBRi3NSWoeVyKKXUg== - dependencies: - browserslist "^4.17.1" + browserslist "^4.19.1" semver "7.0.0" core-js-pure@^3.8.1: - version "3.18.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.18.1.tgz#097d34d24484be45cea700a448d1e74622646c80" - integrity sha512-kmW/k8MaSuqpvA1xm2l3TVlBuvW+XBkcaOroFUpO3D4lsTGQWBTb/tBDCf/PNkkPLrwgrkQRIYNPB0CeqGJWGQ== + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.21.1.tgz#8c4d1e78839f5f46208de7230cebfb72bc3bdb51" + integrity sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ== -core-js@^3.16.2: - version "3.18.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.18.1.tgz#289d4be2ce0085d40fc1244c0b1a54c00454622f" - integrity sha512-vJlUi/7YdlCZeL6fXvWNaLUPh/id12WXj3MbkMw5uOyF0PfWPBNOCNbs53YqgrvtujLNlt9JQpruyIKkUZ+PKA== +core-js@^3.21.1: + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.1.tgz#f2e0ddc1fc43da6f904706e8e955bc19d06a0d94" + integrity sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig== core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== +cosmiconfig@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== dependencies: "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" + import-fresh "^3.2.1" parse-json "^5.0.0" path-type "^4.0.0" - yaml "^1.7.2" + yaml "^1.10.0" -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== +cross-fetch@3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" + node-fetch "2.6.7" -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== +css-declaration-sorter@^6.0.3: + version "6.1.4" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz#b9bfb4ed9a41f8dcca9bf7184d849ea94a8294b4" + integrity sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw== dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-fetch@3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39" - integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ== - dependencies: - node-fetch "2.6.1" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-blank-pseudo@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" - integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== - dependencies: - postcss "^7.0.5" - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== - dependencies: - postcss "^7.0.1" timsort "^0.3.0" -css-has-pseudo@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" - integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== +css-loader@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.1.tgz#e98106f154f6e1baf3fc3bc455cb9981c1d5fd2e" + integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== dependencies: - postcss "^7.0.6" - postcss-selector-parser "^5.0.0-rc.4" + icss-utils "^5.1.0" + postcss "^8.4.7" + 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" + postcss-value-parser "^4.2.0" + semver "^7.3.5" -css-loader@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" - integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== +css-minimizer-webpack-plugin@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz#ab78f781ced9181992fe7b6e4f3422e76429878f" + integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== dependencies: - camelcase "^5.3.1" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.32" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.2.0" - postcss-modules-values "^3.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^2.7.0" - semver "^6.3.0" - -css-prefers-color-scheme@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" - integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== - dependencies: - postcss "^7.0.5" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" + cssnano "^5.0.6" + jest-worker "^27.0.2" + postcss "^8.3.5" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" source-map "^0.6.1" -css-tree@^1.1.2: +css-select@^4.1.3: + version "4.2.1" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.2.1.tgz#9e665d6ae4c7f9d65dbe69d0316e3221fb274cdd" + integrity sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ== + dependencies: + boolbase "^1.0.0" + css-what "^5.1.0" + domhandler "^4.3.0" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== @@ -3449,95 +3112,66 @@ css-tree@^1.1.2: mdn-data "2.0.14" source-map "^0.6.1" -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - -cssdb@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" - integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== - -cssesc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" - integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== +css-what@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" + integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" - integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== +cssnano-preset-default@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.1.tgz#a83b15d3294c69bd1cedd14b0066c2f2357d108e" + integrity sha512-Y+CUCS5iZ1uzHn5KtmKIlysQVXrTtLCnYsYTOJcbdd5rghOwtw1gobvEXefBncjGO4fWwGZr9/n9hwZfo6W1Fw== dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.3" - postcss-unique-selectors "^4.0.1" + css-declaration-sorter "^6.0.3" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.0" + postcss-convert-values "^5.1.0" + postcss-discard-comments "^5.1.1" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.0" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.0" + postcss-merge-rules "^5.1.0" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.0" + postcss-minify-params "^5.1.0" + postcss-minify-selectors "^5.2.0" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.0" + postcss-normalize-repeat-style "^5.1.0" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.0" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.0" + postcss-ordered-values "^5.1.0" + postcss-reduce-initial "^5.1.0" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== +cssnano@^5.0.6: + version "5.1.1" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.1.tgz#2df44d26461b95f699096b6830df5107b1a758f4" + integrity sha512-WWfN7jBK/3Uk3oX/jsFbQApDf9DkXj6dOYull5ZaSGskcDggzg3RyDZI4GKKO+00LdfLMEZtY1cwTQUL+YMg2Q== dependencies: - postcss "^7.0.0" + cssnano-preset-default "^5.2.1" + lilconfig "^2.0.3" + yaml "^1.10.2" -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - -cssnano@^4.1.10: - version "4.1.11" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" - integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.8" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^4.0.2: +csso@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== @@ -3549,46 +3183,38 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - d3@3.5: version "3.5.17" resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g= -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: +debug@2.6.9, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: +debug@^3.1.1, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: +debug@^4.1.0, debug@^4.1.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +debug@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" deep-equal@^1.0.1: version "1.1.1" @@ -3602,18 +3228,27 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== +deepmerge@^4.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" + execa "^5.0.0" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== define-properties@^1.1.3: version "1.1.3" @@ -3622,78 +3257,35 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= +del@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" + integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - detect-node@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -3721,14 +3313,6 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -3751,14 +3335,6 @@ dom-helpers@^5.0.1: "@babel/runtime" "^7.8.7" csstype "^3.0.2" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1: version "1.3.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" @@ -3768,16 +3344,6 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" @@ -3790,25 +3356,17 @@ domhandler@^3.0.0: dependencies: domelementtype "^2.0.1" -domhandler@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" - integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== +domhandler@^4.2.0, domhandler@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" + integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== dependencies: domelementtype "^2.2.0" -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^2.0.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" - integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== +domutils@^2.0.0, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" domelementtype "^2.2.0" @@ -3822,23 +3380,6 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -3854,33 +3395,10 @@ electron-to-chromium@^1.3.723: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09" integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A== -electron-to-chromium@^1.3.854: - version "1.3.857" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.857.tgz#dcc239ff8a12b6e4b501e6a5ad20fd0d5a3210f9" - integrity sha512-a5kIr2lajm4bJ5E4D3fp8Y/BRB0Dx2VOcCRE5Gtb679mXIME/OFhWler8Gy2ksrf8gFX+EFCSIGA33FB3gqYpg== - -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +electron-to-chromium@^1.4.76: + version "1.4.78" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.78.tgz#7a1cf853efafde2c4cf6e86facf3e5792d3541a5" + integrity sha512-o61+D/Lx7j/E0LIin/efOqeHpXhwi1TaQco9vUcRmr91m25SfZY6L5hWJDv/r+6kNjboFKgBw1LbfM0lbhuK6Q== emojis-list@^3.0.0: version "3.0.0" @@ -3892,35 +3410,25 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== +enhanced-resolve@^5.9.2: + version "5.9.2" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz#0224dcd6a43389ebfb2d55efee517e5466772dd9" + integrity sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA== dependencies: - once "^1.4.0" - -enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" + graceful-fs "^4.2.4" + tapable "^2.2.0" entities@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -errno@^0.1.3, errno@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" +envinfo@^7.7.3: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -3928,13 +3436,13 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" error-stack-parser@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" - integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + version "2.0.7" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.7.tgz#b0c6e2ce27d0495cf78ad98715e0cad1219abb57" + integrity sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA== dependencies: stackframe "^1.1.1" -es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: +es-abstract@^1.18.0-next.2: version "1.18.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== @@ -3956,6 +3464,63 @@ es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es- string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.1" +es-abstract@^1.18.5: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.1" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-abstract@^1.19.0, es-abstract@^1.19.1: + version "1.19.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f" + integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -3965,6 +3530,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" + integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= + es6-promise@^4.2.8: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -3985,106 +3555,104 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -eslint-config-standard@~14.1.1: - version "14.1.1" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea" - integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg== +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-import-resolver-node@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" - integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== - dependencies: - debug "^2.6.9" - resolve "^1.13.1" +eslint-config-standard@~17.0.0-1: + version "17.0.0-1" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.0.0-1.tgz#5496abc783468e3e3a806ae4f2b3273521b1cb9a" + integrity sha512-aqRG58dqoBNfOLN+PsitasxmW+W9Os4oQrx081B16T4E4WogsSbpUL6hnKSnyv35sSRYA2XjBtKMOrUboL6jgw== -eslint-module-utils@^2.4.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233" - integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A== +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== dependencies: debug "^3.2.7" - pkg-dir "^2.0.0" + resolve "^1.20.0" -eslint-plugin-es@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== +eslint-module-utils@^2.7.2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" + integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== + dependencies: + debug "^3.2.7" + find-up "^2.1.0" + +eslint-plugin-es@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9" + integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ== dependencies: eslint-utils "^2.0.0" regexpp "^3.0.0" -eslint-plugin-import@~2.20.1: - version "2.20.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d" - integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg== +eslint-plugin-html-erb@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-html-erb/-/eslint-plugin-html-erb-1.0.1.tgz#f4a55070d5eabe365e13dba587a1d779bfe36eb6" + integrity sha512-78tk6t8NbO2pH7EuOXRG2wztCVDEiFPVlM4pTKYFI6r6XiW7prjrz3LL88yQPGHw+rcZkIYl8UJ2obVECvFO8Q== + +eslint-plugin-import@~2.25.4: + version "2.25.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1" + integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA== dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" - contains-path "^0.1.0" + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.1" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.2" has "^1.0.3" + is-core-module "^2.8.0" + is-glob "^4.0.3" minimatch "^3.0.4" - object.values "^1.1.0" - read-pkg-up "^2.0.0" - resolve "^1.12.0" + object.values "^1.1.5" + resolve "^1.20.0" + tsconfig-paths "^3.12.0" -"eslint-plugin-lint-erb@https://github.com/sleede/eslint-plugin-lint-erb.git#master": - version "0.2.2" - resolved "https://github.com/sleede/eslint-plugin-lint-erb.git#c163046088f7e988d131b0ca857a47feb925c10f" - -eslint-plugin-node@~11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.0.0.tgz#365944bb0804c5d1d501182a9bc41a0ffefed726" - integrity sha512-chUs/NVID+sknFiJzxoN9lM7uKSOEta8GC8365hw1nDfwIPIjjpRSwwPvQanWv8dt/pDe9EV4anmVSwdiSndNg== +eslint-plugin-n@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.1.0.tgz#efb6648dda91bc00e1521f42e5c0208eeae82bb8" + integrity sha512-Tgx4Z58QXv2Ha7Qzp0u4wavnZNZ3AOievZMxrAxi7nvDbzD5B/JqOD80LHYcGHFZc2HD9jDmM/+KWMPov46a4A== dependencies: - eslint-plugin-es "^3.0.0" - eslint-utils "^2.0.0" + builtins "^4.0.0" + eslint-plugin-es "^4.1.0" + eslint-utils "^3.0.0" ignore "^5.1.1" + is-core-module "^2.3.0" minimatch "^3.0.4" resolve "^1.10.1" - semver "^6.1.0" + semver "^6.3.0" -eslint-plugin-promise@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" - integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== +eslint-plugin-promise@~6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz#017652c07c9816413a41e11c30adc42c3d55ff18" + integrity sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw== -eslint-plugin-react@^7.21.5: - version "7.24.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4" - integrity sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q== +eslint-plugin-react@^7.29.4: + version "7.29.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2" + integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ== dependencies: - array-includes "^3.1.3" - array.prototype.flatmap "^1.2.4" + array-includes "^3.1.4" + array.prototype.flatmap "^1.2.5" doctrine "^2.1.0" - has "^1.0.3" + estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.0.4" - object.entries "^1.1.4" - object.fromentries "^2.0.4" - object.values "^1.1.4" - prop-types "^15.7.2" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.0" + object.values "^1.1.5" + prop-types "^15.8.1" resolve "^2.0.0-next.3" - string.prototype.matchall "^4.0.5" + semver "^6.3.0" + string.prototype.matchall "^4.0.6" -eslint-plugin-standard@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.2.tgz#021211a9f077e63a6847e7bb9ab4247327ac8e0c" - integrity sha512-nKptN8l7jksXkwFk++PhJB3cCDTcXOEyhISIN86Ue2feJ1LFyY3PrY3/xT2keXlJSY5bpmbiTG0f885/YKAvTA== - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^5.0.0, eslint-scope@^5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -4092,12 +3660,13 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: - eslint-visitor-keys "^1.1.0" + esrecurse "^4.3.0" + estraverse "^5.2.0" eslint-utils@^2.0.0: version "2.1.0" @@ -4123,71 +3692,80 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@~6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint-webpack-plugin@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz#83dad2395e5f572d6f4d919eedaa9cf902890fcb" + integrity sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg== dependencies: - "@babel/code-frame" "^7.0.0" + "@types/eslint" "^7.28.2" + jest-worker "^27.3.1" + micromatch "^4.0.4" + normalize-path "^3.0.0" + schema-utils "^3.1.1" + +eslint@~8.12.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.12.0.tgz#c7a5bd1cfa09079aae64c9076c07eada66a46e8e" + integrity sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q== + dependencies: + "@eslint/eslintrc" "^1.2.1" + "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^5.0.1" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" + glob-parent "^6.0.1" + globals "^13.6.0" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^7.0.0" is-glob "^4.0.0" - js-yaml "^3.13.1" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" + levn "^0.4.1" + lodash.merge "^4.6.2" minimatch "^3.0.4" - mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== +espree@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" + integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" + acorn "^8.7.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^3.3.0" -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: +esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0, esrecurse@^4.3.0: +esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== @@ -4204,6 +3782,11 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== +estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -4219,64 +3802,31 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.0.0: +events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -eventsource@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" - integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" exenv@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -4313,53 +3863,15 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.1.1: - version "3.2.6" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.6.tgz#434dd9529845176ea049acc9343e8282765c6e1a" - integrity sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ== +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -4372,11 +3884,16 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastest-levenshtein@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" + integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + fastq@^1.6.0: version "1.11.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" @@ -4391,47 +3908,12 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" + flat-cache "^3.0.4" fill-range@^7.0.1: version "7.0.1" @@ -4453,15 +3935,6 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - find-cache-dir@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" @@ -4471,20 +3944,13 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-up@^2.0.0, find-up@^2.1.0: +find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -4501,113 +3967,49 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" + flatted "^3.1.0" + rimraf "^3.0.2" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -flatted@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" - integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== - -flatten@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" - integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" +flatted@^3.1.0: + version "3.2.5" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" + integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== follow-redirects@^1.0.0, follow-redirects@^1.14.0: - version "1.14.7" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685" - integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ== + version "1.14.8" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" + integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" +fs-monkey@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" @@ -4633,11 +4035,6 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -4647,34 +4044,39 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: - pump "^3.0.0" + call-bind "^1.0.2" + get-intrinsic "^1.1.1" -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.7: +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.1.3: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -4686,6 +4088,18 @@ glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@~7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" @@ -4698,82 +4112,40 @@ glob@~7.0.6: once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== +globals@^13.6.0, globals@^13.9.0: + version "13.13.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" + integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A== dependencies: - type-fest "^0.8.1" + type-fest "^0.20.2" -globby@^11.0.3: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== +globby@^11.0.1, globby@^11.0.4: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: +graceful-fs@^4.1.2: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" @@ -4799,80 +4171,30 @@ has-symbols@^1.0.1, has-symbols@^1.0.2: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-value@^1.0.0: +has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" + has-symbols "^1.0.2" -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.3: +has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - hoist-non-react-statics@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -4885,23 +4207,11 @@ holderjs@2.6: resolved "https://registry.yarnpkg.com/holderjs/-/holderjs-2.6.0.tgz#e2ab6e02d4177684c0fe1414ecea013bc4b1505e" integrity sha1-4qtuAtQXdoTA/hQU7OoBO8SxUF4= -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - hone@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hone/-/hone-1.1.0.tgz#b6ce8d0716ee78c424e1ff83f2bb497493a88639" integrity sha512-OT6AXfa+pMwM0jJbpyZk6/pgQ4m9vMkiUSKMfRbYv+Tnca/IRLsfBbmJy/FcsrqujW54Yvn6g+ApBwUnD8MQZg== -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -4912,27 +4222,17 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - -html-entities@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== - -html-entities@^2.1.0: +html-entities@^2.1.0, html-entities@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" integrity sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ== -html-loader@^1.3.0, html-loader@~1.3.0: +html-escaper@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-loader@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-1.3.2.tgz#5a72ebba420d337083497c9aba7866c9e1aee340" integrity sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA== @@ -5014,17 +4314,18 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== +http-proxy-middleware@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz#5df04f69a89f530c2284cd71eeaa51ba52243289" + integrity sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA== dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" -http-proxy@^1.17.0: +http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== @@ -5033,87 +4334,63 @@ http-proxy@^1.17.0: follow-redirects "^1.0.0" requires-port "^1.0.0" -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -i18next-http-backend@^1.0.21: - version "1.2.6" - resolved "https://registry.yarnpkg.com/i18next-http-backend/-/i18next-http-backend-1.2.6.tgz#80b12e8b207814aebb3b8a74c4487dd156973bee" - integrity sha512-NeNNRofj+rR6Cw+/Elf8bCVaCiqWg2Y6F+CrmDvHiPzAW2Dtxxlk8O0na2et/rr1n3ST6rJr4nMXH/QOFuhaeA== +i18next-http-backend@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/i18next-http-backend/-/i18next-http-backend-1.3.2.tgz#ce6aff7aa60b6170e006d62b8f9cc1b3de55413e" + integrity sha512-SfcoUmsSWnc2LYsDsCq5TCg18cxJXvXymX9N37V+qqMKQY8Gf0rWkjOnRd20sMK633Dq4NF9tvqPbOiFJ49Kbw== dependencies: - cross-fetch "3.1.4" + cross-fetch "3.1.5" -i18next-icu@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/i18next-icu/-/i18next-icu-1.4.2.tgz#2b79d1ac2c2d542725219beac34a74db15cd2ff9" - integrity sha512-EqHafx/sL8eoEowwqi5P6cXtLrzJXBKI4RmV+UaMXlpIJNfckVsq873F2KkMKkApxiw2ATj46C8MurmhMsHQGw== - dependencies: - intl-messageformat "2.2.0" +i18next-icu@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/i18next-icu/-/i18next-icu-2.0.3.tgz#f3a69f7813ce9d4648d66fbaa06fa466d0a8642e" + integrity sha512-sZ0VCWDnHysUYQL8j/0rVOxv6rLR+SBoaqQQ2UVNfLyJCuf/bAjYPkoUQgyuDkWFo1xZjeCf4G6GBNr7gD61bQ== -i18next@^19.8.3: - version "19.9.2" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.9.2.tgz#ea5a124416e3c5ab85fddca2c8e3c3669a8da397" - integrity sha512-0i6cuo6ER6usEOtKajUUDj92zlG+KArFia0857xxiEHAQcUwh/RtOQocui1LPJwunSYT574Pk64aNva1kwtxZg== +i18next@^21.6.13: + version "21.6.13" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.6.13.tgz#e881b05f156ac06997e9b63379d8b2674bb4a4f2" + integrity sha512-MVjNttw+5mIuu2/fwTpSU0EeI7iU/6pnDvGQboCzkILiv0/gD+FLZaF7qSHmUHO4ZkE6xJQ9SlBgGvMHxhC82Q== dependencies: "@babel/runtime" "^7.12.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1, ignore@^5.1.4: +ignore@^5.1.1: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +ignore@^5.1.8, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + immer@^9.0.6: version "9.0.6" resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.6.tgz#7a96bf2674d06c8143e327cbf73539388ddf1a73" integrity sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ== -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" +immutable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23" + integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw== -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0, import-fresh@^3.1.0: +import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -5121,20 +4398,13 @@ import-fresh@^3.0.0, import-fresh@^3.1.0: parent-module "^1.0.0" resolve-from "^4.0.0" -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: - resolve-from "^3.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" imurmurhash@^0.1.4: version "0.1.4" @@ -5146,16 +4416,6 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -infer-owner@^1.0.3, infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -5164,53 +4424,16 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -5220,61 +4443,35 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -interpret@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -intl-messageformat-parser@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz#b43d45a97468cadbe44331d74bb1e8dea44fc075" - integrity sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU= - -intl-messageformat@2.2.0: +interpret@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-2.2.0.tgz#345bcd46de630b7683330c2e52177ff5eab484fc" - integrity sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw= + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +intl-messageformat@^9.11.4: + version "9.11.4" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.11.4.tgz#0f9030bc6d10e6a48592142f88e646d88f05f1f2" + integrity sha512-77TSkNubIy/hsapz6LQpyR6OADcxhWdhSaboPb5flMaALCVkPvAIxr48AlPqaMl4r1anNcvR9rpLWVdwUY1IKg== dependencies: - intl-messageformat-parser "1.4.0" + "@formatjs/ecma402-abstract" "1.11.3" + "@formatjs/fast-memoize" "1.2.1" + "@formatjs/icu-messageformat-parser" "2.0.18" + tslib "^2.1.0" -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@^1.1.0, ip@^1.1.5: +ip@^1.1.0: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: +ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== is-arguments@^1.0.4: version "1.1.0" @@ -5288,23 +4485,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - is-bigint@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -5319,27 +4504,15 @@ is-boolean-object@^1.1.0: dependencies: call-bind "^1.0.2" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-callable@^1.1.4, is-callable@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" +is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== is-core-module@^2.2.0: version "2.4.0" @@ -5348,141 +4521,93 @@ is-core-module@^2.2.0: dependencies: has "^1.0.3" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= +is-core-module@^2.3.0, is-core-module@^2.8.0, is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" + has "^1.0.3" is-date-object@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== dependencies: - is-extglob "^2.1.0" + has-tostringtag "^1.0.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" +is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-nan@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + is-negative-zero@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + is-number-object@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-cwd@^2.0.0: +is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -5497,21 +4622,36 @@ is-regex@^1.0.4, is-regex@^1.1.3: call-bind "^1.0.2" has-symbols "^1.0.2" -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-string@^1.0.5, is-string@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== +is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" @@ -5519,17 +4659,32 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-windows@^1.0.1, is-windows@^1.0.2: +is-typed-array@^1.1.3, is-typed-array@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.8.tgz#cbaa6585dc7db43318bc5b89523ea384a6f65e79" + integrity sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.18.5" + foreach "^2.0.5" + has-tostringtag "^1.0.0" + +is-weakref@^1.0.1, is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -5539,14 +4694,7 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: +isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= @@ -5556,14 +4704,14 @@ jasny-bootstrap@3.1: resolved "https://registry.yarnpkg.com/jasny-bootstrap/-/jasny-bootstrap-3.1.3.tgz#b072a681d50c649762c9543c7a6093d9baa2f87b" integrity sha1-sHKmgdUMZJdiyVQ8emCT2bqi+Hs= -jest-worker@^26.5.0: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== +jest-worker@^27.0.2, jest-worker@^27.3.1, jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" merge-stream "^2.0.0" - supports-color "^7.0.0" + supports-color "^8.0.0" jquery-ujs@^1.2.2: version "1.2.3" @@ -5580,13 +4728,12 @@ jquery@>=3.5.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1, js-yaml@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" jsesc@^0.5.0, jsesc@~0.5.0: version "0.5.0" @@ -5598,7 +4745,7 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== @@ -5613,16 +4760,16 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json3@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -5645,82 +4792,45 @@ json5@^2.1.2: array-includes "^3.1.2" object.assign "^4.1.2" -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== klona@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" + integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lilconfig@^2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" - integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== - -last-call-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" - integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== - dependencies: - lodash "^4.17.5" - webpack-sources "^1.1.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" + integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== linkifyjs@^3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-3.0.5.tgz#99e51a3a0c0e232fcb63ebb89eea3ff923378f34" integrity sha512-1Y9XQH65eQKA9p2xtk+zxvnTeQBG7rdAXSkUG97DmuI/Xhji9uaUzaWxRj6rf9YC0v8KKHkxav7tnLX82Sz5Fg== -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" +loader-runner@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" + integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -5729,10 +4839,10 @@ loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4 emojis-list "^3.0.0" json5 "^1.0.1" -loader-utils@^2.0.0, loader-utils@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== +loader-utils@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" @@ -5746,14 +4856,6 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -5768,6 +4870,13 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lockfile@^1.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== + dependencies: + signal-exit "^3.0.2" + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -5798,21 +4907,21 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.20: +lodash@^4.17.14, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loglevel@^1.6.8: - version "1.7.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" - integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== - loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -5827,13 +4936,6 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -5841,14 +4943,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -make-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -5863,37 +4957,11 @@ make-plural@~3.0.6: optionalDependencies: minimist "^1.2.0" -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -5904,27 +4972,18 @@ medium-editor@^5.23.3: resolved "https://registry.yarnpkg.com/medium-editor/-/medium-editor-5.23.3.tgz#6fb638759ae2fc76c423feb056f346d9c518d3b7" integrity sha512-he9/TdjX8f8MGdXGfCs8AllrYnqXJJvjNkDKmPg3aPW/uoIrlRqtkFthrwvmd+u4QyzEiadhCCM0EwTiRdUCJw== +memfs@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.1.tgz#b78092f466a0dce054d63d39275b24c71d3f1305" + integrity sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw== + dependencies: + fs-monkey "1.0.3" + memoize-one@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -5935,7 +4994,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -5961,26 +5020,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.4: +micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== @@ -5988,19 +5028,23 @@ micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - mime-db@1.48.0, "mime-db@>= 1.43.0 < 2": version "1.48.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + +mime-types@^2.1.27, mime-types@^2.1.31: + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + mime-types@~2.1.17, mime-types@~2.1.24: version "2.1.31" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" @@ -6013,36 +5057,23 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.4: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-css-extract-plugin@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" - integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== +mini-css-extract-plugin@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz#578aebc7fc14d32c0ad304c2c34f08af44673f5e" + integrity sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w== dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" + schema-utils "^4.0.0" -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: +minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -6050,112 +5081,37 @@ minimatch@^3.0.2, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: - minipass "^3.0.0" + brace-expansion "^1.1.7" -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== -minipass-pipeline@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== - dependencies: - yallist "^4.0.0" - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: +mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - moment-timezone@0.5: - version "0.5.33" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c" - integrity sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w== + version "0.5.34" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c" + integrity sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg== dependencies: moment ">= 2.9.0" -moment@2.22: - version "2.22.2" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" - integrity sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y= - -"moment@>= 2.9.0", "moment@>=2.8.0 <3.0.0": +moment@2.29, "moment@>= 2.9.0", "moment@>=2.8.0 <3.0.0": version "2.29.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -6189,37 +5145,10 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== - -nanocolors@^0.2.12: - version "0.2.12" - resolved "https://registry.yarnpkg.com/nanocolors/-/nanocolors-0.2.12.tgz#4d05932e70116078673ea4cc6699a1c56cc77777" - integrity sha512-SFNdALvzW+rVlzqexid6epYdt8H9Zol7xDoQarioEFcFN0JHo4CYNztAxmtfgGTVRCmFlEOqqhBpoFGKqSAMug== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" +nanoid@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== natural-compare@^1.4.0: version "1.4.0" @@ -6231,7 +5160,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: +neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -6259,7 +5188,7 @@ ngcomponent@^4.1.0: angular ">=1.5.0" lodash "^4.17.4" -ngtemplate-loader@^2.1.0, ngtemplate-loader@~2.1.0: +ngtemplate-loader@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ngtemplate-loader/-/ngtemplate-loader-2.1.0.tgz#fb71c614c509b114b3bb28a828cb608757531e96" integrity sha512-8t1a2YOb1vk1A4C74o1ru+T7UeyKDdABWXtGDkjBupmOaV/RPCXjLLF4UZMI45Lfpebkr2p4NlVSROXRshkIhg== @@ -6267,11 +5196,6 @@ ngtemplate-loader@^2.1.0, ngtemplate-loader@~2.1.0: jsesc "^0.5.0" loader-utils "^1.0.2" -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -6280,54 +5204,27 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-fetch@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== - -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" + whatwg-url "^5.0.0" + +node-forge@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.0.tgz#37a874ea723855f37db091e6c186e5b67a01d4b2" + integrity sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA== node-releases@^1.1.71: version "1.1.73" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== -node-releases@^1.1.76: - version "1.1.77" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" - integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== +node-releases@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" + integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== nopt@~3.0.6: version "3.0.6" @@ -6336,91 +5233,50 @@ nopt@~3.0.6: dependencies: abbrev "1" -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -normalize-url@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" + path-key "^3.0.0" -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= +nth-check@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" + integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== dependencies: - path-key "^2.0.0" - -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + boolbase "^1.0.0" nvd3@1.8: version "1.8.6" resolved "https://registry.yarnpkg.com/nvd3/-/nvd3-1.8.6.tgz#2d3eba74bf33363b5101ebf1d093c59a53ae73c4" integrity sha1-LT66dL8zNjtRAevx0JPFmlOuc8Q= -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - object-inspect@^1.10.3, object-inspect@^1.9.0: version "1.10.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== +object-inspect@^1.11.0, object-inspect@^1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== + object-is@^1.0.1: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" @@ -6434,13 +5290,6 @@ object-keys@^1.0.12, object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - object.assign@^4.1.0, object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" @@ -6451,49 +5300,40 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd" - integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA== +object.entries@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.2" + es-abstract "^1.19.1" -object.fromentries@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" - integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== +object.fromentries@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" + es-abstract "^1.19.1" -object.getownpropertydescriptors@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== +object.hasown@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5" + integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0, object.values@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" - integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.2" + es-abstract "^1.19.1" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" @@ -6512,74 +5352,46 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" -onetime@^5.1.0: +onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== +open@^8.0.9: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== dependencies: - is-wsl "^1.1.0" + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" -optimize-css-assets-webpack-plugin@^5.0.8: - version "5.0.8" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.8.tgz#cbccdcf5a6ef61d4f8cc78cf083a67446e5f402a" - integrity sha512-mgFS1JdOtEGzD8l+EuISqL57cKO+We9GcoiQEmdCWRqqck+FGNmYJtx9qfAPzEz+lRrlThWMuGDaRkI/yWNx/Q== +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: - cssnano "^4.1.10" - last-call-webpack-plugin "^3.0.0" - -optionator@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" orderedmap@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/orderedmap/-/orderedmap-1.1.1.tgz#c618e77611b3b21d0fe3edc92586265e0059c789" integrity sha512-3Ux8um0zXbVacKUkcytc0u3HgC0b0bBLT+I60r2J/En72cI0nZffqrA7Xtf2Hqs27j1g82llR5Mhbd0Z1XW4AQ== -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -6587,7 +5399,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -6608,13 +5420,6 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -6629,11 +5434,6 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -6641,12 +5441,13 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== +p-retry@^4.5.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.1.tgz#8fcddd5cdf7a67a0911a9cf2ef0e5df7f602316c" + integrity sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA== dependencies: - retry "^0.12.0" + "@types/retry" "^0.12.0" + retry "^0.13.1" p-try@^1.0.0: version "1.0.0" @@ -6658,20 +5459,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - param-case@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -6687,32 +5474,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - parse-json@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -6723,11 +5484,6 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -6741,26 +5497,11 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - path-complete-extname@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/path-complete-extname/-/path-complete-extname-1.0.0.tgz#f889985dc91000c815515c0bfed06c5acda0752b" integrity sha512-CVjiWcMRdGU8ubs08YQVzhutOR5DEfO97ipRIlOGMK5Bek5nQySknBpuxVAVJ36hseTNs+vdIcv57ZrWxH7zvg== -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -6776,17 +5517,12 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -6796,90 +5532,39 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - phosphor-react@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/phosphor-react/-/phosphor-react-1.4.0.tgz#6c3d5f9d3433c3c2456b902891d24ec677f89dc3" integrity sha512-K2/ZtkigHV/li5qfYPqY5fA7MLkWM52tW9ghBCyJc7JS5ykI/WD61JC8kFWaZ6yqlEHXPUJLHr+p+5uGsBnHmQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" -pnp-webpack-plugin@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz#65741384f6d8056f36e2255a8d67ffc20866f5c9" - integrity sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg== - dependencies: - ts-pnp "^1.1.6" - -portfinder@^1.0.26: +portfinder@^1.0.28: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== @@ -6888,644 +5573,244 @@ portfinder@^1.0.26: debug "^3.1.1" mkdirp "^0.5.5" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-attribute-case-insensitive@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" - integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== dependencies: - postcss "^7.0.2" - postcss-selector-parser "^6.0.2" + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" -postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== +postcss-colormin@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" + integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - -postcss-color-functional-notation@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" - integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-gray@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" - integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-color-hex-alpha@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" - integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== - dependencies: - postcss "^7.0.14" - postcss-values-parser "^2.0.1" - -postcss-color-mod-function@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" - integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-rebeccapurple@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" - integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-custom-media@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" - integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== - dependencies: - postcss "^7.0.14" - -postcss-custom-properties@^8.0.11: - version "8.0.11" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" - integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== - dependencies: - postcss "^7.0.17" - postcss-values-parser "^2.0.1" - -postcss-custom-selectors@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" - integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-dir-pseudo-class@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" - integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" - -postcss-double-position-gradients@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" - integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== - dependencies: - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-env-function@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" - integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-flexbugs-fixes@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" - integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== - dependencies: - postcss "^7.0.26" - -postcss-focus-visible@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" - integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== - dependencies: - postcss "^7.0.2" - -postcss-focus-within@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" - integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== - dependencies: - postcss "^7.0.2" - -postcss-font-variant@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" - integrity sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== - dependencies: - postcss "^7.0.2" - -postcss-gap-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" - integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== - dependencies: - postcss "^7.0.2" - -postcss-image-set-function@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" - integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-import@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-12.0.1.tgz#cf8c7ab0b5ccab5649024536e565f841928b7153" - integrity sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw== - dependencies: - postcss "^7.0.1" - postcss-value-parser "^3.2.3" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-initial@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.4.tgz#9d32069a10531fe2ecafa0b6ac750ee0bc7efc53" - integrity sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg== - dependencies: - postcss "^7.0.2" - -postcss-lab-function@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" - integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-load-config@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" - integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== - dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" - -postcss-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== - dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" - -postcss-logical@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" - integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== - dependencies: - postcss "^7.0.2" - -postcss-media-minmax@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" - integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== - dependencies: - postcss "^7.0.2" - -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== - dependencies: - browserslist "^4.0.0" + browserslist "^4.16.6" caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== +postcss-convert-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz#f8d3abe40b4ce4b1470702a0706343eac17e7c10" + integrity sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g== dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" +postcss-discard-comments@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz#e90019e1a0e5b99de05f63516ce640bd0df3d369" + integrity sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ== -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" +postcss-discard-empty@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.0.tgz#7f51b16cd1b89f8180bbc7cee34d6cbabf2ef810" + integrity sha512-782T/buGgb3HOuHOJAHpdyKzAAKsv/BxWqsutnZ+QsiHEcDkY7v+6WWdturuBiSal6XMOO1p1aJvwXdqLD5vhA== -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== - dependencies: - postcss "^7.0.5" +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== -postcss-modules-local-by-default@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== +postcss-merge-longhand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.0.tgz#f716bffbf0bdfbde6ea78c36088e21559f8a0a95" + integrity sha512-Gr46srN2tsLD8fudKYoHO56RG0BLQ2nsBRnSZGY04eNBPwTeWa9KeHrbL3tOLAHyB2aliikycPH2TMJG1U+W6g== dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" + postcss-value-parser "^4.2.0" + stylehacks "^5.1.0" + +postcss-merge-rules@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.0.tgz#a2d5117eba09c8686a5471d97bd9afcf30d1b41f" + integrity sha512-NecukEJovQ0mG7h7xV8wbYAkXGTO3MPKnXvuiXzOKcxoOodfTTKYjeo8TMhAswlSkjcPIBlnKbSFcTuVSDaPyQ== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.0.tgz#de0260a67a13b7b321a8adc3150725f2c6612377" + integrity sha512-J/TMLklkONn3LuL8wCwfwU8zKC1hpS6VcxFkNUNjmVt53uKqrrykR3ov11mdUYyqVMEx67slMce0tE14cE4DTg== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.0.tgz#e0b1f4e05cfd396682f612856485907e4064f25e" + integrity sha512-q67dcts4Hct6x8+JmhBgctHkbvUsqGIg2IItenjE63iZXMbhjr7AlVZkNnKtIGt/1Wsv7p/7YzeSII6Q+KPXRg== + dependencies: + browserslist "^4.16.6" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz#17c2be233e12b28ffa8a421a02fc8b839825536c" + integrity sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - -postcss-modules-values@^3.0.0: +postcss-modules-scope@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" + postcss-selector-parser "^6.0.4" -postcss-nesting@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" - integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== - dependencies: - postcss "^7.0.2" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-overflow-shorthand@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" - integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== - dependencies: - postcss "^7.0.2" - -postcss-page-break@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" - integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== - dependencies: - postcss "^7.0.2" - -postcss-place@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" - integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-preset-env@^6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" - integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== - dependencies: - autoprefixer "^9.6.1" - browserslist "^4.6.4" - caniuse-lite "^1.0.30000981" - css-blank-pseudo "^0.1.4" - css-has-pseudo "^0.10.0" - css-prefers-color-scheme "^3.1.1" - cssdb "^4.4.0" - postcss "^7.0.17" - postcss-attribute-case-insensitive "^4.0.1" - postcss-color-functional-notation "^2.0.1" - postcss-color-gray "^5.0.0" - postcss-color-hex-alpha "^5.0.3" - postcss-color-mod-function "^3.0.3" - postcss-color-rebeccapurple "^4.0.1" - postcss-custom-media "^7.0.8" - postcss-custom-properties "^8.0.11" - postcss-custom-selectors "^5.1.2" - postcss-dir-pseudo-class "^5.0.0" - postcss-double-position-gradients "^1.0.0" - postcss-env-function "^2.0.2" - postcss-focus-visible "^4.0.0" - postcss-focus-within "^3.0.0" - postcss-font-variant "^4.0.0" - postcss-gap-properties "^2.0.0" - postcss-image-set-function "^3.0.1" - postcss-initial "^3.0.0" - postcss-lab-function "^2.0.1" - postcss-logical "^3.0.0" - postcss-media-minmax "^4.0.0" - postcss-nesting "^7.0.0" - postcss-overflow-shorthand "^2.0.0" - postcss-page-break "^2.0.0" - postcss-place "^4.0.1" - postcss-pseudo-class-any-link "^6.0.0" - postcss-replace-overflow-wrap "^3.0.0" - postcss-selector-matches "^4.0.0" - postcss-selector-not "^4.0.0" - -postcss-pseudo-class-any-link@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" - integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-replace-overflow-wrap@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" - integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== - dependencies: - postcss "^7.0.2" - -postcss-safe-parser@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" - integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== - dependencies: - postcss "^7.0.26" - -postcss-selector-matches@^4.0.0: +postcss-modules-values@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" - integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" + icss-utils "^5.0.0" -postcss-selector-not@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" - integrity sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" + postcss-value-parser "^4.2.0" -postcss-selector-parser@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== +postcss-normalize-positions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz#902a7cb97cf0b9e8b1b654d4a43d451e48966458" + integrity sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ== dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" + postcss-value-parser "^4.2.0" -postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" - integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== +postcss-normalize-repeat-style@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz#f6d6fd5a54f51a741cc84a37f7459e60ef7a6398" + integrity sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw== dependencies: - cssesc "^2.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" + postcss-value-parser "^4.2.0" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.6" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" - integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz#3d23aede35e160089a285e27bf715de11dc9db75" + integrity sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ== + dependencies: + browserslist "^4.16.6" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.0.tgz#aed8b4580c9ad6e8eac034177291187ea16a059c" + integrity sha512-7O1FanKaJkpWFyCghFzIkLhehujV/frGkdofGLwhg5upbLyGsSfiTcZAdSzoPsSUgyPCkBkNMeWR8yVgPdQybg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.0.tgz#04ef429e0991b0292bc918b135cd4c038f7b889f" + integrity sha512-wU4Z4D4uOIH+BUKkYid36gGDJNQtkVJT7Twv8qH6UyfttbbJWyw4/xIPuVEkkCtQLAJ0EdsNSh8dlvqkXb49TA== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6" + integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.9" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" + integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-svgo@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" - integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" + postcss-value-parser "^4.2.0" + svgo "^2.7.0" -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" + postcss-selector-parser "^6.0.5" -postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== - -postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" - integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.5, postcss@^7.0.6: +postcss@^7.0.35: version "7.0.36" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== @@ -7534,15 +5819,19 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2 source-map "^0.6.1" supports-color "^6.1.0" -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +postcss@^8.3.5, postcss@^8.4.7: + version "8.4.8" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.8.tgz#dad963a76e82c081a0657d3a2f3602ce10c2e032" + integrity sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ== + dependencies: + nanoid "^3.3.1" + picocolors "^1.0.0" + source-map-js "^1.0.2" -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== process-nextick-args@~2.0.0: version "2.0.1" @@ -7554,16 +5843,6 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" @@ -7573,6 +5852,15 @@ prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + prosemirror-commands@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.2.2.tgz#1bd167372ee20abf488aca9cece63c43fab182c9" @@ -7681,96 +5969,16 @@ proxy-addr@~2.0.5: forwarded "0.2.0" ipaddr.js "1.9.1" -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -7784,21 +5992,13 @@ rails-erb-loader@^5.5.2: loader-utils "^1.1.0" lodash.defaults "^4.2.0" -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: +randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -7833,12 +6033,13 @@ react-hook-form@^7.25.3: resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.25.3.tgz#1475fd52398e905e1f6d88835f96aaa1144635c3" integrity sha512-jL4SByMaC8U3Vhu9s7CwgJBP4M6I3Kpwxib9LrCwWSRPnXDrNQL4uihSTqLLoDICqSUhwwvian9uVYfv+ITtGg== -react-i18next@^11.7.3: - version "11.11.0" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.11.0.tgz#2f7c6cb4f81f94d1728a02d60e4bb5216709f942" - integrity sha512-p1jHmoyJgDFQmyubUEjrx6kCsr1izW/C8i9pOiJy+9lJqLYwNA8sElVplm0VAnop3kH68edT0/g3wB3UvAcRCQ== +react-i18next@^11.15.6: + version "11.15.6" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.15.6.tgz#693430fbee5ac7d0774bd88683575d62adb24afb" + integrity sha512-OUWcFdNgIA9swVx3JGIreuquglAinpRwB/HYrCprTN+s9BQDt9LSiY7x5DGc2JzVpwqtpoTV7oRUTOxEPNyUPw== dependencies: "@babel/runtime" "^7.14.5" + html-escaper "^2.0.2" html-parse-stringify "^3.0.1" react-input-autosize@^3.0.0: @@ -7848,7 +6049,7 @@ react-input-autosize@^3.0.0: dependencies: prop-types "^15.5.8" -react-is@^16.7.0, react-is@^16.8.1: +react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -7868,10 +6069,10 @@ react-modal@^3.11.2: react-lifecycles-compat "^3.0.0" warning "^4.0.3" -react-refresh@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.10.0.tgz#2f536c9660c0b9b1d500684d9e52a65e7404f7e3" - integrity sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ== +react-refresh@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" + integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== react-select@^4.3.1: version "4.3.1" @@ -7921,31 +6122,7 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= - dependencies: - pify "^2.3.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.1: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -7958,7 +6135,7 @@ read-pkg@^2.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.6.0: +readable-stream@^3.0.6: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -7967,15 +6144,6 @@ readable-stream@^3.0.6, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -7983,6 +6151,20 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== + dependencies: + resolve "^1.9.0" + +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -7990,7 +6172,7 @@ regenerate-unicode-properties@^8.2.0: dependencies: regenerate "^1.4.0" -regenerate@^1.4.0: +regenerate@^1.4.0, regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== @@ -8000,11 +6182,6 @@ regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== -regenerator-runtime@^0.13.9: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - regenerator-transform@^0.14.2: version "0.14.5" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" @@ -8012,20 +6189,12 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - regex-parser@^2.2.11: version "2.2.11" resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: +regexp.prototype.flags@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== @@ -8033,12 +6202,15 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +regexp.prototype.flags@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" + integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" -regexpp@^3.0.0, regexpp@^3.1.0: +regexpp@^3.0.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -8055,11 +6227,28 @@ regexpu-core@^4.7.1: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" +regexpu-core@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" + integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + regjsgen@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + regjsparser@^0.6.4: version "0.6.9" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" @@ -8067,35 +6256,22 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== requires-port@^1.0.0: version "1.0.0" @@ -8107,31 +6283,23 @@ reserved-words@^0.1.1: resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^3.0.0: +resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-url-loader@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57" @@ -8143,12 +6311,7 @@ resolve-url-loader@^4.0.0: postcss "^7.0.35" source-map "0.6.1" -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2: +resolve@^1.10.1, resolve@^1.14.2: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -8156,6 +6319,15 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13 is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^1.19.0, resolve@^1.20.0, resolve@^1.9.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.3: version "2.0.0-next.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" @@ -8164,53 +6336,16 @@ resolve@^2.0.0-next.3: is-core-module "^2.2.0" path-parse "^1.0.6" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^2.5.4, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -8218,24 +6353,11 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - rope-sequence@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.2.tgz#a19e02d72991ca71feb6b5f8a91154e48e3c098b" integrity sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg== -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -8243,64 +6365,37 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rxjs@^6.6.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-loader@10.1.1: - version "10.1.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d" - integrity sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw== +sass-loader@^12.6.0: + version "12.6.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" + integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== dependencies: klona "^2.0.4" - loader-utils "^2.0.0" neo-async "^2.6.2" - schema-utils "^3.0.0" - semver "^7.3.2" -sass@^1.38.0: - version "1.42.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.42.1.tgz#5ab17bebc1cb1881ad2e0c9a932c66ad64e441e2" - integrity sha512-/zvGoN8B7dspKc5mC6HlaygyCBRvnyzzgD5khiaCfglWztY99cYoiTUksVx11NlnemrcfH5CEaCpsUKoW0cQqg== +sass@^1.49.9: + version "1.49.9" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.9.tgz#b15a189ecb0ca9e24634bae5d1ebc191809712f9" + integrity sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A== dependencies: chokidar ">=3.0.0 <4.0.0" - -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" scheduler@^0.20.2: version "0.20.2" @@ -8310,16 +6405,7 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.6.5, schema-utils@^2.7.0: +schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -8328,43 +6414,48 @@ schema-utils@^2.6.5, schema-utils@^2.7.0: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== +schema-utils@^3.0, schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== dependencies: - "@types/json-schema" "^7.0.6" + "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -selfsigned@^1.10.8: - version "1.10.11" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" - integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== +selfsigned@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.0.tgz#e927cd5377cbb0a1075302cff8df1042cc2bce5b" + integrity sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ== dependencies: - node-forge "^0.10.0" - -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + node-forge "^1.2.0" semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.5: +semver@^7.0.0, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -8390,17 +6481,10 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: randombytes "^2.1.0" @@ -8427,26 +6511,6 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -8457,25 +6521,33 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== +shakapacker@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/shakapacker/-/shakapacker-6.2.0.tgz#4f3cb0f99b8c7ff63e676fbf253331643388bd22" + integrity sha512-n9QAJGInUK7+Brn4JSaGGD9mWUdFAD60vP19qn9JlcqG3zAev0oKenUsLUcWFyKBFbpZMbGdWURuWYcp1iayog== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + glob "^7.2.0" + js-yaml "^4.1.0" + path-complete-extname "^1.0.0" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: - shebang-regex "^1.0.0" + kind-of "^6.0.2" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: version "1.0.4" @@ -8486,74 +6558,21 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" +signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" - integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== - dependencies: - debug "^3.2.6" - eventsource "^1.0.7" - faye-websocket "^0.11.3" - inherits "^2.0.4" - json3 "^3.3.3" - url-parse "^1.5.1" - sockjs@^0.3.21: version "0.3.21" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" @@ -8563,48 +6582,25 @@ sockjs@^0.3.21: uuid "^3.4.0" websocket-driver "^0.7.4" -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@~0.5.12, source-map-support@~0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== +source-map-support@~0.5.12, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -8614,32 +6610,6 @@ source-map@^0.7.3, source-map@~0.7.2: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" - integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== - spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" @@ -8663,122 +6633,33 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - -ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" + version "1.2.1" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.1.tgz#1033a3473ee67f08e2f2fc8eba6aef4f845124e1" + integrity sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg== "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.matchall@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" - integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q== +string.prototype.matchall@^4.0.6: + version "4.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.2" + es-abstract "^1.19.1" get-intrinsic "^1.1.1" - has-symbols "^1.0.2" + has-symbols "^1.0.3" internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" + regexp.prototype.flags "^1.4.1" side-channel "^1.0.4" string.prototype.trimend@^1.0.4: @@ -8797,7 +6678,7 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@^1.0.0, string_decoder@^1.1.1: +string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -8811,58 +6692,47 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^2.0.0" + ansi-regex "^5.0.1" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== +strip-ansi@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" + ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.0.1: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -style-loader@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" - integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.7.0" +style-loader@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" + integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== +stylehacks@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520" + integrity sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q== dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" + browserslist "^4.16.6" + postcss-selector-parser "^6.0.4" stylis@^4.0.3: version "4.0.10" @@ -8888,90 +6758,55 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -svgo@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svgo@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== +tapable@^2.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@5, terser-webpack-plugin@^5.1.3: + version "5.3.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz#0320dcc270ad5372c1e8993fabbd927929773e54" + integrity sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tar@^6.0.2: - version "6.1.11" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" + terser "^5.7.2" -terser-webpack-plugin@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" - integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== - dependencies: - cacache "^15.0.5" - find-cache-dir "^3.3.1" - jest-worker "^26.5.0" - p-limit "^3.0.2" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.3.4" - webpack-sources "^1.4.3" - -terser@^4.1.2, terser@^4.6.3: +terser@^4.6.3: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== @@ -8980,14 +6815,15 @@ terser@^4.1.2, terser@^4.6.3: source-map "~0.6.1" source-map-support "~0.5.12" -terser@^5.3.4: - version "5.7.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" - integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== +terser@^5.7.2: + version "5.12.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.12.0.tgz#728c6bff05f7d1dcb687d8eace0644802a9dae8a" + integrity sha512-R3AUhNBGWiFc77HXag+1fXpAxTAFRQTJemlJKjAgD9r8xXTpjNKqIXwHM/o7Rh+O0kUJtS3WQVdBeMKFk5sw9A== dependencies: + acorn "^8.5.0" commander "^2.20.0" source-map "~0.7.2" - source-map-support "~0.5.19" + source-map-support "~0.5.20" tether@1.4.0: version "1.4.0" @@ -8999,31 +6835,11 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" @@ -9036,38 +6852,11 @@ tippy.js@^6.3.7: dependencies: "@popperjs/core" "^2.9.0" -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -9075,35 +6864,35 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -ts-pnp@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" - integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= -tslib@^1.8.1, tslib@^1.9.0: +tsconfig-paths@^3.12.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" - integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== +tslib@^2.0.3, tslib@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== tsutils@^3.21.0: version "3.21.0" @@ -9112,32 +6901,22 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - twitter-fetcher@^18.0.2: version "18.0.4" resolved "https://registry.yarnpkg.com/twitter-fetcher/-/twitter-fetcher-18.0.4.tgz#39a7d5bceb99eeefb39686f5729c9f2c3c01dfc7" integrity sha512-p6HIJfzYLWKVT1rDGqq6wlbfCoZiRAWC6o6zkhxqkt7s7gNxW04xrCy8mDIjl6GHVGbdN+JQtSpVhs0Mp2PKfg== -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: - prelude-ls "~1.1.2" + prelude-ls "^1.2.1" -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" @@ -9147,15 +6926,10 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@^4.0.5: - version "4.3.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc" - integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== +typescript@^4.6.3: + version "4.6.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" + integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== ui-select@0.19: version "0.19.8" @@ -9182,6 +6956,11 @@ unicode-canonical-property-names-ecmascript@^1.0.4: resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + unicode-match-property-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" @@ -9190,73 +6969,39 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + unicode-property-aliases-ecmascript@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: +unicode-property-aliases-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -9264,109 +7009,48 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-parse@^1.4.3, url-parse@^1.5.1: - version "1.5.3" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" - integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - use-immer@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/use-immer/-/use-immer-0.5.2.tgz#5f61d5662eb0df192663bb78e200521858e92499" integrity sha512-aHnLa85kftWo05lqJVOy3GLXrydqu6kl0MXvo5k5OW8IoLJixa9NY/48Xdy0LlcqdakBTFLbSDZaYVPMVhYy8Q== -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== +util@^0.12.0: + version "0.12.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" + integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.3.2, uuid@^3.4.0: +uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: +v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -var-validator@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/var-validator/-/var-validator-0.0.3.tgz#8c20155a350373233a542d3e5aed046c90891d70" - integrity sha1-jCAVWjUDcyM6VC0+Wu0EbJCJHXA= - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - void-elements@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" @@ -9384,23 +7068,13 @@ warning@^4.0.3: dependencies: loose-envify "^1.0.0" -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== +watchpack@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25" + integrity sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA== dependencies: + glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -9409,130 +7083,131 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -webpack-assets-manifest@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-3.1.1.tgz#39bbc3bf2ee57fcd8ba07cda51c9ba4a3c6ae1de" - integrity sha512-JV9V2QKc5wEWQptdIjvXDUL1ucbPLH2f27toAY3SNdGZp+xSaStAgpoMcvMZmqtFrBc9a5pTS1058vxyMPOzRQ== +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + +webpack-assets-manifest@5: + version "5.1.0" + resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-5.1.0.tgz#5af328f6c8fa760cb9a62af631a83da2b478b791" + integrity sha512-kPuTMEjBrqZQVJ5M6yXNBCEdFbQQn7p+loNXt8NOeDFaAbsNFWqqwR0YL1mfG5LbwhK5FLXWXpuK3GuIIZ46rg== dependencies: - chalk "^2.0" + chalk "^4.0" + deepmerge "^4.0" + lockfile "^1.0" lodash.get "^4.0" lodash.has "^4.0" - mkdirp "^0.5" - schema-utils "^1.0.0" - tapable "^1.0.0" - webpack-sources "^1.0.0" + schema-utils "^3.0" + tapable "^2.0" -webpack-cli@^3.3.12: - version "3.3.12" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" - integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== +webpack-cli@4: + version "4.9.2" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.2.tgz#77c1adaea020c3f9e2db8aad8ea78d235c83659d" + integrity sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ== dependencies: - chalk "^2.4.2" - cross-spawn "^6.0.5" - enhanced-resolve "^4.1.1" - findup-sync "^3.0.0" - global-modules "^2.0.0" - import-local "^2.0.0" - interpret "^1.4.0" - loader-utils "^1.4.0" - supports-color "^6.1.0" - v8-compile-cache "^2.1.1" - yargs "^13.3.2" + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.1.1" + "@webpack-cli/info" "^1.4.1" + "@webpack-cli/serve" "^1.6.1" + colorette "^2.0.14" + commander "^7.0.0" + execa "^5.0.0" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + webpack-merge "^5.7.3" -webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== +webpack-dev-middleware@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz#aa079a8dedd7e58bfeab358a9af7dab304cee57f" + integrity sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg== dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" + colorette "^2.0.10" + memfs "^3.4.1" + mime-types "^2.1.31" range-parser "^1.2.1" - webpack-log "^2.0.0" + schema-utils "^4.0.0" -webpack-dev-server@^3.11.0: - version "3.11.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" - integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== +webpack-dev-server@^4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz#d0ef7da78224578384e795ac228d8efb63d5f945" + integrity sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A== dependencies: - ansi-html "0.0.7" + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.2.2" + ansi-html-community "^0.0.8" bonjour "^3.5.0" - chokidar "^2.1.8" + chokidar "^3.5.3" + colorette "^2.0.10" compression "^1.7.4" connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" + default-gateway "^6.0.3" + del "^6.0.0" express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.8" - semver "^6.3.0" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.0" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + portfinder "^1.0.28" + schema-utils "^4.0.0" + selfsigned "^2.0.0" serve-index "^1.9.1" sockjs "^0.3.21" - sockjs-client "^1.5.0" spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" + strip-ansi "^7.0.0" + webpack-dev-middleware "^5.3.1" + ws "^8.4.2" -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== +webpack-merge@5, webpack-merge@^5.7.3: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" + clone-deep "^4.0.1" + wildcard "^2.0.0" -webpack-sources@^1.0.0, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^4.44.1, webpack@^4.46.0: - version "4.46.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" - integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== +webpack@5: + version "5.70.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.70.0.tgz#3461e6287a72b5e6e2f4872700bc8de0d7500e6d" + integrity sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.4.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.5.0" - eslint-scope "^4.0.3" + enhanced-resolve "^5.9.2" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.3.1" + webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" @@ -9548,6 +7223,14 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -9559,107 +7242,55 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-typed-array@^1.1.2: + version "1.1.7" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.7.tgz#2761799b9a22d4b8660b3c1b40abaa7739691793" + integrity sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.18.5" + foreach "^2.0.5" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.7" -which@^1.2.14, which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -word-wrap@~1.2.3: +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -ws@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +ws@^8.4.2: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.7.2: +yaml@^1.10.0, yaml@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From fa9a7301e9f050811b85f9994454618354d783a1 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Fri, 1 Apr 2022 15:49:46 +0000 Subject: [PATCH 027/274] Apply 1 suggestion(s) to 1 file(s) --- .../components/plan-categories/manage-plan-category.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/frontend/src/javascript/components/plan-categories/manage-plan-category.tsx b/app/frontend/src/javascript/components/plan-categories/manage-plan-category.tsx index 2ea78b4c2..97cd54c3f 100644 --- a/app/frontend/src/javascript/components/plan-categories/manage-plan-category.tsx +++ b/app/frontend/src/javascript/components/plan-categories/manage-plan-category.tsx @@ -15,7 +15,7 @@ interface ManagePlanCategoryProps { /** * This component shows a button. - * When clicked, we show a modal dialog allowing to fill the parameters with a new plan-category. + * When clicked, we show a modal dialog allowing to fill the parameters of a plan-category (create new or update existing). */ const ManagePlanCategoryComponent: React.FC = ({ category, action, onSuccess, onError }) => { const { t } = useTranslation('admin'); From 9a0a255f8c1138ba319e4687e8e42b277f6f99ef Mon Sep 17 00:00:00 2001 From: vincent Date: Mon, 4 Apr 2022 11:16:31 +0200 Subject: [PATCH 028/274] Use Generics --- .../src/javascript/components/base/rhf-input.tsx | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/app/frontend/src/javascript/components/base/rhf-input.tsx b/app/frontend/src/javascript/components/base/rhf-input.tsx index 152e477bd..77b134f4a 100644 --- a/app/frontend/src/javascript/components/base/rhf-input.tsx +++ b/app/frontend/src/javascript/components/base/rhf-input.tsx @@ -1,21 +1,20 @@ import React, { ReactNode } from 'react'; import { FieldErrors, UseFormRegister, Validate } from 'react-hook-form'; -import { FieldValues } from 'react-hook-form/dist/types/fields'; type inputType = string|number|readonly string []; -type ruleTypes = { +type ruleTypes = { required?: boolean | string, pattern?: RegExp | {value: RegExp, message: string}, minLenght?: number, maxLenght?: number, min?: number, max?: number, - validate?: Validate; + validate?: Validate; }; -interface RHFInputProps { +interface RHFInputProps { id: string, - register: UseFormRegister, + register: UseFormRegister, label?: string, tooltip?: string, defaultValue?: inputType, @@ -23,7 +22,7 @@ interface RHFInputProps { addOn?: ReactNode, addOnClassName?: string, classes?: string, - rules?: ruleTypes, + rules?: ruleTypes, readOnly?: boolean, disabled?: boolean, placeholder?: string, @@ -35,7 +34,7 @@ interface RHFInputProps { /** * This component is a template for an input component to use within React Hook Form */ -export const RHFInput: React.FC = ({ id, register, label, tooltip, defaultValue, icon, classes, rules, readOnly, disabled, type, addOn, addOnClassName, placeholder, error, step }) => { +export const RHFInput: React.FC> = ({ id, register, label, tooltip, defaultValue, icon, classes, rules, readOnly, disabled, type, addOn, addOnClassName, placeholder, error, step }) => { // Compose classnames from props const classNames = ` rhf-input ${classes || ''} From 1b8c7d50611e5d0f9b7d42c16d0a715b805b3e53 Mon Sep 17 00:00:00 2001 From: vincent Date: Mon, 4 Apr 2022 11:16:52 +0200 Subject: [PATCH 029/274] Update CHANGELOG --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c21caa910..36e932958 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog Fab-manager +- Use react-hook-form to manage and validate forms +- New text editor +- Change font family to "Work Sans" - Updated Node to 16.13.2 - Updated eslint to v8 and eslint related packages to their latest versions - Updated typescript to v4.6.3 From fcb59fa9a80b988912e19e65c4ca03420ed024a0 Mon Sep 17 00:00:00 2001 From: vincent Date: Mon, 4 Apr 2022 11:49:54 +0200 Subject: [PATCH 030/274] disable TS rule --- app/frontend/src/javascript/components/base/rhf-input.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/app/frontend/src/javascript/components/base/rhf-input.tsx b/app/frontend/src/javascript/components/base/rhf-input.tsx index 77b134f4a..a23c4be53 100644 --- a/app/frontend/src/javascript/components/base/rhf-input.tsx +++ b/app/frontend/src/javascript/components/base/rhf-input.tsx @@ -34,6 +34,7 @@ interface RHFInputProps { /** * This component is a template for an input component to use within React Hook Form */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any export const RHFInput: React.FC> = ({ id, register, label, tooltip, defaultValue, icon, classes, rules, readOnly, disabled, type, addOn, addOnClassName, placeholder, error, step }) => { // Compose classnames from props const classNames = ` From 6e5578db0c1d5cc11e7eafff7a401c9aa039fcf7 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Mon, 4 Apr 2022 16:12:42 +0200 Subject: [PATCH 031/274] (type) fix typing the RHFInput component --- .../javascript/components/base/rhf-input.tsx | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/app/frontend/src/javascript/components/base/rhf-input.tsx b/app/frontend/src/javascript/components/base/rhf-input.tsx index a23c4be53..1c90cbafb 100644 --- a/app/frontend/src/javascript/components/base/rhf-input.tsx +++ b/app/frontend/src/javascript/components/base/rhf-input.tsx @@ -1,20 +1,22 @@ import React, { ReactNode } from 'react'; -import { FieldErrors, UseFormRegister, Validate } from 'react-hook-form'; +import { FieldErrors, FieldPathValue, UseFormRegister, Validate } from 'react-hook-form'; +import { FieldValues } from 'react-hook-form/dist/types/fields'; +import { FieldPath } from 'react-hook-form/dist/types/path'; type inputType = string|number|readonly string []; -type ruleTypes = { +type ruleTypes = { required?: boolean | string, pattern?: RegExp | {value: RegExp, message: string}, minLenght?: number, maxLenght?: number, min?: number, max?: number, - validate?: Validate; + validate?: Validate; }; -interface RHFInputProps { +interface RHFInputProps { id: string, - register: UseFormRegister, + register: UseFormRegister, label?: string, tooltip?: string, defaultValue?: inputType, @@ -22,7 +24,7 @@ interface RHFInputProps { addOn?: ReactNode, addOnClassName?: string, classes?: string, - rules?: ruleTypes, + rules?: ruleTypes, readOnly?: boolean, disabled?: boolean, placeholder?: string, @@ -34,8 +36,7 @@ interface RHFInputProps { /** * This component is a template for an input component to use within React Hook Form */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export const RHFInput: React.FC> = ({ id, register, label, tooltip, defaultValue, icon, classes, rules, readOnly, disabled, type, addOn, addOnClassName, placeholder, error, step }) => { +export const RHFInput = ({ id, register, label, tooltip, defaultValue, icon, classes, rules, readOnly, disabled, type, addOn, addOnClassName, placeholder, error, step }: RHFInputProps) => { // Compose classnames from props const classNames = ` rhf-input ${classes || ''} @@ -54,10 +55,10 @@ export const RHFInput: React.FC> = ({ id, register, label, to
{icon && {icon}} , { ...rules, valueAsNumber: type === 'number', - value: defaultValue + value: defaultValue as FieldPathValue> })} type={type} step={step} From 830f2b7ebe1c7f4f85f26c0b1c1132f5292418da Mon Sep 17 00:00:00 2001 From: Sylvain Date: Mon, 28 Mar 2022 12:27:33 +0200 Subject: [PATCH 032/274] (dependency) add omniauth_openid_connect --- Gemfile | 1 + Gemfile.lock | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/Gemfile b/Gemfile index adc249b89..6ebb76f72 100644 --- a/Gemfile +++ b/Gemfile @@ -69,6 +69,7 @@ gem 'devise', '>= 4.6.0' gem 'omniauth', '~> 1.9.0' gem 'omniauth-oauth2' +gem 'omniauth_openid_connect' gem 'omniauth-rails_csrf_protection', '~> 0.1' gem 'rolify' diff --git a/Gemfile.lock b/Gemfile.lock index 23bd799a8..8593bac38 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -50,6 +50,7 @@ GEM tzinfo (~> 1.1) addressable (2.8.0) public_suffix (>= 2.0.2, < 5.0) + aes_key_wrap (1.1.0) afm (0.2.2) ansi (1.5.0) api-pagination (4.8.2) @@ -57,12 +58,14 @@ GEM rails (>= 4.1) arel (9.0.0) ast (2.4.0) + attr_required (1.0.1) awesome_print (1.8.0) axiom-types (0.1.1) descendants_tracker (~> 0.0.4) ice_nine (~> 0.11.0) thread_safe (~> 0.3, >= 0.3.1) bcrypt (3.1.13) + bindata (2.4.10) bindex (0.8.1) bootsnap (1.4.6) msgpack (~> 1.0) @@ -164,6 +167,7 @@ GEM httparty (0.20.0) mime-types (~> 3.0) multi_xml (>= 0.5.2) + httpclient (2.8.3) i18n (1.10.0) concurrent-ruby (~> 1.0) icalendar (2.5.3) @@ -179,6 +183,10 @@ GEM jbuilder_cache_multi (0.1.0) jbuilder (>= 1.5.0, < 3) json (2.3.1) + json-jwt (1.13.0) + activesupport (>= 4.2) + aes_key_wrap + bindata jsonpath (1.1.0) multi_json jwt (2.2.1) @@ -249,6 +257,20 @@ GEM omniauth-rails_csrf_protection (0.1.2) actionpack (>= 4.2) omniauth (>= 1.3.1) + omniauth_openid_connect (0.4.0) + addressable (~> 2.5) + omniauth (>= 1.9, < 3) + openid_connect (~> 1.1) + openid_connect (1.3.0) + activemodel + attr_required (>= 1.0.0) + json-jwt (>= 1.5.0) + rack-oauth2 (>= 1.6.1) + swd (>= 1.0.0) + tzinfo + validate_email + validate_url + webfinger (>= 1.0.1) openlab_ruby (0.0.7) httparty (~> 0.20) orm_adapter (0.5.0) @@ -280,6 +302,12 @@ GEM raabro (1.4.0) racc (1.6.0) rack (2.2.3) + rack-oauth2 (1.19.0) + activesupport + attr_required + httpclient + json-jwt (>= 1.11.0) + rack (>= 2.1.0) rack-proxy (0.7.2) rack rack-test (1.1.0) @@ -396,6 +424,10 @@ GEM sprockets (>= 3.0.0) ssrf_filter (1.0.7) stripe (5.29.0) + swd (1.3.0) + activesupport (>= 3) + attr_required (>= 0.0.5) + httpclient (>= 2.4) sync (0.5.0) sys-filesystem (1.3.3) ffi @@ -419,6 +451,12 @@ GEM tzinfo (>= 1.0.0) unicode-display_width (1.4.1) uniform_notifier (1.14.2) + validate_email (0.1.6) + activemodel (>= 3.0) + mail (>= 2.2.5) + validate_url (1.0.13) + activemodel (>= 3.0.0) + public_suffix vcr (6.0.0) virtus (1.0.5) axiom-types (~> 0.1) @@ -432,6 +470,9 @@ GEM activemodel (>= 5.0) bindex (>= 0.4.0) railties (>= 5.0) + webfinger (1.2.0) + activesupport + httpclient (>= 2.4) webmock (3.8.2) addressable (>= 2.3.6) crack (>= 0.3.2) @@ -483,6 +524,7 @@ DEPENDENCIES omniauth (~> 1.9.0) omniauth-oauth2 omniauth-rails_csrf_protection (~> 0.1) + omniauth_openid_connect openlab_ruby pdf-reader pg From 8495e2a7a048a5262ab5a46bca7f266b106032d0 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Mon, 28 Mar 2022 19:50:36 +0200 Subject: [PATCH 033/274] (db) table to save OpenID connect configuration Also refactored OAuth2Mapping to allow usage with any types of providers --- .../api/auth_providers_controller.rb | 15 +++-- .../controllers/admin/authentications.js | 10 ++-- .../authentications/_oauth2_mapping.html | 4 +- app/models/auth_provider.rb | 9 ++- app/models/auth_provider_mapping.rb | 7 +++ app/models/database_provider.rb | 4 -- app/models/o_auth2_mapping.rb | 7 --- app/models/o_auth2_provider.rb | 9 --- app/models/open_id_connect_provider.rb | 7 +++ .../_auth_provider.json.jbuilder | 3 + .../api/auth_providers/show.json.jbuilder | 5 +- config/initializers/devise.rb | 4 +- ...141618_create_open_id_connect_providers.rb | 36 +++++++++++ ...uth2_mappings_to_auth_provider_mappings.rb | 11 ++++ ...provider_id_from_auth_provider_mappings.rb | 31 ++++++++++ db/schema.rb | 59 ++++++++++++++----- .../strategies/sso_oauth2_provider.rb | 4 +- ...appings.yml => auth_provider_mappings.yml} | 0 test/integration/auth_providers_test.rb | 38 ++++++------ 19 files changed, 187 insertions(+), 76 deletions(-) create mode 100644 app/models/auth_provider_mapping.rb delete mode 100644 app/models/o_auth2_mapping.rb create mode 100644 app/models/open_id_connect_provider.rb create mode 100644 db/migrate/20220328141618_create_open_id_connect_providers.rb create mode 100644 db/migrate/20220328144305_rename_o_auth2_mappings_to_auth_provider_mappings.rb create mode 100644 db/migrate/20220328145017_migrate_o_auth2_provider_id_from_auth_provider_mappings.rb rename test/fixtures/{o_auth2_mappings.yml => auth_provider_mappings.yml} (100%) diff --git a/app/controllers/api/auth_providers_controller.rb b/app/controllers/api/auth_providers_controller.rb index f83915e9f..a79c0588a 100644 --- a/app/controllers/api/auth_providers_controller.rb +++ b/app/controllers/api/auth_providers_controller.rb @@ -80,14 +80,13 @@ class API::AuthProvidersController < API::ApiController if params['auth_provider']['providable_type'] == DatabaseProvider.name params.require(:auth_provider).permit(:name, :providable_type) elsif params['auth_provider']['providable_type'] == OAuth2Provider.name - params.require(:auth_provider) - .permit(:name, :providable_type, - providable_attributes: [:id, :base_url, :token_endpoint, :authorization_endpoint, :logout_endpoint, - :profile_url, :client_id, :client_secret, :scopes, - o_auth2_mappings_attributes: [:id, :local_model, :local_field, :api_field, - :api_endpoint, :api_data_type, :_destroy, - transformation: [:type, :format, :true_value, - :false_value, mapping: %i[from to]]]]) + params.require(:auth_provider) + .permit(:name, :providable_type, + providable_attributes: %i[id base_url token_endpoint authorization_endpoint logout_endpoint + profile_url client_id client_secret scopes], + auth_provider_mappings_attributes: [:id, :local_model, :local_field, :api_field, :api_endpoint, :api_data_type, + :_destroy, transformation: [:type, :format, :true_value, :false_value, + mapping: %i[from to]]]) end end end diff --git a/app/frontend/src/javascript/controllers/admin/authentications.js b/app/frontend/src/javascript/controllers/admin/authentications.js index 9bbe4a3d3..8288bd19d 100644 --- a/app/frontend/src/javascript/controllers/admin/authentications.js +++ b/app/frontend/src/javascript/controllers/admin/authentications.js @@ -34,7 +34,7 @@ const findIdxById = function (elements, id) { /** * For OAuth2 authentications, mapping the user's ID is mandatory. This function will check that this mapping * is effective and will return false otherwise - * @param mappings {Array} expected: $scope.provider.providable_attributes.o_auth2_mappings_attributes + * @param mappings {Array} expected: $scope.provider.auth_provider_mappings_attributes * @returns {Boolean} true if the mapping is declared */ const check_oauth2_id_is_mapped = function (mappings) { @@ -246,8 +246,8 @@ Application.Controllers.controller('NewAuthenticationController', ['$scope', '$s $scope.updateProvidable = function () { // === OAuth2Provider === if ($scope.provider.providable_type === 'OAuth2Provider') { - if (typeof $scope.provider.providable_attributes.o_auth2_mappings_attributes === 'undefined') { - return $scope.provider.providable_attributes.o_auth2_mappings_attributes = []; + if (typeof $scope.provider.auth_provider_mappings_attributes === 'undefined') { + return $scope.provider.auth_provider_mappings_attributes = []; } } }; @@ -274,7 +274,7 @@ Application.Controllers.controller('NewAuthenticationController', ['$scope', '$s // === OAuth2Provider === } else if ($scope.provider.providable_type === 'OAuth2Provider') { // check the ID mapping - if (!check_oauth2_id_is_mapped($scope.provider.providable_attributes.o_auth2_mappings_attributes)) { + if (!check_oauth2_id_is_mapped($scope.provider.auth_provider_mappings_attributes)) { growl.error(_t('app.admin.authentication_new.it_is_required_to_set_the_matching_between_User.uid_and_the_API_to_add_this_provider')); return false; } @@ -330,7 +330,7 @@ Application.Controllers.controller('EditAuthenticationController', ['$scope', '$ */ $scope.updateProvider = function () { // check the ID mapping - if (!check_oauth2_id_is_mapped($scope.provider.providable_attributes.o_auth2_mappings_attributes)) { + if (!check_oauth2_id_is_mapped($scope.provider.auth_provider_mappings_attributes)) { growl.error(_t('app.admin.authentication_edit.it_is_required_to_set_the_matching_between_User.uid_and_the_API_to_add_this_provider')); return false; } diff --git a/app/frontend/templates/admin/authentications/_oauth2_mapping.html b/app/frontend/templates/admin/authentications/_oauth2_mapping.html index d6d37811c..48a370eb6 100644 --- a/app/frontend/templates/admin/authentications/_oauth2_mapping.html +++ b/app/frontend/templates/admin/authentications/_oauth2_mapping.html @@ -14,7 +14,7 @@
- + @@ -72,7 +72,7 @@ required/> diff --git a/app/models/auth_provider.rb b/app/models/auth_provider.rb index 318340048..29fdf0a0f 100644 --- a/app/models/auth_provider.rb +++ b/app/models/auth_provider.rb @@ -18,6 +18,9 @@ class AuthProvider < ApplicationRecord belongs_to :providable, polymorphic: true, dependent: :destroy accepts_nested_attributes_for :providable + has_many :auth_provider_mappings, dependent: :destroy + accepts_nested_attributes_for :auth_provider_mappings, allow_destroy: true + before_create :set_initial_state def build_providable(params) @@ -75,7 +78,11 @@ class AuthProvider < ApplicationRecord ## Return the user's profile fields that are currently managed from the SSO ## @return [Array] def sso_fields - providable.protected_fields + fields = [] + auth_provider_mappings.each do |mapping| + fields.push(mapping.local_model + '.' + mapping.local_field) + end + fields end ## Return the link the user have to follow to edit his profile on the SSO diff --git a/app/models/auth_provider_mapping.rb b/app/models/auth_provider_mapping.rb new file mode 100644 index 000000000..4f4c19d56 --- /dev/null +++ b/app/models/auth_provider_mapping.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +# AuthProviderMapping defines the relationship between a database field (saving user's data) +# and an external API, that is authorized through an external SSO (like oAuth 2.0). +class AuthProviderMapping < ApplicationRecord + belongs_to :auth_provider +end diff --git a/app/models/database_provider.rb b/app/models/database_provider.rb index 6c4c9fb95..6b625603d 100644 --- a/app/models/database_provider.rb +++ b/app/models/database_provider.rb @@ -5,10 +5,6 @@ class DatabaseProvider < ApplicationRecord has_one :auth_provider, as: :providable, dependent: :destroy - def protected_fields - [] - end - def profile_url '/#!/dashboard/profile' end diff --git a/app/models/o_auth2_mapping.rb b/app/models/o_auth2_mapping.rb deleted file mode 100644 index 6f097dea7..000000000 --- a/app/models/o_auth2_mapping.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -# OAuth2Mapping defines a database field, saving user's data, that is mapped to an external API, that is authorized -# through an external SSO of type oAuth 2 -class OAuth2Mapping < ApplicationRecord - belongs_to :o_auth2_provider -end diff --git a/app/models/o_auth2_provider.rb b/app/models/o_auth2_provider.rb index 75f847d7d..a91647b85 100644 --- a/app/models/o_auth2_provider.rb +++ b/app/models/o_auth2_provider.rb @@ -4,18 +4,9 @@ # the oAuth 2.0 protocol. class OAuth2Provider < ApplicationRecord has_one :auth_provider, as: :providable - has_many :o_auth2_mappings, dependent: :destroy - accepts_nested_attributes_for :o_auth2_mappings, allow_destroy: true def domain URI(base_url).scheme + '://' + URI(base_url).host end - def protected_fields - fields = [] - o_auth2_mappings.each do |mapping| - fields.push(mapping.local_model + '.' + mapping.local_field) - end - fields - end end diff --git a/app/models/open_id_connect_provider.rb b/app/models/open_id_connect_provider.rb new file mode 100644 index 000000000..a631a26a7 --- /dev/null +++ b/app/models/open_id_connect_provider.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +# OpenIdConnectProvider is a special type of AuthProvider which provides authentication through an external SSO server using +# the OpenID Connect protocol. +class OpenIdConnectProvider < ApplicationRecord + has_one :auth_provider, as: :providable +end diff --git a/app/views/api/auth_providers/_auth_provider.json.jbuilder b/app/views/api/auth_providers/_auth_provider.json.jbuilder index 325094b72..8889c959d 100644 --- a/app/views/api/auth_providers/_auth_provider.json.jbuilder +++ b/app/views/api/auth_providers/_auth_provider.json.jbuilder @@ -1,3 +1,6 @@ # frozen_string_literal: true json.extract! auth_provider, :id, :name, :status, :providable_type, :strategy_name +json.auth_provider_mappings_attributes @provider.auth_provider_mappings do |m| + json.extract! m, :id, :local_model, :local_field, :api_field, :api_endpoint, :api_data_type, :transformation +end diff --git a/app/views/api/auth_providers/show.json.jbuilder b/app/views/api/auth_providers/show.json.jbuilder index 78e7397b1..183fad96b 100644 --- a/app/views/api/auth_providers/show.json.jbuilder +++ b/app/views/api/auth_providers/show.json.jbuilder @@ -1,3 +1,5 @@ +# frozen_string_literal: true + json.partial! 'api/auth_providers/auth_provider', auth_provider: @provider # OAuth 2.0 @@ -5,8 +7,5 @@ json.partial! 'api/auth_providers/auth_provider', auth_provider: @provider if @provider.providable_type == OAuth2Provider.name json.providable_attributes do json.extract! @provider.providable, :id, :base_url, :token_endpoint, :authorization_endpoint, :profile_url, :client_id, :client_secret, :scopes - json.o_auth2_mappings_attributes @provider.providable.o_auth2_mappings do |m| - json.extract! m, :id, :local_model, :local_field, :api_field, :api_endpoint, :api_data_type, :transformation - end end end diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 95df71d50..32aa13e4a 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -231,7 +231,9 @@ Devise.setup do |config| require_relative '../../lib/omni_auth/omni_auth' active_provider = AuthProvider.active if active_provider.providable_type == OAuth2Provider.name - config.omniauth OmniAuth::Strategies::SsoOauth2Provider.name.to_sym, active_provider.providable.client_id, active_provider.providable.client_secret + config.omniauth OmniAuth::Strategies::SsoOauth2Provider.name.to_sym, + active_provider.providable.client_id, + active_provider.providable.client_secret end # ==> Warden configuration diff --git a/db/migrate/20220328141618_create_open_id_connect_providers.rb b/db/migrate/20220328141618_create_open_id_connect_providers.rb new file mode 100644 index 000000000..9d04d1ce0 --- /dev/null +++ b/db/migrate/20220328141618_create_open_id_connect_providers.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +# This migration allow configuration of OpenID Connect providers +class CreateOpenIdConnectProviders < ActiveRecord::Migration[5.2] + def change + create_table :open_id_connect_providers do |t| + t.string :issuer + t.boolean :discovery + t.string :client_auth_method + t.string :scope + t.string :response_type + t.string :response_type + t.string :response_mode + t.string :display + t.string :prompt + t.boolean :send_scope_to_token_endpoint + t.string :post_logout_redirect_uri + t.string :uid_field + t.string :extra_authorize_params + t.string :allow_authorize_params + t.string :client_identifier + t.string :client_secret + t.string :client_redirect_uri + t.string :client_scheme + t.string :client_host + t.string :client_port + t.string :client_authorization_endpoint + t.string :client_token_endpoint + t.string :client_userinfo_endpoint + t.string :client_jwks_uri + t.string :client_end_session_endpoint + + t.timestamps + end + end +end diff --git a/db/migrate/20220328144305_rename_o_auth2_mappings_to_auth_provider_mappings.rb b/db/migrate/20220328144305_rename_o_auth2_mappings_to_auth_provider_mappings.rb new file mode 100644 index 000000000..f64d47a41 --- /dev/null +++ b/db/migrate/20220328144305_rename_o_auth2_mappings_to_auth_provider_mappings.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +# This migration renames the OAuth2Mappings table to AuthProviderMappings because the +# field mapping is common to all kinds of single-sign-on providers. +class RenameOAuth2MappingsToAuthProviderMappings < ActiveRecord::Migration[5.2] + def change + rename_table :o_auth2_mappings, :auth_provider_mappings + add_reference :auth_provider_mappings, :auth_provider, index: true, foreign_key: true + + end +end diff --git a/db/migrate/20220328145017_migrate_o_auth2_provider_id_from_auth_provider_mappings.rb b/db/migrate/20220328145017_migrate_o_auth2_provider_id_from_auth_provider_mappings.rb new file mode 100644 index 000000000..cc659e48c --- /dev/null +++ b/db/migrate/20220328145017_migrate_o_auth2_provider_id_from_auth_provider_mappings.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +# Previously, the AuthProviderMapping was saving an o_auth2_provider_id. +# This migration migrates that data to bind the mappings directly to an AuthProvider as this table is now protocol-generic. +class MigrateOAuth2ProviderIdFromAuthProviderMappings < ActiveRecord::Migration[5.2] + def up + execute <<~SQL + UPDATE auth_provider_mappings + SET auth_provider_id = auth_providers.id + FROM o_auth2_providers + INNER JOIN auth_providers ON auth_providers.providable_id = o_auth2_providers.id + AND auth_providers.providable_type = 'OAuth2Provider' + WHERE auth_provider_mappings.o_auth2_provider_id = o_auth2_providers.id + SQL + + remove_reference :auth_provider_mappings, :o_auth2_provider, index: true, foreign_key: true + end + + def down + add_reference :auth_provider_mappings, :o_auth2_provider, index: true, foreign_key: true + + execute <<~SQL + UPDATE auth_provider_mappings + SET o_auth2_provider_id = o_auth2_providers.id + FROM o_auth2_providers + INNER JOIN auth_providers ON auth_providers.providable_id = o_auth2_providers.id + AND auth_providers.providable_type = 'OAuth2Provider' + WHERE auth_provider_mappings.auth_provider_id = auth_providers.id + SQL + end +end diff --git a/db/schema.rb b/db/schema.rb index 18ea2c102..e0f8c2602 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_03_22_135836) do +ActiveRecord::Schema.define(version: 2022_03_28_145017) do # These are extensions that must be enabled in order to support this database enable_extension "fuzzystrmatch" @@ -72,6 +72,19 @@ ActiveRecord::Schema.define(version: 2022_03_22_135836) do t.datetime "updated_at" end + create_table "auth_provider_mappings", id: :serial, force: :cascade do |t| + t.string "local_field" + t.string "api_field" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "local_model" + t.string "api_endpoint" + t.string "api_data_type" + t.jsonb "transformation" + t.bigint "auth_provider_id" + t.index ["auth_provider_id"], name: "index_auth_provider_mappings_on_auth_provider_id" + end + create_table "auth_providers", id: :serial, force: :cascade do |t| t.string "name" t.string "status" @@ -369,19 +382,6 @@ ActiveRecord::Schema.define(version: 2022_03_22_135836) do t.index ["receiver_id"], name: "index_notifications_on_receiver_id" end - create_table "o_auth2_mappings", id: :serial, force: :cascade do |t| - t.integer "o_auth2_provider_id" - t.string "local_field" - t.string "api_field" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "local_model" - t.string "api_endpoint" - t.string "api_data_type" - t.jsonb "transformation" - t.index ["o_auth2_provider_id"], name: "index_o_auth2_mappings_on_o_auth2_provider_id" - end - create_table "o_auth2_providers", id: :serial, force: :cascade do |t| t.string "base_url" t.string "token_endpoint" @@ -411,6 +411,35 @@ ActiveRecord::Schema.define(version: 2022_03_22_135836) do t.datetime "updated_at", null: false end + create_table "open_id_connect_providers", force: :cascade do |t| + t.string "issuer" + t.boolean "discovery" + t.string "client_auth_method" + t.string "scope" + t.string "response_type" + t.string "response_mode" + t.string "display" + t.string "prompt" + t.boolean "send_scope_to_token_endpoint" + t.string "post_logout_redirect_uri" + t.string "uid_field" + t.string "extra_authorize_params" + t.string "allow_authorize_params" + t.string "client_identifier" + t.string "client_secret" + t.string "client_redirect_uri" + t.string "client_scheme" + t.string "client_host" + t.string "client_port" + t.string "client_authorization_endpoint" + t.string "client_token_endpoint" + t.string "client_userinfo_endpoint" + t.string "client_jwks_uri" + t.string "client_end_session_endpoint" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "organizations", id: :serial, force: :cascade do |t| t.string "name" t.datetime "created_at", null: false @@ -983,6 +1012,7 @@ ActiveRecord::Schema.define(version: 2022_03_22_135836) do end add_foreign_key "accounting_periods", "users", column: "closed_by" + add_foreign_key "auth_provider_mappings", "auth_providers" add_foreign_key "availability_tags", "availabilities" add_foreign_key "availability_tags", "tags" add_foreign_key "event_price_categories", "events" @@ -1000,7 +1030,6 @@ ActiveRecord::Schema.define(version: 2022_03_22_135836) do add_foreign_key "invoices", "statistic_profiles" add_foreign_key "invoices", "wallet_transactions" add_foreign_key "invoicing_profiles", "users" - add_foreign_key "o_auth2_mappings", "o_auth2_providers" add_foreign_key "organizations", "invoicing_profiles" add_foreign_key "payment_gateway_objects", "payment_gateway_objects" add_foreign_key "payment_schedule_items", "invoices" diff --git a/lib/omni_auth/strategies/sso_oauth2_provider.rb b/lib/omni_auth/strategies/sso_oauth2_provider.rb index af59688ad..8d9cfd9e7 100644 --- a/lib/omni_auth/strategies/sso_oauth2_provider.rb +++ b/lib/omni_auth/strategies/sso_oauth2_provider.rb @@ -58,7 +58,7 @@ module OmniAuth::Strategies @raw_info ||= {} logger.debug "[raw_info] @raw_infos = #{@raw_info&.to_json}" unless @raw_info.size.positive? - OmniAuth::Strategies::SsoOauth2Provider.active_provider.providable.o_auth2_mappings.each do |mapping| + OmniAuth::Strategies::SsoOauth2Provider.active_provider.auth_provider_mappings.each do |mapping| logger.debug "mapping = #{mapping&.to_json}" next if @raw_info.key?(mapping.api_endpoint.to_sym) @@ -78,7 +78,7 @@ module OmniAuth::Strategies @parsed_info ||= {} logger.debug "[parsed_info] @parsed_info = #{@parsed_info.to_json}" unless @parsed_info.size.positive? - OmniAuth::Strategies::SsoOauth2Provider.active_provider.providable.o_auth2_mappings.each do |mapping| + OmniAuth::Strategies::SsoOauth2Provider.active_provider.auth_provider_mappings.each do |mapping| raw_data = ::JsonPath.new(mapping.api_field).on(raw_info[mapping.api_endpoint.to_sym]).first logger.debug "@parsed_info[#{local_sym(mapping)}] mapped from #{raw_data}" diff --git a/test/fixtures/o_auth2_mappings.yml b/test/fixtures/auth_provider_mappings.yml similarity index 100% rename from test/fixtures/o_auth2_mappings.yml rename to test/fixtures/auth_provider_mappings.yml diff --git a/test/integration/auth_providers_test.rb b/test/integration/auth_providers_test.rb index d985ab580..f55afc51d 100644 --- a/test/integration/auth_providers_test.rb +++ b/test/integration/auth_providers_test.rb @@ -22,24 +22,24 @@ class AuthProvidersTest < ActionDispatch::IntegrationTest base_url: 'https://github.com/login/oauth/', profile_url: 'https://github.com/settings/profile', client_id: ENV.fetch('OAUTH_CLIENT_ID') { 'github-oauth-app-id' }, - client_secret: ENV.fetch('OAUTH_CLIENT_SECRET') { 'github-oauth-app-secret' }, - o_auth2_mappings_attributes: [ - { - api_data_type: 'json', - api_endpoint: 'https://api.github.com/user', - api_field: 'id', - local_field: 'uid', - local_model: 'user' - }, - { - api_data_type: 'json', - api_endpoint: 'https://api.github.com/user', - api_field: 'html_url', - local_field: 'github', - local_model: 'profile' - } - ] - } + client_secret: ENV.fetch('OAUTH_CLIENT_SECRET') { 'github-oauth-app-secret' } + }, + auth_provider_mappings_attributes: [ + { + api_data_type: 'json', + api_endpoint: 'https://api.github.com/user', + api_field: 'id', + local_field: 'uid', + local_model: 'user' + }, + { + api_data_type: 'json', + api_endpoint: 'https://api.github.com/user', + api_field: 'html_url', + local_field: 'github', + local_model: 'profile' + } + ] } }.to_json, headers: default_headers @@ -56,7 +56,7 @@ class AuthProvidersTest < ActionDispatch::IntegrationTest assert_equal name, provider[:name] assert_equal db_provider.id, provider[:id] assert_equal 'pending', provider[:status] - assert_equal 2, provider[:providable_attributes][:o_auth2_mappings_attributes].length + assert_equal 2, provider[:auth_provider_mappings_attributes].length # now let's activate this new provider Fablab::Application.load_tasks if Rake::Task.tasks.empty? From bd68c5e7e8d5a22f31e5d3160b1b84d0d857acfb Mon Sep 17 00:00:00 2001 From: Sylvain Date: Tue, 29 Mar 2022 12:18:16 +0200 Subject: [PATCH 034/274] (authentication) configure devise/omniauth to use the OpenIdConnect configuration --- app/models/open_id_connect_provider.rb | 24 ++++++++++++++++++++++++ config/initializers/devise.rb | 2 ++ 2 files changed, 26 insertions(+) diff --git a/app/models/open_id_connect_provider.rb b/app/models/open_id_connect_provider.rb index a631a26a7..793e5974f 100644 --- a/app/models/open_id_connect_provider.rb +++ b/app/models/open_id_connect_provider.rb @@ -4,4 +4,28 @@ # the OpenID Connect protocol. class OpenIdConnectProvider < ApplicationRecord has_one :auth_provider, as: :providable + + validates :issuer, presence: true + validates :client_identifier, presence: true + validates :client_secret, presence: true + validates :client_host, presence: true + + validates :client_scheme, inclusion: { in: %w[http https] } + validates :client_port, numericality: { only_integer: true, greater_than: 0, less_than: 65_535 } + validates :response_type, inclusion: { in: %w[code id_token], allow_nil: true } + validates :response_mode, inclusion: { in: %w[query fragment form_post web_message], allow_nil: true } + validates :display, inclusion: { in: %w[page popup touch wap], allow_nil: true } + validates :prompt, inclusion: { in: %w[none login consent select_account], allow_nil: true } + + def config + OpenIdConnectProvider.columns.map(&:name).filter { |n| !n.start_with?('client_') }.map do |n| + [n, send(n)] + end.push(['client_options', client_config]).to_h + end + + def client_config + OpenIdConnectProvider.columns.map(&:name).filter { |n| n.start_with?('client_') }.map do |n| + [n.sub('client_', ''), send(n)] + end.to_h + end end diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 32aa13e4a..dfe81d119 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -234,6 +234,8 @@ Devise.setup do |config| config.omniauth OmniAuth::Strategies::SsoOauth2Provider.name.to_sym, active_provider.providable.client_id, active_provider.providable.client_secret + elsif active_provider.providable_type == OpenIdConnectProvider.name + config.omniauth :openid_connect, active_provider.config end # ==> Warden configuration From 58d0d306024b7421a4d76abfbc024171a20f0f57 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Tue, 29 Mar 2022 13:25:50 +0200 Subject: [PATCH 035/274] (bug) return auth provider mappings from the API --- app/views/api/auth_providers/_auth_provider.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/api/auth_providers/_auth_provider.json.jbuilder b/app/views/api/auth_providers/_auth_provider.json.jbuilder index 8889c959d..588a98df2 100644 --- a/app/views/api/auth_providers/_auth_provider.json.jbuilder +++ b/app/views/api/auth_providers/_auth_provider.json.jbuilder @@ -1,6 +1,6 @@ # frozen_string_literal: true json.extract! auth_provider, :id, :name, :status, :providable_type, :strategy_name -json.auth_provider_mappings_attributes @provider.auth_provider_mappings do |m| +json.auth_provider_mappings_attributes auth_provider.auth_provider_mappings do |m| json.extract! m, :id, :local_model, :local_field, :api_field, :api_endpoint, :api_data_type, :transformation end From d4be62d0b861965fe43fb40867b10ccf70e9f312 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Wed, 30 Mar 2022 10:24:25 +0200 Subject: [PATCH 036/274] (db) add profile_url to OpenIdConnectProvider --- app/models/open_id_connect_provider.rb | 2 +- ...141618_create_open_id_connect_providers.rb | 1 + db/schema.rb | 19 ++++++++++--------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/models/open_id_connect_provider.rb b/app/models/open_id_connect_provider.rb index 793e5974f..39e4bf4c1 100644 --- a/app/models/open_id_connect_provider.rb +++ b/app/models/open_id_connect_provider.rb @@ -18,7 +18,7 @@ class OpenIdConnectProvider < ApplicationRecord validates :prompt, inclusion: { in: %w[none login consent select_account], allow_nil: true } def config - OpenIdConnectProvider.columns.map(&:name).filter { |n| !n.start_with?('client_') }.map do |n| + OpenIdConnectProvider.columns.map(&:name).filter { |n| !n.start_with?('client_') && n != 'profile_url' }.map do |n| [n, send(n)] end.push(['client_options', client_config]).to_h end diff --git a/db/migrate/20220328141618_create_open_id_connect_providers.rb b/db/migrate/20220328141618_create_open_id_connect_providers.rb index 9d04d1ce0..c2ede56f7 100644 --- a/db/migrate/20220328141618_create_open_id_connect_providers.rb +++ b/db/migrate/20220328141618_create_open_id_connect_providers.rb @@ -29,6 +29,7 @@ class CreateOpenIdConnectProviders < ActiveRecord::Migration[5.2] t.string :client_userinfo_endpoint t.string :client_jwks_uri t.string :client_end_session_endpoint + t.string :profile_url t.timestamps end diff --git a/db/schema.rb b/db/schema.rb index e0f8c2602..197d2e96c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -19,8 +19,8 @@ ActiveRecord::Schema.define(version: 2022_03_28_145017) do enable_extension "unaccent" create_table "abuses", id: :serial, force: :cascade do |t| - t.string "signaled_type" t.integer "signaled_id" + t.string "signaled_type" t.string "first_name" t.string "last_name" t.string "email" @@ -49,8 +49,8 @@ ActiveRecord::Schema.define(version: 2022_03_28_145017) do t.string "locality" t.string "country" t.string "postal_code" - t.string "placeable_type" t.integer "placeable_id" + t.string "placeable_type" t.datetime "created_at" t.datetime "updated_at" end @@ -64,8 +64,8 @@ ActiveRecord::Schema.define(version: 2022_03_28_145017) do end create_table "assets", id: :serial, force: :cascade do |t| - t.string "viewable_type" t.integer "viewable_id" + t.string "viewable_type" t.string "attachment" t.string "type" t.datetime "created_at" @@ -146,8 +146,8 @@ ActiveRecord::Schema.define(version: 2022_03_28_145017) do end create_table "credits", id: :serial, force: :cascade do |t| - t.string "creditable_type" t.integer "creditable_id" + t.string "creditable_type" t.integer "plan_id" t.integer "hours" t.datetime "created_at" @@ -369,15 +369,15 @@ ActiveRecord::Schema.define(version: 2022_03_28_145017) do create_table "notifications", id: :serial, force: :cascade do |t| t.integer "receiver_id" - t.string "attached_object_type" t.integer "attached_object_id" + t.string "attached_object_type" t.integer "notification_type_id" t.boolean "is_read", default: false t.datetime "created_at" t.datetime "updated_at" t.string "receiver_type" t.boolean "is_send", default: false - t.jsonb "meta_data", default: "{}" + t.jsonb "meta_data", default: {} t.index ["notification_type_id"], name: "index_notifications_on_notification_type_id" t.index ["receiver_id"], name: "index_notifications_on_receiver_id" end @@ -436,6 +436,7 @@ ActiveRecord::Schema.define(version: 2022_03_28_145017) do t.string "client_userinfo_endpoint" t.string "client_jwks_uri" t.string "client_end_session_endpoint" + t.string "profile_url" t.datetime "created_at", null: false t.datetime "updated_at", null: false end @@ -571,8 +572,8 @@ ActiveRecord::Schema.define(version: 2022_03_28_145017) do create_table "prices", id: :serial, force: :cascade do |t| t.integer "group_id" t.integer "plan_id" - t.string "priceable_type" t.integer "priceable_id" + t.string "priceable_type" t.integer "amount" t.datetime "created_at", null: false t.datetime "updated_at", null: false @@ -682,8 +683,8 @@ ActiveRecord::Schema.define(version: 2022_03_28_145017) do t.text "message" t.datetime "created_at" t.datetime "updated_at" - t.string "reservable_type" t.integer "reservable_id" + t.string "reservable_type" t.integer "nb_reserve_places" t.integer "statistic_profile_id" t.index ["reservable_type", "reservable_id"], name: "index_reservations_on_reservable_type_and_reservable_id" @@ -692,8 +693,8 @@ ActiveRecord::Schema.define(version: 2022_03_28_145017) do create_table "roles", id: :serial, force: :cascade do |t| t.string "name" - t.string "resource_type" t.integer "resource_id" + t.string "resource_type" t.datetime "created_at" t.datetime "updated_at" t.index ["name", "resource_type", "resource_id"], name: "index_roles_on_name_and_resource_type_and_resource_id" From 08ce18d93fb638a0444dffa0bd486ce10a198a79 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Wed, 30 Mar 2022 11:23:29 +0200 Subject: [PATCH 037/274] (db) distringuish between oid client configuration and client_auth_method --- app/models/open_id_connect_provider.rb | 6 ++--- ...141618_create_open_id_connect_providers.rb | 22 +++++++++---------- db/schema.rb | 22 +++++++++---------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/app/models/open_id_connect_provider.rb b/app/models/open_id_connect_provider.rb index 39e4bf4c1..4069e00f1 100644 --- a/app/models/open_id_connect_provider.rb +++ b/app/models/open_id_connect_provider.rb @@ -18,14 +18,14 @@ class OpenIdConnectProvider < ApplicationRecord validates :prompt, inclusion: { in: %w[none login consent select_account], allow_nil: true } def config - OpenIdConnectProvider.columns.map(&:name).filter { |n| !n.start_with?('client_') && n != 'profile_url' }.map do |n| + OpenIdConnectProvider.columns.map(&:name).filter { |n| !n.start_with?('client__') && n != 'profile_url' }.map do |n| [n, send(n)] end.push(['client_options', client_config]).to_h end def client_config - OpenIdConnectProvider.columns.map(&:name).filter { |n| n.start_with?('client_') }.map do |n| - [n.sub('client_', ''), send(n)] + OpenIdConnectProvider.columns.map(&:name).filter { |n| n.start_with?('client__') }.map do |n| + [n.sub('client__', ''), send(n)] end.to_h end end diff --git a/db/migrate/20220328141618_create_open_id_connect_providers.rb b/db/migrate/20220328141618_create_open_id_connect_providers.rb index c2ede56f7..6a6b22cd1 100644 --- a/db/migrate/20220328141618_create_open_id_connect_providers.rb +++ b/db/migrate/20220328141618_create_open_id_connect_providers.rb @@ -18,17 +18,17 @@ class CreateOpenIdConnectProviders < ActiveRecord::Migration[5.2] t.string :uid_field t.string :extra_authorize_params t.string :allow_authorize_params - t.string :client_identifier - t.string :client_secret - t.string :client_redirect_uri - t.string :client_scheme - t.string :client_host - t.string :client_port - t.string :client_authorization_endpoint - t.string :client_token_endpoint - t.string :client_userinfo_endpoint - t.string :client_jwks_uri - t.string :client_end_session_endpoint + t.string :client__identifier + t.string :client__secret + t.string :client__redirect_uri + t.string :client__scheme + t.string :client__host + t.string :client__port + t.string :client__authorization_endpoint + t.string :client__token_endpoint + t.string :client__userinfo_endpoint + t.string :client__jwks_uri + t.string :client__end_session_endpoint t.string :profile_url t.timestamps diff --git a/db/schema.rb b/db/schema.rb index 197d2e96c..fcb7dd7d4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -425,17 +425,17 @@ ActiveRecord::Schema.define(version: 2022_03_28_145017) do t.string "uid_field" t.string "extra_authorize_params" t.string "allow_authorize_params" - t.string "client_identifier" - t.string "client_secret" - t.string "client_redirect_uri" - t.string "client_scheme" - t.string "client_host" - t.string "client_port" - t.string "client_authorization_endpoint" - t.string "client_token_endpoint" - t.string "client_userinfo_endpoint" - t.string "client_jwks_uri" - t.string "client_end_session_endpoint" + t.string "client__identifier" + t.string "client__secret" + t.string "client__redirect_uri" + t.string "client__scheme" + t.string "client__host" + t.string "client__port" + t.string "client__authorization_endpoint" + t.string "client__token_endpoint" + t.string "client__userinfo_endpoint" + t.string "client__jwks_uri" + t.string "client__end_session_endpoint" t.string "profile_url" t.datetime "created_at", null: false t.datetime "updated_at", null: false From ecccf6a4ec04a46203826b3e2228e5c4fbb31498 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Wed, 30 Mar 2022 11:31:05 +0200 Subject: [PATCH 038/274] (api) openid provider configuration api --- app/controllers/api/auth_providers_controller.rb | 13 ++++++++++++- app/views/api/auth_providers/show.json.jbuilder | 10 ++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/auth_providers_controller.rb b/app/controllers/api/auth_providers_controller.rb index a79c0588a..d53a15de8 100644 --- a/app/controllers/api/auth_providers_controller.rb +++ b/app/controllers/api/auth_providers_controller.rb @@ -82,11 +82,22 @@ class API::AuthProvidersController < API::ApiController elsif params['auth_provider']['providable_type'] == OAuth2Provider.name params.require(:auth_provider) .permit(:name, :providable_type, - providable_attributes: %i[id base_url token_endpoint authorization_endpoint logout_endpoint + providable_attributes: %i[id base_url token_endpoint authorization_endpoint profile_url client_id client_secret scopes], auth_provider_mappings_attributes: [:id, :local_model, :local_field, :api_field, :api_endpoint, :api_data_type, :_destroy, transformation: [:type, :format, :true_value, :false_value, mapping: %i[from to]]]) + elsif params['auth_provider']['providable_type'] == OpenIdConnectProvider.name + params.require(:auth_provider) + .permit(:name, :providable_type, + providable_attributes: %i[id issuer discovery client_auth_method scope response_type response_mode display prompt + send_scope_to_token_endpoint post_logout_redirect_uri uid_field extra_authorize_params + allow_authorize_params client__identifier client__secret client__redirect_uri + client__scheme client__host client__port client__authorization_endpoint client__token_endpoint + client__userinfo_endpoint client__jwks_uri client__end_session_endpoint profile_url], + auth_provider_mappings_attributes: [:id, :local_model, :local_field, :api_field, :api_endpoint, :api_data_type, + :_destroy, transformation: [:type, :format, :true_value, :false_value, + mapping: %i[from to]]]) end end end diff --git a/app/views/api/auth_providers/show.json.jbuilder b/app/views/api/auth_providers/show.json.jbuilder index 183fad96b..bdcbcc9bb 100644 --- a/app/views/api/auth_providers/show.json.jbuilder +++ b/app/views/api/auth_providers/show.json.jbuilder @@ -9,3 +9,13 @@ if @provider.providable_type == OAuth2Provider.name json.extract! @provider.providable, :id, :base_url, :token_endpoint, :authorization_endpoint, :profile_url, :client_id, :client_secret, :scopes end end + +if @provider.providable_type == OpenIdConnectProvider.name + json.providable_attributes do + json.extract! @provider.providable, :id, :issuer, :discovery, :client_auth_method, :scope, :response_type, :response_mode, :display, + :prompt, :send_scope_to_token_endpoint, :post_logout_redirect_uri, :uid_field, :extra_authorize_params, + :allow_authorize_params, :client__identifier, :client__secret, :client__redirect_uri, :client__scheme, + :client__host, :client__port, :client__authorization_endpoint, :client__token_endpoint, :client__userinfo_endpoint, + :client__jwks_uri, :client__end_session_endpoint, :profile_url + end +end From f17aa0d7ea05e7642daf18375cea01507e5abcc6 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Wed, 30 Mar 2022 12:22:20 +0200 Subject: [PATCH 039/274] (dependency) updated nodejs --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53f5d10ed..ae7d591c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,10 @@ # Changelog Fab-manager +- Updated nodejs version to 16.13.2 for dev environment, to reflect production version - Changed the apparence of the modal dialogs (React): no more logo and the close button appears in full-text in the top right corner. - Use react-hook-form to manage and validate forms - New text editor - Change font family to "Work Sans" -- Updated Node to 16.13.2 - Updated eslint to v8 and eslint related packages to their latest versions - Updated typescript to v4.6.3 - Webpack overlay will now report eslint issues From 1657e9dc8f8070163528a85756da87014bf0f575 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Wed, 30 Mar 2022 15:26:07 +0200 Subject: [PATCH 040/274] (doc) minimum docker version --- CHANGELOG.md | 1 + doc/production_readme.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae7d591c8..141203811 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Changelog Fab-manager +- Updated the documentation about the minimum docker version - Updated nodejs version to 16.13.2 for dev environment, to reflect production version - Changed the apparence of the modal dialogs (React): no more logo and the close button appears in full-text in the top right corner. - Use react-hook-form to manage and validate forms diff --git a/doc/production_readme.md b/doc/production_readme.md index cb76da9b8..856d37e50 100644 --- a/doc/production_readme.md +++ b/doc/production_readme.md @@ -50,7 +50,7 @@ This might work on other linux systems, and CPU architectures but this is untest `curl` and `bash` are needed to retrieve and run the automated deployment scripts. Then the various scripts will check for their own dependencies. -Moreover, the main software dependencies to run fab-manager are [Docker](https://docs.docker.com/engine/installation/linux/docker-ce/debian/) and [Docker Compose](https://docs.docker.com/compose/install/) +Moreover, the main software dependencies to run fab-manager are [Docker](https://docs.docker.com/engine/installation/linux/docker-ce/debian/) v20.0 or above and [Docker Compose](https://docs.docker.com/compose/install/) They can be easily installed using the [`prepare-vps.sleede.com` script below](#prepare-the-server). From f68c8a492e689c8bc727eade3fc8fe928144248c Mon Sep 17 00:00:00 2001 From: Sylvain Date: Wed, 30 Mar 2022 18:01:19 +0200 Subject: [PATCH 041/274] WIP: front-end form for openid configuration --- .../src/javascript/api/auth-provider.ts | 31 +++++++++ .../authentication-provider/provider-form.tsx | 27 ++++++++ .../models/authentication-provider.ts | 68 +++++++++++++++++++ app/models/auth_provider.rb | 2 +- app/models/open_id_connect_provider.rb | 11 ++- 5 files changed, 132 insertions(+), 7 deletions(-) create mode 100644 app/frontend/src/javascript/api/auth-provider.ts create mode 100644 app/frontend/src/javascript/components/authentication-provider/provider-form.tsx create mode 100644 app/frontend/src/javascript/models/authentication-provider.ts diff --git a/app/frontend/src/javascript/api/auth-provider.ts b/app/frontend/src/javascript/api/auth-provider.ts new file mode 100644 index 000000000..ec00b2fbd --- /dev/null +++ b/app/frontend/src/javascript/api/auth-provider.ts @@ -0,0 +1,31 @@ +import { AuthenticationProvider } from '../models/authentication-provider'; +import { AxiosResponse } from 'axios'; +import apiClient from './clients/api-client'; + +export default class AuthProviderAPI { + static async index (): Promise> { + const res: AxiosResponse> = await apiClient.get('/api/auth_providers'); + return res?.data; + } + + static async get (id: number): Promise { + const res: AxiosResponse = await apiClient.get(`/api/auth_providers/${id}`); + return res?.data; + } + + static async create (authProvider: AuthenticationProvider): Promise { + const res: AxiosResponse = await apiClient.post('/api/auth_providers', authProvider); + return res?.data; + } + + static async update (authProvider: AuthenticationProvider): Promise { + const res: AxiosResponse = await apiClient.put(`/api/auth_providers/${authProvider.id}`, authProvider); + return res?.data; + } + + static async delete (id: number): Promise { + await apiClient.delete(`/api/auth_providers/${id}`); + } + + static async mappingFields(): Promise<> +} diff --git a/app/frontend/src/javascript/components/authentication-provider/provider-form.tsx b/app/frontend/src/javascript/components/authentication-provider/provider-form.tsx new file mode 100644 index 000000000..3bbd9c5a8 --- /dev/null +++ b/app/frontend/src/javascript/components/authentication-provider/provider-form.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { useForm, SubmitHandler } from 'react-hook-form'; +import { AuthenticationProvider } from '../../models/authentication-provider'; + +interface ProviderFormProps { + provider?: AuthenticationProvider, + onError: (message: string) => void, + onSuccess: (message: string) => void, +} + +export const ProviderForm: React.FC = ({ provider, onError, onSuccess }) => { + const { handleSubmit } = useForm({ defaultValues: { ...provider } }); + + const onSubmit: SubmitHandler = (data: AuthenticationProvider) => { + if (data) { + onSuccess('Provider created successfully'); + } else { + onError('Failed to created provider'); + } + }; + + return ( +
+ + + ); +}; diff --git a/app/frontend/src/javascript/models/authentication-provider.ts b/app/frontend/src/javascript/models/authentication-provider.ts new file mode 100644 index 000000000..806d1405c --- /dev/null +++ b/app/frontend/src/javascript/models/authentication-provider.ts @@ -0,0 +1,68 @@ +export interface AuthenticationProvider { + id?: number, + name: string, + status: 'active' | 'previous' | 'pending' + providable_type: 'DatabaseProvider' | 'OAuth2Provider' | 'OpenIdConnectProvider', + strategy_name: string + auth_provider_mappings_attributes: Array, + providable_attributes?: OAuth2Provider | OpenIdConnectProvider +} + +export interface AuthenticationProviderMapping { + id?: number, + local_model: 'user' | 'profile', + local_field: string, + api_field: string, + api_endpoint: string, + api_data_type: 'json', + transformation: { + type: 'string' | 'text' | 'date' | 'integer' | 'boolean', + format: 'iso8601' | 'rfc2822' | 'rfc3339' | 'timestamp-s' | 'timestamp-ms', + true_value: string, + false_value: string, + mapping: { + from: string, + to: number + } + } +} + +export interface OAuth2Provider { + id?: string, + base_url: string, + token_endpoint: string, + authorization_endpoint: string, + profile_url: string, + client_id: string, + client_secret: string, + scopes: string +} + +export interface OpenIdConnectProvider { + id?: string, + issuer: string, + discovery: boolean, + client_auth_method?: string, + scope?: string, + response_type?: 'code' | 'id_token', + response_mode?: 'query' | 'fragment' | 'form_post' | 'web_message', + display?: 'page' | 'popup' | 'touch' | 'wap', + prompt?: 'none' | 'login' | 'consent' | 'select_account', + send_scope_to_token_endpoint?: string, + post_logout_redirect_uri?: string, + uid_field?: string, + extra_authorize_params?: string, + allow_authorize_params?: string, + client__identifier: string, + client__secret: string, + client__redirect_uri?: string, + client__scheme: 'http' | 'https', + client__host: string, + client__port: number, + client__authorization_endpoint?: string, + client__token_endpoint?: string, + client__userinfo_endpoint?: string, + client__jwks_uri?: string, + client__end_session_endpoint?: string, + profile_url?: string +} diff --git a/app/models/auth_provider.rb b/app/models/auth_provider.rb index 29fdf0a0f..6a2db7851 100644 --- a/app/models/auth_provider.rb +++ b/app/models/auth_provider.rb @@ -13,7 +13,7 @@ class AuthProvider < ApplicationRecord end end - PROVIDABLE_TYPES = %w[DatabaseProvider OAuth2Provider].freeze + PROVIDABLE_TYPES = %w[DatabaseProvider OAuth2Provider OpenIdConnectProvider].freeze belongs_to :providable, polymorphic: true, dependent: :destroy accepts_nested_attributes_for :providable diff --git a/app/models/open_id_connect_provider.rb b/app/models/open_id_connect_provider.rb index 4069e00f1..cf2e805b2 100644 --- a/app/models/open_id_connect_provider.rb +++ b/app/models/open_id_connect_provider.rb @@ -6,12 +6,11 @@ class OpenIdConnectProvider < ApplicationRecord has_one :auth_provider, as: :providable validates :issuer, presence: true - validates :client_identifier, presence: true - validates :client_secret, presence: true - validates :client_host, presence: true - - validates :client_scheme, inclusion: { in: %w[http https] } - validates :client_port, numericality: { only_integer: true, greater_than: 0, less_than: 65_535 } + validates :client__identifier, presence: true + validates :client__secret, presence: true + validates :client__host, presence: true + validates :client__scheme, inclusion: { in: %w[http https] } + validates :client__port, numericality: { only_integer: true, greater_than: 0, less_than: 65_535 } validates :response_type, inclusion: { in: %w[code id_token], allow_nil: true } validates :response_mode, inclusion: { in: %w[query fragment form_post web_message], allow_nil: true } validates :display, inclusion: { in: %w[page popup touch wap], allow_nil: true } From 1a8dc390f3b76c97cffea3b3ba6ba871ba8665ea Mon Sep 17 00:00:00 2001 From: Sylvain Date: Mon, 4 Apr 2022 11:55:14 +0200 Subject: [PATCH 042/274] (front) export form component to angular --- .../authentication-provider/provider-form.tsx | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/app/frontend/src/javascript/components/authentication-provider/provider-form.tsx b/app/frontend/src/javascript/components/authentication-provider/provider-form.tsx index 3bbd9c5a8..55bdd18a1 100644 --- a/app/frontend/src/javascript/components/authentication-provider/provider-form.tsx +++ b/app/frontend/src/javascript/components/authentication-provider/provider-form.tsx @@ -1,6 +1,12 @@ import React from 'react'; import { useForm, SubmitHandler } from 'react-hook-form'; +import { react2angular } from 'react2angular'; import { AuthenticationProvider } from '../../models/authentication-provider'; +import { Loader } from '../base/loader'; +import { IApplication } from '../../models/application'; +import { RHFInput } from '../base/rhf-input'; + +declare const Application: IApplication; interface ProviderFormProps { provider?: AuthenticationProvider, @@ -9,7 +15,7 @@ interface ProviderFormProps { } export const ProviderForm: React.FC = ({ provider, onError, onSuccess }) => { - const { handleSubmit } = useForm({ defaultValues: { ...provider } }); + const { handleSubmit, register } = useForm({ defaultValues: { ...provider } }); const onSubmit: SubmitHandler = (data: AuthenticationProvider) => { if (data) { @@ -21,7 +27,17 @@ export const ProviderForm: React.FC = ({ provider, onError, o return (
- + ); }; + +const ProviderFormWrapper: React.FC = ({ provider, onError, onSuccess }) => { + return ( + + + + ); +}; + +Application.Components.component('providerForm', react2angular(ProviderFormWrapper, ['provider', 'onSuccess', 'onError'])); From 431d733ffe10f788ce7eea0f58bbf8832db13a38 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Mon, 4 Apr 2022 18:19:59 +0200 Subject: [PATCH 043/274] (wip) rhf select --- .../authentication-provider/provider-form.tsx | 13 +++++++----- .../javascript/components/base/fab-select.tsx | 20 +++++++++++++++++++ .../javascript/components/base/rhf-input.tsx | 4 ++-- .../controllers/admin/authentications.js | 14 +++++++++++++ .../templates/admin/authentications/new.html | 2 ++ 5 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 app/frontend/src/javascript/components/base/fab-select.tsx diff --git a/app/frontend/src/javascript/components/authentication-provider/provider-form.tsx b/app/frontend/src/javascript/components/authentication-provider/provider-form.tsx index 55bdd18a1..4d1e426b3 100644 --- a/app/frontend/src/javascript/components/authentication-provider/provider-form.tsx +++ b/app/frontend/src/javascript/components/authentication-provider/provider-form.tsx @@ -5,17 +5,20 @@ import { AuthenticationProvider } from '../../models/authentication-provider'; import { Loader } from '../base/loader'; import { IApplication } from '../../models/application'; import { RHFInput } from '../base/rhf-input'; +import { useTranslation } from 'react-i18next'; declare const Application: IApplication; interface ProviderFormProps { + action: 'create' | 'update', provider?: AuthenticationProvider, onError: (message: string) => void, onSuccess: (message: string) => void, } -export const ProviderForm: React.FC = ({ provider, onError, onSuccess }) => { +export const ProviderForm: React.FC = ({ action, provider, onError, onSuccess }) => { const { handleSubmit, register } = useForm({ defaultValues: { ...provider } }); + const { t } = useTranslation('shared'); const onSubmit: SubmitHandler = (data: AuthenticationProvider) => { if (data) { @@ -27,17 +30,17 @@ export const ProviderForm: React.FC = ({ provider, onError, o return (
- + ); }; -const ProviderFormWrapper: React.FC = ({ provider, onError, onSuccess }) => { +const ProviderFormWrapper: React.FC = ({ action, provider, onError, onSuccess }) => { return ( - + ); }; -Application.Components.component('providerForm', react2angular(ProviderFormWrapper, ['provider', 'onSuccess', 'onError'])); +Application.Components.component('providerForm', react2angular(ProviderFormWrapper, ['action', 'provider', 'onSuccess', 'onError'])); diff --git a/app/frontend/src/javascript/components/base/fab-select.tsx b/app/frontend/src/javascript/components/base/fab-select.tsx new file mode 100644 index 000000000..132904ea4 --- /dev/null +++ b/app/frontend/src/javascript/components/base/fab-select.tsx @@ -0,0 +1,20 @@ +import React, { SelectHTMLAttributes } from 'react'; +import Select from 'react-select'; +import { Controller } from 'react-hook-form'; + +interface FabSelectProps extends SelectHTMLAttributes { + className?: string +} + +export const FabSelect: React.FC = ({ className }) => { + return ( +
+ + ); }; diff --git a/app/frontend/src/javascript/components/base/fab-multi-select.tsx b/app/frontend/src/javascript/components/base/fab-multi-select.tsx new file mode 100644 index 000000000..077b69b39 --- /dev/null +++ b/app/frontend/src/javascript/components/base/fab-multi-select.tsx @@ -0,0 +1,50 @@ +import React, { SelectHTMLAttributes } from 'react'; +import Select from 'react-select'; +import { Controller, Path } from 'react-hook-form'; +import { Control } from 'react-hook-form/dist/types/form'; +import { FieldValues } from 'react-hook-form/dist/types/fields'; +import { FieldPath } from 'react-hook-form/dist/types/path'; +import { FieldPathValue, UnpackNestedValue } from 'react-hook-form/dist/types'; + +interface FabSelectProps extends SelectHTMLAttributes { + id: string, + label?: string, + className?: string, + control: Control, + placeholder?: string, + options: Array>, + valuesDefault?: Array, +} + +/** + * Option format, expected by react-select + * @see https://github.com/JedWatson/react-select + */ +type selectOption = { value: TOptionValue, label: string }; + +/** + * This component is a wrapper around react-select to use with react-hook-form. + * It is a multi-select component. + */ +export const FabMultiSelect = ({ id, label, className, control, placeholder, options, valuesDefault }: FabSelectProps) => { + return ( +
{t('app.admin.plan_categories_list.name')}{t('app.admin.plan_categories_list.significance')} {t('app.admin.plan_categories_list.name')}{t('app.admin.plan_categories_list.significance')}
{c.name} {c.weight} - +
{{m.local_model}} {{m.local_field}} {{m.api_endpoint}} - +
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{{ 'app.shared.oauth2.model' }}{{ 'app.shared.oauth2.field' }}{{ 'app.shared.oauth2.api_endpoint_url' }}{{ 'app.shared.oauth2.api_type' }}{{ 'app.shared.oauth2.api_fields' }}
{{m.local_model}}{{m.local_field}}{{m.api_endpoint}}{{m.api_data_type}}{{m.api_field}} - - -
- - - - - - - - - - - - -
diff --git a/app/frontend/templates/admin/authentications/edit.html b/app/frontend/templates/admin/authentications/edit.html index 7558fd20d..394206664 100644 --- a/app/frontend/templates/admin/authentications/edit.html +++ b/app/frontend/templates/admin/authentications/edit.html @@ -35,14 +35,10 @@
- - -
- - +
diff --git a/app/models/auth_provider.rb b/app/models/auth_provider.rb index 6a2db7851..b21f319bb 100644 --- a/app/models/auth_provider.rb +++ b/app/models/auth_provider.rb @@ -21,6 +21,9 @@ class AuthProvider < ApplicationRecord has_many :auth_provider_mappings, dependent: :destroy accepts_nested_attributes_for :auth_provider_mappings, allow_destroy: true + validates :providable_type, inclusion: { in: PROVIDABLE_TYPES } + validates :name, presence: true, uniqueness: true + before_create :set_initial_state def build_providable(params) diff --git a/app/models/database_provider.rb b/app/models/database_provider.rb index 6b625603d..79f9a0ce0 100644 --- a/app/models/database_provider.rb +++ b/app/models/database_provider.rb @@ -5,6 +5,8 @@ class DatabaseProvider < ApplicationRecord has_one :auth_provider, as: :providable, dependent: :destroy + validates_with DatabaseProviderValidator + def profile_url '/#!/dashboard/profile' end diff --git a/app/models/o_auth2_provider.rb b/app/models/o_auth2_provider.rb index a91647b85..d562a520c 100644 --- a/app/models/o_auth2_provider.rb +++ b/app/models/o_auth2_provider.rb @@ -5,6 +5,8 @@ class OAuth2Provider < ApplicationRecord has_one :auth_provider, as: :providable + validates_with OAuth2ProviderValidator + def domain URI(base_url).scheme + '://' + URI(base_url).host end diff --git a/app/validators/database_provider_validator.rb b/app/validators/database_provider_validator.rb new file mode 100644 index 000000000..36b9a7d50 --- /dev/null +++ b/app/validators/database_provider_validator.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +# Validates there's only one database provider +class DatabaseProviderValidator < ActiveModel::Validator + def validate(record) + return if DatabaseProvider.count.zero? + + record.errors[:id] << I18n.t('app.admin.authentication_new.a_local_database_provider_already_exists_unable_to_create_another') + end +end diff --git a/app/validators/o_auth2_provider_validator.rb b/app/validators/o_auth2_provider_validator.rb new file mode 100644 index 000000000..c12419588 --- /dev/null +++ b/app/validators/o_auth2_provider_validator.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +# Validates the presence of the User.uid mapping +class OAuth2ProviderValidator < ActiveModel::Validator + def validate(record) + return if record.auth_provider.auth_provider_mappings.any? do |mapping| + mapping.local_model == 'user' && mapping.local_field == 'uid' + end + + record.errors.add(:uid, I18n.t('app.admin.authentication_new.it_is_required_to_set_the_matching_between_User.uid_and_the_API_to_add_this_provider')) + end +end From 153d50be770a2ba71cac9d2b1c3e0f003d7e2312 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Tue, 12 Apr 2022 10:02:39 +0200 Subject: [PATCH 060/274] (bug) open only selected mapping modal --- .../data-mapping-form.tsx | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/app/frontend/src/javascript/components/authentication-provider/data-mapping-form.tsx b/app/frontend/src/javascript/components/authentication-provider/data-mapping-form.tsx index cdb1bd7da..5bbb68fba 100644 --- a/app/frontend/src/javascript/components/authentication-provider/data-mapping-form.tsx +++ b/app/frontend/src/javascript/components/authentication-provider/data-mapping-form.tsx @@ -9,6 +9,7 @@ import { FormInput } from '../form/form-input'; import { useTranslation } from 'react-i18next'; import { FabButton } from '../base/fab-button'; import { TypeMappingModal } from './type-mapping-modal'; +import { useImmer } from 'use-immer'; export interface DataMappingFormProps { register: UseFormRegister, @@ -23,7 +24,7 @@ type selectModelFieldOption = { value: string, label: string }; export const DataMappingForm = ({ register, control }: DataMappingFormProps) => { const { t } = useTranslation('shared'); const [dataMapping, setDataMapping] = useState(null); - const [isOpenTypeMappingModal, setIsOpenTypeMappingModal] = useState(false); + const [isOpenTypeMappingModal, updateIsOpenTypeMappingModal] = useImmer>(new Map()); const { fields, append, remove } = useFieldArray({ control, name: 'auth_provider_mappings_attributes' as ArrayPath }); const output = useWatch({ name: 'auth_provider_mappings_attributes' as Path, control }); @@ -78,10 +79,12 @@ export const DataMappingForm = { - setIsOpenTypeMappingModal(!isOpenTypeMappingModal); + const toggleTypeMappingModal = (index: number): () => void => { + return () => { + updateIsOpenTypeMappingModal(draft => draft.set(index, !draft.get(index))); + }; }; // fetch the mapping data from the API on mount @@ -133,13 +136,13 @@ export const DataMappingForm =
- } onClick={toggleTypeMappingModal} disabled={getField(output, index) === undefined} tooltip={t('app.shared.authentication.data_mapping')} /> + } onClick={toggleTypeMappingModal(index)} disabled={getField(output, index) === undefined} tooltip={t('app.shared.authentication.data_mapping')} /> } onClick={() => remove(index)} className="delete-button" />
From 9191e1f9cd0ceecdc57b65bd808615838b505c54 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Tue, 12 Apr 2022 10:25:48 +0200 Subject: [PATCH 061/274] (bug) validate oauth2 providers have User.uid mapped --- app/models/auth_provider.rb | 1 + app/models/o_auth2_provider.rb | 2 -- app/validators/o_auth2_provider_validator.rb | 4 +++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/models/auth_provider.rb b/app/models/auth_provider.rb index b21f319bb..0c0899a2a 100644 --- a/app/models/auth_provider.rb +++ b/app/models/auth_provider.rb @@ -23,6 +23,7 @@ class AuthProvider < ApplicationRecord validates :providable_type, inclusion: { in: PROVIDABLE_TYPES } validates :name, presence: true, uniqueness: true + validates_with OAuth2ProviderValidator, if: -> { providable_type == 'OAuth2Provider' } before_create :set_initial_state diff --git a/app/models/o_auth2_provider.rb b/app/models/o_auth2_provider.rb index d562a520c..a91647b85 100644 --- a/app/models/o_auth2_provider.rb +++ b/app/models/o_auth2_provider.rb @@ -5,8 +5,6 @@ class OAuth2Provider < ApplicationRecord has_one :auth_provider, as: :providable - validates_with OAuth2ProviderValidator - def domain URI(base_url).scheme + '://' + URI(base_url).host end diff --git a/app/validators/o_auth2_provider_validator.rb b/app/validators/o_auth2_provider_validator.rb index c12419588..8b857bca2 100644 --- a/app/validators/o_auth2_provider_validator.rb +++ b/app/validators/o_auth2_provider_validator.rb @@ -3,7 +3,9 @@ # Validates the presence of the User.uid mapping class OAuth2ProviderValidator < ActiveModel::Validator def validate(record) - return if record.auth_provider.auth_provider_mappings.any? do |mapping| + return unless record.providable_type == 'OAuth2Provider' + + return if record.auth_provider_mappings.any? do |mapping| mapping.local_model == 'user' && mapping.local_field == 'uid' end From 227be2621f113080d2a8d2041af7b3015c7da4e4 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Tue, 12 Apr 2022 10:59:49 +0200 Subject: [PATCH 062/274] (bug) edit authentication provider + clean legacy code --- .../data-mapping-form.tsx | 6 +- .../controllers/admin/authentications.js | 135 ++---------------- app/frontend/src/javascript/router.js | 7 +- 3 files changed, 21 insertions(+), 127 deletions(-) diff --git a/app/frontend/src/javascript/components/authentication-provider/data-mapping-form.tsx b/app/frontend/src/javascript/components/authentication-provider/data-mapping-form.tsx index 5bbb68fba..2d5f367ec 100644 --- a/app/frontend/src/javascript/components/authentication-provider/data-mapping-form.tsx +++ b/app/frontend/src/javascript/components/authentication-provider/data-mapping-form.tsx @@ -33,6 +33,8 @@ export const DataMappingForm = => { + if (!dataMapping) return []; + return Object.keys(dataMapping).map(model => { return { label: model, @@ -45,6 +47,8 @@ export const DataMappingForm = , index: number): Array => { + if (!dataMapping) return []; + return dataMapping[getModel(formData, index)]?.map(field => { return { label: field[0], @@ -73,7 +77,7 @@ export const DataMappingForm = , index: number): mappingType => { const model = getModel(formData, index); const field = getField(formData, index); - if (model && field) { + if (model && field && dataMapping) { return dataMapping[model]?.find(f => f[0] === field)?.[1]; } }; diff --git a/app/frontend/src/javascript/controllers/admin/authentications.js b/app/frontend/src/javascript/controllers/admin/authentications.js index ea03cd3ad..2c95a09a4 100644 --- a/app/frontend/src/javascript/controllers/admin/authentications.js +++ b/app/frontend/src/javascript/controllers/admin/authentications.js @@ -31,21 +31,6 @@ const findIdxById = function (elements, id) { return (elements.map(function (elem) { return elem.id; })).indexOf(id); }; -/** - * For OAuth2 authentications, mapping the user's ID is mandatory. This function will check that this mapping - * is effective and will return false otherwise - * @param mappings {Array} expected: $scope.provider.auth_provider_mappings_attributes - * @returns {Boolean} true if the mapping is declared - */ -const check_oauth2_id_is_mapped = function (mappings) { - for (const mapping of Array.from(mappings)) { - if ((mapping.local_model === 'user') && (mapping.local_field === 'uid') && !mapping._destroy) { - return true; - } - } - return false; -}; - /** * Page listing all authentication providers */ @@ -121,10 +106,8 @@ Application.Controllers.controller('AuthentificationController', ['$scope', '$st /** * Page to add a new authentication provider */ -Application.Controllers.controller('NewAuthenticationController', ['$scope', '$state', '$rootScope', '$uibModal', 'dialogs', 'growl', 'mappingFieldsPromise', 'authProvidersPromise', 'AuthProvider', '_t', - function ($scope, $state, $rootScope, $uibModal, dialogs, growl, mappingFieldsPromise, authProvidersPromise, AuthProvider, _t) { - $scope.mode = 'creation'; - +Application.Controllers.controller('NewAuthenticationController', ['$scope', '$state', 'growl', + function ($scope, $state, growl) { /** * Shows a success message forwarded from a child react component */ @@ -139,114 +122,17 @@ Application.Controllers.controller('NewAuthenticationController', ['$scope', '$s growl.error(message); }; - // default parameters for the new authentication provider - $scope.provider = { - name: '', - providable_type: '', - providable_attributes: {} - }; - - /** - * Initialize some provider's specific properties when selecting the provider type - */ - $scope.updateProvidable = function () { - // === OAuth2Provider === - if ($scope.provider.providable_type === 'OAuth2Provider') { - if (typeof $scope.provider.auth_provider_mappings_attributes === 'undefined') { - return $scope.provider.auth_provider_mappings_attributes = []; - } - } - }; - // Add others providers initializers here if needed ... - - /** - * Validate and save the provider parameters in database - */ - $scope.registerProvider = function () { - // === DatabaseProvider === - let provider; - if ($scope.provider.providable_type === 'DatabaseProvider') { - // prevent from adding mode than 1 - for (provider of Array.from(authProvidersPromise)) { - if (provider.providable_type === 'DatabaseProvider') { - growl.error(_t('app.admin.authentication_new.a_local_database_provider_already_exists_unable_to_create_another')); - return false; - } - } - return AuthProvider.save({ auth_provider: $scope.provider }, function (provider) { - growl.success(_t('app.admin.authentication_new.local_provider_successfully_saved')); - return $state.go('app.admin.members'); - }); - // === OAuth2Provider === - } else if ($scope.provider.providable_type === 'OAuth2Provider') { - // check the ID mapping - if (!check_oauth2_id_is_mapped($scope.provider.auth_provider_mappings_attributes)) { - growl.error(_t('app.admin.authentication_new.it_is_required_to_set_the_matching_between_User.uid_and_the_API_to_add_this_provider')); - return false; - } - // discourage the use of unsecure SSO - if (!($scope.provider.providable_attributes.base_url.indexOf('https://') > -1)) { - dialogs.confirm( - { - size: 'l', - resolve: { - object () { - return { - title: _t('app.admin.authentication_new.security_issue_detected'), - msg: _t('app.admin.authentication_new.beware_the_oauth2_authenticatoin_provider_you_are_about_to_add_isnt_using_HTTPS') + - _t('app.admin.authentication_new.this_is_a_serious_security_issue_on_internet_and_should_never_be_used_except_for_testing_purposes') + - _t('app.admin.authentication_new.do_you_really_want_to_continue') - }; - } - } - }, - function () { // unsecured http confirmed - AuthProvider.save({ auth_provider: $scope.provider }, function (provider) { - growl.success(_t('app.admin.authentication_new.unsecured_oauth2_provider_successfully_added')); - return $state.go('app.admin.members'); - }); - } - ); - } else { - AuthProvider.save({ auth_provider: $scope.provider }, function (provider) { - growl.success(_t('app.admin.authentication_new.oauth2_provider_successfully_added')); - return $state.go('app.admin.members'); - }); - } - } - }; + $scope.cancel = function () { $state.go('app.admin.members'); }; } ]); /** * Page to edit an already added authentication provider */ -Application.Controllers.controller('EditAuthenticationController', ['$scope', '$state', '$rootScope', '$uibModal', 'dialogs', 'growl', 'providerPromise', 'mappingFieldsPromise', 'AuthProvider', '_t', - function ($scope, $state, $rootScope, $uibModal, dialogs, growl, providerPromise, mappingFieldsPromise, AuthProvider, _t) { +Application.Controllers.controller('EditAuthenticationController', ['$scope', '$state', 'growl', 'providerPromise', + function ($scope, $state, growl, providerPromise) { // parameters of the currently edited authentication provider - $scope.provider = providerPromise; - - $scope.mode = 'edition'; - - /** - * Update the current provider with the new inputs - */ - $scope.updateProvider = function () { - // check the ID mapping - if (!check_oauth2_id_is_mapped($scope.provider.auth_provider_mappings_attributes)) { - growl.error(_t('app.admin.authentication_edit.it_is_required_to_set_the_matching_between_User.uid_and_the_API_to_add_this_provider')); - return false; - } - return AuthProvider.update( - { id: $scope.provider.id }, - { auth_provider: $scope.provider }, - function (provider) { - growl.success(_t('app.admin.authentication_edit.provider_successfully_updated')); - $state.go('app.admin.members'); - }, - function () { growl.error(_t('app.admin.authentication_edit.an_error_occurred_unable_to_update_the_provider')); } - ); - }; + $scope.provider = cleanProvider(providerPromise); /** * Shows a success message forwarded from a child react component @@ -261,5 +147,14 @@ Application.Controllers.controller('EditAuthenticationController', ['$scope', '$ $scope.onError = function (message) { growl.error(message); }; + + $scope.cancel = function () { $state.go('app.admin.members'); }; + + // prepare the provider for the react-hook-form + function cleanProvider (provider) { + delete provider.$promise; + delete provider.$resolved; + return provider; + } } ]); diff --git a/app/frontend/src/javascript/router.js b/app/frontend/src/javascript/router.js index 7e77abab0..f4db31f61 100644 --- a/app/frontend/src/javascript/router.js +++ b/app/frontend/src/javascript/router.js @@ -1002,10 +1002,6 @@ angular.module('application.router', ['ui.router']) templateUrl: '/admin/authentications/new.html', controller: 'NewAuthenticationController' } - }, - resolve: { - mappingFieldsPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.mapping_fields().$promise; }], - authProvidersPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.query().$promise; }] } }) .state('app.admin.authentication_edit', { @@ -1017,8 +1013,7 @@ angular.module('application.router', ['ui.router']) } }, resolve: { - providerPromise: ['AuthProvider', '$transition$', function (AuthProvider, $transition$) { return AuthProvider.get({ id: $transition$.params().id }).$promise; }], - mappingFieldsPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.mapping_fields().$promise; }] + providerPromise: ['AuthProvider', '$transition$', function (AuthProvider, $transition$) { return AuthProvider.get({ id: $transition$.params().id }).$promise; }] } }) From e91fa00afc12373138181276c560d08e943107d0 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Tue, 12 Apr 2022 12:12:04 +0200 Subject: [PATCH 063/274] (ui) add tooltip to FormInput + add tooltip for auth_provider/mappings/API field input --- .../data-mapping-form.tsx | 2 ++ .../javascript/components/form/form-input.tsx | 8 +++-- .../stylesheets/modules/form/form-item.scss | 29 +++++++++++++++++++ config/locales/app.shared.en.yml | 2 +- config/locales/app.shared.fr.yml | 2 +- 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/app/frontend/src/javascript/components/authentication-provider/data-mapping-form.tsx b/app/frontend/src/javascript/components/authentication-provider/data-mapping-form.tsx index 2d5f367ec..1b0333a04 100644 --- a/app/frontend/src/javascript/components/authentication-provider/data-mapping-form.tsx +++ b/app/frontend/src/javascript/components/authentication-provider/data-mapping-form.tsx @@ -10,6 +10,7 @@ import { useTranslation } from 'react-i18next'; import { FabButton } from '../base/fab-button'; import { TypeMappingModal } from './type-mapping-modal'; import { useImmer } from 'use-immer'; +import { HtmlTranslate } from '../base/html-translate'; export interface DataMappingFormProps { register: UseFormRegister, @@ -136,6 +137,7 @@ export const DataMappingForm = } label={t('app.shared.oauth2.api_fields')} /> diff --git a/app/frontend/src/javascript/components/form/form-input.tsx b/app/frontend/src/javascript/components/form/form-input.tsx index d19923198..5a0f633ba 100644 --- a/app/frontend/src/javascript/components/form/form-input.tsx +++ b/app/frontend/src/javascript/components/form/form-input.tsx @@ -7,7 +7,7 @@ import { FormComponent } from '../../models/form-component'; interface FormInputProps extends InputHTMLAttributes, FormComponent{ id: string, label?: string, - tooltip?: string, + tooltip?: ReactNode, icon?: ReactNode, addOn?: ReactNode, addOnClassName?: string, @@ -30,8 +30,10 @@ export const FormInput = ({ id, register, labe