From e708677696c2292740dfdf23e253771ab9008ab0 Mon Sep 17 00:00:00 2001 From: Brina Date: Mon, 13 Feb 2023 22:50:32 -0500 Subject: [PATCH 01/10] version1 --- src/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.html b/src/index.html index 70afad9..1daf4de 100644 --- a/src/index.html +++ b/src/index.html @@ -7,7 +7,7 @@
-

Hello world!

+

Hello world2!

From d266f7d18b9d6079923907e19017a1d0c4e5d173 Mon Sep 17 00:00:00 2001 From: Brina Date: Mon, 13 Feb 2023 22:56:44 -0500 Subject: [PATCH 02/10] version1 --- .babelrc | 3 - .editorconfig | 8 - .eslintrc | 18 -- .gitignore | 13 -- FAQ.md | 12 -- README.md | 471 -------------------------------------------- package.json | 34 ---- src/cipher.js | 5 - src/index.html | 14 -- src/index.js | 3 - src/style.css | 0 test/.eslintrc | 5 - test/cipher.spec.js | 108 ---------- thumb.png | Bin 26133 -> 0 bytes 14 files changed, 694 deletions(-) delete mode 100644 .babelrc delete mode 100644 .editorconfig delete mode 100644 .eslintrc delete mode 100644 .gitignore delete mode 100644 FAQ.md delete mode 100644 README.md delete mode 100644 package.json delete mode 100644 src/cipher.js delete mode 100644 src/index.html delete mode 100644 src/index.js delete mode 100644 src/style.css delete mode 100644 test/.eslintrc delete mode 100644 test/cipher.spec.js delete mode 100644 thumb.png diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 34bc6d2..0000000 --- a/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "plugins": ["@babel/plugin-transform-modules-commonjs"] -} diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 1923d41..0000000 --- a/.editorconfig +++ /dev/null @@ -1,8 +0,0 @@ -root = true - -[*] -indent_style = space -indent_size = 2 -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 3d062a2..0000000 --- a/.eslintrc +++ /dev/null @@ -1,18 +0,0 @@ -{ - "env": { - "browser": true - }, - "parserOptions": { - "ecmaVersion": 2018, - "sourceType": "module" - }, - "extends": "eslint:recommended", - "rules": { - "no-console": "warn", - "import/extensions": 0, - "no-var": "error", - "prefer-const": "error", - "eqeqeq": "error", - "indent": ["error", 2] - } -} diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 7cf0606..0000000 --- a/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -coverage/ -node_modules/ -.DS_Store -*.log - -# Editor directories and files -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw* diff --git a/FAQ.md b/FAQ.md deleted file mode 100644 index 794a8d5..0000000 --- a/FAQ.md +++ /dev/null @@ -1,12 +0,0 @@ -# FAQ (preguntas frecuentes) - -- [Por qué usar html semántico](https://youtu.be/vRqQRrULSxI) -- [Diferencia entre datos atómicos y estructurados](https://www.todojs.com/tipos-datos-javascript-es6/) -- [Para qué sirve el ESLint](https://es.paperblog.com/que-es-eslint-y-por-que-deberias-usarlo-5393037/) -- [Para qué sirven las pruebas unitarias](http://oscarmoreno.com/pruebas-unitarias/) -- Tengo que testear toda mi función - -> En líneas generales, sí, esto es, sabiendo que queremos que tu función haga pocas -cosas. Si tu función hace varias cosas al mismo tiempo el problema sería otro -y primero tendrías que dividir esa funcionalidad en varias funciones y escribir -un test para cada una. diff --git a/README.md b/README.md deleted file mode 100644 index 3f3932e..0000000 --- a/README.md +++ /dev/null @@ -1,471 +0,0 @@ -# Cifrado César - -## Índice - -* [1. Preámbulo](#1-preámbulo) -* [2. Resumen del proyecto](#2-resumen-del-proyecto) -* [3. Consideraciones generales](#3-consideraciones-generales) -* [4. Hito: Criterios de aceptación mínimos del proyecto](#4-hito-criterios-de-aceptación-mínimos-del-proyecto) -* [5. Hito Opcional: Agrega soporte para minúsculas y otros caracteres](#5-hito-opcional-agrega-soporte-para-minúsculas-y-otros-caracteres) -* [6. Consideraciones técnicas](#6-consideraciones-técnicas) -* [7. Objetivos de aprendizaje](#7-objetivos-de-aprendizaje) -* [8. Pistas, tips y lecturas complementarias](#8-pistas-tips-y-lecturas-complementarias) -* [9. Para considerar Project Feedback](#9-para-considerar-project-feedback) - -*** - -## 1. Preámbulo - -Cifrar significa ocultar el contenido de un mensaje a simple vista, de manera -que sólo las partes autorizadas pueden descifrar un texto cifrado. -El [cifrado César](https://en.wikipedia.org/wiki/Caesar_cipher) -es uno de los primeros métodos de cifrado conocidos. El emperador romano Julio -César lo usaba para enviar órdenes secretas a sus generales en los campos de -batalla. - -El cifrado césar es una de las técnicas más simples para cifrar un mensaje. Es -un tipo de cifrado por sustitución, es decir que cada letra del texto original -es reemplazada por otra que se encuentra un número fijo de posiciones -(desplazamiento) más adelante en el mismo alfabeto. - -![caeser-cipher](https://upload.wikimedia.org/wikipedia/commons/thumb/2/2b/Caesar3.svg/2000px-Caesar3.svg.png) - -Por ejemplo, si usamos un desplazamiento (_offset_) de 3 posiciones: - -* La letra A se cifra como D. -* La palabra CASA se cifra como FDVD. -* Alfabeto sin cifrar: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z -* Alfabeto cifrado: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C - -En la actualidad, todos los cifrados de sustitución simple se descifran con -mucha facilidad y, aunque en la práctica no ofrecen mucha seguridad en la -comunicación por sí mismos; el cifrado César sí puede formar parte de sistemas -más complejos de codificación, como el cifrado Vigenère, e incluso tiene -aplicación en el sistema ROT13. - -## 2. Resumen del proyecto - -En este proyecto crearás una aplicación web que servirá para que tu usuaria -pueda cifrar y descifrar un texto en el navegador indicando un desplazamiento -específico de caracteres (_offset_). Lo harás utilizando HTML, CSS y JavaScript. - -La temática es libre. Piensa en qué situaciones se necesitaría cifrar un mensaje. -Decide cómo debe ser esa experiencia de uso (qué pantallas, explicaciones, mensajes, -colores, etc.) Algunas ideas de ejemplo: - -* Crear claves seguras para el email. -* Encriptar/cifrar una tarjeta de crédito. -* Herramienta de mensajería interna de una organización de derechos humanos en - una zona de conflicto. -* Mensajería secreta para parejas. - -Como continuación del proyecto de preadmisión, volverás a trabajar sobre -fundamentos de JavaScript, incluyendo conceptos como variables, condicionales, -y funciones, así como eventos y manipulación básica del DOM, fundamentos de -HTML y CSS. Mientras desarrollas este proyecto, te familiarizarás con nuevos -conceptos también. - -### Los objetivos generales de este proyecto son los siguientes - -* Trabajar en base a un boilerplate, la estructura básica de un proyecto en - distintas carpetas (a través modulos en JS). -* Conocer las herramientas de mantenimiento y mejora del código (linters y - pruebas unitarias). -* Aprender sobre objetos, estructuras, métodos e iteración (bucles) - en JavaScript -* Implementar control de versiones con git (y la plataforma github) - -## 3. Consideraciones generales - -* Este proyecto lo resolvemos de manera **individual**. Te recomendamos una - duracion de 1-3 sprints. -* Enfócate en aprender y no solamente en "completar" el proyecto. -* Te sugerimos que no intentes saberlo todo antes de empezar a codear. - No te preocupes demasiado ahora por lo que _todavía_ no entiendas. - Irás aprendiendo. - -## 4. Hito: Criterios de aceptación mínimos del proyecto - -Estos son los requisitos que tu proyecto debe que cumplir para asegurar que tu trabajo -cubra los objetivos principales. - -**1. Una interfaz que debe permitir a la usuaria:** - -* **Cifrar un mensaje** - - Insertar el mensaje (texto) que quiere cifrar. El mensaje usa alfabeto - simplificado (solamente mayúsculas y sin ñ). - - Elegir un numero de desplazamiento (_offset_) indicando cuántas - posiciones quieres que el cifrado desplace cada caracter en el alfabeto. - El numero sera positivo y entero (positive integer). - - Ver el resultado del mensaje cifrado. - -* **Descifrar un mensaje** - - Insertar el mensaje (texto) que quieres descifrar. El mensaje usa alfabeto - simplificado (solamente mayúsculas y sin ñ). - - Elegir un numero desplazamiento (_offset_, que corresponda al que usamos - para cifrar) indicando cuántas posiciones quieres que - el cifrado desplace cada caracter en el alfabeto. El numero sera positivo y - entero (positive integer). - - Ver el resultado del mensaje descifrado. - -**2. Pruebas unitarios de los métodos.** -Los metódos de `cipher` (`encode` y `decode`) deben tener cobertura con -pruebas unitarias. - -**3. Código de tu proyecto subido a tu repo y interfaz "desplegada".** -El código final debe estar subido en un repositorio en GitHub. -La interfaz o pagina web, debe ser "desplegada" usando GitHub Pages. - -**4. Un README que contiene una definición del producto.** -En el README cuéntanos cómo pensaste en los usuarios y cuál fue tu proceso -para definir el producto final a nivel de experiencia y de interfaz. Estas -preguntas sirven como guia: - -* Quiénes son los principales usuarios de producto -* Cuáles son los objetivos de estos usuarios en relación con tu producto -* Cómo crees que el producto que estás creando está resolviendo sus problemas - -Con estos requisitos cumplidos puedes agendar un Project Feedback con unx coach. - -## 5. Hito Opcional: Agrega soporte para minúsculas y otros caracteres - -Las partes opcionales tienen como intención permitirte profundizar un poco más -sobre los objetivos de aprendizaje del proyecto. Todo en la vida tiene pros y -contras, decide sabiamente si quieres invertir el tiempo en profundizar/ -perfeccionar o aprender cosas nuevas en el siguiente proyecto. - -El hito de los críterios mínimos no menciona qué pasaría con las letras -minúsculas y otros caracteres (como espacios, puntuación, ñ, ...). -El _boilerplate_ incluye algunos _tests_ (comentados en principio) -que puedes usar como punto de partida para implementar el soporte para -estos casos adicionales. - -## 6. Consideraciones técnicas - -La lógica del proyecto debe estar implementada completamente en JavaScript. En -este proyecto NO está permitido usar librerías o frameworks, solo JavaScript puro -también conocido como Vanilla JavaScript. - -Para comenzar este proyecto tendrás que hacer un _fork_ y _clonar_ este -repositorio que contiene un _boilerplate_ con tests (pruebas). Un _boilerplate_ -es la estructura basica de un proyecto que sirve como un punto de partida con -archivos inicial y configuración basica de dependencias y tests. - -Los tests unitarios deben cubrir un mínimo del 70% de _statements_, _functions_ -y _lines_, y un mínimo del 50% de _branches_. El _boilerplate_ ya contiene el -setup y configuración necesaria para ejecutar los tests (pruebas) así como _code -coverage_ para ver el nivel de cobertura de los tests usando el comando `npm -test`. - -El boilerplate que les damos contiene esta estructura: - -```text -./ -├── .babelrc -├── .editorconfig -├── .eslintrc -├── .gitignore -├── README.md -├── package.json -├── src -│ ├── cipher.js -│ ├── index.html -│ ├── index.js -│ └── style.css -└── test - ├── .eslintrc - └── cipher.spec.js -``` - -### Descripción de scripts / archivos - -* `README.md`: debe explicar la información necesaria para el uso de - tu aplicación web, así como una introducción a la aplicación, - su funcionalidad y decisiones de diseño que tomaron. -* `src/index.html`: este es el punto de entrada a tu aplicación. Este archivo - debe contener tu _markup_ (HTML) e incluir el CSS y JavaScript necesario. -* `src/style.css`: este archivo debe contener las reglas de estilo. - Queremos que escribas tus propias reglas, por eso NO está permitido el uso - de frameworks de CSS (Bootstrap, Materialize, etc). -* `src/cipher.js`: acá debes implementar el objeto `cipher`, el cual ya está - _exportado_ en el _boilerplate_. Este objeto (`cipher`) debe contener dos - métodos: - - `cipher.encode(offset, string)`: `offset` es el número de posiciones que - queremos mover a la derecha en el alfabeto y `string` el mensaje (texto) - que queremos cifrar. - - `cipher.decode(offset, string)`: `offset` es el número de posiciones que - queremos mover a la izquierda en el alfabeto y `string` el mensaje - (texto) que queremos descifrar. -* `src/index.js`: acá debes escuchar eventos del DOM, invocar `cipher.encode()` - o `cipher.decode()` según sea necesario y actualizar el resultado en la UI. -* `test/cipher.spec.js`: este archivo contiene algunos tests de ejemplo y acá - tendrás que implementar los tests para `cipher.encode()` y `cipher.decode()`. - -El _boilerplate_ incluye tareas que ejecutan [eslint](https://eslint.org/) y -[htmlhint](https://github.com/yaniswang/HTMLHint) para verificar el `HTML` y -`JavaScript` con respecto a una guías de estilos. Ambas tareas se ejecutan -automáticamente antes de ejecutar las pruebas (tests) cuando usamos el comando -`npm run test`. En el caso de `JavaScript` estamos usando un archivo de -configuración de `eslint` que se llama `.eslintrc` que contiene un mínimo de -información sobre el parser que usar (qué version de JavaScript/ECMAScript), el -entorno (browser en este caso) y las [reglas recomendadas (`"eslint:recommended"`)](https://eslint.org/docs/rules/). -En cuanto a reglas/guías de estilo en sí, -usaremos las recomendaciones _por defecto_ de tanto `eslint` como `htmlhint`. - -### Deploy - -Hacer que los sitios estén publicados (o _desplegados_) para que usuarias de -la web puedan acceder a él es algo común en proyectos de desarrollo de software. - -En este proyecto, utilizaremos _Github Pages_ para desplegar nuestro sitio web. - -El comando `npm run deploy` puede ayudarte con esta tarea y también puedes - consultar su [documentación oficial](https://docs.github.com/es/pages). - -*** - -## 7. Objetivos de aprendizaje - -Reflexiona y luego marca los objetivos que has llegado a entender y aplicar en tu proyecto. Piensa en eso al decidir tu estrategia de trabajo. - -### HTML - -- [ ] **Uso de HTML semántico** - -
Links

