├── .github
├── CODEOWNERS
├── ISSUE_TEMPLATE.md
├── PULL_REQUEST_TEMPLATE.md
└── workflows
│ └── main.yml
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── NOTICE
├── README.md
├── Unidad_01
├── Leccion_02
│ ├── index.js
│ └── index.ts
└── Leccion_03_04_05
│ ├── .eslintrc
│ ├── .gitignore
│ ├── dist
│ ├── index.html
│ ├── index.js
│ └── index.js.map
│ ├── package-lock.json
│ ├── package.json
│ ├── src
│ └── index.ts
│ └── tsconfig.json
├── Unidad_02
├── Leccion_01
│ └── index.ts
├── Leccion_02
│ └── index.ts
├── Leccion_03
│ └── index.ts
├── Leccion_04
│ └── index.ts
├── Leccion_05
│ └── index.ts
├── Leccion_06
│ └── index.ts
└── Leccion_07
│ └── index.ts
├── Unidad_03
├── Leccion_01
│ └── index.ts
├── Leccion_02
│ └── index.ts
├── Leccion_03
│ └── index.ts
├── Leccion_04
│ └── index.ts
├── Leccion_05
│ └── index.ts
├── Leccion_06
│ └── index.ts
├── Leccion_07
│ └── index.ts
└── Leccion_08
│ └── index.ts
├── Unidad_04
├── Leccion_01
│ └── index.ts
├── Leccion_02
│ └── index.ts
├── Leccion_03
│ └── index.ts
├── Leccion_04
│ └── index.ts
├── Leccion_05
│ └── index.ts
├── Leccion_06
│ └── index.ts
├── Leccion_07
│ └── index.ts
├── Leccion_08
│ └── index.ts
└── Leccion_09
│ └── index.ts
├── Unidad_05
├── Leccion_01
│ └── index.ts
├── Leccion_02
│ └── index.ts
├── Leccion_03
│ └── index.ts
├── Leccion_04
│ └── index.ts
├── Leccion_05
│ └── index.ts
└── Leccion_06
│ └── index.ts
└── Unidad_06
├── Leccion_01
└── index.ts
├── Leccion_02
└── index.ts
├── Leccion_03
└── index.ts
├── Leccion_04
└── index.ts
├── Leccion_05
└── index.ts
├── Leccion_06
└── index.ts
└── Leccion_07
└── index.ts
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # Codeowners for these exercise files:
2 | # * (asterisk) deotes "all files and folders"
3 | # Example: * @producer @instructor
4 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
7 |
8 | ## Issue Overview
9 |
10 |
11 | ## Describe your environment
12 |
13 |
14 | ## Steps to Reproduce
15 |
16 | 1.
17 | 2.
18 | 3.
19 | 4.
20 |
21 | ## Expected Behavior
22 |
23 |
24 | ## Current Behavior
25 |
26 |
27 | ## Possible Solution
28 |
29 |
30 | ## Screenshots / Video
31 |
32 |
33 | ## Related Issues
34 |
35 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | name: Copy To Branches
2 | on:
3 | workflow_dispatch:
4 | jobs:
5 | copy-to-branches:
6 | runs-on: ubuntu-latest
7 | steps:
8 | - uses: actions/checkout@v2
9 | with:
10 | fetch-depth: 0
11 | - name: Copy To Branches Action
12 | uses: planetoftheweb/copy-to-branches@v1
13 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | .tmp
4 | npm-debug.log
5 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 |
2 | Contribution Agreement
3 | ======================
4 |
5 | This repository does not accept pull requests (PRs). All pull requests will be closed.
6 |
7 | However, if any contributions (through pull requests, issues, feedback or otherwise) are provided, as a contributor, you represent that the code you submit is your original work or that of your employer (in which case you represent you have the right to bind your employer). By submitting code (or otherwise providing feedback), you (and, if applicable, your employer) are licensing the submitted code (and/or feedback) to LinkedIn and the open source community subject to the BSD 2-Clause license.
8 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | LinkedIn Learning Exercise Files License Agreement
2 | ==================================================
3 |
4 | This License Agreement (the "Agreement") is a binding legal agreement
5 | between you (as an individual or entity, as applicable) and LinkedIn
6 | Corporation (“LinkedIn”). By downloading or using the LinkedIn Learning
7 | exercise files in this repository (“Licensed Materials”), you agree to
8 | be bound by the terms of this Agreement. If you do not agree to these
9 | terms, do not download or use the Licensed Materials.
10 |
11 | 1. License.
12 | - a. Subject to the terms of this Agreement, LinkedIn hereby grants LinkedIn
13 | members during their LinkedIn Learning subscription a non-exclusive,
14 | non-transferable copyright license, for internal use only, to 1) make a
15 | reasonable number of copies of the Licensed Materials, and 2) make
16 | derivative works of the Licensed Materials for the sole purpose of
17 | practicing skills taught in LinkedIn Learning courses.
18 | - b. Distribution. Unless otherwise noted in the Licensed Materials, subject
19 | to the terms of this Agreement, LinkedIn hereby grants LinkedIn members
20 | with a LinkedIn Learning subscription a non-exclusive, non-transferable
21 | copyright license to distribute the Licensed Materials, except the
22 | Licensed Materials may not be included in any product or service (or
23 | otherwise used) to instruct or educate others.
24 |
25 | 2. Restrictions and Intellectual Property.
26 | - a. You may not to use, modify, copy, make derivative works of, publish,
27 | distribute, rent, lease, sell, sublicense, assign or otherwise transfer the
28 | Licensed Materials, except as expressly set forth above in Section 1.
29 | - b. Linkedin (and its licensors) retains its intellectual property rights
30 | in the Licensed Materials. Except as expressly set forth in Section 1,
31 | LinkedIn grants no licenses.
32 | - c. You indemnify LinkedIn and its licensors and affiliates for i) any
33 | alleged infringement or misappropriation of any intellectual property rights
34 | of any third party based on modifications you make to the Licensed Materials,
35 | ii) any claims arising from your use or distribution of all or part of the
36 | Licensed Materials and iii) a breach of this Agreement. You will defend, hold
37 | harmless, and indemnify LinkedIn and its affiliates (and our and their
38 | respective employees, shareholders, and directors) from any claim or action
39 | brought by a third party, including all damages, liabilities, costs and
40 | expenses, including reasonable attorneys’ fees, to the extent resulting from,
41 | alleged to have resulted from, or in connection with: (a) your breach of your
42 | obligations herein; or (b) your use or distribution of any Licensed Materials.
43 |
44 | 3. Open source. This code may include open source software, which may be
45 | subject to other license terms as provided in the files.
46 |
47 | 4. Warranty Disclaimer. LINKEDIN PROVIDES THE LICENSED MATERIALS ON AN “AS IS”
48 | AND “AS AVAILABLE” BASIS. LINKEDIN MAKES NO REPRESENTATION OR WARRANTY,
49 | WHETHER EXPRESS OR IMPLIED, ABOUT THE LICENSED MATERIALS, INCLUDING ANY
50 | REPRESENTATION THAT THE LICENSED MATERIALS WILL BE FREE OF ERRORS, BUGS OR
51 | INTERRUPTIONS, OR THAT THE LICENSED MATERIALS ARE ACCURATE, COMPLETE OR
52 | OTHERWISE VALID. TO THE FULLEST EXTENT PERMITTED BY LAW, LINKEDIN AND ITS
53 | AFFILIATES DISCLAIM ANY IMPLIED OR STATUTORY WARRANTY OR CONDITION, INCLUDING
54 | ANY IMPLIED WARRANTY OR CONDITION OF MERCHANTABILITY OR FITNESS FOR A
55 | PARTICULAR PURPOSE, AVAILABILITY, SECURITY, TITLE AND/OR NON-INFRINGEMENT.
56 | YOUR USE OF THE LICENSED MATERIALS IS AT YOUR OWN DISCRETION AND RISK, AND
57 | YOU WILL BE SOLELY RESPONSIBLE FOR ANY DAMAGE THAT RESULTS FROM USE OF THE
58 | LICENSED MATERIALS TO YOUR COMPUTER SYSTEM OR LOSS OF DATA. NO ADVICE OR
59 | INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED BY YOU FROM US OR THROUGH OR
60 | FROM THE LICENSED MATERIALS WILL CREATE ANY WARRANTY OR CONDITION NOT
61 | EXPRESSLY STATED IN THESE TERMS.
62 |
63 | 5. Limitation of Liability. LINKEDIN SHALL NOT BE LIABLE FOR ANY INDIRECT,
64 | INCIDENTAL, SPECIAL, PUNITIVE, CONSEQUENTIAL OR EXEMPLARY DAMAGES, INCLUDING
65 | BUT NOT LIMITED TO, DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, DATA OR OTHER
66 | INTANGIBLE LOSSES . IN NO EVENT WILL LINKEDIN'S AGGREGATE LIABILITY TO YOU
67 | EXCEED $100. THIS LIMITATION OF LIABILITY SHALL:
68 | - i. APPLY REGARDLESS OF WHETHER (A) YOU BASE YOUR CLAIM ON CONTRACT, TORT,
69 | STATUTE, OR ANY OTHER LEGAL THEORY, (B) WE KNEW OR SHOULD HAVE KNOWN ABOUT
70 | THE POSSIBILITY OF SUCH DAMAGES, OR (C) THE LIMITED REMEDIES PROVIDED IN THIS
71 | SECTION FAIL OF THEIR ESSENTIAL PURPOSE; AND
72 | - ii. NOT APPLY TO ANY DAMAGE THAT LINKEDIN MAY CAUSE YOU INTENTIONALLY OR
73 | KNOWINGLY IN VIOLATION OF THESE TERMS OR APPLICABLE LAW, OR AS OTHERWISE
74 | MANDATED BY APPLICABLE LAW THAT CANNOT BE DISCLAIMED IN THESE TERMS.
75 |
76 | 6. Termination. This Agreement automatically terminates upon your breach of
77 | this Agreement or termination of your LinkedIn Learning subscription. On
78 | termination, all licenses granted under this Agreement will terminate
79 | immediately and you will delete the Licensed Materials. Sections 2-7 of this
80 | Agreement survive any termination of this Agreement. LinkedIn may discontinue
81 | the availability of some or all of the Licensed Materials at any time for any
82 | reason.
83 |
84 | 7. Miscellaneous. This Agreement will be governed by and construed in
85 | accordance with the laws of the State of California without regard to conflict
86 | of laws principles. The exclusive forum for any disputes arising out of or
87 | relating to this Agreement shall be an appropriate federal or state court
88 | sitting in the County of Santa Clara, State of California. If LinkedIn does
89 | not act to enforce a breach of this Agreement, that does not mean that
90 | LinkedIn has waived its right to enforce this Agreement. The Agreement does
91 | not create a partnership, agency relationship, or joint venture between the
92 | parties. Neither party has the power or authority to bind the other or to
93 | create any obligation or responsibility on behalf of the other. You may not,
94 | without LinkedIn’s prior written consent, assign or delegate any rights or
95 | obligations under these terms, including in connection with a change of
96 | control. Any purported assignment and delegation shall be ineffective. The
97 | Agreement shall bind and inure to the benefit of the parties, their respective
98 | successors and permitted assigns. If any provision of the Agreement is
99 | unenforceable, that provision will be modified to render it enforceable to the
100 | extent possible to give effect to the parties’ intentions and the remaining
101 | provisions will not be affected. This Agreement is the only agreement between
102 | you and LinkedIn regarding the Licensed Materials, and supersedes all prior
103 | agreements relating to the Licensed Materials.
104 |
105 | Last Updated: March 2019
106 |
--------------------------------------------------------------------------------
/NOTICE:
--------------------------------------------------------------------------------
1 | Copyright 2021 LinkedIn Corporation
2 | All Rights Reserved.
3 |
4 | Licensed under the LinkedIn Learning Exercise File License (the "License").
5 | See LICENSE in the project root for license information.
6 |
7 | ATTRIBUTIONS:
8 | [PLEASE PROVIDE ATTRIBUTIONS OR DELETE THIS AND THE ABOVE LINE “ATTRIBUTIONS”]
9 |
10 | Please note, this project may automatically load third party code from external
11 | repositories (for example, NPM modules, Composer packages, or other dependencies).
12 | If so, such third party code may be subject to other license terms than as set
13 | forth above. In addition, such third party code may also depend on and load
14 | multiple tiers of dependencies. Please review the applicable licenses of the
15 | additional dependencies.
16 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # TypeScript esencial
2 |
3 | Este es el repositorio del curso de LinkedIn Learning `TypeScript esencial`. El curso completo está disponible en [LinkedIn Learning][lil-course-url].
4 |
5 | ![Nombre completo del curso][lil-thumbnail-url]
6 |
7 | Consulta el archivo Readme en la rama main para obtener instrucciones e información actualizadas.
8 |
9 | Comienza con los conceptos básicos necesarios para poder escribir código en TypeScript. Durante este contenido formativo, aprenderás desde cero y paso a paso a compilar una aplicación TypeScript, empezando por conocer los tipos básicos, cómo definir tipos avanzados y personalizados como interfaces y enums, cómo definir funciones y clases con tipo y cómo utilizar tipos genéricos, entre otros conocimientos clave. ¿Empezamos a sacar partido a este lenguaje de programación libre y de código abierto?
10 |
11 | ## Instrucciones
12 |
13 | Este repositorio no tiene ramas por lo que al descargar el repositorio completo obtendrás los archivos en su versión final.
14 |
15 | Cada carpeta en el directorio raíz corresponde a una unidad del curso y cada una tiene un nombre con un formato de `Unidad_#unidad`. Cada carpeta contiene subcarpetas las cuales contienen los ejemplos de cada lección. Las carpetas de las lecciones tienen un nombre con un formato de `Leccion_#leccion`. Por ejemplo, los archivos de la lección 3 de la unidad 2 se encuentran en el directorio: `Unidad_02/Leccion_03/index.ts`.
16 |
17 | En el directorio `Unidad_01/Leccion_03_04_05` encontrarás un proyecto con su correspondiente package.json y demás archivos de configuración. Puedes copiar cada index.ts de cada lección a la carpeta `Unidad_01/Leccion_03_04_05/src` para ejecutar el código.
18 |
19 | También puedes utilizar [TypeScript Playground](https://www.typescriptlang.org/play) para correr los ejemplos.
20 |
21 | ## Instalación
22 |
23 | 1. Para utilizar estos archivos de ejercicios, debes tener descargado lo siguiente:
24 | - [Node.js](https://nodejs.org/en/)
25 | - Un editor de código ([VS Code](https://code.visualstudio.com/) es recomendado)
26 |
27 | 2. Clona este repositorio en tu máquina local usando la Terminal (macOS) o CMD (Windows), o una herramienta GUI como SourceTree.
28 | 3. Corre el comando `npm install` dentro de la carpeta `Unidad_01/Leccion_03_04_05`.
29 |
30 | ### Docente
31 |
32 | **Natalia Corea**
33 |
34 | Echa un vistazo a mis otros cursos en [LinkedIn Learning](https://www.linkedin.com/learning/instructors/natalia-corea).
35 |
36 | [lil-course-url]: https://www.linkedin.com/learning/typescript-esencial/sacando-todo-el-partido-a-typescript
37 | [lil-thumbnail-url]: https://cdn.lynda.com/course/3153633/3153633-1650872210304-16x9.jpg
38 |
--------------------------------------------------------------------------------
/Unidad_01/Leccion_02/index.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | function calcularDiasDiferencia(fechaEntrada, fechaSalida){
4 | const diferenciaTiempo =
5 | fechaSalida.getTime() - fechaEntrada.getTime();
6 | return diferenciaTiempo / (1000 * 3600 * 24);
7 | }
8 |
9 | function crearReservacion(
10 | huesped, cuarto, fechaEntrada, fechaSalida){
11 | return {
12 | idReservacion: '123',
13 | huesped,
14 | fechaEntrada,
15 | fechaSalida,
16 | cuarto,
17 | nochesReservadas: calcularDiasDiferencia(fechaEntrada,
18 | fechaSalida)
19 | };
20 | };
21 |
22 | function calcularPrecio(reservacion){
23 | return reservacion.nochesReservadas * reservacion.cuarto.precioNoche;
24 | }
--------------------------------------------------------------------------------
/Unidad_01/Leccion_02/index.ts:
--------------------------------------------------------------------------------
1 | interface Huesped{
2 | idHuesped: string,
3 | nombre: string,
4 | apellido: string,
5 | email: string
6 | }
7 |
8 | interface Cuarto{
9 | tipo: string,
10 | piso: number,
11 | tamano: number,
12 | numeroCamas: number,
13 | tieneTV: boolean,
14 | precioNoche: number
15 | }
16 |
17 | interface Reservacion{
18 | idReservacion: string,
19 | huesped: Huesped,
20 | fechaEntrada: Date,
21 | fechaSalida: Date,
22 | cuarto: Cuarto,
23 | nochesReservadas: number
24 | }
25 |
26 | function calcularDiasDiferencia(
27 | fechaEntrada: Date, fechaSalida: Date): number{
28 | const diferenciaTiempo =
29 | fechaSalida.getTime() - fechaEntrada.getTime();
30 | return diferenciaTiempo / (1000 * 3600 * 24);
31 | }
32 |
33 | function crearReservacion(
34 | huesped: Huesped, cuarto: Cuarto,
35 | fechaEntrada: Date, fechaSalida: Date): Reservacion{
36 | return {
37 | idReservacion: '123',
38 | huesped,
39 | fechaEntrada,
40 | fechaSalida,
41 | cuarto,
42 | nochesReservadas: calcularDiasDiferencia(
43 | fechaEntrada, fechaSalida),
44 | };
45 | };
46 |
47 | function calcularPrecio(reservacion: Reservacion): number{
48 | return reservacion.nochesReservadas * reservacion.cuarto.precioNoche;
49 | }
--------------------------------------------------------------------------------
/Unidad_01/Leccion_03_04_05/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "parser": "@typescript-eslint/parser",
3 | "plugins": ["@typescript-eslint"],
4 | "rules": {
5 | "quotes": [2, "single"]
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/Unidad_01/Leccion_03_04_05/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | .tmp
4 | npm-debug.log
5 |
--------------------------------------------------------------------------------
/Unidad_01/Leccion_03_04_05/dist/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | TypeScript esencial
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Unidad_01/Leccion_03_04_05/dist/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var mensaje = "Hola TypeScript";
3 | console.log(mensaje);
4 | //# sourceMappingURL=index.js.map
--------------------------------------------------------------------------------
/Unidad_01/Leccion_03_04_05/dist/index.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,IAAM,OAAO,GAAG,iBAAiB,CAAC;AAClC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC"}
--------------------------------------------------------------------------------
/Unidad_01/Leccion_03_04_05/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "typescript-esencial",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "typescript-esencial",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "devDependencies": {
12 | "@typescript-eslint/eslint-plugin": "^5.12.0",
13 | "@typescript-eslint/parser": "^5.12.0",
14 | "eslint": "^8.9.0",
15 | "typescript": "^4.5.5"
16 | }
17 | },
18 | "node_modules/@eslint/eslintrc": {
19 | "version": "1.2.0",
20 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz",
21 | "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==",
22 | "dev": true,
23 | "dependencies": {
24 | "ajv": "^6.12.4",
25 | "debug": "^4.3.2",
26 | "espree": "^9.3.1",
27 | "globals": "^13.9.0",
28 | "ignore": "^4.0.6",
29 | "import-fresh": "^3.2.1",
30 | "js-yaml": "^4.1.0",
31 | "minimatch": "^3.0.4",
32 | "strip-json-comments": "^3.1.1"
33 | },
34 | "engines": {
35 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
36 | }
37 | },
38 | "node_modules/@eslint/eslintrc/node_modules/ignore": {
39 | "version": "4.0.6",
40 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
41 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
42 | "dev": true,
43 | "engines": {
44 | "node": ">= 4"
45 | }
46 | },
47 | "node_modules/@humanwhocodes/config-array": {
48 | "version": "0.9.5",
49 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
50 | "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
51 | "dev": true,
52 | "dependencies": {
53 | "@humanwhocodes/object-schema": "^1.2.1",
54 | "debug": "^4.1.1",
55 | "minimatch": "^3.0.4"
56 | },
57 | "engines": {
58 | "node": ">=10.10.0"
59 | }
60 | },
61 | "node_modules/@humanwhocodes/object-schema": {
62 | "version": "1.2.1",
63 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
64 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
65 | "dev": true
66 | },
67 | "node_modules/@nodelib/fs.scandir": {
68 | "version": "2.1.5",
69 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
70 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
71 | "dev": true,
72 | "dependencies": {
73 | "@nodelib/fs.stat": "2.0.5",
74 | "run-parallel": "^1.1.9"
75 | },
76 | "engines": {
77 | "node": ">= 8"
78 | }
79 | },
80 | "node_modules/@nodelib/fs.stat": {
81 | "version": "2.0.5",
82 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
83 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
84 | "dev": true,
85 | "engines": {
86 | "node": ">= 8"
87 | }
88 | },
89 | "node_modules/@nodelib/fs.walk": {
90 | "version": "1.2.8",
91 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
92 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
93 | "dev": true,
94 | "dependencies": {
95 | "@nodelib/fs.scandir": "2.1.5",
96 | "fastq": "^1.6.0"
97 | },
98 | "engines": {
99 | "node": ">= 8"
100 | }
101 | },
102 | "node_modules/@types/json-schema": {
103 | "version": "7.0.9",
104 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
105 | "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
106 | "dev": true
107 | },
108 | "node_modules/@typescript-eslint/eslint-plugin": {
109 | "version": "5.12.1",
110 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.1.tgz",
111 | "integrity": "sha512-M499lqa8rnNK7mUv74lSFFttuUsubIRdAbHcVaP93oFcKkEmHmLqy2n7jM9C8DVmFMYK61ExrZU6dLYhQZmUpw==",
112 | "dev": true,
113 | "dependencies": {
114 | "@typescript-eslint/scope-manager": "5.12.1",
115 | "@typescript-eslint/type-utils": "5.12.1",
116 | "@typescript-eslint/utils": "5.12.1",
117 | "debug": "^4.3.2",
118 | "functional-red-black-tree": "^1.0.1",
119 | "ignore": "^5.1.8",
120 | "regexpp": "^3.2.0",
121 | "semver": "^7.3.5",
122 | "tsutils": "^3.21.0"
123 | },
124 | "engines": {
125 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
126 | },
127 | "funding": {
128 | "type": "opencollective",
129 | "url": "https://opencollective.com/typescript-eslint"
130 | },
131 | "peerDependencies": {
132 | "@typescript-eslint/parser": "^5.0.0",
133 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
134 | },
135 | "peerDependenciesMeta": {
136 | "typescript": {
137 | "optional": true
138 | }
139 | }
140 | },
141 | "node_modules/@typescript-eslint/parser": {
142 | "version": "5.12.1",
143 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.1.tgz",
144 | "integrity": "sha512-6LuVUbe7oSdHxUWoX/m40Ni8gsZMKCi31rlawBHt7VtW15iHzjbpj2WLiToG2758KjtCCiLRKZqfrOdl3cNKuw==",
145 | "dev": true,
146 | "dependencies": {
147 | "@typescript-eslint/scope-manager": "5.12.1",
148 | "@typescript-eslint/types": "5.12.1",
149 | "@typescript-eslint/typescript-estree": "5.12.1",
150 | "debug": "^4.3.2"
151 | },
152 | "engines": {
153 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
154 | },
155 | "funding": {
156 | "type": "opencollective",
157 | "url": "https://opencollective.com/typescript-eslint"
158 | },
159 | "peerDependencies": {
160 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
161 | },
162 | "peerDependenciesMeta": {
163 | "typescript": {
164 | "optional": true
165 | }
166 | }
167 | },
168 | "node_modules/@typescript-eslint/scope-manager": {
169 | "version": "5.12.1",
170 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.1.tgz",
171 | "integrity": "sha512-J0Wrh5xS6XNkd4TkOosxdpObzlYfXjAFIm9QxYLCPOcHVv1FyyFCPom66uIh8uBr0sZCrtS+n19tzufhwab8ZQ==",
172 | "dev": true,
173 | "dependencies": {
174 | "@typescript-eslint/types": "5.12.1",
175 | "@typescript-eslint/visitor-keys": "5.12.1"
176 | },
177 | "engines": {
178 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
179 | },
180 | "funding": {
181 | "type": "opencollective",
182 | "url": "https://opencollective.com/typescript-eslint"
183 | }
184 | },
185 | "node_modules/@typescript-eslint/type-utils": {
186 | "version": "5.12.1",
187 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.1.tgz",
188 | "integrity": "sha512-Gh8feEhsNLeCz6aYqynh61Vsdy+tiNNkQtc+bN3IvQvRqHkXGUhYkUi+ePKzP0Mb42se7FDb+y2SypTbpbR/Sg==",
189 | "dev": true,
190 | "dependencies": {
191 | "@typescript-eslint/utils": "5.12.1",
192 | "debug": "^4.3.2",
193 | "tsutils": "^3.21.0"
194 | },
195 | "engines": {
196 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
197 | },
198 | "funding": {
199 | "type": "opencollective",
200 | "url": "https://opencollective.com/typescript-eslint"
201 | },
202 | "peerDependencies": {
203 | "eslint": "*"
204 | },
205 | "peerDependenciesMeta": {
206 | "typescript": {
207 | "optional": true
208 | }
209 | }
210 | },
211 | "node_modules/@typescript-eslint/types": {
212 | "version": "5.12.1",
213 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.1.tgz",
214 | "integrity": "sha512-hfcbq4qVOHV1YRdhkDldhV9NpmmAu2vp6wuFODL71Y0Ixak+FLeEU4rnPxgmZMnGreGEghlEucs9UZn5KOfHJA==",
215 | "dev": true,
216 | "engines": {
217 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
218 | },
219 | "funding": {
220 | "type": "opencollective",
221 | "url": "https://opencollective.com/typescript-eslint"
222 | }
223 | },
224 | "node_modules/@typescript-eslint/typescript-estree": {
225 | "version": "5.12.1",
226 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.1.tgz",
227 | "integrity": "sha512-ahOdkIY9Mgbza7L9sIi205Pe1inCkZWAHE1TV1bpxlU4RZNPtXaDZfiiFWcL9jdxvW1hDYZJXrFm+vlMkXRbBw==",
228 | "dev": true,
229 | "dependencies": {
230 | "@typescript-eslint/types": "5.12.1",
231 | "@typescript-eslint/visitor-keys": "5.12.1",
232 | "debug": "^4.3.2",
233 | "globby": "^11.0.4",
234 | "is-glob": "^4.0.3",
235 | "semver": "^7.3.5",
236 | "tsutils": "^3.21.0"
237 | },
238 | "engines": {
239 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
240 | },
241 | "funding": {
242 | "type": "opencollective",
243 | "url": "https://opencollective.com/typescript-eslint"
244 | },
245 | "peerDependenciesMeta": {
246 | "typescript": {
247 | "optional": true
248 | }
249 | }
250 | },
251 | "node_modules/@typescript-eslint/utils": {
252 | "version": "5.12.1",
253 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.1.tgz",
254 | "integrity": "sha512-Qq9FIuU0EVEsi8fS6pG+uurbhNTtoYr4fq8tKjBupsK5Bgbk2I32UGm0Sh+WOyjOPgo/5URbxxSNV6HYsxV4MQ==",
255 | "dev": true,
256 | "dependencies": {
257 | "@types/json-schema": "^7.0.9",
258 | "@typescript-eslint/scope-manager": "5.12.1",
259 | "@typescript-eslint/types": "5.12.1",
260 | "@typescript-eslint/typescript-estree": "5.12.1",
261 | "eslint-scope": "^5.1.1",
262 | "eslint-utils": "^3.0.0"
263 | },
264 | "engines": {
265 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
266 | },
267 | "funding": {
268 | "type": "opencollective",
269 | "url": "https://opencollective.com/typescript-eslint"
270 | },
271 | "peerDependencies": {
272 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
273 | }
274 | },
275 | "node_modules/@typescript-eslint/visitor-keys": {
276 | "version": "5.12.1",
277 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.1.tgz",
278 | "integrity": "sha512-l1KSLfupuwrXx6wc0AuOmC7Ko5g14ZOQ86wJJqRbdLbXLK02pK/DPiDDqCc7BqqiiA04/eAA6ayL0bgOrAkH7A==",
279 | "dev": true,
280 | "dependencies": {
281 | "@typescript-eslint/types": "5.12.1",
282 | "eslint-visitor-keys": "^3.0.0"
283 | },
284 | "engines": {
285 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
286 | },
287 | "funding": {
288 | "type": "opencollective",
289 | "url": "https://opencollective.com/typescript-eslint"
290 | }
291 | },
292 | "node_modules/acorn": {
293 | "version": "8.7.0",
294 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
295 | "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
296 | "dev": true,
297 | "bin": {
298 | "acorn": "bin/acorn"
299 | },
300 | "engines": {
301 | "node": ">=0.4.0"
302 | }
303 | },
304 | "node_modules/acorn-jsx": {
305 | "version": "5.3.2",
306 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
307 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
308 | "dev": true,
309 | "peerDependencies": {
310 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
311 | }
312 | },
313 | "node_modules/ajv": {
314 | "version": "6.12.6",
315 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
316 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
317 | "dev": true,
318 | "dependencies": {
319 | "fast-deep-equal": "^3.1.1",
320 | "fast-json-stable-stringify": "^2.0.0",
321 | "json-schema-traverse": "^0.4.1",
322 | "uri-js": "^4.2.2"
323 | },
324 | "funding": {
325 | "type": "github",
326 | "url": "https://github.com/sponsors/epoberezkin"
327 | }
328 | },
329 | "node_modules/ansi-regex": {
330 | "version": "5.0.1",
331 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
332 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
333 | "dev": true,
334 | "engines": {
335 | "node": ">=8"
336 | }
337 | },
338 | "node_modules/ansi-styles": {
339 | "version": "4.3.0",
340 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
341 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
342 | "dev": true,
343 | "dependencies": {
344 | "color-convert": "^2.0.1"
345 | },
346 | "engines": {
347 | "node": ">=8"
348 | },
349 | "funding": {
350 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
351 | }
352 | },
353 | "node_modules/argparse": {
354 | "version": "2.0.1",
355 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
356 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
357 | "dev": true
358 | },
359 | "node_modules/array-union": {
360 | "version": "2.1.0",
361 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
362 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
363 | "dev": true,
364 | "engines": {
365 | "node": ">=8"
366 | }
367 | },
368 | "node_modules/balanced-match": {
369 | "version": "1.0.2",
370 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
371 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
372 | "dev": true
373 | },
374 | "node_modules/brace-expansion": {
375 | "version": "1.1.11",
376 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
377 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
378 | "dev": true,
379 | "dependencies": {
380 | "balanced-match": "^1.0.0",
381 | "concat-map": "0.0.1"
382 | }
383 | },
384 | "node_modules/braces": {
385 | "version": "3.0.2",
386 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
387 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
388 | "dev": true,
389 | "dependencies": {
390 | "fill-range": "^7.0.1"
391 | },
392 | "engines": {
393 | "node": ">=8"
394 | }
395 | },
396 | "node_modules/callsites": {
397 | "version": "3.1.0",
398 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
399 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
400 | "dev": true,
401 | "engines": {
402 | "node": ">=6"
403 | }
404 | },
405 | "node_modules/chalk": {
406 | "version": "4.1.2",
407 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
408 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
409 | "dev": true,
410 | "dependencies": {
411 | "ansi-styles": "^4.1.0",
412 | "supports-color": "^7.1.0"
413 | },
414 | "engines": {
415 | "node": ">=10"
416 | },
417 | "funding": {
418 | "url": "https://github.com/chalk/chalk?sponsor=1"
419 | }
420 | },
421 | "node_modules/color-convert": {
422 | "version": "2.0.1",
423 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
424 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
425 | "dev": true,
426 | "dependencies": {
427 | "color-name": "~1.1.4"
428 | },
429 | "engines": {
430 | "node": ">=7.0.0"
431 | }
432 | },
433 | "node_modules/color-name": {
434 | "version": "1.1.4",
435 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
436 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
437 | "dev": true
438 | },
439 | "node_modules/concat-map": {
440 | "version": "0.0.1",
441 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
442 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
443 | "dev": true
444 | },
445 | "node_modules/cross-spawn": {
446 | "version": "7.0.3",
447 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
448 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
449 | "dev": true,
450 | "dependencies": {
451 | "path-key": "^3.1.0",
452 | "shebang-command": "^2.0.0",
453 | "which": "^2.0.1"
454 | },
455 | "engines": {
456 | "node": ">= 8"
457 | }
458 | },
459 | "node_modules/debug": {
460 | "version": "4.3.3",
461 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
462 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
463 | "dev": true,
464 | "dependencies": {
465 | "ms": "2.1.2"
466 | },
467 | "engines": {
468 | "node": ">=6.0"
469 | },
470 | "peerDependenciesMeta": {
471 | "supports-color": {
472 | "optional": true
473 | }
474 | }
475 | },
476 | "node_modules/deep-is": {
477 | "version": "0.1.4",
478 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
479 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
480 | "dev": true
481 | },
482 | "node_modules/dir-glob": {
483 | "version": "3.0.1",
484 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
485 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
486 | "dev": true,
487 | "dependencies": {
488 | "path-type": "^4.0.0"
489 | },
490 | "engines": {
491 | "node": ">=8"
492 | }
493 | },
494 | "node_modules/doctrine": {
495 | "version": "3.0.0",
496 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
497 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
498 | "dev": true,
499 | "dependencies": {
500 | "esutils": "^2.0.2"
501 | },
502 | "engines": {
503 | "node": ">=6.0.0"
504 | }
505 | },
506 | "node_modules/escape-string-regexp": {
507 | "version": "4.0.0",
508 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
509 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
510 | "dev": true,
511 | "engines": {
512 | "node": ">=10"
513 | },
514 | "funding": {
515 | "url": "https://github.com/sponsors/sindresorhus"
516 | }
517 | },
518 | "node_modules/eslint": {
519 | "version": "8.10.0",
520 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz",
521 | "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==",
522 | "dev": true,
523 | "dependencies": {
524 | "@eslint/eslintrc": "^1.2.0",
525 | "@humanwhocodes/config-array": "^0.9.2",
526 | "ajv": "^6.10.0",
527 | "chalk": "^4.0.0",
528 | "cross-spawn": "^7.0.2",
529 | "debug": "^4.3.2",
530 | "doctrine": "^3.0.0",
531 | "escape-string-regexp": "^4.0.0",
532 | "eslint-scope": "^7.1.1",
533 | "eslint-utils": "^3.0.0",
534 | "eslint-visitor-keys": "^3.3.0",
535 | "espree": "^9.3.1",
536 | "esquery": "^1.4.0",
537 | "esutils": "^2.0.2",
538 | "fast-deep-equal": "^3.1.3",
539 | "file-entry-cache": "^6.0.1",
540 | "functional-red-black-tree": "^1.0.1",
541 | "glob-parent": "^6.0.1",
542 | "globals": "^13.6.0",
543 | "ignore": "^5.2.0",
544 | "import-fresh": "^3.0.0",
545 | "imurmurhash": "^0.1.4",
546 | "is-glob": "^4.0.0",
547 | "js-yaml": "^4.1.0",
548 | "json-stable-stringify-without-jsonify": "^1.0.1",
549 | "levn": "^0.4.1",
550 | "lodash.merge": "^4.6.2",
551 | "minimatch": "^3.0.4",
552 | "natural-compare": "^1.4.0",
553 | "optionator": "^0.9.1",
554 | "regexpp": "^3.2.0",
555 | "strip-ansi": "^6.0.1",
556 | "strip-json-comments": "^3.1.0",
557 | "text-table": "^0.2.0",
558 | "v8-compile-cache": "^2.0.3"
559 | },
560 | "bin": {
561 | "eslint": "bin/eslint.js"
562 | },
563 | "engines": {
564 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
565 | },
566 | "funding": {
567 | "url": "https://opencollective.com/eslint"
568 | }
569 | },
570 | "node_modules/eslint-scope": {
571 | "version": "5.1.1",
572 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
573 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
574 | "dev": true,
575 | "dependencies": {
576 | "esrecurse": "^4.3.0",
577 | "estraverse": "^4.1.1"
578 | },
579 | "engines": {
580 | "node": ">=8.0.0"
581 | }
582 | },
583 | "node_modules/eslint-utils": {
584 | "version": "3.0.0",
585 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
586 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
587 | "dev": true,
588 | "dependencies": {
589 | "eslint-visitor-keys": "^2.0.0"
590 | },
591 | "engines": {
592 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
593 | },
594 | "funding": {
595 | "url": "https://github.com/sponsors/mysticatea"
596 | },
597 | "peerDependencies": {
598 | "eslint": ">=5"
599 | }
600 | },
601 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
602 | "version": "2.1.0",
603 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
604 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
605 | "dev": true,
606 | "engines": {
607 | "node": ">=10"
608 | }
609 | },
610 | "node_modules/eslint-visitor-keys": {
611 | "version": "3.3.0",
612 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
613 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
614 | "dev": true,
615 | "engines": {
616 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
617 | }
618 | },
619 | "node_modules/eslint/node_modules/eslint-scope": {
620 | "version": "7.1.1",
621 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
622 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
623 | "dev": true,
624 | "dependencies": {
625 | "esrecurse": "^4.3.0",
626 | "estraverse": "^5.2.0"
627 | },
628 | "engines": {
629 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
630 | }
631 | },
632 | "node_modules/eslint/node_modules/estraverse": {
633 | "version": "5.3.0",
634 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
635 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
636 | "dev": true,
637 | "engines": {
638 | "node": ">=4.0"
639 | }
640 | },
641 | "node_modules/espree": {
642 | "version": "9.3.1",
643 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
644 | "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
645 | "dev": true,
646 | "dependencies": {
647 | "acorn": "^8.7.0",
648 | "acorn-jsx": "^5.3.1",
649 | "eslint-visitor-keys": "^3.3.0"
650 | },
651 | "engines": {
652 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
653 | }
654 | },
655 | "node_modules/esquery": {
656 | "version": "1.4.0",
657 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
658 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
659 | "dev": true,
660 | "dependencies": {
661 | "estraverse": "^5.1.0"
662 | },
663 | "engines": {
664 | "node": ">=0.10"
665 | }
666 | },
667 | "node_modules/esquery/node_modules/estraverse": {
668 | "version": "5.3.0",
669 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
670 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
671 | "dev": true,
672 | "engines": {
673 | "node": ">=4.0"
674 | }
675 | },
676 | "node_modules/esrecurse": {
677 | "version": "4.3.0",
678 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
679 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
680 | "dev": true,
681 | "dependencies": {
682 | "estraverse": "^5.2.0"
683 | },
684 | "engines": {
685 | "node": ">=4.0"
686 | }
687 | },
688 | "node_modules/esrecurse/node_modules/estraverse": {
689 | "version": "5.3.0",
690 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
691 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
692 | "dev": true,
693 | "engines": {
694 | "node": ">=4.0"
695 | }
696 | },
697 | "node_modules/estraverse": {
698 | "version": "4.3.0",
699 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
700 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
701 | "dev": true,
702 | "engines": {
703 | "node": ">=4.0"
704 | }
705 | },
706 | "node_modules/esutils": {
707 | "version": "2.0.3",
708 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
709 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
710 | "dev": true,
711 | "engines": {
712 | "node": ">=0.10.0"
713 | }
714 | },
715 | "node_modules/fast-deep-equal": {
716 | "version": "3.1.3",
717 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
718 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
719 | "dev": true
720 | },
721 | "node_modules/fast-glob": {
722 | "version": "3.2.11",
723 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
724 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
725 | "dev": true,
726 | "dependencies": {
727 | "@nodelib/fs.stat": "^2.0.2",
728 | "@nodelib/fs.walk": "^1.2.3",
729 | "glob-parent": "^5.1.2",
730 | "merge2": "^1.3.0",
731 | "micromatch": "^4.0.4"
732 | },
733 | "engines": {
734 | "node": ">=8.6.0"
735 | }
736 | },
737 | "node_modules/fast-glob/node_modules/glob-parent": {
738 | "version": "5.1.2",
739 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
740 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
741 | "dev": true,
742 | "dependencies": {
743 | "is-glob": "^4.0.1"
744 | },
745 | "engines": {
746 | "node": ">= 6"
747 | }
748 | },
749 | "node_modules/fast-json-stable-stringify": {
750 | "version": "2.1.0",
751 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
752 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
753 | "dev": true
754 | },
755 | "node_modules/fast-levenshtein": {
756 | "version": "2.0.6",
757 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
758 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
759 | "dev": true
760 | },
761 | "node_modules/fastq": {
762 | "version": "1.13.0",
763 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
764 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
765 | "dev": true,
766 | "dependencies": {
767 | "reusify": "^1.0.4"
768 | }
769 | },
770 | "node_modules/file-entry-cache": {
771 | "version": "6.0.1",
772 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
773 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
774 | "dev": true,
775 | "dependencies": {
776 | "flat-cache": "^3.0.4"
777 | },
778 | "engines": {
779 | "node": "^10.12.0 || >=12.0.0"
780 | }
781 | },
782 | "node_modules/fill-range": {
783 | "version": "7.0.1",
784 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
785 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
786 | "dev": true,
787 | "dependencies": {
788 | "to-regex-range": "^5.0.1"
789 | },
790 | "engines": {
791 | "node": ">=8"
792 | }
793 | },
794 | "node_modules/flat-cache": {
795 | "version": "3.0.4",
796 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
797 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
798 | "dev": true,
799 | "dependencies": {
800 | "flatted": "^3.1.0",
801 | "rimraf": "^3.0.2"
802 | },
803 | "engines": {
804 | "node": "^10.12.0 || >=12.0.0"
805 | }
806 | },
807 | "node_modules/flatted": {
808 | "version": "3.2.5",
809 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
810 | "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
811 | "dev": true
812 | },
813 | "node_modules/fs.realpath": {
814 | "version": "1.0.0",
815 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
816 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
817 | "dev": true
818 | },
819 | "node_modules/functional-red-black-tree": {
820 | "version": "1.0.1",
821 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
822 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
823 | "dev": true
824 | },
825 | "node_modules/glob": {
826 | "version": "7.2.0",
827 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
828 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
829 | "dev": true,
830 | "dependencies": {
831 | "fs.realpath": "^1.0.0",
832 | "inflight": "^1.0.4",
833 | "inherits": "2",
834 | "minimatch": "^3.0.4",
835 | "once": "^1.3.0",
836 | "path-is-absolute": "^1.0.0"
837 | },
838 | "engines": {
839 | "node": "*"
840 | },
841 | "funding": {
842 | "url": "https://github.com/sponsors/isaacs"
843 | }
844 | },
845 | "node_modules/glob-parent": {
846 | "version": "6.0.2",
847 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
848 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
849 | "dev": true,
850 | "dependencies": {
851 | "is-glob": "^4.0.3"
852 | },
853 | "engines": {
854 | "node": ">=10.13.0"
855 | }
856 | },
857 | "node_modules/globals": {
858 | "version": "13.12.1",
859 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz",
860 | "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==",
861 | "dev": true,
862 | "dependencies": {
863 | "type-fest": "^0.20.2"
864 | },
865 | "engines": {
866 | "node": ">=8"
867 | },
868 | "funding": {
869 | "url": "https://github.com/sponsors/sindresorhus"
870 | }
871 | },
872 | "node_modules/globby": {
873 | "version": "11.1.0",
874 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
875 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
876 | "dev": true,
877 | "dependencies": {
878 | "array-union": "^2.1.0",
879 | "dir-glob": "^3.0.1",
880 | "fast-glob": "^3.2.9",
881 | "ignore": "^5.2.0",
882 | "merge2": "^1.4.1",
883 | "slash": "^3.0.0"
884 | },
885 | "engines": {
886 | "node": ">=10"
887 | },
888 | "funding": {
889 | "url": "https://github.com/sponsors/sindresorhus"
890 | }
891 | },
892 | "node_modules/has-flag": {
893 | "version": "4.0.0",
894 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
895 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
896 | "dev": true,
897 | "engines": {
898 | "node": ">=8"
899 | }
900 | },
901 | "node_modules/ignore": {
902 | "version": "5.2.0",
903 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
904 | "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
905 | "dev": true,
906 | "engines": {
907 | "node": ">= 4"
908 | }
909 | },
910 | "node_modules/import-fresh": {
911 | "version": "3.3.0",
912 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
913 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
914 | "dev": true,
915 | "dependencies": {
916 | "parent-module": "^1.0.0",
917 | "resolve-from": "^4.0.0"
918 | },
919 | "engines": {
920 | "node": ">=6"
921 | },
922 | "funding": {
923 | "url": "https://github.com/sponsors/sindresorhus"
924 | }
925 | },
926 | "node_modules/imurmurhash": {
927 | "version": "0.1.4",
928 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
929 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
930 | "dev": true,
931 | "engines": {
932 | "node": ">=0.8.19"
933 | }
934 | },
935 | "node_modules/inflight": {
936 | "version": "1.0.6",
937 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
938 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
939 | "dev": true,
940 | "dependencies": {
941 | "once": "^1.3.0",
942 | "wrappy": "1"
943 | }
944 | },
945 | "node_modules/inherits": {
946 | "version": "2.0.4",
947 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
948 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
949 | "dev": true
950 | },
951 | "node_modules/is-extglob": {
952 | "version": "2.1.1",
953 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
954 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
955 | "dev": true,
956 | "engines": {
957 | "node": ">=0.10.0"
958 | }
959 | },
960 | "node_modules/is-glob": {
961 | "version": "4.0.3",
962 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
963 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
964 | "dev": true,
965 | "dependencies": {
966 | "is-extglob": "^2.1.1"
967 | },
968 | "engines": {
969 | "node": ">=0.10.0"
970 | }
971 | },
972 | "node_modules/is-number": {
973 | "version": "7.0.0",
974 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
975 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
976 | "dev": true,
977 | "engines": {
978 | "node": ">=0.12.0"
979 | }
980 | },
981 | "node_modules/isexe": {
982 | "version": "2.0.0",
983 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
984 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
985 | "dev": true
986 | },
987 | "node_modules/js-yaml": {
988 | "version": "4.1.0",
989 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
990 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
991 | "dev": true,
992 | "dependencies": {
993 | "argparse": "^2.0.1"
994 | },
995 | "bin": {
996 | "js-yaml": "bin/js-yaml.js"
997 | }
998 | },
999 | "node_modules/json-schema-traverse": {
1000 | "version": "0.4.1",
1001 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1002 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1003 | "dev": true
1004 | },
1005 | "node_modules/json-stable-stringify-without-jsonify": {
1006 | "version": "1.0.1",
1007 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
1008 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
1009 | "dev": true
1010 | },
1011 | "node_modules/levn": {
1012 | "version": "0.4.1",
1013 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
1014 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
1015 | "dev": true,
1016 | "dependencies": {
1017 | "prelude-ls": "^1.2.1",
1018 | "type-check": "~0.4.0"
1019 | },
1020 | "engines": {
1021 | "node": ">= 0.8.0"
1022 | }
1023 | },
1024 | "node_modules/lodash.merge": {
1025 | "version": "4.6.2",
1026 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
1027 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
1028 | "dev": true
1029 | },
1030 | "node_modules/lru-cache": {
1031 | "version": "6.0.0",
1032 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
1033 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
1034 | "dev": true,
1035 | "dependencies": {
1036 | "yallist": "^4.0.0"
1037 | },
1038 | "engines": {
1039 | "node": ">=10"
1040 | }
1041 | },
1042 | "node_modules/merge2": {
1043 | "version": "1.4.1",
1044 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1045 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1046 | "dev": true,
1047 | "engines": {
1048 | "node": ">= 8"
1049 | }
1050 | },
1051 | "node_modules/micromatch": {
1052 | "version": "4.0.4",
1053 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
1054 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
1055 | "dev": true,
1056 | "dependencies": {
1057 | "braces": "^3.0.1",
1058 | "picomatch": "^2.2.3"
1059 | },
1060 | "engines": {
1061 | "node": ">=8.6"
1062 | }
1063 | },
1064 | "node_modules/minimatch": {
1065 | "version": "3.1.2",
1066 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1067 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1068 | "dev": true,
1069 | "dependencies": {
1070 | "brace-expansion": "^1.1.7"
1071 | },
1072 | "engines": {
1073 | "node": "*"
1074 | }
1075 | },
1076 | "node_modules/ms": {
1077 | "version": "2.1.2",
1078 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1079 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1080 | "dev": true
1081 | },
1082 | "node_modules/natural-compare": {
1083 | "version": "1.4.0",
1084 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
1085 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
1086 | "dev": true
1087 | },
1088 | "node_modules/once": {
1089 | "version": "1.4.0",
1090 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1091 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1092 | "dev": true,
1093 | "dependencies": {
1094 | "wrappy": "1"
1095 | }
1096 | },
1097 | "node_modules/optionator": {
1098 | "version": "0.9.1",
1099 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
1100 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
1101 | "dev": true,
1102 | "dependencies": {
1103 | "deep-is": "^0.1.3",
1104 | "fast-levenshtein": "^2.0.6",
1105 | "levn": "^0.4.1",
1106 | "prelude-ls": "^1.2.1",
1107 | "type-check": "^0.4.0",
1108 | "word-wrap": "^1.2.3"
1109 | },
1110 | "engines": {
1111 | "node": ">= 0.8.0"
1112 | }
1113 | },
1114 | "node_modules/parent-module": {
1115 | "version": "1.0.1",
1116 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1117 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1118 | "dev": true,
1119 | "dependencies": {
1120 | "callsites": "^3.0.0"
1121 | },
1122 | "engines": {
1123 | "node": ">=6"
1124 | }
1125 | },
1126 | "node_modules/path-is-absolute": {
1127 | "version": "1.0.1",
1128 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1129 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1130 | "dev": true,
1131 | "engines": {
1132 | "node": ">=0.10.0"
1133 | }
1134 | },
1135 | "node_modules/path-key": {
1136 | "version": "3.1.1",
1137 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1138 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1139 | "dev": true,
1140 | "engines": {
1141 | "node": ">=8"
1142 | }
1143 | },
1144 | "node_modules/path-type": {
1145 | "version": "4.0.0",
1146 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
1147 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
1148 | "dev": true,
1149 | "engines": {
1150 | "node": ">=8"
1151 | }
1152 | },
1153 | "node_modules/picomatch": {
1154 | "version": "2.3.1",
1155 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1156 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1157 | "dev": true,
1158 | "engines": {
1159 | "node": ">=8.6"
1160 | },
1161 | "funding": {
1162 | "url": "https://github.com/sponsors/jonschlinkert"
1163 | }
1164 | },
1165 | "node_modules/prelude-ls": {
1166 | "version": "1.2.1",
1167 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
1168 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
1169 | "dev": true,
1170 | "engines": {
1171 | "node": ">= 0.8.0"
1172 | }
1173 | },
1174 | "node_modules/punycode": {
1175 | "version": "2.1.1",
1176 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1177 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
1178 | "dev": true,
1179 | "engines": {
1180 | "node": ">=6"
1181 | }
1182 | },
1183 | "node_modules/queue-microtask": {
1184 | "version": "1.2.3",
1185 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1186 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1187 | "dev": true,
1188 | "funding": [
1189 | {
1190 | "type": "github",
1191 | "url": "https://github.com/sponsors/feross"
1192 | },
1193 | {
1194 | "type": "patreon",
1195 | "url": "https://www.patreon.com/feross"
1196 | },
1197 | {
1198 | "type": "consulting",
1199 | "url": "https://feross.org/support"
1200 | }
1201 | ]
1202 | },
1203 | "node_modules/regexpp": {
1204 | "version": "3.2.0",
1205 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
1206 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
1207 | "dev": true,
1208 | "engines": {
1209 | "node": ">=8"
1210 | },
1211 | "funding": {
1212 | "url": "https://github.com/sponsors/mysticatea"
1213 | }
1214 | },
1215 | "node_modules/resolve-from": {
1216 | "version": "4.0.0",
1217 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
1218 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
1219 | "dev": true,
1220 | "engines": {
1221 | "node": ">=4"
1222 | }
1223 | },
1224 | "node_modules/reusify": {
1225 | "version": "1.0.4",
1226 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
1227 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
1228 | "dev": true,
1229 | "engines": {
1230 | "iojs": ">=1.0.0",
1231 | "node": ">=0.10.0"
1232 | }
1233 | },
1234 | "node_modules/rimraf": {
1235 | "version": "3.0.2",
1236 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
1237 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
1238 | "dev": true,
1239 | "dependencies": {
1240 | "glob": "^7.1.3"
1241 | },
1242 | "bin": {
1243 | "rimraf": "bin.js"
1244 | },
1245 | "funding": {
1246 | "url": "https://github.com/sponsors/isaacs"
1247 | }
1248 | },
1249 | "node_modules/run-parallel": {
1250 | "version": "1.2.0",
1251 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
1252 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
1253 | "dev": true,
1254 | "funding": [
1255 | {
1256 | "type": "github",
1257 | "url": "https://github.com/sponsors/feross"
1258 | },
1259 | {
1260 | "type": "patreon",
1261 | "url": "https://www.patreon.com/feross"
1262 | },
1263 | {
1264 | "type": "consulting",
1265 | "url": "https://feross.org/support"
1266 | }
1267 | ],
1268 | "dependencies": {
1269 | "queue-microtask": "^1.2.2"
1270 | }
1271 | },
1272 | "node_modules/semver": {
1273 | "version": "7.3.5",
1274 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
1275 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
1276 | "dev": true,
1277 | "dependencies": {
1278 | "lru-cache": "^6.0.0"
1279 | },
1280 | "bin": {
1281 | "semver": "bin/semver.js"
1282 | },
1283 | "engines": {
1284 | "node": ">=10"
1285 | }
1286 | },
1287 | "node_modules/shebang-command": {
1288 | "version": "2.0.0",
1289 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1290 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1291 | "dev": true,
1292 | "dependencies": {
1293 | "shebang-regex": "^3.0.0"
1294 | },
1295 | "engines": {
1296 | "node": ">=8"
1297 | }
1298 | },
1299 | "node_modules/shebang-regex": {
1300 | "version": "3.0.0",
1301 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1302 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1303 | "dev": true,
1304 | "engines": {
1305 | "node": ">=8"
1306 | }
1307 | },
1308 | "node_modules/slash": {
1309 | "version": "3.0.0",
1310 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
1311 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
1312 | "dev": true,
1313 | "engines": {
1314 | "node": ">=8"
1315 | }
1316 | },
1317 | "node_modules/strip-ansi": {
1318 | "version": "6.0.1",
1319 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1320 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1321 | "dev": true,
1322 | "dependencies": {
1323 | "ansi-regex": "^5.0.1"
1324 | },
1325 | "engines": {
1326 | "node": ">=8"
1327 | }
1328 | },
1329 | "node_modules/strip-json-comments": {
1330 | "version": "3.1.1",
1331 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
1332 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
1333 | "dev": true,
1334 | "engines": {
1335 | "node": ">=8"
1336 | },
1337 | "funding": {
1338 | "url": "https://github.com/sponsors/sindresorhus"
1339 | }
1340 | },
1341 | "node_modules/supports-color": {
1342 | "version": "7.2.0",
1343 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1344 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1345 | "dev": true,
1346 | "dependencies": {
1347 | "has-flag": "^4.0.0"
1348 | },
1349 | "engines": {
1350 | "node": ">=8"
1351 | }
1352 | },
1353 | "node_modules/text-table": {
1354 | "version": "0.2.0",
1355 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
1356 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
1357 | "dev": true
1358 | },
1359 | "node_modules/to-regex-range": {
1360 | "version": "5.0.1",
1361 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1362 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1363 | "dev": true,
1364 | "dependencies": {
1365 | "is-number": "^7.0.0"
1366 | },
1367 | "engines": {
1368 | "node": ">=8.0"
1369 | }
1370 | },
1371 | "node_modules/tslib": {
1372 | "version": "1.14.1",
1373 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
1374 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
1375 | "dev": true
1376 | },
1377 | "node_modules/tsutils": {
1378 | "version": "3.21.0",
1379 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
1380 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
1381 | "dev": true,
1382 | "dependencies": {
1383 | "tslib": "^1.8.1"
1384 | },
1385 | "engines": {
1386 | "node": ">= 6"
1387 | },
1388 | "peerDependencies": {
1389 | "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
1390 | }
1391 | },
1392 | "node_modules/type-check": {
1393 | "version": "0.4.0",
1394 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
1395 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
1396 | "dev": true,
1397 | "dependencies": {
1398 | "prelude-ls": "^1.2.1"
1399 | },
1400 | "engines": {
1401 | "node": ">= 0.8.0"
1402 | }
1403 | },
1404 | "node_modules/type-fest": {
1405 | "version": "0.20.2",
1406 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
1407 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
1408 | "dev": true,
1409 | "engines": {
1410 | "node": ">=10"
1411 | },
1412 | "funding": {
1413 | "url": "https://github.com/sponsors/sindresorhus"
1414 | }
1415 | },
1416 | "node_modules/typescript": {
1417 | "version": "4.5.5",
1418 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
1419 | "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
1420 | "dev": true,
1421 | "bin": {
1422 | "tsc": "bin/tsc",
1423 | "tsserver": "bin/tsserver"
1424 | },
1425 | "engines": {
1426 | "node": ">=4.2.0"
1427 | }
1428 | },
1429 | "node_modules/uri-js": {
1430 | "version": "4.4.1",
1431 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
1432 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
1433 | "dev": true,
1434 | "dependencies": {
1435 | "punycode": "^2.1.0"
1436 | }
1437 | },
1438 | "node_modules/v8-compile-cache": {
1439 | "version": "2.3.0",
1440 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
1441 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
1442 | "dev": true
1443 | },
1444 | "node_modules/which": {
1445 | "version": "2.0.2",
1446 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1447 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1448 | "dev": true,
1449 | "dependencies": {
1450 | "isexe": "^2.0.0"
1451 | },
1452 | "bin": {
1453 | "node-which": "bin/node-which"
1454 | },
1455 | "engines": {
1456 | "node": ">= 8"
1457 | }
1458 | },
1459 | "node_modules/word-wrap": {
1460 | "version": "1.2.3",
1461 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
1462 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
1463 | "dev": true,
1464 | "engines": {
1465 | "node": ">=0.10.0"
1466 | }
1467 | },
1468 | "node_modules/wrappy": {
1469 | "version": "1.0.2",
1470 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1471 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1472 | "dev": true
1473 | },
1474 | "node_modules/yallist": {
1475 | "version": "4.0.0",
1476 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1477 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
1478 | "dev": true
1479 | }
1480 | },
1481 | "dependencies": {
1482 | "@eslint/eslintrc": {
1483 | "version": "1.2.0",
1484 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz",
1485 | "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==",
1486 | "dev": true,
1487 | "requires": {
1488 | "ajv": "^6.12.4",
1489 | "debug": "^4.3.2",
1490 | "espree": "^9.3.1",
1491 | "globals": "^13.9.0",
1492 | "ignore": "^4.0.6",
1493 | "import-fresh": "^3.2.1",
1494 | "js-yaml": "^4.1.0",
1495 | "minimatch": "^3.0.4",
1496 | "strip-json-comments": "^3.1.1"
1497 | },
1498 | "dependencies": {
1499 | "ignore": {
1500 | "version": "4.0.6",
1501 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
1502 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
1503 | "dev": true
1504 | }
1505 | }
1506 | },
1507 | "@humanwhocodes/config-array": {
1508 | "version": "0.9.5",
1509 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
1510 | "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
1511 | "dev": true,
1512 | "requires": {
1513 | "@humanwhocodes/object-schema": "^1.2.1",
1514 | "debug": "^4.1.1",
1515 | "minimatch": "^3.0.4"
1516 | }
1517 | },
1518 | "@humanwhocodes/object-schema": {
1519 | "version": "1.2.1",
1520 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
1521 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
1522 | "dev": true
1523 | },
1524 | "@nodelib/fs.scandir": {
1525 | "version": "2.1.5",
1526 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
1527 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
1528 | "dev": true,
1529 | "requires": {
1530 | "@nodelib/fs.stat": "2.0.5",
1531 | "run-parallel": "^1.1.9"
1532 | }
1533 | },
1534 | "@nodelib/fs.stat": {
1535 | "version": "2.0.5",
1536 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
1537 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
1538 | "dev": true
1539 | },
1540 | "@nodelib/fs.walk": {
1541 | "version": "1.2.8",
1542 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
1543 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
1544 | "dev": true,
1545 | "requires": {
1546 | "@nodelib/fs.scandir": "2.1.5",
1547 | "fastq": "^1.6.0"
1548 | }
1549 | },
1550 | "@types/json-schema": {
1551 | "version": "7.0.9",
1552 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
1553 | "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
1554 | "dev": true
1555 | },
1556 | "@typescript-eslint/eslint-plugin": {
1557 | "version": "5.12.1",
1558 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.1.tgz",
1559 | "integrity": "sha512-M499lqa8rnNK7mUv74lSFFttuUsubIRdAbHcVaP93oFcKkEmHmLqy2n7jM9C8DVmFMYK61ExrZU6dLYhQZmUpw==",
1560 | "dev": true,
1561 | "requires": {
1562 | "@typescript-eslint/scope-manager": "5.12.1",
1563 | "@typescript-eslint/type-utils": "5.12.1",
1564 | "@typescript-eslint/utils": "5.12.1",
1565 | "debug": "^4.3.2",
1566 | "functional-red-black-tree": "^1.0.1",
1567 | "ignore": "^5.1.8",
1568 | "regexpp": "^3.2.0",
1569 | "semver": "^7.3.5",
1570 | "tsutils": "^3.21.0"
1571 | }
1572 | },
1573 | "@typescript-eslint/parser": {
1574 | "version": "5.12.1",
1575 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.1.tgz",
1576 | "integrity": "sha512-6LuVUbe7oSdHxUWoX/m40Ni8gsZMKCi31rlawBHt7VtW15iHzjbpj2WLiToG2758KjtCCiLRKZqfrOdl3cNKuw==",
1577 | "dev": true,
1578 | "requires": {
1579 | "@typescript-eslint/scope-manager": "5.12.1",
1580 | "@typescript-eslint/types": "5.12.1",
1581 | "@typescript-eslint/typescript-estree": "5.12.1",
1582 | "debug": "^4.3.2"
1583 | }
1584 | },
1585 | "@typescript-eslint/scope-manager": {
1586 | "version": "5.12.1",
1587 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.1.tgz",
1588 | "integrity": "sha512-J0Wrh5xS6XNkd4TkOosxdpObzlYfXjAFIm9QxYLCPOcHVv1FyyFCPom66uIh8uBr0sZCrtS+n19tzufhwab8ZQ==",
1589 | "dev": true,
1590 | "requires": {
1591 | "@typescript-eslint/types": "5.12.1",
1592 | "@typescript-eslint/visitor-keys": "5.12.1"
1593 | }
1594 | },
1595 | "@typescript-eslint/type-utils": {
1596 | "version": "5.12.1",
1597 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.1.tgz",
1598 | "integrity": "sha512-Gh8feEhsNLeCz6aYqynh61Vsdy+tiNNkQtc+bN3IvQvRqHkXGUhYkUi+ePKzP0Mb42se7FDb+y2SypTbpbR/Sg==",
1599 | "dev": true,
1600 | "requires": {
1601 | "@typescript-eslint/utils": "5.12.1",
1602 | "debug": "^4.3.2",
1603 | "tsutils": "^3.21.0"
1604 | }
1605 | },
1606 | "@typescript-eslint/types": {
1607 | "version": "5.12.1",
1608 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.1.tgz",
1609 | "integrity": "sha512-hfcbq4qVOHV1YRdhkDldhV9NpmmAu2vp6wuFODL71Y0Ixak+FLeEU4rnPxgmZMnGreGEghlEucs9UZn5KOfHJA==",
1610 | "dev": true
1611 | },
1612 | "@typescript-eslint/typescript-estree": {
1613 | "version": "5.12.1",
1614 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.1.tgz",
1615 | "integrity": "sha512-ahOdkIY9Mgbza7L9sIi205Pe1inCkZWAHE1TV1bpxlU4RZNPtXaDZfiiFWcL9jdxvW1hDYZJXrFm+vlMkXRbBw==",
1616 | "dev": true,
1617 | "requires": {
1618 | "@typescript-eslint/types": "5.12.1",
1619 | "@typescript-eslint/visitor-keys": "5.12.1",
1620 | "debug": "^4.3.2",
1621 | "globby": "^11.0.4",
1622 | "is-glob": "^4.0.3",
1623 | "semver": "^7.3.5",
1624 | "tsutils": "^3.21.0"
1625 | }
1626 | },
1627 | "@typescript-eslint/utils": {
1628 | "version": "5.12.1",
1629 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.1.tgz",
1630 | "integrity": "sha512-Qq9FIuU0EVEsi8fS6pG+uurbhNTtoYr4fq8tKjBupsK5Bgbk2I32UGm0Sh+WOyjOPgo/5URbxxSNV6HYsxV4MQ==",
1631 | "dev": true,
1632 | "requires": {
1633 | "@types/json-schema": "^7.0.9",
1634 | "@typescript-eslint/scope-manager": "5.12.1",
1635 | "@typescript-eslint/types": "5.12.1",
1636 | "@typescript-eslint/typescript-estree": "5.12.1",
1637 | "eslint-scope": "^5.1.1",
1638 | "eslint-utils": "^3.0.0"
1639 | }
1640 | },
1641 | "@typescript-eslint/visitor-keys": {
1642 | "version": "5.12.1",
1643 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.1.tgz",
1644 | "integrity": "sha512-l1KSLfupuwrXx6wc0AuOmC7Ko5g14ZOQ86wJJqRbdLbXLK02pK/DPiDDqCc7BqqiiA04/eAA6ayL0bgOrAkH7A==",
1645 | "dev": true,
1646 | "requires": {
1647 | "@typescript-eslint/types": "5.12.1",
1648 | "eslint-visitor-keys": "^3.0.0"
1649 | }
1650 | },
1651 | "acorn": {
1652 | "version": "8.7.0",
1653 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
1654 | "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
1655 | "dev": true
1656 | },
1657 | "acorn-jsx": {
1658 | "version": "5.3.2",
1659 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
1660 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
1661 | "dev": true,
1662 | "requires": {}
1663 | },
1664 | "ajv": {
1665 | "version": "6.12.6",
1666 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
1667 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
1668 | "dev": true,
1669 | "requires": {
1670 | "fast-deep-equal": "^3.1.1",
1671 | "fast-json-stable-stringify": "^2.0.0",
1672 | "json-schema-traverse": "^0.4.1",
1673 | "uri-js": "^4.2.2"
1674 | }
1675 | },
1676 | "ansi-regex": {
1677 | "version": "5.0.1",
1678 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1679 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1680 | "dev": true
1681 | },
1682 | "ansi-styles": {
1683 | "version": "4.3.0",
1684 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1685 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1686 | "dev": true,
1687 | "requires": {
1688 | "color-convert": "^2.0.1"
1689 | }
1690 | },
1691 | "argparse": {
1692 | "version": "2.0.1",
1693 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
1694 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
1695 | "dev": true
1696 | },
1697 | "array-union": {
1698 | "version": "2.1.0",
1699 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
1700 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
1701 | "dev": true
1702 | },
1703 | "balanced-match": {
1704 | "version": "1.0.2",
1705 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1706 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1707 | "dev": true
1708 | },
1709 | "brace-expansion": {
1710 | "version": "1.1.11",
1711 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1712 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1713 | "dev": true,
1714 | "requires": {
1715 | "balanced-match": "^1.0.0",
1716 | "concat-map": "0.0.1"
1717 | }
1718 | },
1719 | "braces": {
1720 | "version": "3.0.2",
1721 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
1722 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
1723 | "dev": true,
1724 | "requires": {
1725 | "fill-range": "^7.0.1"
1726 | }
1727 | },
1728 | "callsites": {
1729 | "version": "3.1.0",
1730 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1731 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1732 | "dev": true
1733 | },
1734 | "chalk": {
1735 | "version": "4.1.2",
1736 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1737 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1738 | "dev": true,
1739 | "requires": {
1740 | "ansi-styles": "^4.1.0",
1741 | "supports-color": "^7.1.0"
1742 | }
1743 | },
1744 | "color-convert": {
1745 | "version": "2.0.1",
1746 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1747 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1748 | "dev": true,
1749 | "requires": {
1750 | "color-name": "~1.1.4"
1751 | }
1752 | },
1753 | "color-name": {
1754 | "version": "1.1.4",
1755 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1756 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1757 | "dev": true
1758 | },
1759 | "concat-map": {
1760 | "version": "0.0.1",
1761 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1762 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
1763 | "dev": true
1764 | },
1765 | "cross-spawn": {
1766 | "version": "7.0.3",
1767 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
1768 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
1769 | "dev": true,
1770 | "requires": {
1771 | "path-key": "^3.1.0",
1772 | "shebang-command": "^2.0.0",
1773 | "which": "^2.0.1"
1774 | }
1775 | },
1776 | "debug": {
1777 | "version": "4.3.3",
1778 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
1779 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
1780 | "dev": true,
1781 | "requires": {
1782 | "ms": "2.1.2"
1783 | }
1784 | },
1785 | "deep-is": {
1786 | "version": "0.1.4",
1787 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
1788 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
1789 | "dev": true
1790 | },
1791 | "dir-glob": {
1792 | "version": "3.0.1",
1793 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
1794 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
1795 | "dev": true,
1796 | "requires": {
1797 | "path-type": "^4.0.0"
1798 | }
1799 | },
1800 | "doctrine": {
1801 | "version": "3.0.0",
1802 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
1803 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
1804 | "dev": true,
1805 | "requires": {
1806 | "esutils": "^2.0.2"
1807 | }
1808 | },
1809 | "escape-string-regexp": {
1810 | "version": "4.0.0",
1811 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1812 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1813 | "dev": true
1814 | },
1815 | "eslint": {
1816 | "version": "8.10.0",
1817 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz",
1818 | "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==",
1819 | "dev": true,
1820 | "requires": {
1821 | "@eslint/eslintrc": "^1.2.0",
1822 | "@humanwhocodes/config-array": "^0.9.2",
1823 | "ajv": "^6.10.0",
1824 | "chalk": "^4.0.0",
1825 | "cross-spawn": "^7.0.2",
1826 | "debug": "^4.3.2",
1827 | "doctrine": "^3.0.0",
1828 | "escape-string-regexp": "^4.0.0",
1829 | "eslint-scope": "^7.1.1",
1830 | "eslint-utils": "^3.0.0",
1831 | "eslint-visitor-keys": "^3.3.0",
1832 | "espree": "^9.3.1",
1833 | "esquery": "^1.4.0",
1834 | "esutils": "^2.0.2",
1835 | "fast-deep-equal": "^3.1.3",
1836 | "file-entry-cache": "^6.0.1",
1837 | "functional-red-black-tree": "^1.0.1",
1838 | "glob-parent": "^6.0.1",
1839 | "globals": "^13.6.0",
1840 | "ignore": "^5.2.0",
1841 | "import-fresh": "^3.0.0",
1842 | "imurmurhash": "^0.1.4",
1843 | "is-glob": "^4.0.0",
1844 | "js-yaml": "^4.1.0",
1845 | "json-stable-stringify-without-jsonify": "^1.0.1",
1846 | "levn": "^0.4.1",
1847 | "lodash.merge": "^4.6.2",
1848 | "minimatch": "^3.0.4",
1849 | "natural-compare": "^1.4.0",
1850 | "optionator": "^0.9.1",
1851 | "regexpp": "^3.2.0",
1852 | "strip-ansi": "^6.0.1",
1853 | "strip-json-comments": "^3.1.0",
1854 | "text-table": "^0.2.0",
1855 | "v8-compile-cache": "^2.0.3"
1856 | },
1857 | "dependencies": {
1858 | "eslint-scope": {
1859 | "version": "7.1.1",
1860 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
1861 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
1862 | "dev": true,
1863 | "requires": {
1864 | "esrecurse": "^4.3.0",
1865 | "estraverse": "^5.2.0"
1866 | }
1867 | },
1868 | "estraverse": {
1869 | "version": "5.3.0",
1870 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1871 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1872 | "dev": true
1873 | }
1874 | }
1875 | },
1876 | "eslint-scope": {
1877 | "version": "5.1.1",
1878 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
1879 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
1880 | "dev": true,
1881 | "requires": {
1882 | "esrecurse": "^4.3.0",
1883 | "estraverse": "^4.1.1"
1884 | }
1885 | },
1886 | "eslint-utils": {
1887 | "version": "3.0.0",
1888 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
1889 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
1890 | "dev": true,
1891 | "requires": {
1892 | "eslint-visitor-keys": "^2.0.0"
1893 | },
1894 | "dependencies": {
1895 | "eslint-visitor-keys": {
1896 | "version": "2.1.0",
1897 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
1898 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
1899 | "dev": true
1900 | }
1901 | }
1902 | },
1903 | "eslint-visitor-keys": {
1904 | "version": "3.3.0",
1905 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
1906 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
1907 | "dev": true
1908 | },
1909 | "espree": {
1910 | "version": "9.3.1",
1911 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
1912 | "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
1913 | "dev": true,
1914 | "requires": {
1915 | "acorn": "^8.7.0",
1916 | "acorn-jsx": "^5.3.1",
1917 | "eslint-visitor-keys": "^3.3.0"
1918 | }
1919 | },
1920 | "esquery": {
1921 | "version": "1.4.0",
1922 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
1923 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
1924 | "dev": true,
1925 | "requires": {
1926 | "estraverse": "^5.1.0"
1927 | },
1928 | "dependencies": {
1929 | "estraverse": {
1930 | "version": "5.3.0",
1931 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1932 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1933 | "dev": true
1934 | }
1935 | }
1936 | },
1937 | "esrecurse": {
1938 | "version": "4.3.0",
1939 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
1940 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
1941 | "dev": true,
1942 | "requires": {
1943 | "estraverse": "^5.2.0"
1944 | },
1945 | "dependencies": {
1946 | "estraverse": {
1947 | "version": "5.3.0",
1948 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1949 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1950 | "dev": true
1951 | }
1952 | }
1953 | },
1954 | "estraverse": {
1955 | "version": "4.3.0",
1956 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
1957 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
1958 | "dev": true
1959 | },
1960 | "esutils": {
1961 | "version": "2.0.3",
1962 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1963 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1964 | "dev": true
1965 | },
1966 | "fast-deep-equal": {
1967 | "version": "3.1.3",
1968 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1969 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
1970 | "dev": true
1971 | },
1972 | "fast-glob": {
1973 | "version": "3.2.11",
1974 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
1975 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
1976 | "dev": true,
1977 | "requires": {
1978 | "@nodelib/fs.stat": "^2.0.2",
1979 | "@nodelib/fs.walk": "^1.2.3",
1980 | "glob-parent": "^5.1.2",
1981 | "merge2": "^1.3.0",
1982 | "micromatch": "^4.0.4"
1983 | },
1984 | "dependencies": {
1985 | "glob-parent": {
1986 | "version": "5.1.2",
1987 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1988 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1989 | "dev": true,
1990 | "requires": {
1991 | "is-glob": "^4.0.1"
1992 | }
1993 | }
1994 | }
1995 | },
1996 | "fast-json-stable-stringify": {
1997 | "version": "2.1.0",
1998 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1999 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
2000 | "dev": true
2001 | },
2002 | "fast-levenshtein": {
2003 | "version": "2.0.6",
2004 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
2005 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
2006 | "dev": true
2007 | },
2008 | "fastq": {
2009 | "version": "1.13.0",
2010 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
2011 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
2012 | "dev": true,
2013 | "requires": {
2014 | "reusify": "^1.0.4"
2015 | }
2016 | },
2017 | "file-entry-cache": {
2018 | "version": "6.0.1",
2019 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
2020 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
2021 | "dev": true,
2022 | "requires": {
2023 | "flat-cache": "^3.0.4"
2024 | }
2025 | },
2026 | "fill-range": {
2027 | "version": "7.0.1",
2028 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
2029 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
2030 | "dev": true,
2031 | "requires": {
2032 | "to-regex-range": "^5.0.1"
2033 | }
2034 | },
2035 | "flat-cache": {
2036 | "version": "3.0.4",
2037 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
2038 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
2039 | "dev": true,
2040 | "requires": {
2041 | "flatted": "^3.1.0",
2042 | "rimraf": "^3.0.2"
2043 | }
2044 | },
2045 | "flatted": {
2046 | "version": "3.2.5",
2047 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
2048 | "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
2049 | "dev": true
2050 | },
2051 | "fs.realpath": {
2052 | "version": "1.0.0",
2053 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
2054 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
2055 | "dev": true
2056 | },
2057 | "functional-red-black-tree": {
2058 | "version": "1.0.1",
2059 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
2060 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
2061 | "dev": true
2062 | },
2063 | "glob": {
2064 | "version": "7.2.0",
2065 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
2066 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
2067 | "dev": true,
2068 | "requires": {
2069 | "fs.realpath": "^1.0.0",
2070 | "inflight": "^1.0.4",
2071 | "inherits": "2",
2072 | "minimatch": "^3.0.4",
2073 | "once": "^1.3.0",
2074 | "path-is-absolute": "^1.0.0"
2075 | }
2076 | },
2077 | "glob-parent": {
2078 | "version": "6.0.2",
2079 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
2080 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
2081 | "dev": true,
2082 | "requires": {
2083 | "is-glob": "^4.0.3"
2084 | }
2085 | },
2086 | "globals": {
2087 | "version": "13.12.1",
2088 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz",
2089 | "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==",
2090 | "dev": true,
2091 | "requires": {
2092 | "type-fest": "^0.20.2"
2093 | }
2094 | },
2095 | "globby": {
2096 | "version": "11.1.0",
2097 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
2098 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
2099 | "dev": true,
2100 | "requires": {
2101 | "array-union": "^2.1.0",
2102 | "dir-glob": "^3.0.1",
2103 | "fast-glob": "^3.2.9",
2104 | "ignore": "^5.2.0",
2105 | "merge2": "^1.4.1",
2106 | "slash": "^3.0.0"
2107 | }
2108 | },
2109 | "has-flag": {
2110 | "version": "4.0.0",
2111 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
2112 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
2113 | "dev": true
2114 | },
2115 | "ignore": {
2116 | "version": "5.2.0",
2117 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
2118 | "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
2119 | "dev": true
2120 | },
2121 | "import-fresh": {
2122 | "version": "3.3.0",
2123 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
2124 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
2125 | "dev": true,
2126 | "requires": {
2127 | "parent-module": "^1.0.0",
2128 | "resolve-from": "^4.0.0"
2129 | }
2130 | },
2131 | "imurmurhash": {
2132 | "version": "0.1.4",
2133 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
2134 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
2135 | "dev": true
2136 | },
2137 | "inflight": {
2138 | "version": "1.0.6",
2139 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
2140 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
2141 | "dev": true,
2142 | "requires": {
2143 | "once": "^1.3.0",
2144 | "wrappy": "1"
2145 | }
2146 | },
2147 | "inherits": {
2148 | "version": "2.0.4",
2149 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
2150 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
2151 | "dev": true
2152 | },
2153 | "is-extglob": {
2154 | "version": "2.1.1",
2155 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
2156 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
2157 | "dev": true
2158 | },
2159 | "is-glob": {
2160 | "version": "4.0.3",
2161 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
2162 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
2163 | "dev": true,
2164 | "requires": {
2165 | "is-extglob": "^2.1.1"
2166 | }
2167 | },
2168 | "is-number": {
2169 | "version": "7.0.0",
2170 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
2171 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
2172 | "dev": true
2173 | },
2174 | "isexe": {
2175 | "version": "2.0.0",
2176 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2177 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
2178 | "dev": true
2179 | },
2180 | "js-yaml": {
2181 | "version": "4.1.0",
2182 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
2183 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
2184 | "dev": true,
2185 | "requires": {
2186 | "argparse": "^2.0.1"
2187 | }
2188 | },
2189 | "json-schema-traverse": {
2190 | "version": "0.4.1",
2191 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
2192 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
2193 | "dev": true
2194 | },
2195 | "json-stable-stringify-without-jsonify": {
2196 | "version": "1.0.1",
2197 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
2198 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
2199 | "dev": true
2200 | },
2201 | "levn": {
2202 | "version": "0.4.1",
2203 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
2204 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
2205 | "dev": true,
2206 | "requires": {
2207 | "prelude-ls": "^1.2.1",
2208 | "type-check": "~0.4.0"
2209 | }
2210 | },
2211 | "lodash.merge": {
2212 | "version": "4.6.2",
2213 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
2214 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
2215 | "dev": true
2216 | },
2217 | "lru-cache": {
2218 | "version": "6.0.0",
2219 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
2220 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
2221 | "dev": true,
2222 | "requires": {
2223 | "yallist": "^4.0.0"
2224 | }
2225 | },
2226 | "merge2": {
2227 | "version": "1.4.1",
2228 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
2229 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
2230 | "dev": true
2231 | },
2232 | "micromatch": {
2233 | "version": "4.0.4",
2234 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
2235 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
2236 | "dev": true,
2237 | "requires": {
2238 | "braces": "^3.0.1",
2239 | "picomatch": "^2.2.3"
2240 | }
2241 | },
2242 | "minimatch": {
2243 | "version": "3.1.2",
2244 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2245 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2246 | "dev": true,
2247 | "requires": {
2248 | "brace-expansion": "^1.1.7"
2249 | }
2250 | },
2251 | "ms": {
2252 | "version": "2.1.2",
2253 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2254 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
2255 | "dev": true
2256 | },
2257 | "natural-compare": {
2258 | "version": "1.4.0",
2259 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
2260 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
2261 | "dev": true
2262 | },
2263 | "once": {
2264 | "version": "1.4.0",
2265 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2266 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
2267 | "dev": true,
2268 | "requires": {
2269 | "wrappy": "1"
2270 | }
2271 | },
2272 | "optionator": {
2273 | "version": "0.9.1",
2274 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
2275 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
2276 | "dev": true,
2277 | "requires": {
2278 | "deep-is": "^0.1.3",
2279 | "fast-levenshtein": "^2.0.6",
2280 | "levn": "^0.4.1",
2281 | "prelude-ls": "^1.2.1",
2282 | "type-check": "^0.4.0",
2283 | "word-wrap": "^1.2.3"
2284 | }
2285 | },
2286 | "parent-module": {
2287 | "version": "1.0.1",
2288 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
2289 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
2290 | "dev": true,
2291 | "requires": {
2292 | "callsites": "^3.0.0"
2293 | }
2294 | },
2295 | "path-is-absolute": {
2296 | "version": "1.0.1",
2297 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2298 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2299 | "dev": true
2300 | },
2301 | "path-key": {
2302 | "version": "3.1.1",
2303 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2304 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2305 | "dev": true
2306 | },
2307 | "path-type": {
2308 | "version": "4.0.0",
2309 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
2310 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
2311 | "dev": true
2312 | },
2313 | "picomatch": {
2314 | "version": "2.3.1",
2315 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
2316 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
2317 | "dev": true
2318 | },
2319 | "prelude-ls": {
2320 | "version": "1.2.1",
2321 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
2322 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
2323 | "dev": true
2324 | },
2325 | "punycode": {
2326 | "version": "2.1.1",
2327 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
2328 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
2329 | "dev": true
2330 | },
2331 | "queue-microtask": {
2332 | "version": "1.2.3",
2333 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
2334 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
2335 | "dev": true
2336 | },
2337 | "regexpp": {
2338 | "version": "3.2.0",
2339 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
2340 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
2341 | "dev": true
2342 | },
2343 | "resolve-from": {
2344 | "version": "4.0.0",
2345 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
2346 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2347 | "dev": true
2348 | },
2349 | "reusify": {
2350 | "version": "1.0.4",
2351 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
2352 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
2353 | "dev": true
2354 | },
2355 | "rimraf": {
2356 | "version": "3.0.2",
2357 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
2358 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
2359 | "dev": true,
2360 | "requires": {
2361 | "glob": "^7.1.3"
2362 | }
2363 | },
2364 | "run-parallel": {
2365 | "version": "1.2.0",
2366 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2367 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
2368 | "dev": true,
2369 | "requires": {
2370 | "queue-microtask": "^1.2.2"
2371 | }
2372 | },
2373 | "semver": {
2374 | "version": "7.3.5",
2375 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
2376 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
2377 | "dev": true,
2378 | "requires": {
2379 | "lru-cache": "^6.0.0"
2380 | }
2381 | },
2382 | "shebang-command": {
2383 | "version": "2.0.0",
2384 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2385 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2386 | "dev": true,
2387 | "requires": {
2388 | "shebang-regex": "^3.0.0"
2389 | }
2390 | },
2391 | "shebang-regex": {
2392 | "version": "3.0.0",
2393 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2394 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2395 | "dev": true
2396 | },
2397 | "slash": {
2398 | "version": "3.0.0",
2399 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
2400 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
2401 | "dev": true
2402 | },
2403 | "strip-ansi": {
2404 | "version": "6.0.1",
2405 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2406 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2407 | "dev": true,
2408 | "requires": {
2409 | "ansi-regex": "^5.0.1"
2410 | }
2411 | },
2412 | "strip-json-comments": {
2413 | "version": "3.1.1",
2414 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
2415 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
2416 | "dev": true
2417 | },
2418 | "supports-color": {
2419 | "version": "7.2.0",
2420 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
2421 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2422 | "dev": true,
2423 | "requires": {
2424 | "has-flag": "^4.0.0"
2425 | }
2426 | },
2427 | "text-table": {
2428 | "version": "0.2.0",
2429 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
2430 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
2431 | "dev": true
2432 | },
2433 | "to-regex-range": {
2434 | "version": "5.0.1",
2435 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2436 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2437 | "dev": true,
2438 | "requires": {
2439 | "is-number": "^7.0.0"
2440 | }
2441 | },
2442 | "tslib": {
2443 | "version": "1.14.1",
2444 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
2445 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
2446 | "dev": true
2447 | },
2448 | "tsutils": {
2449 | "version": "3.21.0",
2450 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
2451 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
2452 | "dev": true,
2453 | "requires": {
2454 | "tslib": "^1.8.1"
2455 | }
2456 | },
2457 | "type-check": {
2458 | "version": "0.4.0",
2459 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
2460 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
2461 | "dev": true,
2462 | "requires": {
2463 | "prelude-ls": "^1.2.1"
2464 | }
2465 | },
2466 | "type-fest": {
2467 | "version": "0.20.2",
2468 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
2469 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
2470 | "dev": true
2471 | },
2472 | "typescript": {
2473 | "version": "4.5.5",
2474 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
2475 | "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
2476 | "dev": true
2477 | },
2478 | "uri-js": {
2479 | "version": "4.4.1",
2480 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
2481 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
2482 | "dev": true,
2483 | "requires": {
2484 | "punycode": "^2.1.0"
2485 | }
2486 | },
2487 | "v8-compile-cache": {
2488 | "version": "2.3.0",
2489 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
2490 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
2491 | "dev": true
2492 | },
2493 | "which": {
2494 | "version": "2.0.2",
2495 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2496 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2497 | "dev": true,
2498 | "requires": {
2499 | "isexe": "^2.0.0"
2500 | }
2501 | },
2502 | "word-wrap": {
2503 | "version": "1.2.3",
2504 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
2505 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
2506 | "dev": true
2507 | },
2508 | "wrappy": {
2509 | "version": "1.0.2",
2510 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2511 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2512 | "dev": true
2513 | },
2514 | "yallist": {
2515 | "version": "4.0.0",
2516 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
2517 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
2518 | "dev": true
2519 | }
2520 | }
2521 | }
2522 |
--------------------------------------------------------------------------------
/Unidad_01/Leccion_03_04_05/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "typescript-esencial",
3 | "version": "1.0.0",
4 | "description": "Este proyecto contiene los ejemplos de codigo del curso Typescript Esencial",
5 | "main": "dist/index.js",
6 | "scripts": {
7 | "build": "tsc",
8 | "test": "echo \"Error: no test specified\" && exit 1"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "git+https://github.com/nlunaty/TypeScript-esencial-3153633.git"
13 | },
14 | "author": "Natalia Corea",
15 | "license": "ISC",
16 | "bugs": {
17 | "url": "https://github.com/nlunaty/TypeScript-esencial-3153633/issues"
18 | },
19 | "homepage": "https://github.com/nlunaty/TypeScript-esencial-3153633#readme",
20 | "devDependencies": {
21 | "@typescript-eslint/eslint-plugin": "^5.12.0",
22 | "@typescript-eslint/parser": "^5.12.0",
23 | "eslint": "^8.9.0",
24 | "typescript": "^4.5.5"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Unidad_01/Leccion_03_04_05/src/index.ts:
--------------------------------------------------------------------------------
1 | const mensaje = "Hola TypeScript";
2 | console.log(mensaje);
3 |
4 | // Lista de opciones para configurar tsconfig.json
5 | // https://www.typescriptlang.org/tsconfig
6 |
7 | /*
8 |
9 | //noImplicitAny
10 | function parametroAny(parametro): void{
11 | console.log(`${parametro} tiene un tipo 'any' implícito!`)
12 | }
13 |
14 | //strictNullChecks
15 | interface MiInterface1{
16 | valor?: MiInterface2;
17 | }
18 |
19 | interface MiInterface2{
20 | bar: string;
21 | }
22 |
23 | const instanciaInt: MiInterface1 = {
24 | valor: {
25 | bar: 'prueba',
26 | }
27 | }
28 |
29 | instanciaInt.valor.bar;
30 |
31 | //strictFunctionTypes
32 |
33 | type TipoFuncion = {
34 | func(param: string): void;
35 | };
36 |
37 | function llamarCallback(callback: TipoFuncion): void{
38 | callback.func('hola mundo!');
39 | }
40 |
41 | function callbackBoolean(valor: boolean): void {
42 | console.log(valor);
43 | }
44 |
45 | llamarCallback({ func: callbackBoolean });
46 |
47 | //noUnusedLocals & noUnusedParameters
48 |
49 | function funcionNoUsada(param: string) {
50 | let noUnusedLocals;
51 | }
52 |
53 | //noImplicitReturns
54 | function pruebaSinRetorno(param: boolean): string {
55 | if (param) {
56 | return 'es true';
57 | }
58 | }
59 |
60 | //noFallthroughCasesInSwitch
61 | let num = 3;
62 |
63 | switch (num) {
64 | case 1:
65 | console.log(1);
66 | case 2:
67 | console.log(2);
68 | break;
69 | }
70 |
71 | */
--------------------------------------------------------------------------------
/Unidad_01/Leccion_03_04_05/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Opciones básicas */
4 | "target": "es5", /* Indica la versión de ECMAScript: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' o 'ESNEXT'. */
5 | "module": "commonjs", /* Indica el tipo de formato de módulos: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
6 | // "allowJs": true, /* Permite que archivos .js sean compilados. */
7 | // "checkJs": true, /* Reporta errores en archivos .js. */
8 | // "jsx": "preserve", /* Indica el formato de código JSX: 'preserve', 'react-native', or 'react'. */
9 | "sourceMap": true, /* Genera los archivos '.map' correspondientes. */
10 | "outDir": "./dist", /* Redirecciona los archivos de salida a la carpeta indicada. */
11 | "rootDir": "./src", /* Especifica la carpeta raíz de los archivos de entrada. Se utiliza para controlar la carpeta de los archivos de salida --outDir. */
12 | "removeComments": true, /* Comentarios no son incluidos en los archivos compilados. */
13 |
14 | /* Opciones de revisión estricta de tipos */
15 | "strict": true, /* Activa todas todas las revisiones de tipos estrictas. */
16 | "noImplicitAny": true, /* Muestra error en expresiones y declaraciones de tipo inferenciado 'any'. */
17 | "strictNullChecks": true, /* Activa la revisión estricta de valores nulos. */
18 | "strictFunctionTypes": true, /* Activa strict checking of function types. */
19 | // "strictBindCallApply": true, /* Activa el método estricto en los metodos 'bind', 'call', and 'apply' en funciones. */
20 | // "strictPropertyInitialization": true, /* Activa la revisión estricta de la inicialización de propiedades en clases. */
21 | "alwaysStrict": true, /* Emite "use strict" por cada archivo fuente. */
22 |
23 | /* Verificaciones adicionales */
24 | "noUnusedLocals": true, /* Reporta errores en variables no utilizadas. */
25 | "noUnusedParameters": true, /* Reporta errores en parámetros no utilizados. */
26 | "noImplicitReturns": true, /* Reporta erroes debido a alguna dirección del código que no devuelve un valor. */
27 | "noFallthroughCasesInSwitch": true, /* Reporta en controles switch cuando un case sin break genera erroes. */
28 | },
29 | "include": [
30 | "src/**/*"
31 | ]
32 | }
--------------------------------------------------------------------------------
/Unidad_02/Leccion_01/index.ts:
--------------------------------------------------------------------------------
1 | let mensaje:string;
2 | mensaje = 10;
3 |
4 | const prueba:number = 10;
5 |
--------------------------------------------------------------------------------
/Unidad_02/Leccion_02/index.ts:
--------------------------------------------------------------------------------
1 |
2 | let mesaje = "prueba";
3 | mensaje = 100;
4 |
5 | const prueba = 100;
6 |
7 | class Persona{};
8 |
9 | let persona = new Persona();
10 |
--------------------------------------------------------------------------------
/Unidad_02/Leccion_03/index.ts:
--------------------------------------------------------------------------------
1 |
2 |
3 | const arregloString1: string[] = ['a', 'b', 'c'];
4 |
5 | const arregloString2: Array = ['a', 'b', 'c'];
6 |
7 | interface Persona{
8 | nombre: string
9 | }
10 |
11 | const arregloPersonas: Array = [{nombre: 'Pablo'}, {nombre: 'Pedro'}];
12 |
--------------------------------------------------------------------------------
/Unidad_02/Leccion_04/index.ts:
--------------------------------------------------------------------------------
1 |
2 | function calculo(x: number, y: number): number{
3 | return x * y;
4 | }
5 |
6 | const filtro = (valor: string): boolean =>{
7 | return valor.length >= 5;
8 | }
9 |
10 | const animales: string[] = ['perro', 'gato', 'pez', 'ave', 'hamster', 'conejo'];
11 |
12 | const animalesFiltrados = animales.filter(filtro);
13 |
--------------------------------------------------------------------------------
/Unidad_02/Leccion_05/index.ts:
--------------------------------------------------------------------------------
1 |
2 | // Ejemplo del uso de any:
3 |
4 | let cualquierValor: any = 'un valor string';
5 |
6 | cualquierValor = 10;
7 |
8 | cualquierValor = true;
9 |
10 | cualquierValor = {};
11 |
12 | let variableString: string = cualquierValor;
13 |
14 |
15 | // Ejemplo del uso de unknown:
16 |
17 | let variableUnknown: unknown = 10;
18 |
19 | variableString = variableUnknown;
20 |
21 | let otraVariableUnknown: unknown = variableUnknown;
--------------------------------------------------------------------------------
/Unidad_02/Leccion_06/index.ts:
--------------------------------------------------------------------------------
1 |
2 |
3 | let unaVariable: undefined = undefined;
4 |
5 | let variableNula: null = null;
6 |
7 | interface Persona{
8 | nombre: string,
9 | apellido: undefined,
10 | }
11 |
12 | const eleanor: Persona = {nombre: 'Eleanor'};
13 |
14 | function decirNombre(persona: Persona): number{
15 | return persona.apellido.length;
16 | }
17 |
18 | decirNombre(eleanor);
19 |
--------------------------------------------------------------------------------
/Unidad_02/Leccion_07/index.ts:
--------------------------------------------------------------------------------
1 |
2 | function lanzarError(mensajeError: string): never {
3 | throw new Error(mensajeError);
4 | }
5 |
6 | function saludar(mensaje: string): void{
7 | console.log(mensaje);
8 | }
9 |
10 | let saludo = saludar("Hola!");
11 |
12 | let error = lanzarError("Un error sucedió");
--------------------------------------------------------------------------------
/Unidad_03/Leccion_01/index.ts:
--------------------------------------------------------------------------------
1 |
2 | let fechaNacimiento: string | Date;
3 |
4 | let pruebaTresTipos: string | number | boolean;
5 | pruebaTresTipos = 'Soy un string';
6 | pruebaTresTipos = 123;
7 | //Error de tipo:
8 | pruebaTresTipos = Array;
9 |
10 |
11 | // En parámetros de funciones:
12 |
13 | function calcularPromedio(valores: number | number[], total?: number): number | never {
14 |
15 | if(typeof valores === 'number' && total){
16 | return valores / total;
17 | }
18 |
19 | if(Array.isArray(valores) && valores.length > 0){
20 | return valores.reduce((acumulador, valorActual)=> acumulador + valorActual, 0) / valores.length;
21 | }
22 |
23 | throw Error('Paramétros no son válidos');
24 | }
25 |
26 | calcularPromedio([10,34,56,78]);
27 | calcularPromedio(156, 21);
28 | calcularPromedio(0, 3);
29 | calcularPromedio([]);
30 |
--------------------------------------------------------------------------------
/Unidad_03/Leccion_02/index.ts:
--------------------------------------------------------------------------------
1 |
2 | //Definición de tipos
3 |
4 | type Perro = 'perro';
5 | type Gato = 'gato';
6 | type PezBeta = 'pez beta';
7 | type Hamster = 'hamster';
8 |
9 | type Mascota = Perro | Gato | PezBeta | Hamster;
10 | let mascota: Mascota = 'perro';
11 | mascota = 'pájaro';
12 |
13 | type ListaNombreAnimales = Array;
14 | const nombres: ListaNombreAnimales = ['Laika', 'Smoky', 'Bobby', 'Beethoven', 'Lassie', 'Marley'];
15 |
16 | type UnionStringNumber = string | number;
17 | let valor: UnionStringNumber = 10;
18 |
--------------------------------------------------------------------------------
/Unidad_03/Leccion_03/index.ts:
--------------------------------------------------------------------------------
1 |
2 | interface Huesped {
3 | idHuesped: string,
4 | nombre: string,
5 | apellido: string,
6 | correo: string,
7 | direccion?: string,
8 | telefono?: string
9 | }
10 |
11 | type Piso = 'primer piso' | 'segundo piso';
12 |
13 | interface Cuarto {
14 | id: number,
15 | tipo: 'individual' | 'doble' | 'triple',
16 | piso: Piso,
17 | precioNoche: number
18 | }
19 |
20 | interface Reservacion {
21 | idReservacion: string,
22 | huesped: Huesped,
23 | fechaEntrada: Date,
24 | fechaSalida: Date,
25 | cuarto: Cuarto,
26 | nochesReservadas?: number
27 | }
28 |
29 | ////////
30 |
31 | const datosHuesped: Huesped = {
32 | idHuesped: '01',
33 | nombre: 'Dennis',
34 | apellido: 'Lizano',
35 | correo: 'dennis@c.com',
36 | direccion: 'calle 3, avenida 8',
37 | telefono: '8885698'
38 | }
39 |
40 | const reservacion: Reservacion = {
41 | idReservacion: 'r01',
42 | huesped: datosHuesped,
43 | fechaEntrada: new Date('2021/10/02'),
44 | fechaSalida: new Date('2021/10/05'),
45 | cuarto: {
46 | id: 10,
47 | tipo: 'individual',
48 | piso: 'primer piso',
49 | precioNoche: 80
50 | },
51 | nochesReservadas: 3
52 | }
53 |
--------------------------------------------------------------------------------
/Unidad_03/Leccion_04/index.ts:
--------------------------------------------------------------------------------
1 |
2 | interface AA {
3 | a: string,
4 | b: number,
5 | c: boolean
6 | }
7 |
8 | interface BB extends AA {
9 | d: Array
10 | }
11 |
12 | interface CC {
13 | x: string | number
14 | }
15 |
16 | interface DD extends AA, CC {
17 | y: number | undefined
18 | }
19 |
20 | const instanciaBB: BB = {
21 | a: 'a',
22 | b: 0,
23 | c: true,
24 | d: ['a', 'b']
25 | }
26 |
27 | const instanciaDD: DD = {
28 | a: 'a',
29 | b: 0,
30 | c: true,
31 | x: 20,
32 | y: undefined
33 | }
34 |
--------------------------------------------------------------------------------
/Unidad_03/Leccion_05/index.ts:
--------------------------------------------------------------------------------
1 |
2 | // Tipo numérico:
3 | enum Piso {
4 | Primero = 1,
5 | Segundo,
6 | Tercero,
7 | }
8 |
9 | // Tipo string:
10 | enum TipoCuarto {
11 | Individual = "individual",
12 | Doble = "doble",
13 | Triple = "triple"
14 | }
15 |
16 | let piso: Piso = Piso.Primero;
17 |
18 | interface Cuarto {
19 | id: number,
20 | tipo: TipoCuarto,
21 | piso: Piso,
22 | precioNoche: number
23 | }
24 |
25 | const cuarto: Cuarto = {
26 | id: 10,
27 | tipo: TipoCuarto.Individual,
28 | piso: Piso.Segundo,
29 | precioNoche: 80
30 | }
31 |
--------------------------------------------------------------------------------
/Unidad_03/Leccion_06/index.ts:
--------------------------------------------------------------------------------
1 |
2 |
3 | const arreglo: string[] = ['a', 'b', 'c'];
4 | const arregloTipoUnion: (string|number)[] = ['a', 1, 'b', 2];
5 |
6 | const tupla: [string, number, boolean, number] = ['a', 10, true, 20];
7 |
8 | // Ejemplo de uso:
9 |
10 | interface PruebaInterface {
11 | a: string,
12 | b: number,
13 | }
14 |
15 | const promesa1 = Promise.resolve(true);
16 | const promesa2 = Promise.resolve({a: 'valor de a', b: 20});
17 |
18 | Promise.all([promesa1, promesa2])
19 | .then(([valorRetornoPromesa1, valorRetornoPromesa2]: [boolean, PruebaInterface])=>{
20 | console.log(valorRetornoPromesa1, valorRetornoPromesa2);
21 | });
22 |
--------------------------------------------------------------------------------
/Unidad_03/Leccion_07/index.ts:
--------------------------------------------------------------------------------
1 |
2 | // Tipos literales:
3 |
4 | const saborHelado = 'vainilla';
5 |
6 | type SaborHelado = 'chocolate' | 'vainilla' | 'fresa';
7 |
8 | let sabores: SaborHelado = 'fresa';
9 |
10 | let siempreTrue: true = true;
11 |
12 | function crearHelado(sabor: SaborHelado | string): void {
13 | switch (sabor) {
14 | case 'chocolate':
15 | console.log('Haciendo helado de chocolate...');
16 | break;
17 | case 'vainilla':
18 | console.log('Haciendo helado de vainilla...');
19 | break;
20 | case 'fresa':
21 | console.log('Haciendo helado de fresa...');
22 | break;
23 | default:
24 | console.log('Este sabor no lo tenemos pero lo agregaremos a la lista');
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Unidad_03/Leccion_08/index.ts:
--------------------------------------------------------------------------------
1 |
2 | interface Huesped {
3 | idHuesped: string,
4 | nombre: string,
5 | apellido: string,
6 | correo: string,
7 | direccion?: string,
8 | telefono?: string
9 | }
10 |
11 | const huesped: Huesped = {
12 | idHuesped: '01',
13 | nombre: 'Karol',
14 | apellido: 'Salazar',
15 | correo: 'k@gmail.com',
16 | direccion: 'Calle 8, Avenida 10',
17 | telefono: '1234567'
18 | }
19 |
20 | const nombrePropiedad: keyof Huesped = 'nombre';
21 |
22 | function retornarValor(huesped: Huesped, key: keyof Huesped){
23 | return huesped[key];
24 | }
25 |
26 | retornarValor(huesped, 'correo');
27 |
--------------------------------------------------------------------------------
/Unidad_04/Leccion_01/index.ts:
--------------------------------------------------------------------------------
1 |
2 | // Clases en TypeScript.
3 |
4 | type Color = 'negro' | 'rojo' | 'azul' | 'amarillo';
5 |
6 | class Vehiculo {
7 |
8 | _marca: string;
9 | _color: Color;
10 |
11 | constructor(marca: string, color: Color) {
12 | this._marca = marca;
13 | this._color = color;
14 | }
15 |
16 | descripcionVehiculo(): string {
17 | return `El vehículo es de marca ${this._marca} y es de color ${this._color}`;
18 | }
19 |
20 | }
21 |
22 | const miVehiculo = new Vehiculo('Nissan', 'negro');
23 | miVehiculo.descripcionVehiculo();
24 |
--------------------------------------------------------------------------------
/Unidad_04/Leccion_02/index.ts:
--------------------------------------------------------------------------------
1 |
2 | // Propiedades públicas y privadas en clases.
3 |
4 | type Color = 'negro' | 'rojo' | 'azul' | 'amarillo';
5 |
6 | class Vehiculo {
7 |
8 | _marca: string;
9 | _color: Color;
10 | _numeroRuedas: number;
11 |
12 | constructor(marca: string, color: Color, numeroRuedas: number) {
13 | this._marca = marca;
14 | this._color = color;
15 | this._numeroRuedas = numeroRuedas;
16 | }
17 |
18 | descripcionVehiculo(): string {
19 | return `El vehículo es de marca ${this._marca} y es de color ${this._color}`;
20 | }
21 |
22 | moverse(): string {
23 | return `El vehículo se mueve a una velocidad de ${this.obtenerVelocidad()}`;
24 | }
25 |
26 | private obtenerVelocidad(): string {
27 | return '100 km/h';
28 | }
29 |
30 | }
31 |
32 | const miVehiculo = new Vehiculo('Nissan', 'negro', 4);
33 |
--------------------------------------------------------------------------------
/Unidad_04/Leccion_03/index.ts:
--------------------------------------------------------------------------------
1 |
2 | type Color = 'negro' | 'rojo' | 'azul' | 'amarillo';
3 |
4 | class Vehiculo {
5 |
6 | private _marca: string | undefined;
7 | private _color: Color | undefined;
8 | private _numeroRuedas: number | undefined;
9 |
10 | //Modificadores de marca
11 | get marca(): string | undefined {
12 | return this._marca;
13 | }
14 | set marca(valor: string | undefined) {
15 | this._marca = valor;
16 | }
17 |
18 | //Modificadores de color
19 | get color(): Color | undefined {
20 | return this._color;
21 | }
22 | set color(valor: Color | undefined) {
23 | this._color = valor;
24 | }
25 |
26 | //Modificadores de numeroRuedas
27 | get numeroRuedas(): number | undefined {
28 | return this._numeroRuedas;
29 | }
30 | set numeroRuedas(valor: number | undefined) {
31 | this._numeroRuedas = valor;
32 | }
33 |
34 | descripcionVehiculo(): string {
35 | return `El vehículo es de marca ${this._marca} y es de color ${this._color}`;
36 | }
37 |
38 | moverse(): string {
39 | return `El vehículo se mueve a una velocidad de ${this.obtenerVelocidad()}`;
40 | }
41 |
42 | private obtenerVelocidad(): string {
43 | return '100 km/h';
44 | }
45 |
46 | }
47 |
48 | const miVehiculo = new Vehiculo();
49 | miVehiculo.marca = 'Nissan';
50 | miVehiculo.color = 'negro';
51 | miVehiculo.numeroRuedas = 4;
52 |
53 | miVehiculo.marca = 'Toyota';
54 |
--------------------------------------------------------------------------------
/Unidad_04/Leccion_04/index.ts:
--------------------------------------------------------------------------------
1 |
2 | type Color = 'negro' | 'rojo' | 'azul' | 'amarillo' | 'blanco';
3 |
4 | class Vehiculo {
5 |
6 | _marca: string;
7 | _color: Color;
8 | _numeroRuedas: number;
9 |
10 | constructor(marca: string, color: Color, numeroRuedas: number = 0) {
11 | this._marca = marca;
12 | this._color = color;
13 | this._numeroRuedas = numeroRuedas;
14 | }
15 |
16 | descripcionVehiculo(): string {
17 | return `El vehículo es de marca ${this._marca} y es de color ${this._color}`;
18 | }
19 |
20 | moverse(): string {
21 | return `El vehículo se mueve a una velocidad de ${this.obtenerVelocidad()}`;
22 | }
23 |
24 | private obtenerVelocidad(): string {
25 | return '100 km/h';
26 | }
27 |
28 | }
29 |
30 | class Avion extends Vehiculo {
31 |
32 | _largoAlas: number;
33 |
34 | constructor(marca: string, color: Color, largoAlas: number) {
35 | super(marca, color);
36 | this._largoAlas = largoAlas;
37 | }
38 |
39 | descripcionVehiculo(): string {
40 | return `El avión es de marca ${this._marca} y es de color ${this._color}`;
41 | }
42 | }
43 |
44 | const avion = new Avion('Boeing', 'blanco', 15);
45 | console.log(avion.descripcionVehiculo());
46 |
--------------------------------------------------------------------------------
/Unidad_04/Leccion_05/index.ts:
--------------------------------------------------------------------------------
1 |
2 | type Color = 'negro' | 'rojo' | 'azul' | 'amarillo' | 'blanco';
3 |
4 | class Vehiculo {
5 |
6 | _marca: string;
7 | _color: Color;
8 | _numeroRuedas: number;
9 |
10 | constructor(marca: string, color: Color, numeroRuedas: number = 0) {
11 | this._marca = marca;
12 | this._color = color;
13 | this._numeroRuedas = numeroRuedas;
14 | }
15 |
16 | descripcionVehiculo(): string {
17 | return `El vehículo es de marca ${this._marca} y es de color ${this._color}`;
18 | }
19 |
20 | moverse(): string {
21 | return `El vehículo se mueve a una velocidad de ${this.obtenerVelocidad()}`;
22 | }
23 |
24 | protected obtenerVelocidad(): string {
25 | return '100 km/h';
26 | }
27 |
28 | }
29 |
30 | class Avion extends Vehiculo {
31 |
32 | _largoAlas: number;
33 |
34 | constructor(marca: string, color: Color, largoAlas: number) {
35 | super(marca, color);
36 | this._largoAlas = largoAlas;
37 | }
38 |
39 | descripcionVehiculo(): string {
40 | return `El avión es de marca ${this._marca} y es de color ${this._color}`;
41 | }
42 |
43 | moverse(): string {
44 | return `El avión se mueve a una velocidad de ${this.obtenerVelocidad()}`;
45 | }
46 | }
47 |
48 | const avion = new Avion('Boeing', 'blanco', 15);
49 | console.log(avion.descripcionVehiculo());
50 |
--------------------------------------------------------------------------------
/Unidad_04/Leccion_06/index.ts:
--------------------------------------------------------------------------------
1 |
2 | type Color = 'negro' | 'rojo' | 'azul' | 'amarillo' | 'blanco';
3 |
4 | abstract class Transporte {
5 |
6 | _marca: string;
7 | _color: Color;
8 |
9 | constructor(marca: string, color: Color) {
10 | this._marca = marca;
11 | this._color = color;
12 | }
13 |
14 | descripcionVehiculo(): string {
15 | return `El vehículo es de marca ${this._marca} y es de color ${this._color}`;
16 | }
17 |
18 | moverse(): string {
19 | return `El vehículo se mueve a una velocidad de ${this.obtenerVelocidad()}`;
20 | }
21 |
22 | protected obtenerVelocidad(): string {
23 | return '100 km/h';
24 | }
25 | }
26 |
27 | class Vehiculo extends Transporte {
28 |
29 | _numeroRuedas: number;
30 |
31 | constructor(marca: string, color: Color, numeroRuedas: number) {
32 | super(marca, color);
33 | this._numeroRuedas = numeroRuedas;
34 | }
35 |
36 | }
37 |
38 | class Avion extends Transporte {
39 |
40 | _largoAlas: number;
41 |
42 | constructor(marca: string, color: Color, largoAlas: number) {
43 | super(marca, color);
44 | this._largoAlas = largoAlas;
45 | }
46 |
47 | descripcionVehiculo(): string {
48 | return `El avión es de marca ${this._marca} y es de color ${this._color}`;
49 | }
50 |
51 | moverse(): string {
52 | return `El avión se mueve a una velocidad de ${this.obtenerVelocidad()}`;
53 | }
54 | }
55 |
56 | const vehiculo = new Vehiculo('Nissan', 'azul', 4);
57 | const avion = new Avion('Boeing', 'blanco', 15);
58 |
59 | function moverlosTodos(transportes: Array): void {
60 | for (const transporte of transportes) {
61 | console.log(transporte.moverse());
62 | }
63 | }
64 |
65 | moverlosTodos([vehiculo, avion]);
66 |
--------------------------------------------------------------------------------
/Unidad_04/Leccion_07/index.ts:
--------------------------------------------------------------------------------
1 |
2 | type Color = 'negro' | 'rojo' | 'azul' | 'amarillo' | 'blanco';
3 |
4 | interface AlgoQueSeMueve {
5 | nombre: string | undefined,
6 | moverse: () => string
7 | }
8 |
9 | class Animal implements AlgoQueSeMueve {
10 |
11 | nombre: string | undefined;
12 |
13 | moverse(): string {
14 | return 'El animal camina';
15 | }
16 | }
17 |
18 | abstract class Transporte implements AlgoQueSeMueve {
19 |
20 | // Definida por 'AlgoQueSeMueve'
21 | nombre: string | undefined;
22 |
23 | _marca: string;
24 | _color: Color;
25 | _numeroMotor = Transporte.generarIdentificador();
26 |
27 | constructor(marca: string, color: Color) {
28 | this._marca = marca;
29 | this._color = color;
30 | }
31 |
32 | descripcionVehiculo(): string {
33 | return `El vehículo es de marca ${this._marca} y es de color ${this._color}`;
34 | }
35 |
36 | moverse(): string {
37 | return `El vehículo se mueve a una velocidad de ${this.obtenerVelocidad()}`;
38 | }
39 |
40 | protected obtenerVelocidad(): string {
41 | return '100 km/h';
42 | }
43 |
44 | static generarIdentificador(): string {
45 | return Math.random().toString(36).slice(2);
46 | }
47 | }
48 |
49 | class Vehiculo extends Transporte {
50 |
51 | _numeroRuedas: number;
52 |
53 | constructor(marca: string, color: Color, numeroRuedas: number) {
54 | super(marca, color);
55 | this._numeroRuedas = numeroRuedas;
56 | }
57 |
58 | }
59 |
60 | const vehiculo = new Vehiculo('Nissan', 'azul', 4);
61 | const perro = new Animal();
62 |
63 | function moverlosTodos(elementos: Array): void {
64 | for (const el of elementos) {
65 | console.log(el.moverse());
66 | }
67 | }
68 |
69 | moverlosTodos([vehiculo, perro]);
70 |
--------------------------------------------------------------------------------
/Unidad_04/Leccion_08/index.ts:
--------------------------------------------------------------------------------
1 |
2 | type Color = 'negro' | 'rojo' | 'azul' | 'amarillo' | 'blanco';
3 |
4 | abstract class Transporte {
5 |
6 | _marca: string;
7 | _color: Color;
8 | _numeroMotor = Transporte.generarIdentificador();
9 |
10 | constructor(marca: string, color: Color) {
11 | this._marca = marca;
12 | this._color = color;
13 | }
14 |
15 | descripcionVehiculo(): string {
16 | return `El vehículo es de marca ${this._marca} y es de color ${this._color}`;
17 | }
18 |
19 | moverse(): string {
20 | return `El vehículo se mueve a una velocidad de ${this.obtenerVelocidad()}`;
21 | }
22 |
23 | protected obtenerVelocidad(): string {
24 | return '100 km/h';
25 | }
26 |
27 | static generarIdentificador(): string {
28 | return Math.random().toString(36).slice(2);
29 | }
30 | }
31 |
32 | class Vehiculo extends Transporte {
33 |
34 | _numeroRuedas: number;
35 |
36 | constructor(marca: string, color: Color, numeroRuedas: number) {
37 | super(marca, color);
38 | this._numeroRuedas = numeroRuedas;
39 | }
40 |
41 | }
42 |
43 | interface Piloto {
44 | id: string,
45 | nombre: string;
46 | }
47 |
48 | class Avion extends Transporte {
49 |
50 | _largoAlas: number;
51 | _piloto: Piloto | undefined;
52 |
53 | constructor(marca: string, color: Color, largoAlas: number) {
54 | super(marca, color);
55 | this._largoAlas = largoAlas;
56 | }
57 |
58 | descripcionVehiculo(): string {
59 | return `El avión es de marca ${this._marca} y es de color ${this._color}`;
60 | }
61 |
62 | moverse(): string {
63 | return `El avión se mueve a una velocidad de ${this.obtenerVelocidad()}`;
64 | }
65 |
66 | agregarPiloto(nombre: string): void {
67 | this._piloto = {
68 | id: Avion.generarIdentificador(),
69 | nombre
70 | }
71 | }
72 | }
73 |
74 | const vehiculo = new Vehiculo('Nissan', 'azul', 4);
75 | const avion = new Avion('Boeing', 'blanco', 15);
76 |
77 | function moverlosTodos(transportes: Array): void {
78 | for (const transporte of transportes) {
79 | console.log(transporte.moverse());
80 | }
81 | }
82 |
83 | moverlosTodos([vehiculo, avion]);
84 |
--------------------------------------------------------------------------------
/Unidad_04/Leccion_09/index.ts:
--------------------------------------------------------------------------------
1 | type Color = 'negro' | 'rojo' | 'azul' | 'amarillo' | 'blanco';
2 |
3 | enum LiquidoVehiculo {
4 | Agua,
5 | Aceite,
6 | LiquidoFrenos
7 | }
8 |
9 | enum PiezasExterna {
10 | Llantas = 5,
11 | Pintura
12 | }
13 |
14 | class Vehiculo {
15 | _numeroRuedas: number;
16 | _marca: string;
17 | _color: Color;
18 |
19 | constructor(marca: string, color: Color, numeroRuedas: number) {
20 | this._marca = marca;
21 | this._color = color;
22 | this._numeroRuedas = numeroRuedas;
23 | }
24 |
25 | hacerMantenimiento(elemento: LiquidoVehiculo): void;
26 | hacerMantenimiento(elementoExterno: PiezasExterna): void;
27 | hacerMantenimiento(elemento: LiquidoVehiculo | PiezasExterna): void {
28 | if (elemento in LiquidoVehiculo) {
29 | console.log('Cambiando líquido del vehiculo...');
30 | } else {
31 | console.log('Cambiando una pieza del vehiculo');
32 | }
33 | }
34 | }
35 |
36 | const vehiculo = new Vehiculo('Nissan', 'azul', 4);
37 | vehiculo.hacerMantenimiento(PiezasExterna.Llantas);
38 | vehiculo.hacerMantenimiento(LiquidoVehiculo.Aceite);
39 |
--------------------------------------------------------------------------------
/Unidad_05/Leccion_01/index.ts:
--------------------------------------------------------------------------------
1 |
2 | const arreglo = new Array();
3 | arreglo.push('hola!');
4 |
5 | function mostrarEnConsolaString(mensaje: string): string {
6 | console.log('%c' + mensaje, 'background: #222; color: #bada55');
7 | return mensaje;
8 | }
9 |
10 | mostrarEnConsolaString('Hola TypeScript!');
11 |
12 | ////// Con Genéricos:
13 |
14 | function mostrarEnConsolaGenerico(valor: T): T {
15 | console.log('%c' + valor, 'background: #222; color: #bada55');
16 | return valor;
17 | }
18 |
19 | const valorDevueltoArray = mostrarEnConsolaGenerico(['a', 'b', 'c']);
20 |
21 | const valorDevueltoNumero = mostrarEnConsolaGenerico(10);
22 |
23 | const valorDevueltoBoolean = mostrarEnConsolaGenerico(true);
24 |
25 | mostrarEnConsolaGenerico<'blanco'>('blanco');
26 |
27 |
--------------------------------------------------------------------------------
/Unidad_05/Leccion_02/index.ts:
--------------------------------------------------------------------------------
1 |
2 | function modificarArregloAlMismoTipo(valores: T[], fnc: (valor: T) => T): T[] {
3 | const newArreglo = new Array();
4 | for (const valor of valores) {
5 | newArreglo.push(fnc(valor));
6 | }
7 | return newArreglo;
8 | }
9 |
10 | const arregloNumeros = modificarArregloAlMismoTipo([1, 2, 3, 4, 5], valor => valor * 3);
11 |
12 | const arregloString = modificarArregloAlMismoTipo(['a', 'b', 'c', 'd'], valor => valor + valor);
13 |
14 | //const arregloString2 = modificarArregloAlMismoTipo(['a', 'b', 'c', 'd'], (valor) => valor.length);
15 |
16 | function modificarArregloTipoDistinto(valores: T[], fnc: (valor: T) => R): R[] {
17 | const newArreglo = new Array();
18 | for (const valor of valores) {
19 | newArreglo.push(fnc(valor));
20 | }
21 | return newArreglo;
22 | }
23 |
24 | const arregloANumero = modificarArregloTipoDistinto(['a', 'b', 'c', 'd'], valor => valor.length);
25 |
--------------------------------------------------------------------------------
/Unidad_05/Leccion_03/index.ts:
--------------------------------------------------------------------------------
1 |
2 | //Describe las propiedades de un objeto:
3 |
4 | interface IConGenerico {
5 | id: T;
6 | valor: R;
7 | }
8 |
9 | const primerValor: IConGenerico = { id: 10, valor: true };
10 |
11 | // Describe el tipo de un índice:
12 |
13 | interface ITipoIndex {
14 | [id: string]: T;
15 | }
16 |
17 | const segundoValor: ITipoIndex = {
18 | 'a': 10,
19 | 'b': 20,
20 | 'c': 30
21 | };
22 |
--------------------------------------------------------------------------------
/Unidad_05/Leccion_04/index.ts:
--------------------------------------------------------------------------------
1 |
2 | //Genéricos en clases:
3 |
4 | type Fruta = 'fresa' | 'mango' | 'banano' | 'piña';
5 |
6 | class Frutero{
7 |
8 | private listaFrutas: T[] = [];
9 |
10 | agregarFruta(fruta: T): void {
11 | this.listaFrutas.push(fruta);
12 | }
13 |
14 | tomarFruta(index: number): T {
15 | return this.listaFrutas[index];
16 | }
17 | }
18 |
19 | const frutero = new Frutero();
20 |
21 | frutero.agregarFruta('fresa');
22 | frutero.agregarFruta('piña');
23 |
--------------------------------------------------------------------------------
/Unidad_05/Leccion_05/index.ts:
--------------------------------------------------------------------------------
1 |
2 | //Definición de clase e interface genérica:
3 |
4 | interface IProcesado {
5 | elemento: C,
6 | procesar: () => D
7 | }
8 |
9 | interface IProcesador {
10 | elementos: Array>,
11 | agregar: (elemento: IProcesado) => void,
12 | remover: (index: number) => IProcesado,
13 | procesar: (index: number) => B
14 | }
15 |
16 | abstract class Procesador implements IProcesador{
17 |
18 | elementos: IProcesado[] = [];
19 |
20 | agregar(elemento: IProcesado): void {
21 | this.elementos.push(elemento);
22 | }
23 |
24 | remover(index: number): IProcesado {
25 | return this.elementos[index];
26 | }
27 |
28 | procesar(index: number): R {
29 | return this.elementos[index].procesar();
30 | }
31 | }
32 |
33 | // Definición de clase e interface con tipos fijos:
34 |
35 | // Primer tipo con tipos:
36 |
37 | type Fruta = 'fresa' | 'mango' | 'banano' | 'piña' | 'sandía' | 'kiwi';
38 | type Batido = 'batido-fresa' | 'batido-mango' | 'batido-banano' | 'batido-piña' | 'batido-sandía' | 'batido-kiwi';
39 |
40 | class PuestoBatidos extends Procesador{ }
41 |
42 | const puestoBatidos = new PuestoBatidos();
43 | puestoBatidos.agregar({
44 | elemento: 'fresa',
45 | procesar: () => 'batido-fresa'
46 | });
47 |
48 | // Segundo ejemplo con una interfaz como tipo fijo:
49 |
50 | interface Perro {
51 | nombre: string,
52 | raza: string
53 | }
54 |
55 | class PeluqueriaPerros extends Procesador{ }
56 |
57 | const bolaDeNieve = {
58 | nombre: 'Bola de Nieve',
59 | raza: 'Poodle'
60 | }
61 |
62 | const peluqueriaPerros = new PeluqueriaPerros();
63 | peluqueriaPerros.agregar({
64 | elemento: bolaDeNieve,
65 | procesar: () => bolaDeNieve
66 | });
67 |
--------------------------------------------------------------------------------
/Unidad_05/Leccion_06/index.ts:
--------------------------------------------------------------------------------
1 |
2 | type Fruta = 'fresa' | 'mango' | 'banano' | 'piña' | 'sandía' | 'kiwi';
3 |
4 | interface IFruta {
5 | tipo: Fruta,
6 | picar: () => Fruta
7 | }
8 |
9 | // Con extend se indica que F debe ser un derivado del tipo IFruta
10 | function picarFrutas(frutas: F[]): void {
11 | for (const fruta of frutas) {
12 | fruta.picar();
13 | }
14 | }
15 |
16 | class Fresa implements IFruta {
17 | tipo: Fruta = 'fresa';
18 |
19 | picar() {
20 | return this.tipo;
21 | }
22 | }
23 |
24 | class Mango implements IFruta {
25 | tipo: Fruta = 'mango';
26 |
27 | picar() {
28 | return this.tipo;
29 | }
30 | }
31 |
32 | class prueba{}
33 | const p = new prueba();
34 |
35 | let fresa = new Fresa();
36 | let mango = new Mango();
37 |
38 | picarFrutas([fresa, mango]);
39 |
40 | //////////////////////////////////////////////////////////////////
41 |
42 | // Con keyof se indica que K debe el nombre de una propiedad de IFruta
43 | function obtenerPropiedadFruta(nombrePropiedad: K, fruta: IFruta): Fruta | (() => Fruta) {
44 | return fruta[nombrePropiedad];
45 | }
46 |
47 | const tipo = obtenerPropiedadFruta('tipo', fresa);
48 |
--------------------------------------------------------------------------------
/Unidad_06/Leccion_01/index.ts:
--------------------------------------------------------------------------------
1 | interface DD {
2 | d: string
3 | }
4 |
5 | interface BB {
6 | c?: DD
7 | }
8 |
9 | interface AA {
10 | a: string;
11 | b?: BB;
12 | }
13 |
14 | const prueba: AA = {
15 | a: 'prueba'
16 | }
17 |
18 | //Encadenamiento opcional:
19 | // Operador '?' retornará undefined si una propiedad opcional no está definida
20 | function existeD(valor: AA): boolean {
21 | return valor.b?.c?.d ? true : false;
22 | }
23 |
24 | // Aserciones no-null: Se activa si la opción strictNullChecks esta activa en el compilador
25 | // El operador ! asegura al compilador que las propiedades opcionales existen
26 | // Es un poco riesgoso usar este operador ya que las propiedades pueden no estar definidas en el objeto
27 | function largoD(valor: AA): number {
28 | return valor.b!.c!.d.length;
29 | }
30 |
31 | // Para evitar usar ! o ? se puede validar la existencia de los objetos opcionales al inicio de la función
32 | function largoDAsertado(valor: AA): number | null {
33 | if (valor.b && valor.b.c) {
34 | return valor.b.c.d.length;
35 | }
36 | return null;
37 | }
38 |
--------------------------------------------------------------------------------
/Unidad_06/Leccion_02/index.ts:
--------------------------------------------------------------------------------
1 |
2 |
3 | function calcularCostoReservacion(costoNoche: number, totalNoches: number, formato: boolean): number | string {
4 | const costo = costoNoche * totalNoches;
5 | return formato ? `${costo}` : costo;
6 | }
7 |
8 | //Aserción usando keyword 'as'
9 | const costo = calcularCostoReservacion(90, 5, true) as number;
10 |
11 |
12 | interface Pedido {
13 | id: number;
14 | cliente: string;
15 | productos: string[];
16 | fechaEntrega: Date;
17 | }
18 |
19 | interface PedidoSupermercado extends Pedido {
20 | supermercado: string;
21 | }
22 |
23 | const pedidoSupermercado: PedidoSupermercado = {
24 | id: 1,
25 | cliente: 'Paula',
26 | productos: ['tomates', 'pan'],
27 | fechaEntrega: new Date('2021-10-05'),
28 | supermercado: 'Tesco'
29 | }
30 |
31 | const pedido = pedidoSupermercado as Pedido;
32 | function procesarPedido(pedido: Pedido){}
33 | procesarPedido(pedido);
34 |
--------------------------------------------------------------------------------
/Unidad_06/Leccion_03/index.ts:
--------------------------------------------------------------------------------
1 |
2 | interface BB {
3 | c?: number
4 | }
5 |
6 | interface AA {
7 | a: string;
8 | b?: BB;
9 | }
10 |
11 | const objeto: AA = {
12 | a: 'prueba'
13 | }
14 |
15 |
16 | function assert(condicion: unknown, mensaje: string): asserts condicion {
17 | if (!condicion) throw new Error(mensaje);
18 | }
19 |
20 | assert(objeto.b, 'B no existe');
21 | const c = objeto.b.c;
22 |
23 | function assertString(condicion: unknown, mensaje: string): asserts condicion{
24 | if(typeof condicion !== 'string') throw new Error(mensaje);
25 | }
26 |
27 | assertString(objeto.a, 'A no es string');
28 |
--------------------------------------------------------------------------------
/Unidad_06/Leccion_04/index.ts:
--------------------------------------------------------------------------------
1 |
2 | //////////// Guardia typeof:
3 |
4 | function calcularDiasDiferencia(fechaEntrada: Date | string, fechaSalida: Date | string): number {
5 |
6 | //conversión de fechas en caso que sean strings:
7 | const fechaInicio = typeof fechaEntrada === 'string' ? new Date(fechaEntrada) : fechaEntrada;
8 | const fechaFin = typeof fechaSalida === 'string' ? new Date(fechaSalida) : fechaSalida;
9 |
10 | const diferenciaTiempo = fechaFin.getTime() - fechaInicio.getTime();
11 |
12 | return diferenciaTiempo / (1000 * 3600 * 24);
13 | }
14 |
15 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////
16 |
17 | interface ProductoFresco {
18 | fechaExpiracion: Date;
19 | }
20 |
21 | class Fruta implements ProductoFresco {
22 |
23 | private _tipoFruta: string;
24 | private _fechaExpiracion: Date;
25 |
26 | get tipoFruta(): string {
27 | return this._tipoFruta;
28 | }
29 |
30 | get fechaExpiracion(): Date {
31 | return this._fechaExpiracion;
32 | }
33 |
34 | constructor(fechaExpiracion: Date, tipoFruta: string) {
35 | this._fechaExpiracion = fechaExpiracion;
36 | this._tipoFruta = tipoFruta;
37 | }
38 | }
39 |
40 | class Embutido implements ProductoFresco {
41 |
42 | private _marca: string;
43 | private _fechaExpiracion: Date;
44 |
45 | get marca(): string {
46 | return this._marca;
47 | }
48 |
49 | get fechaExpiracion(): Date {
50 | return this._fechaExpiracion;
51 | }
52 |
53 | constructor(fechaExpiracion: Date, marca: string) {
54 | this._fechaExpiracion = fechaExpiracion;
55 | this._marca = marca;
56 | }
57 | }
58 |
59 | const mango = new Fruta(new Date('2021-02-10'), 'mango');
60 | const jamon = new Embutido(new Date('2021-02-10'), 'Salazar');
61 |
62 | // Guardas personalizadas: arg is Tipo:
63 | function esFruta(producto: any): producto is Fruta {
64 | return producto instanceof Fruta;
65 | }
66 |
67 | function agregarCarrito(productosFrescos: ProductoFresco[]): void {
68 |
69 | const embutidos = new Array();
70 | const frutas = new Array();
71 |
72 | for (let i = 0; i < productosFrescos.length; i++) {
73 |
74 | // Guardia instanceof:
75 | if (productosFrescos[i] instanceof Embutido) {
76 | embutidos.push(productosFrescos[i] as Embutido);
77 | }
78 |
79 | // Guardia personalizadas: arg is Tipo:
80 | if (esFruta(productosFrescos[i])) {
81 | frutas.push(productosFrescos[i] as Fruta);
82 | }
83 | }
84 | }
85 |
86 | agregarCarrito([mango, jamon]);
87 |
88 | function imprimirMarca(productosFrescos: ProductoFresco[]): void {
89 | for (let i = 0; i < productosFrescos.length; i++) {
90 |
91 | //Guardia in:
92 | if ('marca' in productosFrescos[i]) {
93 | console.log(`Producto marca ${(productosFrescos[i] as Embutido).marca}`);
94 | }
95 | }
96 | }
97 |
98 | imprimirMarca([mango, jamon]);
99 |
--------------------------------------------------------------------------------
/Unidad_06/Leccion_05/index.ts:
--------------------------------------------------------------------------------
1 |
2 | interface Computadora {
3 | id: string;
4 | fabricante: string;
5 | modelo: string,
6 | procesador: string;
7 | memoriaRamGb: number;
8 | discoDuroGb: number;
9 | touchBar?: boolean;
10 | }
11 |
12 | // Partial:
13 | function generarComputadora(computadora: Partial): Computadora {
14 | return {
15 | id: '01',
16 | fabricante: 'Apple',
17 | modelo: 'MacBook Pro 13',
18 | procesador: 'Apple M1 chip',
19 | memoriaRamGb: 8,
20 | discoDuroGb: 256,
21 | ...computadora
22 | };
23 | }
24 |
25 | const nuevaComputadora = generarComputadora({
26 | discoDuroGb: 512,
27 | memoriaRamGb: 16
28 | });
29 |
30 | // Required:
31 |
32 | const conTouchBar: Required = generarComputadora({
33 | touchBar: true
34 | });
35 |
36 |
37 | const conTouchBarBien: Required = {
38 | ...generarComputadora({}),
39 | touchBar: true
40 | };
41 |
--------------------------------------------------------------------------------
/Unidad_06/Leccion_06/index.ts:
--------------------------------------------------------------------------------
1 |
2 | interface Computadora {
3 | id: string;
4 | fabricante: string;
5 | modelo: string,
6 | procesador: string;
7 | memoriaRamGb: number;
8 | discoDuroGb: number;
9 | touchBar?: boolean;
10 | }
11 |
12 | // Readonly:
13 |
14 | const computadora: Readonly = {
15 | id: '01',
16 | fabricante: 'Apple',
17 | modelo: 'MacBook Pro 13',
18 | procesador: 'Apple M1 chip',
19 | memoriaRamGb: 8,
20 | discoDuroGb: 256
21 | };
22 |
23 | computadora.id = '02';
24 |
--------------------------------------------------------------------------------
/Unidad_06/Leccion_07/index.ts:
--------------------------------------------------------------------------------
1 |
2 | interface Computadora {
3 | id: string;
4 | fabricante: string;
5 | modelo: string,
6 | procesador: string;
7 | memoriaRamGb: number;
8 | discoDuroGb: number;
9 | touchBar?: boolean;
10 | }
11 |
12 | // Pick:
13 | type SubComputadora = Pick
14 |
15 | const computadora: SubComputadora = {
16 | id: '01',
17 | procesador: 'Intel',
18 | memoriaRamGb: 8,
19 | discoDuroGb: 256
20 | };
21 |
22 | // Omit:
23 |
24 | type SinFabricante = Omit;
25 |
26 | const computadoraSinFabricante: SinFabricante = {
27 | id: '01',
28 | procesador: 'Intel',
29 | memoriaRamGb: 8,
30 | discoDuroGb: 256,
31 | modelo: '2021',
32 | };
33 |
--------------------------------------------------------------------------------