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