- - * [HTML semántico](https://curriculum.laboratoria.la/es/topics/html/02-html5/02-semantic-html) - * [Semantics - MDN Web Docs Glossary](https://developer.mozilla.org/en-US/docs/Glossary/Semantics#Semantics_in_HTML) -

- -### CSS - -- [ ] **Uso de selectores de CSS** - -
Links

- - * [Intro a CSS](https://curriculum.laboratoria.la/es/topics/css/01-css/01-intro-css) - * [CSS Selectors - MDN](https://developer.mozilla.org/es/docs/Web/CSS/CSS_Selectors) -

- -- [ ] **Modelo de caja (box model): borde, margen, padding** - -
Links

- - * [Box Model & Display](https://curriculum.laboratoria.la/es/topics/css/01-css/02-boxmodel-and-display) - * [The box model - MDN](https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model) - * [Introduction to the CSS box model - MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model) - * [CSS display - MDN](https://developer.mozilla.org/pt-BR/docs/Web/CSS/display) - * [display - CSS Tricks](https://css-tricks.com/almanac/properties/d/display/) -

- -### Web APIs - -- [ ] **Uso de selectores del DOM** - -
Links

- - * [Manipulación del DOM](https://curriculum.laboratoria.la/es/topics/browser/02-dom/03-1-dom-methods-selection) - * [Introducción al DOM - MDN](https://developer.mozilla.org/es/docs/Web/API/Document_Object_Model/Introduction) - * [Localizando elementos DOM usando selectores - MDN](https://developer.mozilla.org/es/docs/Web/API/Document_object_model/Locating_DOM_elements_using_selectors) -

- -- [ ] **Manejo de eventos del DOM (listeners, propagación, delegación)** - -
Links

- - * [Introducción a eventos - MDN](https://developer.mozilla.org/es/docs/Learn/JavaScript/Building_blocks/Events) - * [EventTarget.addEventListener() - MDN](https://developer.mozilla.org/es/docs/Web/API/EventTarget/addEventListener) - * [EventTarget.removeEventListener() - MDN](https://developer.mozilla.org/es/docs/Web/API/EventTarget/removeEventListener) - * [El objeto Event](https://developer.mozilla.org/es/docs/Web/API/Event) -

- -- [ ] **Manipulación dinámica del DOM** - -
Links

- - * [Introducción al DOM](https://developer.mozilla.org/es/docs/Web/API/Document_Object_Model/Introduction) - * [Node.appendChild() - MDN](https://developer.mozilla.org/es/docs/Web/API/Node/appendChild) - * [Document.createElement() - MDN](https://developer.mozilla.org/es/docs/Web/API/Document/createElement) - * [Document.createTextNode()](https://developer.mozilla.org/es/docs/Web/API/Document/createTextNode) - * [Element.innerHTML - MDN](https://developer.mozilla.org/es/docs/Web/API/Element/innerHTML) - * [Node.textContent - MDN](https://developer.mozilla.org/es/docs/Web/API/Node/textContent) -

- -### JavaScript - -- [ ] **Tipos de datos primitivos** - -
Links

- - * [Valores primitivos - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Data_structures#valores_primitivos) -

- -- [ ] **Strings (cadenas de caracteres)** - -
Links

- - * [Strings](https://curriculum.laboratoria.la/es/topics/javascript/06-strings) - * [String — Cadena de caracteres - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String) -

- -- [ ] **Variables (declaración, asignación, ámbito)** - -
Links

- - * [Valores, tipos de datos y operadores](https://curriculum.laboratoria.la/es/topics/javascript/01-basics/01-values-variables-and-types) - * [Variables](https://curriculum.laboratoria.la/es/topics/javascript/01-basics/02-variables) -

- -- [ ] **Uso de condicionales (if-else, switch, operador ternario, lógica booleana)** - -
Links

- - * [Estructuras condicionales y repetitivas](https://curriculum.laboratoria.la/es/topics/javascript/02-flow-control/01-conditionals-and-loops) - * [Tomando decisiones en tu código — condicionales - MDN](https://developer.mozilla.org/es/docs/Learn/JavaScript/Building_blocks/conditionals) -

- -- [ ] **Uso de bucles/ciclos (while, for, for..of)** - -
Links

- - * [Bucles (Loops)](https://curriculum.laboratoria.la/es/topics/javascript/02-flow-control/02-loops) - * [Bucles e iteración - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Loops_and_iteration) -

- -- [ ] **Funciones (params, args, return)** - -
Links

- - * [Funciones (control de flujo)](https://curriculum.laboratoria.la/es/topics/javascript/02-flow-control/03-functions) - * [Funciones clásicas](https://curriculum.laboratoria.la/es/topics/javascript/03-functions/01-classic) - * [Arrow Functions](https://curriculum.laboratoria.la/es/topics/javascript/03-functions/02-arrow) - * [Funciones — bloques de código reutilizables - MDN](https://developer.mozilla.org/es/docs/Learn/JavaScript/Building_blocks/Functions) -

- -- [ ] **Pruebas unitarias (unit tests)** - -
Links

- - * [Empezando con Jest - Documentación oficial](https://jestjs.io/docs/es-ES/getting-started) -

- -- [ ] **Módulos de ECMAScript (ES Modules)** - -
Links

- - * [import - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Statements/import) - * [export - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Statements/export) -

- -- [ ] **Uso de linter (ESLINT)** - -- [ ] **Uso de identificadores descriptivos (Nomenclatura y Semántica)** - -### Control de Versiones (Git y GitHub) - -- [ ] **Git: Instalación y configuración** - -- [ ] **Git: Control de versiones con git (init, clone, add, commit, status, push, pull, remote)** - -- [ ] **GitHub: Creación de cuenta y repos, configuración de llaves SSH** - -- [ ] **GitHub: Despliegue con GitHub Pages** - -
Links

- - * [Sitio oficial de GitHub Pages](https://pages.github.com/) -

- -### Centrado en el usuario - -- [ ] **Diseñar y desarrollar un producto o servicio poniendo a las usuarias en el centro** - -### Diseño de producto - -- [ ] **Crear prototipos de alta fidelidad que incluyan interacciones** - -- [ ] **Seguir los principios básicos de diseño visual** - -## 8. Pistas, tips y lecturas complementarias - -### Prepara tu PC para trabajar - -1. Asegúrate de tener un :pencil: editor de texto en - condiciones, algo como [VS Code](https://code.visualstudio.com/). -2. Para ejecutar los comandos a continuación necesitarás una :shell: - [UNIX Shell](https://curriculum.laboratoria.la/es/topics/shell), - que es un programa que interpreta líneas de comando (command-line - interpreter) así como tener [git](https://curriculum.laboratoria.la/es/topics/scm/01-git) - instalado. Si usas un sistema operativo "UNIX-like", como GNU/Linux o MacOS, - ya tienes una _shell_ (terminal) instalada por defecto (y probablemente `git` - también). Si usas Windows puedes usar la versión completa de [Cmder](https://cmder.app/) - que incluye [Git bash](https://git-scm.com/download/win). -3. Tus _coaches_ te compartirán un _link_ a un repo y te darán acceso de lectura - en ese repo. Debes realizar un :fork_and_knife: - [fork](https://help.github.com/articles/fork-a-repo/) del repo. -4. :arrow_down: [Clona](https://help.github.com/articles/cloning-a-repository/) - tu _fork_ a tu computadora (copia local). -5. 📦 Instala las dependencias del proyecto con el comando `npm install`. Esto - asume que has instalado [Node.js](https://nodejs.org/) (que incluye [npm](https://docs.npmjs.com/)). -6. Si todo ha ido bien, deberías poder ejecutar las :traffic_light: - pruebas unitarias (unit tests) con el comando `npm test`. -7. Para ver la interfaz de tu programa en el navegador, usa el comando - `npm start` para arrancar el servidor web y dirígete a - `http://localhost:5000` en tu navegador. -8. A codear se ha dicho! :rocket: - -### Recursos y temas relacionados - -Súmate al canal de Slack -[#project-cipher](https://claseslaboratoria.slack.com/archives/C03LJSH6R7D) -para conversar y pedir ayuda del proyecto. - -A continuación un video que te lleva a través de la fórmula matemática del -Cifrado Césary un par de cosas más que debes saber para resolver este proyecto. -La fórmula no es lo importante del proyecto, no te confundas. - -[![tips caesar cipher](https://img.youtube.com/vi/zd8eVrXhs7Y/0.jpg)](https://www.youtube.com/watch?v=zd8eVrXhs7Y) - -Terminal y shell de UNIX: - -[![Playlist de Terminal y shell de UNIX](https://img.youtube.com/vi/GB35Eyb-J4c/0.jpg)](https://www.youtube.com/playlist?list=PLiAEe0-R7u8nGH5TEHfSTeDNIvjZFe_Yd) - -[Link](https://www.youtube.com/playlist?list=PLiAEe0-R7u8nGH5TEHfSTeDNIvjZFe_Yd) - -Control de versiones y trabajo colaborativo con Git y GitHub: - -[![Playlist de control de versiones y trabajo colaborativo](https://img.youtube.com/vi/F1EoBbvhaqU/0.jpg)](https://www.youtube.com/playlist?list=PLiAEe0-R7u8k9o3PbT3_QdyoBW_RX8rnV) - -[Link](https://www.youtube.com/playlist?list=PLiAEe0-R7u8nGH5TEHfSTeDNIvjZFe_Yd) - -Desarrollo Front-end: - -* [Aprende más sobre `charCodeAt()`](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/charCodeAt) -* [Aprende más sobre `String.fromCharCode()`](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/fromCharCode) -* [Aprende más sobre `ASCII`](http://conceptodefinicion.de/ascii/) -* Aprende más sobre [objetos](https://es.javascript.info/object) y - [como definir métodos](https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Working_with_Objects#definici%C3%B3n_de_m%C3%A9todos) - -Organización del Trabajo: - -* [Metodologías Ágiles](https://www.youtube.com/watch?v=v3fLx7VHxGM) -* [Scrum en menos de 2 minutos](https://www.youtube.com/watch?v=TRcReyRYIMg) -* [Scrum en Detalle](https://www.youtube.com/watch?v=nOlwF3HRrAY&t=297s). No - esperamos que hagas todo eso desde este proyecto. Iremos profundizando poco a - poco a lo largo del -_bootcamp_. - -*** - -## 9. Para considerar Project Feedback - -En resumen, los criterios de aceptación mínimos del proyecto para considerar -Project Feedback: - -* [ ] Tiene una interfaz que permite a la usuaria cifrar y descifrar. -* [ ] El proyecto será entregado incluyendo pruebas unitarios de los métodos de `cipher` -(`encode` y `decode`). -* [ ] El proyecto será entregado libre de _errores_ de `eslint` (_warnings_ son ok). -* [ ] El proyecto será entregado subiendo tu código a GitHub. -* [ ] La interfaz será "desplegada" usando GitHub Pages. -* [ ] El README contiene una definición del producto. diff --git a/package.json b/package.json deleted file mode 100644 index 350da29..0000000 --- a/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "cipher", - "version": "1.0.0", - "main": "src/index.html", - "license": "MIT", - "scripts": { - "htmlhint": "htmlhint src/*.html test/*.html", - "eslint": "eslint --ext .js src/ test/", - "pretest": "npm run eslint && npm run htmlhint", - "test": "jest --verbose --coverage", - "open-coverage-report": "opener ./coverage/lcov-report/index.html", - "start": "serve ./src", - "deploy": "gh-pages -d src" - }, - "devDependencies": { - "@babel/core": "^7.6.2", - "@babel/plugin-transform-modules-commonjs": "^7.6.0", - "babel-jest": "^27.0.1", - "eslint": "^8.3.0", - "gh-pages": "^3.1.0", - "htmlhint": "^1.0.0", - "jest": "^27.0.1", - "opener": "^1.5.1", - "serve": "^13.0.2" - }, - "engines": { - "node": ">=16.x" - }, - "bootcamp": { - "createdAt": "2023-02-01T14:32:56.013Z", - "version": "5.5.0", - "commit": "36bf90dc273bab8ffe9546b09eece6a132f8a669" - } -} \ No newline at end of file diff --git a/src/cipher.js b/src/cipher.js deleted file mode 100644 index 617222e..0000000 --- a/src/cipher.js +++ /dev/null @@ -1,5 +0,0 @@ -const cipher = { - // ... -}; - -export default cipher; diff --git a/src/index.html b/src/index.html deleted file mode 100644 index 1daf4de..0000000 --- a/src/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - Caesar Cipher - - - -
-

Hello world2!

-
- - - diff --git a/src/index.js b/src/index.js deleted file mode 100644 index 3d39493..0000000 --- a/src/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import cipher from './cipher.js'; - -console.log(cipher); diff --git a/src/style.css b/src/style.css deleted file mode 100644 index e69de29..0000000 diff --git a/test/.eslintrc b/test/.eslintrc deleted file mode 100644 index 55f121d..0000000 --- a/test/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "env": { - "jest": true - } -} diff --git a/test/cipher.spec.js b/test/cipher.spec.js deleted file mode 100644 index dbc40f0..0000000 --- a/test/cipher.spec.js +++ /dev/null @@ -1,108 +0,0 @@ -// [Español] -// Importamos el objeto `cipher`, que contiene los métodos `encode` y `decode` -// -// [Português] -// Importamos o objeto `cipher`, que contém os métodos `encode` e `decode` - -import cipher from '../src/cipher'; - -describe('cipher', () => { - - it('should be an object', () => { - expect(typeof cipher).toBe('object'); - }); - - describe('cipher.encode', () => { - - it('should be a function', () => { - expect(typeof cipher.encode).toBe('function'); - }); - - it('should throw TypeError when invoked with wrong argument types', () => { - expect(() => cipher.encode()).toThrow(TypeError); - expect(() => cipher.encode(0)).toThrow(TypeError); - expect(() => cipher.encode(null, [])).toThrow(TypeError); - expect(() => cipher.encode(0, 0)).toThrow(TypeError); - }); - - it('should return "HIJKLMNOPQRSTUVWXYZABCDEFG" for "ABCDEFGHIJKLMNOPQRSTUVWXYZ" with offset 33', () => { - expect(cipher.encode(33, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')).toBe('HIJKLMNOPQRSTUVWXYZABCDEFG'); - }); - - // Hacker edition - // - // [Español] - // Si decides agregar soporte para minúsculas descomenta el test a - // continuación. - // - // [Português] - // Se quiser adicionar testes para letras minúsculas, descomente o teste - // abaixo. - // - // it('should return "hijklmnopqrstuvwxyzabcdefg" for "abcdefghijklmnopqrstuvwxyz" with offset 33', () => { - // expect(cipher.encode(33, 'abcdefghijklmnopqrstuvwxyz')).toBe('hijklmnopqrstuvwxyzabcdefg'); - // }); - - // Hacker edition - // - // [Español] - // Si decides implementar soporte para caracteres no alfabéticos descomenta - // el test a continuación. - // - // [Português] - // Se quiser adicionar testes para caracteres não alfabéticos, descomente o - // teste abaixo. - // - // it('should return " !@" for " !@"', () => { - // expect(cipher.encode(33, ' !@')).toBe(' !@'); - // }); - }); - - describe('cipher.decode', () => { - - it('should be a function', () => { - expect(typeof cipher.decode).toBe('function'); - }); - - it('should throw TypeError when invoked with wrong argument types', () => { - expect(() => cipher.decode()).toThrow(TypeError); - expect(() => cipher.decode(0)).toThrow(TypeError); - expect(() => cipher.decode(null, [])).toThrow(TypeError); - expect(() => cipher.decode(0, 0)).toThrow(TypeError); - }); - - it('should return "ABCDEFGHIJKLMNOPQRSTUVWXYZ" for "HIJKLMNOPQRSTUVWXYZABCDEFG" with offset 33', () => { - expect(cipher.decode(33, 'HIJKLMNOPQRSTUVWXYZABCDEFG')).toBe('ABCDEFGHIJKLMNOPQRSTUVWXYZ'); - }); - - // - // Hacker edition - // - // [Español] - // Si decides agregar soporte para minúsculas descomenta el test a - // continuación. - // - // [Português] - // Se quiser adicionar testes para letras minúsculas, descomente o teste - // abaixo. - // - // it('should return "abcdefghijklmnopqrstuvwxyz" for "hijklmnopqrstuvwxyzabcdefg" with offset 33', () => { - // expect(cipher.decode(33, 'hijklmnopqrstuvwxyzabcdefg')).toBe('abcdefghijklmnopqrstuvwxyz'); - // }); - - // Hacker edition - // - // [Español] - // Si decides implementar soporte para caracteres no alfabéticos descomenta - // el test a continuación. - // - // [Português] - // Se quiser adicionar testes para caracteres não alfabéticos, descomente o - // teste abaixo. - // - // it('should return " !@" para " !@"', () => { - // expect(cipher.decode(33, ' !@')).toBe(' !@'); - // }); - }); - -}); diff --git a/thumb.png b/thumb.png deleted file mode 100644 index 535a18aebc9d544a65da288d8dd6319454f145f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26133 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 From 1d5549bd42f51cadeead38a990152b2b273579ed Mon Sep 17 00:00:00 2001 From: Brina Date: Mon, 13 Feb 2023 23:00:59 -0500 Subject: [PATCH 03/10] v1 --- DEV005-cifrado/.babelrc | 3 + DEV005-cifrado/.editorconfig | 8 + DEV005-cifrado/.eslintrc | 18 ++ DEV005-cifrado/.gitignore | 13 + DEV005-cifrado/FAQ.md | 12 + DEV005-cifrado/README.md | 471 +++++++++++++++++++++++++++++ DEV005-cifrado/package.json | 34 +++ DEV005-cifrado/src/cipher.js | 5 + DEV005-cifrado/src/index.html | 14 + DEV005-cifrado/src/index.js | 3 + DEV005-cifrado/src/style.css | 0 DEV005-cifrado/test/.eslintrc | 5 + DEV005-cifrado/test/cipher.spec.js | 108 +++++++ DEV005-cifrado/thumb.png | Bin 0 -> 26133 bytes 14 files changed, 694 insertions(+) create mode 100644 DEV005-cifrado/.babelrc create mode 100644 DEV005-cifrado/.editorconfig create mode 100644 DEV005-cifrado/.eslintrc create mode 100644 DEV005-cifrado/.gitignore create mode 100644 DEV005-cifrado/FAQ.md create mode 100644 DEV005-cifrado/README.md create mode 100644 DEV005-cifrado/package.json create mode 100644 DEV005-cifrado/src/cipher.js create mode 100644 DEV005-cifrado/src/index.html create mode 100644 DEV005-cifrado/src/index.js create mode 100644 DEV005-cifrado/src/style.css create mode 100644 DEV005-cifrado/test/.eslintrc create mode 100644 DEV005-cifrado/test/cipher.spec.js create mode 100644 DEV005-cifrado/thumb.png diff --git a/DEV005-cifrado/.babelrc b/DEV005-cifrado/.babelrc new file mode 100644 index 0000000..34bc6d2 --- /dev/null +++ b/DEV005-cifrado/.babelrc @@ -0,0 +1,3 @@ +{ + "plugins": ["@babel/plugin-transform-modules-commonjs"] +} diff --git a/DEV005-cifrado/.editorconfig b/DEV005-cifrado/.editorconfig new file mode 100644 index 0000000..1923d41 --- /dev/null +++ b/DEV005-cifrado/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/DEV005-cifrado/.eslintrc b/DEV005-cifrado/.eslintrc new file mode 100644 index 0000000..3d062a2 --- /dev/null +++ b/DEV005-cifrado/.eslintrc @@ -0,0 +1,18 @@ +{ + "env": { + "browser": true + }, + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "extends": "eslint:recommended", + "rules": { + "no-console": "warn", + "import/extensions": 0, + "no-var": "error", + "prefer-const": "error", + "eqeqeq": "error", + "indent": ["error", 2] + } +} diff --git a/DEV005-cifrado/.gitignore b/DEV005-cifrado/.gitignore new file mode 100644 index 0000000..7cf0606 --- /dev/null +++ b/DEV005-cifrado/.gitignore @@ -0,0 +1,13 @@ +coverage/ +node_modules/ +.DS_Store +*.log + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* diff --git a/DEV005-cifrado/FAQ.md b/DEV005-cifrado/FAQ.md new file mode 100644 index 0000000..794a8d5 --- /dev/null +++ b/DEV005-cifrado/FAQ.md @@ -0,0 +1,12 @@ +# FAQ (preguntas frecuentes) + +- [Por qué usar html semántico](https://youtu.be/vRqQRrULSxI) +- [Diferencia entre datos atómicos y estructurados](https://www.todojs.com/tipos-datos-javascript-es6/) +- [Para qué sirve el ESLint](https://es.paperblog.com/que-es-eslint-y-por-que-deberias-usarlo-5393037/) +- [Para qué sirven las pruebas unitarias](http://oscarmoreno.com/pruebas-unitarias/) +- Tengo que testear toda mi función + +> En líneas generales, sí, esto es, sabiendo que queremos que tu función haga pocas +cosas. Si tu función hace varias cosas al mismo tiempo el problema sería otro +y primero tendrías que dividir esa funcionalidad en varias funciones y escribir +un test para cada una. diff --git a/DEV005-cifrado/README.md b/DEV005-cifrado/README.md new file mode 100644 index 0000000..3f3932e --- /dev/null +++ b/DEV005-cifrado/README.md @@ -0,0 +1,471 @@ +# Cifrado César + +## Índice + +* [1. Preámbulo](#1-preámbulo) +* [2. Resumen del proyecto](#2-resumen-del-proyecto) +* [3. Consideraciones generales](#3-consideraciones-generales) +* [4. Hito: Criterios de aceptación mínimos del proyecto](#4-hito-criterios-de-aceptación-mínimos-del-proyecto) +* [5. Hito Opcional: Agrega soporte para minúsculas y otros caracteres](#5-hito-opcional-agrega-soporte-para-minúsculas-y-otros-caracteres) +* [6. Consideraciones técnicas](#6-consideraciones-técnicas) +* [7. Objetivos de aprendizaje](#7-objetivos-de-aprendizaje) +* [8. Pistas, tips y lecturas complementarias](#8-pistas-tips-y-lecturas-complementarias) +* [9. Para considerar Project Feedback](#9-para-considerar-project-feedback) + +*** + +## 1. Preámbulo + +Cifrar significa ocultar el contenido de un mensaje a simple vista, de manera +que sólo las partes autorizadas pueden descifrar un texto cifrado. +El [cifrado César](https://en.wikipedia.org/wiki/Caesar_cipher) +es uno de los primeros métodos de cifrado conocidos. El emperador romano Julio +César lo usaba para enviar órdenes secretas a sus generales en los campos de +batalla. + +El cifrado césar es una de las técnicas más simples para cifrar un mensaje. Es +un tipo de cifrado por sustitución, es decir que cada letra del texto original +es reemplazada por otra que se encuentra un número fijo de posiciones +(desplazamiento) más adelante en el mismo alfabeto. + +![caeser-cipher](https://upload.wikimedia.org/wikipedia/commons/thumb/2/2b/Caesar3.svg/2000px-Caesar3.svg.png) + +Por ejemplo, si usamos un desplazamiento (_offset_) de 3 posiciones: + +* La letra A se cifra como D. +* La palabra CASA se cifra como FDVD. +* Alfabeto sin cifrar: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +* Alfabeto cifrado: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C + +En la actualidad, todos los cifrados de sustitución simple se descifran con +mucha facilidad y, aunque en la práctica no ofrecen mucha seguridad en la +comunicación por sí mismos; el cifrado César sí puede formar parte de sistemas +más complejos de codificación, como el cifrado Vigenère, e incluso tiene +aplicación en el sistema ROT13. + +## 2. Resumen del proyecto + +En este proyecto crearás una aplicación web que servirá para que tu usuaria +pueda cifrar y descifrar un texto en el navegador indicando un desplazamiento +específico de caracteres (_offset_). Lo harás utilizando HTML, CSS y JavaScript. + +La temática es libre. Piensa en qué situaciones se necesitaría cifrar un mensaje. +Decide cómo debe ser esa experiencia de uso (qué pantallas, explicaciones, mensajes, +colores, etc.) Algunas ideas de ejemplo: + +* Crear claves seguras para el email. +* Encriptar/cifrar una tarjeta de crédito. +* Herramienta de mensajería interna de una organización de derechos humanos en + una zona de conflicto. +* Mensajería secreta para parejas. + +Como continuación del proyecto de preadmisión, volverás a trabajar sobre +fundamentos de JavaScript, incluyendo conceptos como variables, condicionales, +y funciones, así como eventos y manipulación básica del DOM, fundamentos de +HTML y CSS. Mientras desarrollas este proyecto, te familiarizarás con nuevos +conceptos también. + +### Los objetivos generales de este proyecto son los siguientes + +* Trabajar en base a un boilerplate, la estructura básica de un proyecto en + distintas carpetas (a través modulos en JS). +* Conocer las herramientas de mantenimiento y mejora del código (linters y + pruebas unitarias). +* Aprender sobre objetos, estructuras, métodos e iteración (bucles) + en JavaScript +* Implementar control de versiones con git (y la plataforma github) + +## 3. Consideraciones generales + +* Este proyecto lo resolvemos de manera **individual**. Te recomendamos una + duracion de 1-3 sprints. +* Enfócate en aprender y no solamente en "completar" el proyecto. +* Te sugerimos que no intentes saberlo todo antes de empezar a codear. + No te preocupes demasiado ahora por lo que _todavía_ no entiendas. + Irás aprendiendo. + +## 4. Hito: Criterios de aceptación mínimos del proyecto + +Estos son los requisitos que tu proyecto debe que cumplir para asegurar que tu trabajo +cubra los objetivos principales. + +**1. Una interfaz que debe permitir a la usuaria:** + +* **Cifrar un mensaje** + - Insertar el mensaje (texto) que quiere cifrar. El mensaje usa alfabeto + simplificado (solamente mayúsculas y sin ñ). + - Elegir un numero de desplazamiento (_offset_) indicando cuántas + posiciones quieres que el cifrado desplace cada caracter en el alfabeto. + El numero sera positivo y entero (positive integer). + - Ver el resultado del mensaje cifrado. + +* **Descifrar un mensaje** + - Insertar el mensaje (texto) que quieres descifrar. El mensaje usa alfabeto + simplificado (solamente mayúsculas y sin ñ). + - Elegir un numero desplazamiento (_offset_, que corresponda al que usamos + para cifrar) indicando cuántas posiciones quieres que + el cifrado desplace cada caracter en el alfabeto. El numero sera positivo y + entero (positive integer). + - Ver el resultado del mensaje descifrado. + +**2. Pruebas unitarios de los métodos.** +Los metódos de `cipher` (`encode` y `decode`) deben tener cobertura con +pruebas unitarias. + +**3. Código de tu proyecto subido a tu repo y interfaz "desplegada".** +El código final debe estar subido en un repositorio en GitHub. +La interfaz o pagina web, debe ser "desplegada" usando GitHub Pages. + +**4. Un README que contiene una definición del producto.** +En el README cuéntanos cómo pensaste en los usuarios y cuál fue tu proceso +para definir el producto final a nivel de experiencia y de interfaz. Estas +preguntas sirven como guia: + +* Quiénes son los principales usuarios de producto +* Cuáles son los objetivos de estos usuarios en relación con tu producto +* Cómo crees que el producto que estás creando está resolviendo sus problemas + +Con estos requisitos cumplidos puedes agendar un Project Feedback con unx coach. + +## 5. Hito Opcional: Agrega soporte para minúsculas y otros caracteres + +Las partes opcionales tienen como intención permitirte profundizar un poco más +sobre los objetivos de aprendizaje del proyecto. Todo en la vida tiene pros y +contras, decide sabiamente si quieres invertir el tiempo en profundizar/ +perfeccionar o aprender cosas nuevas en el siguiente proyecto. + +El hito de los críterios mínimos no menciona qué pasaría con las letras +minúsculas y otros caracteres (como espacios, puntuación, ñ, ...). +El _boilerplate_ incluye algunos _tests_ (comentados en principio) +que puedes usar como punto de partida para implementar el soporte para +estos casos adicionales. + +## 6. Consideraciones técnicas + +La lógica del proyecto debe estar implementada completamente en JavaScript. En +este proyecto NO está permitido usar librerías o frameworks, solo JavaScript puro +también conocido como Vanilla JavaScript. + +Para comenzar este proyecto tendrás que hacer un _fork_ y _clonar_ este +repositorio que contiene un _boilerplate_ con tests (pruebas). Un _boilerplate_ +es la estructura basica de un proyecto que sirve como un punto de partida con +archivos inicial y configuración basica de dependencias y tests. + +Los tests unitarios deben cubrir un mínimo del 70% de _statements_, _functions_ +y _lines_, y un mínimo del 50% de _branches_. El _boilerplate_ ya contiene el +setup y configuración necesaria para ejecutar los tests (pruebas) así como _code +coverage_ para ver el nivel de cobertura de los tests usando el comando `npm +test`. + +El boilerplate que les damos contiene esta estructura: + +```text +./ +├── .babelrc +├── .editorconfig +├── .eslintrc +├── .gitignore +├── README.md +├── package.json +├── src +│ ├── cipher.js +│ ├── index.html +│ ├── index.js +│ └── style.css +└── test + ├── .eslintrc + └── cipher.spec.js +``` + +### Descripción de scripts / archivos + +* `README.md`: debe explicar la información necesaria para el uso de + tu aplicación web, así como una introducción a la aplicación, + su funcionalidad y decisiones de diseño que tomaron. +* `src/index.html`: este es el punto de entrada a tu aplicación. Este archivo + debe contener tu _markup_ (HTML) e incluir el CSS y JavaScript necesario. +* `src/style.css`: este archivo debe contener las reglas de estilo. + Queremos que escribas tus propias reglas, por eso NO está permitido el uso + de frameworks de CSS (Bootstrap, Materialize, etc). +* `src/cipher.js`: acá debes implementar el objeto `cipher`, el cual ya está + _exportado_ en el _boilerplate_. Este objeto (`cipher`) debe contener dos + métodos: + - `cipher.encode(offset, string)`: `offset` es el número de posiciones que + queremos mover a la derecha en el alfabeto y `string` el mensaje (texto) + que queremos cifrar. + - `cipher.decode(offset, string)`: `offset` es el número de posiciones que + queremos mover a la izquierda en el alfabeto y `string` el mensaje + (texto) que queremos descifrar. +* `src/index.js`: acá debes escuchar eventos del DOM, invocar `cipher.encode()` + o `cipher.decode()` según sea necesario y actualizar el resultado en la UI. +* `test/cipher.spec.js`: este archivo contiene algunos tests de ejemplo y acá + tendrás que implementar los tests para `cipher.encode()` y `cipher.decode()`. + +El _boilerplate_ incluye tareas que ejecutan [eslint](https://eslint.org/) y +[htmlhint](https://github.com/yaniswang/HTMLHint) para verificar el `HTML` y +`JavaScript` con respecto a una guías de estilos. Ambas tareas se ejecutan +automáticamente antes de ejecutar las pruebas (tests) cuando usamos el comando +`npm run test`. En el caso de `JavaScript` estamos usando un archivo de +configuración de `eslint` que se llama `.eslintrc` que contiene un mínimo de +información sobre el parser que usar (qué version de JavaScript/ECMAScript), el +entorno (browser en este caso) y las [reglas recomendadas (`"eslint:recommended"`)](https://eslint.org/docs/rules/). +En cuanto a reglas/guías de estilo en sí, +usaremos las recomendaciones _por defecto_ de tanto `eslint` como `htmlhint`. + +### Deploy + +Hacer que los sitios estén publicados (o _desplegados_) para que usuarias de +la web puedan acceder a él es algo común en proyectos de desarrollo de software. + +En este proyecto, utilizaremos _Github Pages_ para desplegar nuestro sitio web. + +El comando `npm run deploy` puede ayudarte con esta tarea y también puedes + consultar su [documentación oficial](https://docs.github.com/es/pages). + +*** + +## 7. Objetivos de aprendizaje + +Reflexiona y luego marca los objetivos que has llegado a entender y aplicar en tu proyecto. Piensa en eso al decidir tu estrategia de trabajo. + +### HTML + +- [ ] **Uso de HTML semántico** + +
Links

+ + * [HTML semántico](https://curriculum.laboratoria.la/es/topics/html/02-html5/02-semantic-html) + * [Semantics - MDN Web Docs Glossary](https://developer.mozilla.org/en-US/docs/Glossary/Semantics#Semantics_in_HTML) +

+ +### CSS + +- [ ] **Uso de selectores de CSS** + +
Links

+ + * [Intro a CSS](https://curriculum.laboratoria.la/es/topics/css/01-css/01-intro-css) + * [CSS Selectors - MDN](https://developer.mozilla.org/es/docs/Web/CSS/CSS_Selectors) +

+ +- [ ] **Modelo de caja (box model): borde, margen, padding** + +
Links

+ + * [Box Model & Display](https://curriculum.laboratoria.la/es/topics/css/01-css/02-boxmodel-and-display) + * [The box model - MDN](https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model) + * [Introduction to the CSS box model - MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model) + * [CSS display - MDN](https://developer.mozilla.org/pt-BR/docs/Web/CSS/display) + * [display - CSS Tricks](https://css-tricks.com/almanac/properties/d/display/) +

+ +### Web APIs + +- [ ] **Uso de selectores del DOM** + +
Links

+ + * [Manipulación del DOM](https://curriculum.laboratoria.la/es/topics/browser/02-dom/03-1-dom-methods-selection) + * [Introducción al DOM - MDN](https://developer.mozilla.org/es/docs/Web/API/Document_Object_Model/Introduction) + * [Localizando elementos DOM usando selectores - MDN](https://developer.mozilla.org/es/docs/Web/API/Document_object_model/Locating_DOM_elements_using_selectors) +

+ +- [ ] **Manejo de eventos del DOM (listeners, propagación, delegación)** + +
Links

+ + * [Introducción a eventos - MDN](https://developer.mozilla.org/es/docs/Learn/JavaScript/Building_blocks/Events) + * [EventTarget.addEventListener() - MDN](https://developer.mozilla.org/es/docs/Web/API/EventTarget/addEventListener) + * [EventTarget.removeEventListener() - MDN](https://developer.mozilla.org/es/docs/Web/API/EventTarget/removeEventListener) + * [El objeto Event](https://developer.mozilla.org/es/docs/Web/API/Event) +

+ +- [ ] **Manipulación dinámica del DOM** + +
Links

+ + * [Introducción al DOM](https://developer.mozilla.org/es/docs/Web/API/Document_Object_Model/Introduction) + * [Node.appendChild() - MDN](https://developer.mozilla.org/es/docs/Web/API/Node/appendChild) + * [Document.createElement() - MDN](https://developer.mozilla.org/es/docs/Web/API/Document/createElement) + * [Document.createTextNode()](https://developer.mozilla.org/es/docs/Web/API/Document/createTextNode) + * [Element.innerHTML - MDN](https://developer.mozilla.org/es/docs/Web/API/Element/innerHTML) + * [Node.textContent - MDN](https://developer.mozilla.org/es/docs/Web/API/Node/textContent) +

+ +### JavaScript + +- [ ] **Tipos de datos primitivos** + +
Links

+ + * [Valores primitivos - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Data_structures#valores_primitivos) +

+ +- [ ] **Strings (cadenas de caracteres)** + +
Links

+ + * [Strings](https://curriculum.laboratoria.la/es/topics/javascript/06-strings) + * [String — Cadena de caracteres - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String) +

+ +- [ ] **Variables (declaración, asignación, ámbito)** + +
Links

+ + * [Valores, tipos de datos y operadores](https://curriculum.laboratoria.la/es/topics/javascript/01-basics/01-values-variables-and-types) + * [Variables](https://curriculum.laboratoria.la/es/topics/javascript/01-basics/02-variables) +

+ +- [ ] **Uso de condicionales (if-else, switch, operador ternario, lógica booleana)** + +
Links

+ + * [Estructuras condicionales y repetitivas](https://curriculum.laboratoria.la/es/topics/javascript/02-flow-control/01-conditionals-and-loops) + * [Tomando decisiones en tu código — condicionales - MDN](https://developer.mozilla.org/es/docs/Learn/JavaScript/Building_blocks/conditionals) +

+ +- [ ] **Uso de bucles/ciclos (while, for, for..of)** + +
Links

+ + * [Bucles (Loops)](https://curriculum.laboratoria.la/es/topics/javascript/02-flow-control/02-loops) + * [Bucles e iteración - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Loops_and_iteration) +

+ +- [ ] **Funciones (params, args, return)** + +
Links

+ + * [Funciones (control de flujo)](https://curriculum.laboratoria.la/es/topics/javascript/02-flow-control/03-functions) + * [Funciones clásicas](https://curriculum.laboratoria.la/es/topics/javascript/03-functions/01-classic) + * [Arrow Functions](https://curriculum.laboratoria.la/es/topics/javascript/03-functions/02-arrow) + * [Funciones — bloques de código reutilizables - MDN](https://developer.mozilla.org/es/docs/Learn/JavaScript/Building_blocks/Functions) +

+ +- [ ] **Pruebas unitarias (unit tests)** + +
Links

+ + * [Empezando con Jest - Documentación oficial](https://jestjs.io/docs/es-ES/getting-started) +

+ +- [ ] **Módulos de ECMAScript (ES Modules)** + +
Links

+ + * [import - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Statements/import) + * [export - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Statements/export) +

+ +- [ ] **Uso de linter (ESLINT)** + +- [ ] **Uso de identificadores descriptivos (Nomenclatura y Semántica)** + +### Control de Versiones (Git y GitHub) + +- [ ] **Git: Instalación y configuración** + +- [ ] **Git: Control de versiones con git (init, clone, add, commit, status, push, pull, remote)** + +- [ ] **GitHub: Creación de cuenta y repos, configuración de llaves SSH** + +- [ ] **GitHub: Despliegue con GitHub Pages** + +
Links

+ + * [Sitio oficial de GitHub Pages](https://pages.github.com/) +

+ +### Centrado en el usuario + +- [ ] **Diseñar y desarrollar un producto o servicio poniendo a las usuarias en el centro** + +### Diseño de producto + +- [ ] **Crear prototipos de alta fidelidad que incluyan interacciones** + +- [ ] **Seguir los principios básicos de diseño visual** + +## 8. Pistas, tips y lecturas complementarias + +### Prepara tu PC para trabajar + +1. Asegúrate de tener un :pencil: editor de texto en + condiciones, algo como [VS Code](https://code.visualstudio.com/). +2. Para ejecutar los comandos a continuación necesitarás una :shell: + [UNIX Shell](https://curriculum.laboratoria.la/es/topics/shell), + que es un programa que interpreta líneas de comando (command-line + interpreter) así como tener [git](https://curriculum.laboratoria.la/es/topics/scm/01-git) + instalado. Si usas un sistema operativo "UNIX-like", como GNU/Linux o MacOS, + ya tienes una _shell_ (terminal) instalada por defecto (y probablemente `git` + también). Si usas Windows puedes usar la versión completa de [Cmder](https://cmder.app/) + que incluye [Git bash](https://git-scm.com/download/win). +3. Tus _coaches_ te compartirán un _link_ a un repo y te darán acceso de lectura + en ese repo. Debes realizar un :fork_and_knife: + [fork](https://help.github.com/articles/fork-a-repo/) del repo. +4. :arrow_down: [Clona](https://help.github.com/articles/cloning-a-repository/) + tu _fork_ a tu computadora (copia local). +5. 📦 Instala las dependencias del proyecto con el comando `npm install`. Esto + asume que has instalado [Node.js](https://nodejs.org/) (que incluye [npm](https://docs.npmjs.com/)). +6. Si todo ha ido bien, deberías poder ejecutar las :traffic_light: + pruebas unitarias (unit tests) con el comando `npm test`. +7. Para ver la interfaz de tu programa en el navegador, usa el comando + `npm start` para arrancar el servidor web y dirígete a + `http://localhost:5000` en tu navegador. +8. A codear se ha dicho! :rocket: + +### Recursos y temas relacionados + +Súmate al canal de Slack +[#project-cipher](https://claseslaboratoria.slack.com/archives/C03LJSH6R7D) +para conversar y pedir ayuda del proyecto. + +A continuación un video que te lleva a través de la fórmula matemática del +Cifrado Césary un par de cosas más que debes saber para resolver este proyecto. +La fórmula no es lo importante del proyecto, no te confundas. + +[![tips caesar cipher](https://img.youtube.com/vi/zd8eVrXhs7Y/0.jpg)](https://www.youtube.com/watch?v=zd8eVrXhs7Y) + +Terminal y shell de UNIX: + +[![Playlist de Terminal y shell de UNIX](https://img.youtube.com/vi/GB35Eyb-J4c/0.jpg)](https://www.youtube.com/playlist?list=PLiAEe0-R7u8nGH5TEHfSTeDNIvjZFe_Yd) + +[Link](https://www.youtube.com/playlist?list=PLiAEe0-R7u8nGH5TEHfSTeDNIvjZFe_Yd) + +Control de versiones y trabajo colaborativo con Git y GitHub: + +[![Playlist de control de versiones y trabajo colaborativo](https://img.youtube.com/vi/F1EoBbvhaqU/0.jpg)](https://www.youtube.com/playlist?list=PLiAEe0-R7u8k9o3PbT3_QdyoBW_RX8rnV) + +[Link](https://www.youtube.com/playlist?list=PLiAEe0-R7u8nGH5TEHfSTeDNIvjZFe_Yd) + +Desarrollo Front-end: + +* [Aprende más sobre `charCodeAt()`](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/charCodeAt) +* [Aprende más sobre `String.fromCharCode()`](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/fromCharCode) +* [Aprende más sobre `ASCII`](http://conceptodefinicion.de/ascii/) +* Aprende más sobre [objetos](https://es.javascript.info/object) y + [como definir métodos](https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Working_with_Objects#definici%C3%B3n_de_m%C3%A9todos) + +Organización del Trabajo: + +* [Metodologías Ágiles](https://www.youtube.com/watch?v=v3fLx7VHxGM) +* [Scrum en menos de 2 minutos](https://www.youtube.com/watch?v=TRcReyRYIMg) +* [Scrum en Detalle](https://www.youtube.com/watch?v=nOlwF3HRrAY&t=297s). No + esperamos que hagas todo eso desde este proyecto. Iremos profundizando poco a + poco a lo largo del -_bootcamp_. + +*** + +## 9. Para considerar Project Feedback + +En resumen, los criterios de aceptación mínimos del proyecto para considerar +Project Feedback: + +* [ ] Tiene una interfaz que permite a la usuaria cifrar y descifrar. +* [ ] El proyecto será entregado incluyendo pruebas unitarios de los métodos de `cipher` +(`encode` y `decode`). +* [ ] El proyecto será entregado libre de _errores_ de `eslint` (_warnings_ son ok). +* [ ] El proyecto será entregado subiendo tu código a GitHub. +* [ ] La interfaz será "desplegada" usando GitHub Pages. +* [ ] El README contiene una definición del producto. diff --git a/DEV005-cifrado/package.json b/DEV005-cifrado/package.json new file mode 100644 index 0000000..350da29 --- /dev/null +++ b/DEV005-cifrado/package.json @@ -0,0 +1,34 @@ +{ + "name": "cipher", + "version": "1.0.0", + "main": "src/index.html", + "license": "MIT", + "scripts": { + "htmlhint": "htmlhint src/*.html test/*.html", + "eslint": "eslint --ext .js src/ test/", + "pretest": "npm run eslint && npm run htmlhint", + "test": "jest --verbose --coverage", + "open-coverage-report": "opener ./coverage/lcov-report/index.html", + "start": "serve ./src", + "deploy": "gh-pages -d src" + }, + "devDependencies": { + "@babel/core": "^7.6.2", + "@babel/plugin-transform-modules-commonjs": "^7.6.0", + "babel-jest": "^27.0.1", + "eslint": "^8.3.0", + "gh-pages": "^3.1.0", + "htmlhint": "^1.0.0", + "jest": "^27.0.1", + "opener": "^1.5.1", + "serve": "^13.0.2" + }, + "engines": { + "node": ">=16.x" + }, + "bootcamp": { + "createdAt": "2023-02-01T14:32:56.013Z", + "version": "5.5.0", + "commit": "36bf90dc273bab8ffe9546b09eece6a132f8a669" + } +} \ No newline at end of file diff --git a/DEV005-cifrado/src/cipher.js b/DEV005-cifrado/src/cipher.js new file mode 100644 index 0000000..617222e --- /dev/null +++ b/DEV005-cifrado/src/cipher.js @@ -0,0 +1,5 @@ +const cipher = { + // ... +}; + +export default cipher; diff --git a/DEV005-cifrado/src/index.html b/DEV005-cifrado/src/index.html new file mode 100644 index 0000000..1daf4de --- /dev/null +++ b/DEV005-cifrado/src/index.html @@ -0,0 +1,14 @@ + + + + + Caesar Cipher + + + +
+

Hello world2!

+
+ + + diff --git a/DEV005-cifrado/src/index.js b/DEV005-cifrado/src/index.js new file mode 100644 index 0000000..3d39493 --- /dev/null +++ b/DEV005-cifrado/src/index.js @@ -0,0 +1,3 @@ +import cipher from './cipher.js'; + +console.log(cipher); diff --git a/DEV005-cifrado/src/style.css b/DEV005-cifrado/src/style.css new file mode 100644 index 0000000..e69de29 diff --git a/DEV005-cifrado/test/.eslintrc b/DEV005-cifrado/test/.eslintrc new file mode 100644 index 0000000..55f121d --- /dev/null +++ b/DEV005-cifrado/test/.eslintrc @@ -0,0 +1,5 @@ +{ + "env": { + "jest": true + } +} diff --git a/DEV005-cifrado/test/cipher.spec.js b/DEV005-cifrado/test/cipher.spec.js new file mode 100644 index 0000000..dbc40f0 --- /dev/null +++ b/DEV005-cifrado/test/cipher.spec.js @@ -0,0 +1,108 @@ +// [Español] +// Importamos el objeto `cipher`, que contiene los métodos `encode` y `decode` +// +// [Português] +// Importamos o objeto `cipher`, que contém os métodos `encode` e `decode` + +import cipher from '../src/cipher'; + +describe('cipher', () => { + + it('should be an object', () => { + expect(typeof cipher).toBe('object'); + }); + + describe('cipher.encode', () => { + + it('should be a function', () => { + expect(typeof cipher.encode).toBe('function'); + }); + + it('should throw TypeError when invoked with wrong argument types', () => { + expect(() => cipher.encode()).toThrow(TypeError); + expect(() => cipher.encode(0)).toThrow(TypeError); + expect(() => cipher.encode(null, [])).toThrow(TypeError); + expect(() => cipher.encode(0, 0)).toThrow(TypeError); + }); + + it('should return "HIJKLMNOPQRSTUVWXYZABCDEFG" for "ABCDEFGHIJKLMNOPQRSTUVWXYZ" with offset 33', () => { + expect(cipher.encode(33, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')).toBe('HIJKLMNOPQRSTUVWXYZABCDEFG'); + }); + + // Hacker edition + // + // [Español] + // Si decides agregar soporte para minúsculas descomenta el test a + // continuación. + // + // [Português] + // Se quiser adicionar testes para letras minúsculas, descomente o teste + // abaixo. + // + // it('should return "hijklmnopqrstuvwxyzabcdefg" for "abcdefghijklmnopqrstuvwxyz" with offset 33', () => { + // expect(cipher.encode(33, 'abcdefghijklmnopqrstuvwxyz')).toBe('hijklmnopqrstuvwxyzabcdefg'); + // }); + + // Hacker edition + // + // [Español] + // Si decides implementar soporte para caracteres no alfabéticos descomenta + // el test a continuación. + // + // [Português] + // Se quiser adicionar testes para caracteres não alfabéticos, descomente o + // teste abaixo. + // + // it('should return " !@" for " !@"', () => { + // expect(cipher.encode(33, ' !@')).toBe(' !@'); + // }); + }); + + describe('cipher.decode', () => { + + it('should be a function', () => { + expect(typeof cipher.decode).toBe('function'); + }); + + it('should throw TypeError when invoked with wrong argument types', () => { + expect(() => cipher.decode()).toThrow(TypeError); + expect(() => cipher.decode(0)).toThrow(TypeError); + expect(() => cipher.decode(null, [])).toThrow(TypeError); + expect(() => cipher.decode(0, 0)).toThrow(TypeError); + }); + + it('should return "ABCDEFGHIJKLMNOPQRSTUVWXYZ" for "HIJKLMNOPQRSTUVWXYZABCDEFG" with offset 33', () => { + expect(cipher.decode(33, 'HIJKLMNOPQRSTUVWXYZABCDEFG')).toBe('ABCDEFGHIJKLMNOPQRSTUVWXYZ'); + }); + + // + // Hacker edition + // + // [Español] + // Si decides agregar soporte para minúsculas descomenta el test a + // continuación. + // + // [Português] + // Se quiser adicionar testes para letras minúsculas, descomente o teste + // abaixo. + // + // it('should return "abcdefghijklmnopqrstuvwxyz" for "hijklmnopqrstuvwxyzabcdefg" with offset 33', () => { + // expect(cipher.decode(33, 'hijklmnopqrstuvwxyzabcdefg')).toBe('abcdefghijklmnopqrstuvwxyz'); + // }); + + // Hacker edition + // + // [Español] + // Si decides implementar soporte para caracteres no alfabéticos descomenta + // el test a continuación. + // + // [Português] + // Se quiser adicionar testes para caracteres não alfabéticos, descomente o + // teste abaixo. + // + // it('should return " !@" para " !@"', () => { + // expect(cipher.decode(33, ' !@')).toBe(' !@'); + // }); + }); + +}); diff --git a/DEV005-cifrado/thumb.png b/DEV005-cifrado/thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..535a18aebc9d544a65da288d8dd6319454f145f3 GIT binary patch literal 26133 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 literal 0 HcmV?d00001 From d5fdf2b9c2641e46c57a57aab82010d705fadc62 Mon Sep 17 00:00:00 2001 From: Brina Date: Thu, 16 Feb 2023 13:41:30 -0500 Subject: [PATCH 04/10] mi primer commit --- DEV005-cifrado/package-lock.json | 7519 ++++++++++++++++++++++++++++++ DEV005-cifrado/src/cipher.js | 28 +- DEV005-cifrado/src/index.html | 25 +- DEV005-cifrado/src/style.css | 8 + 4 files changed, 7576 insertions(+), 4 deletions(-) create mode 100644 DEV005-cifrado/package-lock.json diff --git a/DEV005-cifrado/package-lock.json b/DEV005-cifrado/package-lock.json new file mode 100644 index 0000000..26c98e9 --- /dev/null +++ b/DEV005-cifrado/package-lock.json @@ -0,0 +1,7519 @@ +{ + "name": "cipher", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "cipher", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "@babel/core": "^7.6.2", + "@babel/plugin-transform-modules-commonjs": "^7.6.0", + "babel-jest": "^27.0.1", + "eslint": "^8.3.0", + "gh-pages": "^3.1.0", + "htmlhint": "^1.0.0", + "jest": "^27.0.1", + "opener": "^1.5.1", + "serve": "^13.0.2" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", + "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", + "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", + "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.13", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.20.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", + "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", + "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", + "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.13", + "@babel/types": "^7.20.7", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", + "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/node": { + "version": "18.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz", + "integrity": "sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@zeit/schemas": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.6.0.tgz", + "integrity": "sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/arg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-2.0.0.tgz", + "integrity": "sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/boxen/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/boxen/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001451", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz", + "integrity": "sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "dependencies": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clipboardy/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/clipboardy/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "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" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clipboardy/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clipboardy/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clipboardy/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clipboardy/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/clipboardy/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/clipboardy/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clipboardy/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clipboardy/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.14", + "debug": "2.6.9", + "on-headers": "~1.0.1", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.295", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz", + "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==", + "dev": true + }, + "node_modules/email-addresses": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", + "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", + "dev": true, + "dependencies": { + "punycode": "^1.3.2" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gh-pages": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz", + "integrity": "sha512-jA1PbapQ1jqzacECfjUaO9gV8uBgU6XNMV0oXLtfCX3haGLe5Atq8BxlrADhbD6/UdG9j6tZLWAkAybndOXTJg==", + "dev": true, + "dependencies": { + "async": "^2.6.1", + "commander": "^2.18.0", + "email-addresses": "^3.0.1", + "filenamify": "^4.3.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "^8.1.0", + "globby": "^6.1.0" + }, + "bin": { + "gh-pages": "bin/gh-pages.js", + "gh-pages-clean": "bin/gh-pages-clean.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlhint": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/htmlhint/-/htmlhint-1.1.4.tgz", + "integrity": "sha512-tSKPefhIaaWDk/vKxAOQbN+QwZmDeJCq3bZZGbJMoMQAfTjepudC+MkuT9MOBbuQI3dLLzDWbmU7fLV3JASC7Q==", + "dev": true, + "dependencies": { + "async": "3.2.3", + "chalk": "^4.1.2", + "commander": "^9.1.0", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "node-fetch": "^2.6.2", + "strip-json-comments": "3.1.0", + "xml": "1.0.1" + }, + "bin": { + "htmlhint": "bin/htmlhint" + } + }, + "node_modules/htmlhint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/htmlhint/node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "dev": true + }, + "node_modules/htmlhint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/htmlhint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/htmlhint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/htmlhint/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/htmlhint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/htmlhint/node_modules/strip-json-comments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/htmlhint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "dependencies": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", + "dev": true, + "dependencies": { + "rc": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serve": { + "version": "13.0.4", + "resolved": "https://registry.npmjs.org/serve/-/serve-13.0.4.tgz", + "integrity": "sha512-Lj8rhXmphJCRQVv5qwu0NQZ2h+0MrRyRJxDZu5y3qLH2i/XY6a0FPj/VmjMUdkJb672MBfE8hJ274PU6JzBd0Q==", + "dev": true, + "dependencies": { + "@zeit/schemas": "2.6.0", + "ajv": "6.12.6", + "arg": "2.0.0", + "boxen": "5.1.2", + "chalk": "2.4.1", + "clipboardy": "2.3.0", + "compression": "1.7.3", + "serve-handler": "6.1.3", + "update-check": "1.5.2" + }, + "bin": { + "serve": "bin/serve.js" + } + }, + "node_modules/serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "dev": true, + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/serve/node_modules/chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-check": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.2.tgz", + "integrity": "sha512-1TrmYLuLj/5ZovwUS7fFd1jMH3NnFDN1y1A8dboedIDt7zs/zJMo6TwwlhYKkSeEwzleeiSBV5/3c9ufAQWDaQ==", + "dev": true, + "dependencies": { + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", + "dev": true + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/DEV005-cifrado/src/cipher.js b/DEV005-cifrado/src/cipher.js index 617222e..dfb963f 100644 --- a/DEV005-cifrado/src/cipher.js +++ b/DEV005-cifrado/src/cipher.js @@ -1,5 +1,27 @@ -const cipher = { +//const cipher = { // ... -}; +//}; + +function CifrarMsj() { + var palabra = document.getElementById("textooriginal").value; + var desplazamiento = document.getElementById("espaciado").value; + var respuesta = "" + desplazamiento = (desplazamiento%26 + 26) % 26; + for ( var i = 0; i < palabra.length ; i++) { + var ascii = palabra[i].charCodeAt(); + if ((ascii >= 65 && ascii <= 90)) { + respuesta += String.fromCharCode((ascii - 'A'.charCodeAt(0) + desplazamiento)%26 + + 'A'.charCodeAt(0)) ; + } else if(ascii >= 97 && ascii <= 122){ + respuesta += String.fromCharCode((ascii-'a'.charCodeAt(0) + desplazamiento) % 26 + + 'a'.charCodeAt(0)); + } else { + respuesta += palabra[i] + } + } + alert(respuesta); + return respuesta; +} + +//export default cipher; -export default cipher; diff --git a/DEV005-cifrado/src/index.html b/DEV005-cifrado/src/index.html index 1daf4de..c1f18ce 100644 --- a/DEV005-cifrado/src/index.html +++ b/DEV005-cifrado/src/index.html @@ -4,11 +4,34 @@ Caesar Cipher + +
-

Hello world2!

+

Bienvenido

+

Ingrese Mensaje a cifrar

+ +

+

+ +

+ + +

Offset

+ + +
+ +
+

+

Descifrado De Mensaje

+ + +
+ + diff --git a/DEV005-cifrado/src/style.css b/DEV005-cifrado/src/style.css index e69de29..3f92a30 100644 --- a/DEV005-cifrado/src/style.css +++ b/DEV005-cifrado/src/style.css @@ -0,0 +1,8 @@ +body { + background-image:url(https://www.captio.net/hubfs/Captio%20Blog%20Image%20%2810%29-1.png); + + } + + + + From 978bcb65cb3df526e8324a5d3e12c05faefc13de Mon Sep 17 00:00:00 2001 From: Brina Date: Fri, 3 Mar 2023 12:14:55 -0500 Subject: [PATCH 05/10] fin --- DEV005-cifrado/README.md | 481 +---------------------------- DEV005-cifrado/src/cipher.js | 73 +++-- DEV005-cifrado/src/index.html | 90 ++++-- DEV005-cifrado/src/index.js | 51 ++- DEV005-cifrado/src/style.css | 54 +++- DEV005-cifrado/test/cipher.spec.js | 4 +- 6 files changed, 222 insertions(+), 531 deletions(-) diff --git a/DEV005-cifrado/README.md b/DEV005-cifrado/README.md index 3f3932e..a06aad8 100644 --- a/DEV005-cifrado/README.md +++ b/DEV005-cifrado/README.md @@ -1,471 +1,20 @@ # Cifrado César +# Preambulo -## Índice +En criptografía, el cifrado César, también conocido como cifrado por desplazamiento, código de César o desplazamiento de César, es una de las técnicas de cifrado más simples y más usadas. Es un tipo de cifrado por sustitución en el que una letra en el texto original es reemplazada por otra letra que se encuentra un número fijo de posiciones más adelante en el alfabeto. Por ejemplo, con un desplazamiento de 3, la A sería sustituida por la D (situada 3 lugares a la derecha de la A ), la B sería reemplazada por la E, etc. -* [1. Preámbulo](#1-preámbulo) -* [2. Resumen del proyecto](#2-resumen-del-proyecto) -* [3. Consideraciones generales](#3-consideraciones-generales) -* [4. Hito: Criterios de aceptación mínimos del proyecto](#4-hito-criterios-de-aceptación-mínimos-del-proyecto) -* [5. Hito Opcional: Agrega soporte para minúsculas y otros caracteres](#5-hito-opcional-agrega-soporte-para-minúsculas-y-otros-caracteres) -* [6. Consideraciones técnicas](#6-consideraciones-técnicas) -* [7. Objetivos de aprendizaje](#7-objetivos-de-aprendizaje) -* [8. Pistas, tips y lecturas complementarias](#8-pistas-tips-y-lecturas-complementarias) -* [9. Para considerar Project Feedback](#9-para-considerar-project-feedback) +# Resumen + Quiénes son los principales usuarios de producto + Debido a la creciente incursión de los usuarios en la red y al gran volumen de información que se maneja, surge la evidente necesidad de ocultar cierta información que para algunas empresas o personas es relevante y de suma importancia. Internet es utilizado para compartir información y realizar transacciones de toda índole, sobre todo las entidades financieras que realizan la mayor parte de sus operaciones en línea; pero la información que viaja través de las redes puede ser interceptada y utilizada en contra del usuario o desfavoreciendo su bienestar. Por ello, asegurar la información se hace imperativo y qué mejor que a través de criptografía (que oculta mensajes), la esteganografía (que esconde la información de manera desapercibida) y el criptoanálisis (que reconstruye un mensaje cifrado) que dan la posibilidad de proteger los datos que viajan a través de la red. + Basicamente estara enfocado a usuarios que deseen realizar retiros de avances de tarjeta de credito sin necesidad de tener la tarjeta a la mano, con el fin de evitar las largas filas por este proceso se busca que el usuario realice el proceso de forma autonoma mediante el uso de cajeros automaticos, el cifrado permite que personas autorizadas vean toda la información que envíe, ya sea por un mensaje o en un correo electrónico, cambie su forma y sólo pueda ser descifrada por el destinatario correcto. De esta forma, cuando envías el mensaje cifrado, el mismo viaja protegido mediante fórmulas matemáticas o lógicas. Así sólo puede ser decodificado por el destinatario, ya que sólo él y el remitente tendrán los códigos o claves necesarias para descifrarlos y leerlos. + + Cuáles son los objetivos de estos usuarios en relación con tu producto? + Agilidad en los servicios + Transmitir información segura + Confidencialidad + Autogestion en el proceso -*** + +Cómo crees que el producto que estás creando está resolviendo sus problemas? +Permita que los usuario eviten realizar largas filas para realizar el proceso en agencia, asi pueden hacerlo desde casa y retirar por medio de los cajero automaticos. -## 1. Preámbulo - -Cifrar significa ocultar el contenido de un mensaje a simple vista, de manera -que sólo las partes autorizadas pueden descifrar un texto cifrado. -El [cifrado César](https://en.wikipedia.org/wiki/Caesar_cipher) -es uno de los primeros métodos de cifrado conocidos. El emperador romano Julio -César lo usaba para enviar órdenes secretas a sus generales en los campos de -batalla. - -El cifrado césar es una de las técnicas más simples para cifrar un mensaje. Es -un tipo de cifrado por sustitución, es decir que cada letra del texto original -es reemplazada por otra que se encuentra un número fijo de posiciones -(desplazamiento) más adelante en el mismo alfabeto. - -![caeser-cipher](https://upload.wikimedia.org/wikipedia/commons/thumb/2/2b/Caesar3.svg/2000px-Caesar3.svg.png) - -Por ejemplo, si usamos un desplazamiento (_offset_) de 3 posiciones: - -* La letra A se cifra como D. -* La palabra CASA se cifra como FDVD. -* Alfabeto sin cifrar: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z -* Alfabeto cifrado: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C - -En la actualidad, todos los cifrados de sustitución simple se descifran con -mucha facilidad y, aunque en la práctica no ofrecen mucha seguridad en la -comunicación por sí mismos; el cifrado César sí puede formar parte de sistemas -más complejos de codificación, como el cifrado Vigenère, e incluso tiene -aplicación en el sistema ROT13. - -## 2. Resumen del proyecto - -En este proyecto crearás una aplicación web que servirá para que tu usuaria -pueda cifrar y descifrar un texto en el navegador indicando un desplazamiento -específico de caracteres (_offset_). Lo harás utilizando HTML, CSS y JavaScript. - -La temática es libre. Piensa en qué situaciones se necesitaría cifrar un mensaje. -Decide cómo debe ser esa experiencia de uso (qué pantallas, explicaciones, mensajes, -colores, etc.) Algunas ideas de ejemplo: - -* Crear claves seguras para el email. -* Encriptar/cifrar una tarjeta de crédito. -* Herramienta de mensajería interna de una organización de derechos humanos en - una zona de conflicto. -* Mensajería secreta para parejas. - -Como continuación del proyecto de preadmisión, volverás a trabajar sobre -fundamentos de JavaScript, incluyendo conceptos como variables, condicionales, -y funciones, así como eventos y manipulación básica del DOM, fundamentos de -HTML y CSS. Mientras desarrollas este proyecto, te familiarizarás con nuevos -conceptos también. - -### Los objetivos generales de este proyecto son los siguientes - -* Trabajar en base a un boilerplate, la estructura básica de un proyecto en - distintas carpetas (a través modulos en JS). -* Conocer las herramientas de mantenimiento y mejora del código (linters y - pruebas unitarias). -* Aprender sobre objetos, estructuras, métodos e iteración (bucles) - en JavaScript -* Implementar control de versiones con git (y la plataforma github) - -## 3. Consideraciones generales - -* Este proyecto lo resolvemos de manera **individual**. Te recomendamos una - duracion de 1-3 sprints. -* Enfócate en aprender y no solamente en "completar" el proyecto. -* Te sugerimos que no intentes saberlo todo antes de empezar a codear. - No te preocupes demasiado ahora por lo que _todavía_ no entiendas. - Irás aprendiendo. - -## 4. Hito: Criterios de aceptación mínimos del proyecto - -Estos son los requisitos que tu proyecto debe que cumplir para asegurar que tu trabajo -cubra los objetivos principales. - -**1. Una interfaz que debe permitir a la usuaria:** - -* **Cifrar un mensaje** - - Insertar el mensaje (texto) que quiere cifrar. El mensaje usa alfabeto - simplificado (solamente mayúsculas y sin ñ). - - Elegir un numero de desplazamiento (_offset_) indicando cuántas - posiciones quieres que el cifrado desplace cada caracter en el alfabeto. - El numero sera positivo y entero (positive integer). - - Ver el resultado del mensaje cifrado. - -* **Descifrar un mensaje** - - Insertar el mensaje (texto) que quieres descifrar. El mensaje usa alfabeto - simplificado (solamente mayúsculas y sin ñ). - - Elegir un numero desplazamiento (_offset_, que corresponda al que usamos - para cifrar) indicando cuántas posiciones quieres que - el cifrado desplace cada caracter en el alfabeto. El numero sera positivo y - entero (positive integer). - - Ver el resultado del mensaje descifrado. - -**2. Pruebas unitarios de los métodos.** -Los metódos de `cipher` (`encode` y `decode`) deben tener cobertura con -pruebas unitarias. - -**3. Código de tu proyecto subido a tu repo y interfaz "desplegada".** -El código final debe estar subido en un repositorio en GitHub. -La interfaz o pagina web, debe ser "desplegada" usando GitHub Pages. - -**4. Un README que contiene una definición del producto.** -En el README cuéntanos cómo pensaste en los usuarios y cuál fue tu proceso -para definir el producto final a nivel de experiencia y de interfaz. Estas -preguntas sirven como guia: - -* Quiénes son los principales usuarios de producto -* Cuáles son los objetivos de estos usuarios en relación con tu producto -* Cómo crees que el producto que estás creando está resolviendo sus problemas - -Con estos requisitos cumplidos puedes agendar un Project Feedback con unx coach. - -## 5. Hito Opcional: Agrega soporte para minúsculas y otros caracteres - -Las partes opcionales tienen como intención permitirte profundizar un poco más -sobre los objetivos de aprendizaje del proyecto. Todo en la vida tiene pros y -contras, decide sabiamente si quieres invertir el tiempo en profundizar/ -perfeccionar o aprender cosas nuevas en el siguiente proyecto. - -El hito de los críterios mínimos no menciona qué pasaría con las letras -minúsculas y otros caracteres (como espacios, puntuación, ñ, ...). -El _boilerplate_ incluye algunos _tests_ (comentados en principio) -que puedes usar como punto de partida para implementar el soporte para -estos casos adicionales. - -## 6. Consideraciones técnicas - -La lógica del proyecto debe estar implementada completamente en JavaScript. En -este proyecto NO está permitido usar librerías o frameworks, solo JavaScript puro -también conocido como Vanilla JavaScript. - -Para comenzar este proyecto tendrás que hacer un _fork_ y _clonar_ este -repositorio que contiene un _boilerplate_ con tests (pruebas). Un _boilerplate_ -es la estructura basica de un proyecto que sirve como un punto de partida con -archivos inicial y configuración basica de dependencias y tests. - -Los tests unitarios deben cubrir un mínimo del 70% de _statements_, _functions_ -y _lines_, y un mínimo del 50% de _branches_. El _boilerplate_ ya contiene el -setup y configuración necesaria para ejecutar los tests (pruebas) así como _code -coverage_ para ver el nivel de cobertura de los tests usando el comando `npm -test`. - -El boilerplate que les damos contiene esta estructura: - -```text -./ -├── .babelrc -├── .editorconfig -├── .eslintrc -├── .gitignore -├── README.md -├── package.json -├── src -│ ├── cipher.js -│ ├── index.html -│ ├── index.js -│ └── style.css -└── test - ├── .eslintrc - └── cipher.spec.js -``` - -### Descripción de scripts / archivos - -* `README.md`: debe explicar la información necesaria para el uso de - tu aplicación web, así como una introducción a la aplicación, - su funcionalidad y decisiones de diseño que tomaron. -* `src/index.html`: este es el punto de entrada a tu aplicación. Este archivo - debe contener tu _markup_ (HTML) e incluir el CSS y JavaScript necesario. -* `src/style.css`: este archivo debe contener las reglas de estilo. - Queremos que escribas tus propias reglas, por eso NO está permitido el uso - de frameworks de CSS (Bootstrap, Materialize, etc). -* `src/cipher.js`: acá debes implementar el objeto `cipher`, el cual ya está - _exportado_ en el _boilerplate_. Este objeto (`cipher`) debe contener dos - métodos: - - `cipher.encode(offset, string)`: `offset` es el número de posiciones que - queremos mover a la derecha en el alfabeto y `string` el mensaje (texto) - que queremos cifrar. - - `cipher.decode(offset, string)`: `offset` es el número de posiciones que - queremos mover a la izquierda en el alfabeto y `string` el mensaje - (texto) que queremos descifrar. -* `src/index.js`: acá debes escuchar eventos del DOM, invocar `cipher.encode()` - o `cipher.decode()` según sea necesario y actualizar el resultado en la UI. -* `test/cipher.spec.js`: este archivo contiene algunos tests de ejemplo y acá - tendrás que implementar los tests para `cipher.encode()` y `cipher.decode()`. - -El _boilerplate_ incluye tareas que ejecutan [eslint](https://eslint.org/) y -[htmlhint](https://github.com/yaniswang/HTMLHint) para verificar el `HTML` y -`JavaScript` con respecto a una guías de estilos. Ambas tareas se ejecutan -automáticamente antes de ejecutar las pruebas (tests) cuando usamos el comando -`npm run test`. En el caso de `JavaScript` estamos usando un archivo de -configuración de `eslint` que se llama `.eslintrc` que contiene un mínimo de -información sobre el parser que usar (qué version de JavaScript/ECMAScript), el -entorno (browser en este caso) y las [reglas recomendadas (`"eslint:recommended"`)](https://eslint.org/docs/rules/). -En cuanto a reglas/guías de estilo en sí, -usaremos las recomendaciones _por defecto_ de tanto `eslint` como `htmlhint`. - -### Deploy - -Hacer que los sitios estén publicados (o _desplegados_) para que usuarias de -la web puedan acceder a él es algo común en proyectos de desarrollo de software. - -En este proyecto, utilizaremos _Github Pages_ para desplegar nuestro sitio web. - -El comando `npm run deploy` puede ayudarte con esta tarea y también puedes - consultar su [documentación oficial](https://docs.github.com/es/pages). - -*** - -## 7. Objetivos de aprendizaje - -Reflexiona y luego marca los objetivos que has llegado a entender y aplicar en tu proyecto. Piensa en eso al decidir tu estrategia de trabajo. - -### HTML - -- [ ] **Uso de HTML semántico** - -
Links

- - * [HTML semántico](https://curriculum.laboratoria.la/es/topics/html/02-html5/02-semantic-html) - * [Semantics - MDN Web Docs Glossary](https://developer.mozilla.org/en-US/docs/Glossary/Semantics#Semantics_in_HTML) -

- -### CSS - -- [ ] **Uso de selectores de CSS** - -
Links

- - * [Intro a CSS](https://curriculum.laboratoria.la/es/topics/css/01-css/01-intro-css) - * [CSS Selectors - MDN](https://developer.mozilla.org/es/docs/Web/CSS/CSS_Selectors) -

- -- [ ] **Modelo de caja (box model): borde, margen, padding** - -
Links

- - * [Box Model & Display](https://curriculum.laboratoria.la/es/topics/css/01-css/02-boxmodel-and-display) - * [The box model - MDN](https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model) - * [Introduction to the CSS box model - MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model) - * [CSS display - MDN](https://developer.mozilla.org/pt-BR/docs/Web/CSS/display) - * [display - CSS Tricks](https://css-tricks.com/almanac/properties/d/display/) -

- -### Web APIs - -- [ ] **Uso de selectores del DOM** - -
Links

- - * [Manipulación del DOM](https://curriculum.laboratoria.la/es/topics/browser/02-dom/03-1-dom-methods-selection) - * [Introducción al DOM - MDN](https://developer.mozilla.org/es/docs/Web/API/Document_Object_Model/Introduction) - * [Localizando elementos DOM usando selectores - MDN](https://developer.mozilla.org/es/docs/Web/API/Document_object_model/Locating_DOM_elements_using_selectors) -

- -- [ ] **Manejo de eventos del DOM (listeners, propagación, delegación)** - -
Links

- - * [Introducción a eventos - MDN](https://developer.mozilla.org/es/docs/Learn/JavaScript/Building_blocks/Events) - * [EventTarget.addEventListener() - MDN](https://developer.mozilla.org/es/docs/Web/API/EventTarget/addEventListener) - * [EventTarget.removeEventListener() - MDN](https://developer.mozilla.org/es/docs/Web/API/EventTarget/removeEventListener) - * [El objeto Event](https://developer.mozilla.org/es/docs/Web/API/Event) -

- -- [ ] **Manipulación dinámica del DOM** - -
Links

- - * [Introducción al DOM](https://developer.mozilla.org/es/docs/Web/API/Document_Object_Model/Introduction) - * [Node.appendChild() - MDN](https://developer.mozilla.org/es/docs/Web/API/Node/appendChild) - * [Document.createElement() - MDN](https://developer.mozilla.org/es/docs/Web/API/Document/createElement) - * [Document.createTextNode()](https://developer.mozilla.org/es/docs/Web/API/Document/createTextNode) - * [Element.innerHTML - MDN](https://developer.mozilla.org/es/docs/Web/API/Element/innerHTML) - * [Node.textContent - MDN](https://developer.mozilla.org/es/docs/Web/API/Node/textContent) -

- -### JavaScript - -- [ ] **Tipos de datos primitivos** - -
Links

- - * [Valores primitivos - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Data_structures#valores_primitivos) -

- -- [ ] **Strings (cadenas de caracteres)** - -
Links

- - * [Strings](https://curriculum.laboratoria.la/es/topics/javascript/06-strings) - * [String — Cadena de caracteres - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String) -

- -- [ ] **Variables (declaración, asignación, ámbito)** - -
Links

- - * [Valores, tipos de datos y operadores](https://curriculum.laboratoria.la/es/topics/javascript/01-basics/01-values-variables-and-types) - * [Variables](https://curriculum.laboratoria.la/es/topics/javascript/01-basics/02-variables) -

- -- [ ] **Uso de condicionales (if-else, switch, operador ternario, lógica booleana)** - -
Links

- - * [Estructuras condicionales y repetitivas](https://curriculum.laboratoria.la/es/topics/javascript/02-flow-control/01-conditionals-and-loops) - * [Tomando decisiones en tu código — condicionales - MDN](https://developer.mozilla.org/es/docs/Learn/JavaScript/Building_blocks/conditionals) -

- -- [ ] **Uso de bucles/ciclos (while, for, for..of)** - -
Links

- - * [Bucles (Loops)](https://curriculum.laboratoria.la/es/topics/javascript/02-flow-control/02-loops) - * [Bucles e iteración - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Loops_and_iteration) -

- -- [ ] **Funciones (params, args, return)** - -
Links

- - * [Funciones (control de flujo)](https://curriculum.laboratoria.la/es/topics/javascript/02-flow-control/03-functions) - * [Funciones clásicas](https://curriculum.laboratoria.la/es/topics/javascript/03-functions/01-classic) - * [Arrow Functions](https://curriculum.laboratoria.la/es/topics/javascript/03-functions/02-arrow) - * [Funciones — bloques de código reutilizables - MDN](https://developer.mozilla.org/es/docs/Learn/JavaScript/Building_blocks/Functions) -

- -- [ ] **Pruebas unitarias (unit tests)** - -
Links

- - * [Empezando con Jest - Documentación oficial](https://jestjs.io/docs/es-ES/getting-started) -

- -- [ ] **Módulos de ECMAScript (ES Modules)** - -
Links

- - * [import - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Statements/import) - * [export - MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Statements/export) -

- -- [ ] **Uso de linter (ESLINT)** - -- [ ] **Uso de identificadores descriptivos (Nomenclatura y Semántica)** - -### Control de Versiones (Git y GitHub) - -- [ ] **Git: Instalación y configuración** - -- [ ] **Git: Control de versiones con git (init, clone, add, commit, status, push, pull, remote)** - -- [ ] **GitHub: Creación de cuenta y repos, configuración de llaves SSH** - -- [ ] **GitHub: Despliegue con GitHub Pages** - -
Links

- - * [Sitio oficial de GitHub Pages](https://pages.github.com/) -

- -### Centrado en el usuario - -- [ ] **Diseñar y desarrollar un producto o servicio poniendo a las usuarias en el centro** - -### Diseño de producto - -- [ ] **Crear prototipos de alta fidelidad que incluyan interacciones** - -- [ ] **Seguir los principios básicos de diseño visual** - -## 8. Pistas, tips y lecturas complementarias - -### Prepara tu PC para trabajar - -1. Asegúrate de tener un :pencil: editor de texto en - condiciones, algo como [VS Code](https://code.visualstudio.com/). -2. Para ejecutar los comandos a continuación necesitarás una :shell: - [UNIX Shell](https://curriculum.laboratoria.la/es/topics/shell), - que es un programa que interpreta líneas de comando (command-line - interpreter) así como tener [git](https://curriculum.laboratoria.la/es/topics/scm/01-git) - instalado. Si usas un sistema operativo "UNIX-like", como GNU/Linux o MacOS, - ya tienes una _shell_ (terminal) instalada por defecto (y probablemente `git` - también). Si usas Windows puedes usar la versión completa de [Cmder](https://cmder.app/) - que incluye [Git bash](https://git-scm.com/download/win). -3. Tus _coaches_ te compartirán un _link_ a un repo y te darán acceso de lectura - en ese repo. Debes realizar un :fork_and_knife: - [fork](https://help.github.com/articles/fork-a-repo/) del repo. -4. :arrow_down: [Clona](https://help.github.com/articles/cloning-a-repository/) - tu _fork_ a tu computadora (copia local). -5. 📦 Instala las dependencias del proyecto con el comando `npm install`. Esto - asume que has instalado [Node.js](https://nodejs.org/) (que incluye [npm](https://docs.npmjs.com/)). -6. Si todo ha ido bien, deberías poder ejecutar las :traffic_light: - pruebas unitarias (unit tests) con el comando `npm test`. -7. Para ver la interfaz de tu programa en el navegador, usa el comando - `npm start` para arrancar el servidor web y dirígete a - `http://localhost:5000` en tu navegador. -8. A codear se ha dicho! :rocket: - -### Recursos y temas relacionados - -Súmate al canal de Slack -[#project-cipher](https://claseslaboratoria.slack.com/archives/C03LJSH6R7D) -para conversar y pedir ayuda del proyecto. - -A continuación un video que te lleva a través de la fórmula matemática del -Cifrado Césary un par de cosas más que debes saber para resolver este proyecto. -La fórmula no es lo importante del proyecto, no te confundas. - -[![tips caesar cipher](https://img.youtube.com/vi/zd8eVrXhs7Y/0.jpg)](https://www.youtube.com/watch?v=zd8eVrXhs7Y) - -Terminal y shell de UNIX: - -[![Playlist de Terminal y shell de UNIX](https://img.youtube.com/vi/GB35Eyb-J4c/0.jpg)](https://www.youtube.com/playlist?list=PLiAEe0-R7u8nGH5TEHfSTeDNIvjZFe_Yd) - -[Link](https://www.youtube.com/playlist?list=PLiAEe0-R7u8nGH5TEHfSTeDNIvjZFe_Yd) - -Control de versiones y trabajo colaborativo con Git y GitHub: - -[![Playlist de control de versiones y trabajo colaborativo](https://img.youtube.com/vi/F1EoBbvhaqU/0.jpg)](https://www.youtube.com/playlist?list=PLiAEe0-R7u8k9o3PbT3_QdyoBW_RX8rnV) - -[Link](https://www.youtube.com/playlist?list=PLiAEe0-R7u8nGH5TEHfSTeDNIvjZFe_Yd) - -Desarrollo Front-end: - -* [Aprende más sobre `charCodeAt()`](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/charCodeAt) -* [Aprende más sobre `String.fromCharCode()`](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/fromCharCode) -* [Aprende más sobre `ASCII`](http://conceptodefinicion.de/ascii/) -* Aprende más sobre [objetos](https://es.javascript.info/object) y - [como definir métodos](https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Working_with_Objects#definici%C3%B3n_de_m%C3%A9todos) - -Organización del Trabajo: - -* [Metodologías Ágiles](https://www.youtube.com/watch?v=v3fLx7VHxGM) -* [Scrum en menos de 2 minutos](https://www.youtube.com/watch?v=TRcReyRYIMg) -* [Scrum en Detalle](https://www.youtube.com/watch?v=nOlwF3HRrAY&t=297s). No - esperamos que hagas todo eso desde este proyecto. Iremos profundizando poco a - poco a lo largo del -_bootcamp_. - -*** - -## 9. Para considerar Project Feedback - -En resumen, los criterios de aceptación mínimos del proyecto para considerar -Project Feedback: - -* [ ] Tiene una interfaz que permite a la usuaria cifrar y descifrar. -* [ ] El proyecto será entregado incluyendo pruebas unitarios de los métodos de `cipher` -(`encode` y `decode`). -* [ ] El proyecto será entregado libre de _errores_ de `eslint` (_warnings_ son ok). -* [ ] El proyecto será entregado subiendo tu código a GitHub. -* [ ] La interfaz será "desplegada" usando GitHub Pages. -* [ ] El README contiene una definición del producto. diff --git a/DEV005-cifrado/src/cipher.js b/DEV005-cifrado/src/cipher.js index dfb963f..8e38046 100644 --- a/DEV005-cifrado/src/cipher.js +++ b/DEV005-cifrado/src/cipher.js @@ -1,27 +1,54 @@ -//const cipher = { - // ... -//}; - -function CifrarMsj() { - var palabra = document.getElementById("textooriginal").value; - var desplazamiento = document.getElementById("espaciado").value; - var respuesta = "" - desplazamiento = (desplazamiento%26 + 26) % 26; - for ( var i = 0; i < palabra.length ; i++) { - var ascii = palabra[i].charCodeAt(); - if ((ascii >= 65 && ascii <= 90)) { - respuesta += String.fromCharCode((ascii - 'A'.charCodeAt(0) + desplazamiento)%26 - + 'A'.charCodeAt(0)) ; - } else if(ascii >= 97 && ascii <= 122){ - respuesta += String.fromCharCode((ascii-'a'.charCodeAt(0) + desplazamiento) % 26 - + 'a'.charCodeAt(0)); - } else { +const cipher ={ + encode: function (desplazamiento,palabra) { + let respuesta = "" + desplazamiento = (desplazamiento % 26 + 26) % 26; + for (let i = 0; i < palabra.length; i++) { + const ascii = palabra[i].charCodeAt(); + if ((ascii >= 65 && ascii <= 90)) { + respuesta += String.fromCharCode((ascii - 'A'.charCodeAt(0) + desplazamiento) % 26 + + 'A'.charCodeAt(0)); + } else if (ascii >= 97 && ascii <= 122) { + respuesta += String.fromCharCode((ascii - 'a'.charCodeAt(0) + desplazamiento) % 26 + + 'a'.charCodeAt(0)); + } else { + respuesta += palabra[i] + } + } + return respuesta; + }, + decode: function (desplazamiento,palabra) { + let respuesta = "" + desplazamiento = desplazamiento * (-1) + desplazamiento = (desplazamiento % 26 + 26) % 26; + for (let i = 0; i < palabra.length; i++) { + const ascii = palabra[i].charCodeAt(); + if ((ascii >= 65 && ascii <= 90)) { + respuesta += String.fromCharCode((ascii - 'A'.charCodeAt(0) + desplazamiento) % 26 + + 'A'.charCodeAt(0)); + } else if (ascii >= 97 && ascii <= 122) { + respuesta += String.fromCharCode((ascii - 'a'.charCodeAt(0) + desplazamiento) % 26 + + 'a'.charCodeAt(0)); + } else { respuesta += palabra[i] + } } - } - alert(respuesta); - return respuesta; -} + console.log('ver:', respuesta); + return respuesta; + } +}; + + +export default cipher; + +// function VaciarCajas ( ) { +// document.getElementById("textooriginal").value = ""; +// document.getElementById("espaciado").value = ""; +// document.getElementById("result").value = ""; +// } +// function VaciarCajasD() { +// document.getElementById("textodescifrado").value = ""; +// document.getElementById("espaciadod").value = ""; +// document.getElementById("resultd").value = ""; +// } -//export default cipher; diff --git a/DEV005-cifrado/src/index.html b/DEV005-cifrado/src/index.html index c1f18ce..9cf7a0a 100644 --- a/DEV005-cifrado/src/index.html +++ b/DEV005-cifrado/src/index.html @@ -1,37 +1,63 @@ - - - Caesar Cipher - - + + + + Caesar Cipher + + + + + +
+

- - -
-

Bienvenido

-

Ingrese Mensaje a cifrar

- -

-

- -

- - -

Offset

- - -
- -
-

-

Descifrado De Mensaje

- - - -
+

+

Bienvenido

+

Ingrese Mensaje a cifrar

+

+

+ +

+ +

Desplazamiento

+ +
+ +

+

Resultado

+ + + +

+
+

Descifrado De Mensaje

+
+

+

+ + +

+ + +

Desplazamiento

+ - - - + +
+ +

+

Resultado

+ + + +

+ +
+ + + + \ No newline at end of file diff --git a/DEV005-cifrado/src/index.js b/DEV005-cifrado/src/index.js index 3d39493..e0019c4 100644 --- a/DEV005-cifrado/src/index.js +++ b/DEV005-cifrado/src/index.js @@ -1,3 +1,50 @@ -import cipher from './cipher.js'; +import cipher from './cipher.js'; -console.log(cipher); +//Llamar elementos del DOM usando selectores del DOM +const btnEnviar = document.getElementById('btn-enviar') +const btnBorrar = document.getElementById('btn-borrar') +const btndescifrar= document.getElementById('btn-descifrar') +const btnborrar2 =document.getElementById('btn-borrar2') + +//funciones + +function cifrarMsjTest() { + //console.log('hola soy la función cifrarMsjTest') + const palabra = document.getElementById("textooriginal").value; + const desplazamiento = document.getElementById("espaciado").value; + const palabracifrada = cipher.encode(desplazamiento,palabra); + document.getElementById("result").value = palabracifrada; + +} + + +function descifrarMsjTest() { + const palabra = document.getElementById("textodescifrado").value; + // const desplazamiento = (-1)* (document.getElementById("espaciadod").value); + const desplazamiento = document.getElementById("espaciadod").value + const palabracifrada = cipher.decode(desplazamiento,palabra); + document.getElementById("resultd").value = palabracifrada; +} + +function vaciarCajastest(){ + document.getElementById("textooriginal").value = ''; + document.getElementById("result").value = ''; + document.getElementById("espaciado").value = ''; +} +function vaciarCajastestd(){ + document.getElementById("textodescifrado").value=''; + document.getElementById("resultd").value=''; + document.getElementById("espaciadod").value=''; +} + +//Eventos del DOM +btnEnviar.addEventListener('click', cifrarMsjTest) +btnBorrar.addEventListener('click', vaciarCajastest) +btndescifrar.addEventListener('click',descifrarMsjTest) +btnborrar2.addEventListener('click',vaciarCajastestd) + + +//export default cipher; +// export { CifrarMsjTest, DescifrarMsjTest,VaciarCajastest, VaciarCajastestd} + +console.log(cipher) \ No newline at end of file diff --git a/DEV005-cifrado/src/style.css b/DEV005-cifrado/src/style.css index 3f92a30..6172933 100644 --- a/DEV005-cifrado/src/style.css +++ b/DEV005-cifrado/src/style.css @@ -1,8 +1,50 @@ body { - background-image:url(https://www.captio.net/hubfs/Captio%20Blog%20Image%20%2810%29-1.png); - - } - - - + background-image: url(https://linube.com/blog/wp-content/uploads/encriptar-cifrar.png); + text-align: center; + font-family: sans-serif; + +} +h1 { + padding: 10px; + text-align: center; + color: rgb(3, 9, 12); + padding-top: 100px; + font-size: 5rem; + font-family: sans-serif; +} +#container { + padding: 10; + text-align: center; + color: rgb(0, 13, 15); +} +button { + background: rgb(3, 124, 210); + color: rgb(0, 13, 15); + margin: 10px; + padding: 10px; + border: 50; +} +h2 { + font-family: "arial", sans-serif; + color: rgb(0, 13, 15); + font-size: 2.5rem; +} +h3 { + font-family: "arial", sans-serif; + color: rgb(0, 13, 15); + font-size: 2.5rem; +} +h4 { + font-family: "arial", sans-serif; + color: rgb(18, 5, 17); + font-size: 2.5rem; +} +legend { + color: hsl(0, 0%, 0%); + padding: 20px; + font-weight: bold; +} +script { + color: rgb(0, 13, 15); +} \ No newline at end of file diff --git a/DEV005-cifrado/test/cipher.spec.js b/DEV005-cifrado/test/cipher.spec.js index dbc40f0..7b37cee 100644 --- a/DEV005-cifrado/test/cipher.spec.js +++ b/DEV005-cifrado/test/cipher.spec.js @@ -22,7 +22,7 @@ describe('cipher', () => { expect(() => cipher.encode()).toThrow(TypeError); expect(() => cipher.encode(0)).toThrow(TypeError); expect(() => cipher.encode(null, [])).toThrow(TypeError); - expect(() => cipher.encode(0, 0)).toThrow(TypeError); + expect(() => cipher.encode(0,0)).toThrow(TypeError); }); it('should return "HIJKLMNOPQRSTUVWXYZABCDEFG" for "ABCDEFGHIJKLMNOPQRSTUVWXYZ" with offset 33', () => { @@ -68,7 +68,7 @@ describe('cipher', () => { expect(() => cipher.decode()).toThrow(TypeError); expect(() => cipher.decode(0)).toThrow(TypeError); expect(() => cipher.decode(null, [])).toThrow(TypeError); - expect(() => cipher.decode(0, 0)).toThrow(TypeError); + expect(() => cipher.decode(0,0)).toThrow(TypeError); }); it('should return "ABCDEFGHIJKLMNOPQRSTUVWXYZ" for "HIJKLMNOPQRSTUVWXYZABCDEFG" with offset 33', () => { From e86f29c53254ccc666083c045994ff32825e079b Mon Sep 17 00:00:00 2001 From: Brina Date: Sun, 5 Mar 2023 15:21:15 -0500 Subject: [PATCH 06/10] cifrado cesar --- DEV005-cifrado/README.md | 11 +++++----- DEV005-cifrado/src/cipher.js | 38 +++++++++-------------------------- DEV005-cifrado/src/index.html | 17 +++++++++++----- DEV005-cifrado/src/index.js | 5 ++++- 4 files changed, 31 insertions(+), 40 deletions(-) diff --git a/DEV005-cifrado/README.md b/DEV005-cifrado/README.md index a06aad8..caf7a4b 100644 --- a/DEV005-cifrado/README.md +++ b/DEV005-cifrado/README.md @@ -9,12 +9,11 @@ En criptografía, el cifrado César, también conocido como cifrado por desplaza Basicamente estara enfocado a usuarios que deseen realizar retiros de avances de tarjeta de credito sin necesidad de tener la tarjeta a la mano, con el fin de evitar las largas filas por este proceso se busca que el usuario realice el proceso de forma autonoma mediante el uso de cajeros automaticos, el cifrado permite que personas autorizadas vean toda la información que envíe, ya sea por un mensaje o en un correo electrónico, cambie su forma y sólo pueda ser descifrada por el destinatario correcto. De esta forma, cuando envías el mensaje cifrado, el mismo viaja protegido mediante fórmulas matemáticas o lógicas. Así sólo puede ser decodificado por el destinatario, ya que sólo él y el remitente tendrán los códigos o claves necesarias para descifrarlos y leerlos. Cuáles son los objetivos de estos usuarios en relación con tu producto? - Agilidad en los servicios - Transmitir información segura - Confidencialidad - Autogestion en el proceso + * Agilidad en los servicios + * Transmitir información segura + * Confidencialidad + * Autogestion en el proceso - Cómo crees que el producto que estás creando está resolviendo sus problemas? -Permita que los usuario eviten realizar largas filas para realizar el proceso en agencia, asi pueden hacerlo desde casa y retirar por medio de los cajero automaticos. +Ayuda a un mejor manejo de la informacion ya que permite cifrar el mensaje que se desea enviar y que solo pueda ser visto por destinatario elegido, ademas permite que los usuario eviten realizar largas filas para realizar el proceso en agencia, asi pueden hacerlo desde casa y retirar por medio de los cajero automaticos. diff --git a/DEV005-cifrado/src/cipher.js b/DEV005-cifrado/src/cipher.js index 8e38046..992e1a0 100644 --- a/DEV005-cifrado/src/cipher.js +++ b/DEV005-cifrado/src/cipher.js @@ -7,48 +7,30 @@ const cipher ={ if ((ascii >= 65 && ascii <= 90)) { respuesta += String.fromCharCode((ascii - 'A'.charCodeAt(0) + desplazamiento) % 26 + 'A'.charCodeAt(0)); - } else if (ascii >= 97 && ascii <= 122) { - respuesta += String.fromCharCode((ascii - 'a'.charCodeAt(0) + desplazamiento) % 26 - + 'a'.charCodeAt(0)); - } else { - respuesta += palabra[i] + } + else { + //respuesta += " "; + throw new TypeError } } return respuesta; }, decode: function (desplazamiento,palabra) { let respuesta = "" - desplazamiento = desplazamiento * (-1) + desplazamiento = desplazamiento * (-1); desplazamiento = (desplazamiento % 26 + 26) % 26; for (let i = 0; i < palabra.length; i++) { const ascii = palabra[i].charCodeAt(); if ((ascii >= 65 && ascii <= 90)) { respuesta += String.fromCharCode((ascii - 'A'.charCodeAt(0) + desplazamiento) % 26 + 'A'.charCodeAt(0)); - } else if (ascii >= 97 && ascii <= 122) { - respuesta += String.fromCharCode((ascii - 'a'.charCodeAt(0) + desplazamiento) % 26 - + 'a'.charCodeAt(0)); - } else { - respuesta += palabra[i] + } + else { + //respuesta += " "; + throw new TypeError } } - console.log('ver:', respuesta); return respuesta; } }; - - -export default cipher; - -// function VaciarCajas ( ) { -// document.getElementById("textooriginal").value = ""; -// document.getElementById("espaciado").value = ""; -// document.getElementById("result").value = ""; -// } -// function VaciarCajasD() { -// document.getElementById("textodescifrado").value = ""; -// document.getElementById("espaciadod").value = ""; -// document.getElementById("resultd").value = ""; -// } - - +export default cipher; \ No newline at end of file diff --git a/DEV005-cifrado/src/index.html b/DEV005-cifrado/src/index.html index 9cf7a0a..0e61ccd 100644 --- a/DEV005-cifrado/src/index.html +++ b/DEV005-cifrado/src/index.html @@ -5,6 +5,13 @@ Caesar Cipher + + @@ -17,8 +24,8 @@

Bienvenido

Ingrese Mensaje a cifrar



- +

Desplazamiento

@@ -28,7 +35,7 @@

Desplazamiento



Resultado

- +

@@ -37,7 +44,7 @@

Descifrado De Mensaje




-

@@ -57,7 +64,7 @@

Resultado

- + \ No newline at end of file diff --git a/DEV005-cifrado/src/index.js b/DEV005-cifrado/src/index.js index e0019c4..fc388b5 100644 --- a/DEV005-cifrado/src/index.js +++ b/DEV005-cifrado/src/index.js @@ -1,5 +1,8 @@ import cipher from './cipher.js'; + + + //Llamar elementos del DOM usando selectores del DOM const btnEnviar = document.getElementById('btn-enviar') const btnBorrar = document.getElementById('btn-borrar') @@ -47,4 +50,4 @@ btnborrar2.addEventListener('click',vaciarCajastestd) //export default cipher; // export { CifrarMsjTest, DescifrarMsjTest,VaciarCajastest, VaciarCajastestd} -console.log(cipher) \ No newline at end of file +//console.log(cipher) \ No newline at end of file From 919e41bfbf8a0666a123992ff1587db964211715 Mon Sep 17 00:00:00 2001 From: Brina Date: Sun, 5 Mar 2023 15:44:40 -0500 Subject: [PATCH 07/10] CifradoCesarconcluido --- DEV005-cifrado/README.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/DEV005-cifrado/README.md b/DEV005-cifrado/README.md index caf7a4b..fb2927c 100644 --- a/DEV005-cifrado/README.md +++ b/DEV005-cifrado/README.md @@ -4,16 +4,12 @@ En criptografía, el cifrado César, también conocido como cifrado por desplazamiento, código de César o desplazamiento de César, es una de las técnicas de cifrado más simples y más usadas. Es un tipo de cifrado por sustitución en el que una letra en el texto original es reemplazada por otra letra que se encuentra un número fijo de posiciones más adelante en el alfabeto. Por ejemplo, con un desplazamiento de 3, la A sería sustituida por la D (situada 3 lugares a la derecha de la A ), la B sería reemplazada por la E, etc. # Resumen - Quiénes son los principales usuarios de producto Debido a la creciente incursión de los usuarios en la red y al gran volumen de información que se maneja, surge la evidente necesidad de ocultar cierta información que para algunas empresas o personas es relevante y de suma importancia. Internet es utilizado para compartir información y realizar transacciones de toda índole, sobre todo las entidades financieras que realizan la mayor parte de sus operaciones en línea; pero la información que viaja través de las redes puede ser interceptada y utilizada en contra del usuario o desfavoreciendo su bienestar. Por ello, asegurar la información se hace imperativo y qué mejor que a través de criptografía (que oculta mensajes), la esteganografía (que esconde la información de manera desapercibida) y el criptoanálisis (que reconstruye un mensaje cifrado) que dan la posibilidad de proteger los datos que viajan a través de la red. Basicamente estara enfocado a usuarios que deseen realizar retiros de avances de tarjeta de credito sin necesidad de tener la tarjeta a la mano, con el fin de evitar las largas filas por este proceso se busca que el usuario realice el proceso de forma autonoma mediante el uso de cajeros automaticos, el cifrado permite que personas autorizadas vean toda la información que envíe, ya sea por un mensaje o en un correo electrónico, cambie su forma y sólo pueda ser descifrada por el destinatario correcto. De esta forma, cuando envías el mensaje cifrado, el mismo viaja protegido mediante fórmulas matemáticas o lógicas. Así sólo puede ser decodificado por el destinatario, ya que sólo él y el remitente tendrán los códigos o claves necesarias para descifrarlos y leerlos. - - Cuáles son los objetivos de estos usuarios en relación con tu producto? + # Objetivos * Agilidad en los servicios * Transmitir información segura * Confidencialidad * Autogestion en el proceso - -Cómo crees que el producto que estás creando está resolviendo sus problemas? -Ayuda a un mejor manejo de la informacion ya que permite cifrar el mensaje que se desea enviar y que solo pueda ser visto por destinatario elegido, ademas permite que los usuario eviten realizar largas filas para realizar el proceso en agencia, asi pueden hacerlo desde casa y retirar por medio de los cajero automaticos. - + # Conclusión +Ayuda a un mejor manejo de la informacion ya que permite cifrar el mensaje que se desea enviar y que solo pueda ser visto por destinatario elegido, ademas permite que los usuario eviten realizar largas filas para realizar el proceso en agencia, asi pueden hacerlo desde casa y retirar por medio de los cajero automaticos. \ No newline at end of file From 1c9dd039f3037191df77dfb758beaf6432099af0 Mon Sep 17 00:00:00 2001 From: Brina Date: Sun, 5 Mar 2023 16:43:04 -0500 Subject: [PATCH 08/10] ProyectoCifrado --- DEV005-cifrado/src/index.html | 10 +++++----- DEV005-cifrado/src/index.js | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/DEV005-cifrado/src/index.html b/DEV005-cifrado/src/index.html index 0e61ccd..55be25e 100644 --- a/DEV005-cifrado/src/index.html +++ b/DEV005-cifrado/src/index.html @@ -5,9 +5,9 @@ Caesar Cipher - + \ No newline at end of file diff --git a/DEV005-cifrado/src/index.js b/DEV005-cifrado/src/index.js index fc388b5..d01167b 100644 --- a/DEV005-cifrado/src/index.js +++ b/DEV005-cifrado/src/index.js @@ -12,7 +12,7 @@ const btnborrar2 =document.getElementById('btn-borrar2') //funciones function cifrarMsjTest() { - //console.log('hola soy la función cifrarMsjTest') + const palabra = document.getElementById("textooriginal").value; const desplazamiento = document.getElementById("espaciado").value; const palabracifrada = cipher.encode(desplazamiento,palabra); @@ -23,7 +23,7 @@ function cifrarMsjTest() { function descifrarMsjTest() { const palabra = document.getElementById("textodescifrado").value; - // const desplazamiento = (-1)* (document.getElementById("espaciadod").value); + const desplazamiento = document.getElementById("espaciadod").value const palabracifrada = cipher.decode(desplazamiento,palabra); document.getElementById("resultd").value = palabracifrada; From 4993ff1487d63b3110f35356bccf9f5e4a7684e4 Mon Sep 17 00:00:00 2001 From: Brina Date: Tue, 7 Mar 2023 08:57:28 -0500 Subject: [PATCH 09/10] cifradocesarproyecto --- DEV005-cifrado/src/cipher.js | 13 +++++++++---- DEV005-cifrado/src/index.html | 16 +++++++--------- DEV005-cifrado/src/index.js | 6 +++--- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/DEV005-cifrado/src/cipher.js b/DEV005-cifrado/src/cipher.js index 992e1a0..afe1a98 100644 --- a/DEV005-cifrado/src/cipher.js +++ b/DEV005-cifrado/src/cipher.js @@ -1,7 +1,10 @@ const cipher ={ encode: function (desplazamiento,palabra) { + if (typeof desplazamiento !== "number") { throw new TypeError('Parameter is not a number!');} + if (typeof palabra !== "string") { throw new TypeError('Parameter is not a string!');} let respuesta = "" desplazamiento = (desplazamiento % 26 + 26) % 26; + for (let i = 0; i < palabra.length; i++) { const ascii = palabra[i].charCodeAt(); if ((ascii >= 65 && ascii <= 90)) { @@ -9,13 +12,15 @@ const cipher ={ + 'A'.charCodeAt(0)); } else { - //respuesta += " "; - throw new TypeError + respuesta += ""; + //throw new TypeError } } return respuesta; }, decode: function (desplazamiento,palabra) { + if(typeof desplazamiento !== "number") throw new TypeError ('parametro incorrecto'); + if(typeof palabra !== "string") throw new TypeError ("parametro incorrecto"); let respuesta = "" desplazamiento = desplazamiento * (-1); desplazamiento = (desplazamiento % 26 + 26) % 26; @@ -26,8 +31,8 @@ const cipher ={ + 'A'.charCodeAt(0)); } else { - //respuesta += " "; - throw new TypeError + respuesta += ""; + //throw new TypeError } } return respuesta; diff --git a/DEV005-cifrado/src/index.html b/DEV005-cifrado/src/index.html index 55be25e..f372e9c 100644 --- a/DEV005-cifrado/src/index.html +++ b/DEV005-cifrado/src/index.html @@ -5,14 +5,12 @@ Caesar Cipher - - + function validaNumbercaracter() { + if ((event.key != 32) && (event.key < 65) || (event.key > 90) && (event.key < 97) || (event.key > 122)) + event.returnValue = false; + } + @@ -24,7 +22,7 @@

Bienvenido

Ingrese Mensaje a cifrar



-

@@ -44,7 +42,7 @@

Descifrado De Mensaje




-

diff --git a/DEV005-cifrado/src/index.js b/DEV005-cifrado/src/index.js index d01167b..a8d8b2c 100644 --- a/DEV005-cifrado/src/index.js +++ b/DEV005-cifrado/src/index.js @@ -9,12 +9,13 @@ const btnBorrar = document.getElementById('btn-borrar') const btndescifrar= document.getElementById('btn-descifrar') const btnborrar2 =document.getElementById('btn-borrar2') + //funciones function cifrarMsjTest() { const palabra = document.getElementById("textooriginal").value; - const desplazamiento = document.getElementById("espaciado").value; + const desplazamiento = parseInt(document.getElementById("espaciado").value); const palabracifrada = cipher.encode(desplazamiento,palabra); document.getElementById("result").value = palabracifrada; @@ -23,8 +24,7 @@ function cifrarMsjTest() { function descifrarMsjTest() { const palabra = document.getElementById("textodescifrado").value; - - const desplazamiento = document.getElementById("espaciadod").value + const desplazamiento = parseInt(document.getElementById("espaciadod").value); const palabracifrada = cipher.decode(desplazamiento,palabra); document.getElementById("resultd").value = palabracifrada; } From a7670b299579ba937808d0f305b8379a1f8509fd Mon Sep 17 00:00:00 2001 From: Brina Date: Mon, 13 Mar 2023 11:29:49 -0500 Subject: [PATCH 10/10] correcciones feedback cifrado --- DEV005-cifrado/src/index.html | 85 ++++++++++++++--------------------- DEV005-cifrado/src/style.css | 75 ++++++++++++++++--------------- 2 files changed, 73 insertions(+), 87 deletions(-) diff --git a/DEV005-cifrado/src/index.html b/DEV005-cifrado/src/index.html index f372e9c..6ff41a9 100644 --- a/DEV005-cifrado/src/index.html +++ b/DEV005-cifrado/src/index.html @@ -1,68 +1,49 @@ - Caesar Cipher - + - - -

-

- -

+ +

Bienvenido

-

Ingrese Mensaje a cifrar

-

-

- -

- -

Desplazamiento

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

-

Resultado

+ + + + + + -

-
-

Descifrado De Mensaje

-
-

-

- - -

- - -

Desplazamiento

- + + - -
- -

-

Resultado

+ + + + - - -

- -
- + + + + + - \ No newline at end of file diff --git a/DEV005-cifrado/src/style.css b/DEV005-cifrado/src/style.css index 6172933..e962b47 100644 --- a/DEV005-cifrado/src/style.css +++ b/DEV005-cifrado/src/style.css @@ -2,49 +2,54 @@ body { background-image: url(https://linube.com/blog/wp-content/uploads/encriptar-cifrar.png); text-align: center; font-family: sans-serif; - + justify-content: center; } -h1 { - padding: 10px; - text-align: center; - color: rgb(3, 9, 12); - padding-top: 100px; - font-size: 5rem; - font-family: sans-serif; -} -#container { - padding: 10; - text-align: center; - color: rgb(0, 13, 15); + +header { + display: grid; + justify-content: center; + width: 60%; + margin: 10%; + background-color: rgba(143, 182, 211, 0.422); + padding: 2%; + border: 1px solid rgb(231 183 183 / 3%); + font-size: 60px; +} +article{ + display: grid; + justify-content: center; + width: 60%; + margin: 10%; + background-color: rgba(143, 182, 211, 0.422); + padding: 2%; + border: 1px solid rgb(231 183 183 / 3%); } button { - background: rgb(3, 124, 210); - color: rgb(0, 13, 15); + + background: rgba(111, 207, 239, 0.627); margin: 10px; padding: 10px; border: 50; -} -h2 { - font-family: "arial", sans-serif; - color: rgb(0, 13, 15); - font-size: 2.5rem; -} -h3 { + font-size: 40px; + border-radius: 10px; + color: rgba(58, 58, 91, 0.996); + width: 180px; + height:60px; + margin-left: auto; + margin-right: auto; +} +label { font-family: "arial", sans-serif; - color: rgb(0, 13, 15); - font-size: 2.5rem; + color: rgb(4, 50, 57); + font-size: 40px; + margin: 5px; } -h4 { + +input { font-family: "arial", sans-serif; - color: rgb(18, 5, 17); - font-size: 2.5rem; -} -legend { - color: hsl(0, 0%, 0%); - padding: 20px; - font-weight: bold; + color:azure(0, 13, 15); + font-size: 40px; + margin:20%; } -script { - color: rgb(0, 13, 15); -} \ No newline at end of file +