├── .editorconfig ├── .eslintrc.js ├── .gitignore ├── .vscode └── settings.json ├── frontend ├── assets │ ├── flower.webm │ ├── js │ │ ├── bundle.js │ │ └── bundle.js.map │ ├── style.css │ └── video.css ├── index.html └── video.html ├── index.js ├── package-lock.json ├── package.json ├── src ├── Aula 01 - TypeAnnotation │ └── Aula01.ts ├── Aula 02 - Type Any │ └── Aula02.ts ├── Aula 03 - Type Void │ └── Aula03.ts ├── Aula 04 - Type Object │ └── Aula04.ts ├── Aula 05 - Type Array │ └── Aula05.ts ├── Aula 06 - Type Tuple │ └── Aula06.ts ├── Aula 07 - Type Null and Undefined │ └── Aula07.ts ├── Aula 08 - Type Never │ └── Aula 08.ts ├── Aula 09 - Type Enum │ └── Aula09.ts ├── Aula 10 - Type Unknown │ └── Aula10.ts ├── Aula 11 - Union Types │ └── Aula11.ts ├── Aula 12 - Tipos Literais │ └── Aula12.ts ├── Aula 13 - Type Alias │ └── Aula13.ts ├── Aula 14 - Intersection Types │ └── Aula14.ts ├── Aula 15 - Function types │ └── Aula15.ts ├── Aula 16 - Structural │ └── Aula16.ts ├── Aula 17 - Type Assertions │ └── Aula17.ts ├── Aula 18 - WebPack │ ├── index.ts │ └── mod.ts ├── Aula 19 - Workout │ ├── Aula19.ts │ └── form-control.ts ├── Aula 20 - Classes │ └── Aula20.ts ├── Aula 21 - Modificadores │ └── Aula21.ts ├── Aula 22 - Herança │ └── Aula22.ts ├── Aula 23 - Protected │ └── Aula23.ts ├── Aula 24 - Get e Set │ └── Aula24.ts ├── Aula 25 - Atributo e métodos estáticos │ └── Aula25.ts ├── Aula 26 - Construtor privado e singleton │ └── Aula26.ts ├── Aula 27 - Classes, métodos e atributos abstratos │ └── Aula27.ts ├── Aula 28 - Associação entre classes │ └── Aula28.ts ├── Aula 29 - Dependency Inversion │ └── Aula29.ts ├── Aula 30 - Agregação entre classes │ └── Aula30.ts ├── Aula 31 - Composição │ └── Aula31.ts ├── Aula 32 - Type Alias em Classes │ └── Aula32.ts ├── Aula 33 - Interfaces e Classes │ └── index.ts ├── Aula 34 - Declaration merging │ └── Aula34.ts ├── Aula 35 - Type Guard │ └── Aula35.ts ├── Aula 36 - Keyof e typeof │ └── Aula36.ts ├── Aula 37 - Usando chaves de tipos │ └── Aula37.ts ├── Aula 38 - Usando this como tipo │ └── Aula38.ts ├── Aula 39 - Overload │ └── Aula39.ts ├── Aula 40- Encadeamento opcional e operador de coalescência nula │ └── Aula40.ts ├── Aula 41 - Types generics │ └── Aula41.ts ├── Aula 42 - Arrays e Promises generics │ └── Aula42.ts ├── Aula 43 - Interfaces e Type Alias │ └── Aula43.ts ├── Aula 44 - Restrições em Generics │ └── Aula44.ts ├── Aula 45 - Generics com classes │ └── Aula45.ts ├── Aula 46 - Generics com intersection │ └── Aula46.ts ├── Aula 47 - Type Predicate │ └── Aula47.ts ├── Aula 48 - Generics padrões │ └── Aula48.ts ├── Aula 49 - Exercicio │ └── Aula49.ts ├── Aula 50 - Decorator de classes no TypeScript │ └── Aula50.ts ├── Aula 51 - Class Decorator │ └── Aula51.ts ├── Aula 52 - Fabrica de decorator │ └── Aula52.ts ├── Aula 53 - Composição de decoradores │ └── Aula 53.ts ├── Aula 54 - Method Decorator │ └── Aula54.ts ├── Aula 55 - Decoradores de parâmetro │ └── Aula55.ts ├── Aula 56 - Decoradores de propriedades │ └── Aula56.ts ├── Aula 57 - Criando um namespace │ └── Aula57.ts └── Aula 58 - Reference para import de arquivos │ ├── Aula58.ts │ └── modulo │ └── module.ts ├── tsconfig.frontend.json ├── tsconfig.json └── webpack.config.js /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 4 9 | end_of_line = crlf 10 | charset = utf-8 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true 13 | end_of_line = lf 14 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | browser: true, 4 | es6: true, 5 | node: true, 6 | }, 7 | extends: [ 8 | 'eslint:recommended', 9 | 'plugin:@typescript-eslint/eslint-recommended', 10 | 'plugin:@typescript-eslint/recommended' 11 | ], 12 | globals: { 13 | Atomics: 'readonly', 14 | SharedArrayBuffer: 'readonly', 15 | }, 16 | parser: '@typescript-eslint/parser', 17 | parserOptions: { 18 | ecmaVersion: 11, 19 | sourceType: 'module', 20 | }, 21 | plugins: ['@typescript-eslint'], 22 | rules: {} 23 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.toptal.com/developers/gitignore/api/node 2 | # Edit at https://www.toptal.com/developers/gitignore?templates=node 3 | 4 | ### Node ### 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | yarn-debug.log* 10 | yarn-error.log* 11 | lerna-debug.log* 12 | .pnpm-debug.log* 13 | 14 | # Diagnostic reports (https://nodejs.org/api/report.html) 15 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 16 | 17 | # Runtime data 18 | pids 19 | *.pid 20 | *.seed 21 | *.pid.lock 22 | 23 | # Directory for instrumented libs generated by jscoverage/JSCover 24 | lib-cov 25 | 26 | # Coverage directory used by tools like istanbul 27 | coverage 28 | *.lcov 29 | 30 | # nyc test coverage 31 | .nyc_output 32 | 33 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 34 | .grunt 35 | 36 | # Bower dependency directory (https://bower.io/) 37 | bower_components 38 | 39 | # node-waf configuration 40 | .lock-wscript 41 | 42 | # Compiled binary addons (https://nodejs.org/api/addons.html) 43 | build/Release 44 | 45 | # Dependency directories 46 | node_modules/ 47 | jspm_packages/ 48 | 49 | # Snowpack dependency directory (https://snowpack.dev/) 50 | web_modules/ 51 | 52 | # TypeScript cache 53 | *.tsbuildinfo 54 | 55 | # Optional npm cache directory 56 | .npm 57 | 58 | # Optional eslint cache 59 | .eslintcache 60 | 61 | # Optional stylelint cache 62 | .stylelintcache 63 | 64 | # Microbundle cache 65 | .rpt2_cache/ 66 | .rts2_cache_cjs/ 67 | .rts2_cache_es/ 68 | .rts2_cache_umd/ 69 | 70 | # Optional REPL history 71 | .node_repl_history 72 | 73 | # Output of 'npm pack' 74 | *.tgz 75 | 76 | # Yarn Integrity file 77 | .yarn-integrity 78 | 79 | # dotenv environment variable files 80 | .env 81 | .env.development.local 82 | .env.test.local 83 | .env.production.local 84 | .env.local 85 | 86 | # parcel-bundler cache (https://parceljs.org/) 87 | .cache 88 | .parcel-cache 89 | 90 | # Next.js build output 91 | .next 92 | out 93 | 94 | # Nuxt.js build / generate output 95 | .nuxt 96 | dist 97 | 98 | # Gatsby files 99 | .cache/ 100 | # Comment in the public line in if your project uses Gatsby and not Next.js 101 | # https://nextjs.org/blog/next-9-1#public-directory-support 102 | # public 103 | 104 | # vuepress build output 105 | .vuepress/dist 106 | 107 | # vuepress v2.x temp and cache directory 108 | .temp 109 | 110 | # Docusaurus cache and generated files 111 | .docusaurus 112 | 113 | # Serverless directories 114 | .serverless/ 115 | 116 | # FuseBox cache 117 | .fusebox/ 118 | 119 | # DynamoDB Local files 120 | .dynamodb/ 121 | 122 | # TernJS port file 123 | .tern-port 124 | 125 | # Stores VSCode versions used for testing VSCode extensions 126 | .vscode-test 127 | 128 | # yarn v2 129 | .yarn/cache 130 | .yarn/unplugged 131 | .yarn/build-state.yml 132 | .yarn/install-state.gz 133 | .pnp.* 134 | 135 | ### Node Patch ### 136 | # Serverless Webpack directories 137 | .webpack/ 138 | 139 | # Optional stylelint cache 140 | 141 | # SvelteKit build / generate output 142 | .svelte-kit 143 | 144 | # End of https://www.toptal.com/developers/gitignore/api/node -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "window.zoomLevel": 0, 3 | "code-runner.executorMap": { 4 | "javascript": "node", 5 | "java": "cd $dir && javac $fileName && java $fileNameWithoutExt", 6 | "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 7 | "zig": "zig run", 8 | "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 9 | "objective-c": "cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 10 | "php": "php", 11 | "python": "python -u", 12 | "perl": "perl", 13 | "perl6": "perl6", 14 | "ruby": "ruby", 15 | "go": "go run", 16 | "lua": "lua", 17 | "groovy": "groovy", 18 | "powershell": "powershell -ExecutionPolicy ByPass -File", 19 | "bat": "cmd /c", 20 | "shellscript": "bash", 21 | "fsharp": "fsi", 22 | "csharp": "scriptcs", 23 | "vbscript": "cscript //Nologo", 24 | "typescript": "npx ts-node --files", 25 | "coffeescript": "coffee", 26 | "scala": "scala", 27 | "swift": "swift", 28 | "julia": "julia", 29 | "crystal": "crystal", 30 | "ocaml": "ocaml", 31 | "r": "Rscript", 32 | "applescript": "osascript", 33 | "clojure": "lein exec", 34 | "haxe": "haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt", 35 | "rust": "cd $dir && rustc $fileName && $dir$fileNameWithoutExt", 36 | "racket": "racket", 37 | "scheme": "csi -script", 38 | "ahk": "autohotkey", 39 | "autoit": "autoit3", 40 | "dart": "dart", 41 | "pascal": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt", 42 | "d": "cd $dir && dmd $fileName && $dir$fileNameWithoutExt", 43 | "haskell": "runghc", 44 | "nim": "nim compile --verbosity:0 --hints:off --run", 45 | "lisp": "sbcl --script", 46 | "kit": "kitc --run", 47 | "v": "v run", 48 | "sass": "sass --style expanded", 49 | "scss": "scss --style expanded", 50 | "less": "cd $dir && lessc $fileName $fileNameWithoutExt.css", 51 | "FortranFreeForm": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 52 | "fortran-modern": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 53 | "fortran_fixed-form": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 54 | "fortran": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 55 | "sml": "cd $dir && sml $fileName" 56 | } 57 | } -------------------------------------------------------------------------------- /frontend/assets/flower.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stherzada/TypeScript---Estudos/4cdae1313a1209aa7fc3e07e6ae41d756f8ca8d9/frontend/assets/flower.webm -------------------------------------------------------------------------------- /frontend/assets/js/bundle.js: -------------------------------------------------------------------------------- 1 | /******/ (() => { // webpackBootstrap 2 | /******/ "use strict"; 3 | /******/ var __webpack_modules__ = ({ 4 | 5 | /***/ "./src/Aula 33 - Interfaces e Classes/index.ts": 6 | /*!*****************************************************!*\ 7 | !*** ./src/Aula 33 - Interfaces e Classes/index.ts ***! 8 | \*****************************************************/ 9 | /***/ ((__unused_webpack_module, exports) => { 10 | 11 | 12 | Object.defineProperty(exports, "__esModule", ({ value: true })); 13 | class VideoPlayer { 14 | constructor(videoPlayerElements) { 15 | this.videoPlayer = videoPlayerElements.videoPlayer; 16 | this.playButton = videoPlayerElements.playButton; 17 | this.stopButton = videoPlayerElements.stopButton; 18 | } 19 | playToogle() { 20 | if (this.videoPlayer.paused) { 21 | this.videoPlayer.play(); 22 | this.playButton.innerText = "Pause"; 23 | } 24 | else { 25 | this.videoPlayer.pause(); 26 | this.playButton.innerText = "Play"; 27 | } 28 | } 29 | stop() { 30 | // 31 | } 32 | initialEvent() { 33 | // se eu passar uma function dentro de uma class do add event, ele passa a ser o botão 34 | this.playButton.addEventListener("click", () => { 35 | this.playToogle(); 36 | }); 37 | this.stopButton.addEventListener("click", () => { 38 | this.videoPlayer.pause(); 39 | this.videoPlayer.currentTime = 0; 40 | this.playButton.innerText = "Play"; 41 | }); 42 | } 43 | } 44 | exports["default"] = VideoPlayer; 45 | const videoPlayer = new VideoPlayer({ 46 | videoPlayer: document.querySelector(".video"), 47 | playButton: document.querySelector(".play"), 48 | stopButton: document.querySelector(".stop"), 49 | }); 50 | videoPlayer.initialEvent(); 51 | 52 | 53 | /***/ }) 54 | 55 | /******/ }); 56 | /************************************************************************/ 57 | /******/ // The module cache 58 | /******/ var __webpack_module_cache__ = {}; 59 | /******/ 60 | /******/ // The require function 61 | /******/ function __webpack_require__(moduleId) { 62 | /******/ // Check if module is in cache 63 | /******/ var cachedModule = __webpack_module_cache__[moduleId]; 64 | /******/ if (cachedModule !== undefined) { 65 | /******/ return cachedModule.exports; 66 | /******/ } 67 | /******/ // Create a new module (and put it into the cache) 68 | /******/ var module = __webpack_module_cache__[moduleId] = { 69 | /******/ // no module.id needed 70 | /******/ // no module.loaded needed 71 | /******/ exports: {} 72 | /******/ }; 73 | /******/ 74 | /******/ // Execute the module function 75 | /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 76 | /******/ 77 | /******/ // Return the exports of the module 78 | /******/ return module.exports; 79 | /******/ } 80 | /******/ 81 | /************************************************************************/ 82 | var __webpack_exports__ = {}; 83 | // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. 84 | (() => { 85 | var exports = __webpack_exports__; 86 | /*!*****************************************!*\ 87 | !*** ./src/Aula 19 - Workout/Aula19.ts ***! 88 | \*****************************************/ 89 | 90 | Object.defineProperty(exports, "__esModule", ({ value: true })); 91 | // import "./form-control"; 92 | __webpack_require__(/*! ../Aula 33 - Interfaces e Classes/index */ "./src/Aula 33 - Interfaces e Classes/index.ts"); 93 | 94 | })(); 95 | 96 | /******/ })() 97 | ; 98 | //# sourceMappingURL=bundle.js.map -------------------------------------------------------------------------------- /frontend/assets/js/bundle.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"bundle.js","mappings":";;;;;;;;;;AAAa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAe;AACf;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;UCvCA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;;;;;;ACtBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D;AACA,mBAAO,CAAC,8FAAyC","sources":["webpack://typescript/./src/Aula 33 - Interfaces e Classes/index.ts","webpack://typescript/webpack/bootstrap","webpack://typescript/./src/Aula 19 - Workout/Aula19.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass VideoPlayer {\n constructor(videoPlayerElements) {\n this.videoPlayer = videoPlayerElements.videoPlayer;\n this.playButton = videoPlayerElements.playButton;\n this.stopButton = videoPlayerElements.stopButton;\n }\n playToogle() {\n if (this.videoPlayer.paused) {\n this.videoPlayer.play();\n this.playButton.innerText = \"Pause\";\n }\n else {\n this.videoPlayer.pause();\n this.playButton.innerText = \"Play\";\n }\n }\n stop() {\n //\n }\n initialEvent() {\n // se eu passar uma function dentro de uma class do add event, ele passa a ser o botão\n this.playButton.addEventListener(\"click\", () => {\n this.playToogle();\n });\n this.stopButton.addEventListener(\"click\", () => {\n this.videoPlayer.pause();\n this.videoPlayer.currentTime = 0;\n this.playButton.innerText = \"Play\";\n });\n }\n}\nexports.default = VideoPlayer;\nconst videoPlayer = new VideoPlayer({\n videoPlayer: document.querySelector(\".video\"),\n playButton: document.querySelector(\".play\"),\n stopButton: document.querySelector(\".stop\"),\n});\nvideoPlayer.initialEvent();\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// import \"./form-control\";\nrequire(\"../Aula 33 - Interfaces e Classes/index\");\n"],"names":[],"sourceRoot":""} -------------------------------------------------------------------------------- /frontend/assets/style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --dark-color: #111; 3 | --light-color: #f3f3f3; 4 | --medium-color: #bbb; 5 | --border-color: #ddd; 6 | --main-color: #0074d9; 7 | --error-color: #ff4136; 8 | --border-radius: 4px; 9 | } 10 | 11 | * { 12 | margin: 0; 13 | padding: 0; 14 | outline: none; 15 | box-sizing: border-box; 16 | } 17 | 18 | body { 19 | background-color: var(--dark-color); 20 | font-family: sans-serif; 21 | color: var(--dark-color); 22 | } 23 | 24 | .container { 25 | display: flex; 26 | align-items: center; 27 | justify-content: center; 28 | margin: 50px auto; 29 | } 30 | 31 | .form { 32 | padding: 20px; 33 | background: #ffffff; 34 | width: 100%; 35 | max-width: 400px; 36 | box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); 37 | border-radius: var(--border-radius); 38 | border: 1px solid var(--border-color); 39 | margin: auto 20px; 40 | } 41 | 42 | .form h2 { 43 | padding: 10px 0 30px; 44 | text-align: center; 45 | } 46 | 47 | .form .form-fields { 48 | margin: 0 0 20px; 49 | } 50 | 51 | .form label { 52 | display: block; 53 | font-size: 10pt; 54 | color: #999; 55 | } 56 | 57 | ::placeholder { 58 | color: #ddd; 59 | font-size: 10pt; 60 | } 61 | 62 | .form input[type] { 63 | width: 100%; 64 | border: 1px solid var(--border-color); 65 | font-size: 18px; 66 | padding: 5px 10px; 67 | border-radius: var(--border-radius); 68 | transition: border 300ms ease-in-out; 69 | } 70 | 71 | .form input[type]:focus { 72 | border-color: var(--medium-color); 73 | } 74 | 75 | .form button { 76 | border: none; 77 | background: var(--main-color); 78 | padding: 10px 20px; 79 | cursor: pointer; 80 | font-weight: 700; 81 | color: var(--light-color); 82 | border-radius: var(--border-radius); 83 | transition: filter 300ms ease-in-out; 84 | } 85 | 86 | .form button:hover { 87 | filter: brightness(80%); 88 | } 89 | 90 | .form .error-message { 91 | font-size: 9pt; 92 | padding: 5px 0; 93 | color: var(--error-color); 94 | font-style: italic; 95 | display: none; 96 | } 97 | 98 | .form .show-error-message .error-message { 99 | display: block; 100 | } 101 | 102 | .form .show-error-message input[type] { 103 | border-color: var(--error-color); 104 | } 105 | -------------------------------------------------------------------------------- /frontend/assets/video.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --dark-color: #111; 3 | --light-color: #f3f3f3; 4 | --medium-color: #bbb; 5 | --border-color: #ddd; 6 | --main-color: #0074D9; 7 | --error-color: #FF4136; 8 | --border-radius: 4px; 9 | } 10 | 11 | * { 12 | margin: 0; 13 | padding: 0; 14 | outline: none; 15 | box-sizing: border-box; 16 | } 17 | 18 | body { 19 | background-color: var(--dark-color); 20 | font-family: sans-serif; 21 | color: var(--dark-color); 22 | } 23 | 24 | .container { 25 | display: flex; 26 | flex-direction: column; 27 | align-items: center; 28 | justify-content: center; 29 | margin: 50px auto; 30 | background-color: #fff; 31 | max-width: 640px; 32 | padding: 20px 50px; 33 | border-radius: var(--border-radius); 34 | } 35 | 36 | .container h2 { 37 | padding: 0 0 20px 0; 38 | } 39 | 40 | .video-container { 41 | position: relative; 42 | margin-bottom: 20px; 43 | } 44 | 45 | .video { 46 | max-width: 100%; 47 | display: flex; 48 | } 49 | 50 | .controls { 51 | position: absolute; 52 | bottom: 10px; 53 | left: 10px; 54 | } 55 | 56 | .controls button { 57 | margin: 0; 58 | padding: 0; 59 | background: var(--main-color); 60 | border: none; 61 | color: #fff; 62 | padding: 5px 10px; 63 | opacity: .5; 64 | cursor: pointer; 65 | transition: opacity 300ms ease-in-out; 66 | } 67 | 68 | .controls button:hover { 69 | opacity: 1; 70 | } -------------------------------------------------------------------------------- /frontend/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Faça seu registro 8 | 9 | 10 | 11 | 12 |
13 |
14 |

Faça seu cadastro

15 |
16 | 17 | 18 | Campo inválido por algum motivo qualquer 19 |
20 |
21 | 22 | 23 | Campo inválido por algum motivo qualquer 24 |
25 |
26 | 27 | 28 | Campo inválido por algum motivo qualquer 29 |
30 |
31 | 32 | 33 | Campo inválido por algum motivo qualquer 34 |
35 |
36 | 37 |
38 |
39 |
40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /frontend/video.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | YouDemy 8 | 9 | 10 | 11 | 12 |
13 |

My moment

14 |
15 | 16 |
17 | 18 | 19 |
20 |
21 |
22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | // const mensagem: string = "Hello World :("; 2 | // console.log(mensagem); 3 | function greatName(name) { 4 | return "Ol\u00E1 ".concat(name); 5 | } 6 | console.log(greatName("Stherzada")); 7 | 8 | // const nome = "Stherzada"; -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "typescript", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@types/validator": "^13.11.1" 13 | }, 14 | "devDependencies": { 15 | "@typescript-eslint/eslint-plugin": "^6.4.1", 16 | "@typescript-eslint/parser": "^6.4.1", 17 | "prettier": "^3.0.3", 18 | "ts-loader": "^9.4.4", 19 | "ts-node": "^10.9.1", 20 | "typescript": "^5.1.6", 21 | "webpack": "^5.88.2", 22 | "webpack-cli": "^5.1.4" 23 | } 24 | }, 25 | "node_modules/@aashutoshrathi/word-wrap": { 26 | "version": "1.2.6", 27 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 28 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 29 | "dev": true, 30 | "peer": true, 31 | "engines": { 32 | "node": ">=0.10.0" 33 | } 34 | }, 35 | "node_modules/@cspotcode/source-map-support": { 36 | "version": "0.8.1", 37 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 38 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 39 | "dev": true, 40 | "dependencies": { 41 | "@jridgewell/trace-mapping": "0.3.9" 42 | }, 43 | "engines": { 44 | "node": ">=12" 45 | } 46 | }, 47 | "node_modules/@discoveryjs/json-ext": { 48 | "version": "0.5.7", 49 | "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", 50 | "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", 51 | "dev": true, 52 | "engines": { 53 | "node": ">=10.0.0" 54 | } 55 | }, 56 | "node_modules/@eslint-community/eslint-utils": { 57 | "version": "4.4.0", 58 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 59 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 60 | "dev": true, 61 | "dependencies": { 62 | "eslint-visitor-keys": "^3.3.0" 63 | }, 64 | "engines": { 65 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 66 | }, 67 | "peerDependencies": { 68 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 69 | } 70 | }, 71 | "node_modules/@eslint-community/regexpp": { 72 | "version": "4.7.0", 73 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.7.0.tgz", 74 | "integrity": "sha512-+HencqxU7CFJnQb7IKtuNBqS6Yx3Tz4kOL8BJXo+JyeiBm5MEX6pO8onXDkjrkCRlfYXS1Axro15ZjVFe9YgsA==", 75 | "dev": true, 76 | "engines": { 77 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 78 | } 79 | }, 80 | "node_modules/@eslint/eslintrc": { 81 | "version": "2.1.2", 82 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", 83 | "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", 84 | "dev": true, 85 | "peer": true, 86 | "dependencies": { 87 | "ajv": "^6.12.4", 88 | "debug": "^4.3.2", 89 | "espree": "^9.6.0", 90 | "globals": "^13.19.0", 91 | "ignore": "^5.2.0", 92 | "import-fresh": "^3.2.1", 93 | "js-yaml": "^4.1.0", 94 | "minimatch": "^3.1.2", 95 | "strip-json-comments": "^3.1.1" 96 | }, 97 | "engines": { 98 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 99 | }, 100 | "funding": { 101 | "url": "https://opencollective.com/eslint" 102 | } 103 | }, 104 | "node_modules/@eslint/js": { 105 | "version": "8.47.0", 106 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", 107 | "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", 108 | "dev": true, 109 | "peer": true, 110 | "engines": { 111 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 112 | } 113 | }, 114 | "node_modules/@humanwhocodes/config-array": { 115 | "version": "0.11.10", 116 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", 117 | "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", 118 | "dev": true, 119 | "peer": true, 120 | "dependencies": { 121 | "@humanwhocodes/object-schema": "^1.2.1", 122 | "debug": "^4.1.1", 123 | "minimatch": "^3.0.5" 124 | }, 125 | "engines": { 126 | "node": ">=10.10.0" 127 | } 128 | }, 129 | "node_modules/@humanwhocodes/module-importer": { 130 | "version": "1.0.1", 131 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 132 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 133 | "dev": true, 134 | "peer": true, 135 | "engines": { 136 | "node": ">=12.22" 137 | }, 138 | "funding": { 139 | "type": "github", 140 | "url": "https://github.com/sponsors/nzakas" 141 | } 142 | }, 143 | "node_modules/@humanwhocodes/object-schema": { 144 | "version": "1.2.1", 145 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 146 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 147 | "dev": true, 148 | "peer": true 149 | }, 150 | "node_modules/@jridgewell/gen-mapping": { 151 | "version": "0.3.3", 152 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 153 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 154 | "dev": true, 155 | "dependencies": { 156 | "@jridgewell/set-array": "^1.0.1", 157 | "@jridgewell/sourcemap-codec": "^1.4.10", 158 | "@jridgewell/trace-mapping": "^0.3.9" 159 | }, 160 | "engines": { 161 | "node": ">=6.0.0" 162 | } 163 | }, 164 | "node_modules/@jridgewell/resolve-uri": { 165 | "version": "3.1.1", 166 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 167 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 168 | "dev": true, 169 | "engines": { 170 | "node": ">=6.0.0" 171 | } 172 | }, 173 | "node_modules/@jridgewell/set-array": { 174 | "version": "1.1.2", 175 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 176 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 177 | "dev": true, 178 | "engines": { 179 | "node": ">=6.0.0" 180 | } 181 | }, 182 | "node_modules/@jridgewell/source-map": { 183 | "version": "0.3.5", 184 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", 185 | "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", 186 | "dev": true, 187 | "dependencies": { 188 | "@jridgewell/gen-mapping": "^0.3.0", 189 | "@jridgewell/trace-mapping": "^0.3.9" 190 | } 191 | }, 192 | "node_modules/@jridgewell/sourcemap-codec": { 193 | "version": "1.4.15", 194 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 195 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 196 | "dev": true 197 | }, 198 | "node_modules/@jridgewell/trace-mapping": { 199 | "version": "0.3.9", 200 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 201 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 202 | "dev": true, 203 | "dependencies": { 204 | "@jridgewell/resolve-uri": "^3.0.3", 205 | "@jridgewell/sourcemap-codec": "^1.4.10" 206 | } 207 | }, 208 | "node_modules/@nodelib/fs.scandir": { 209 | "version": "2.1.5", 210 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 211 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 212 | "dev": true, 213 | "dependencies": { 214 | "@nodelib/fs.stat": "2.0.5", 215 | "run-parallel": "^1.1.9" 216 | }, 217 | "engines": { 218 | "node": ">= 8" 219 | } 220 | }, 221 | "node_modules/@nodelib/fs.stat": { 222 | "version": "2.0.5", 223 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 224 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 225 | "dev": true, 226 | "engines": { 227 | "node": ">= 8" 228 | } 229 | }, 230 | "node_modules/@nodelib/fs.walk": { 231 | "version": "1.2.8", 232 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 233 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 234 | "dev": true, 235 | "dependencies": { 236 | "@nodelib/fs.scandir": "2.1.5", 237 | "fastq": "^1.6.0" 238 | }, 239 | "engines": { 240 | "node": ">= 8" 241 | } 242 | }, 243 | "node_modules/@tsconfig/node10": { 244 | "version": "1.0.9", 245 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", 246 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", 247 | "dev": true 248 | }, 249 | "node_modules/@tsconfig/node12": { 250 | "version": "1.0.11", 251 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 252 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 253 | "dev": true 254 | }, 255 | "node_modules/@tsconfig/node14": { 256 | "version": "1.0.3", 257 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 258 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 259 | "dev": true 260 | }, 261 | "node_modules/@tsconfig/node16": { 262 | "version": "1.0.4", 263 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 264 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 265 | "dev": true 266 | }, 267 | "node_modules/@types/eslint": { 268 | "version": "8.44.2", 269 | "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", 270 | "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", 271 | "dev": true, 272 | "dependencies": { 273 | "@types/estree": "*", 274 | "@types/json-schema": "*" 275 | } 276 | }, 277 | "node_modules/@types/eslint-scope": { 278 | "version": "3.7.4", 279 | "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", 280 | "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", 281 | "dev": true, 282 | "dependencies": { 283 | "@types/eslint": "*", 284 | "@types/estree": "*" 285 | } 286 | }, 287 | "node_modules/@types/estree": { 288 | "version": "1.0.1", 289 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", 290 | "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", 291 | "dev": true 292 | }, 293 | "node_modules/@types/json-schema": { 294 | "version": "7.0.12", 295 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", 296 | "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", 297 | "dev": true 298 | }, 299 | "node_modules/@types/node": { 300 | "version": "20.5.2", 301 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.2.tgz", 302 | "integrity": "sha512-5j/lXt7unfPOUlrKC34HIaedONleyLtwkKggiD/0uuMfT8gg2EOpg0dz4lCD15Ga7muC+1WzJZAjIB9simWd6Q==", 303 | "dev": true 304 | }, 305 | "node_modules/@types/semver": { 306 | "version": "7.5.0", 307 | "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", 308 | "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", 309 | "dev": true 310 | }, 311 | "node_modules/@types/validator": { 312 | "version": "13.11.1", 313 | "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.1.tgz", 314 | "integrity": "sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A==" 315 | }, 316 | "node_modules/@typescript-eslint/eslint-plugin": { 317 | "version": "6.4.1", 318 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.4.1.tgz", 319 | "integrity": "sha512-3F5PtBzUW0dYlq77Lcqo13fv+58KDwUib3BddilE8ajPJT+faGgxmI9Sw+I8ZS22BYwoir9ZhNXcLi+S+I2bkw==", 320 | "dev": true, 321 | "dependencies": { 322 | "@eslint-community/regexpp": "^4.5.1", 323 | "@typescript-eslint/scope-manager": "6.4.1", 324 | "@typescript-eslint/type-utils": "6.4.1", 325 | "@typescript-eslint/utils": "6.4.1", 326 | "@typescript-eslint/visitor-keys": "6.4.1", 327 | "debug": "^4.3.4", 328 | "graphemer": "^1.4.0", 329 | "ignore": "^5.2.4", 330 | "natural-compare": "^1.4.0", 331 | "semver": "^7.5.4", 332 | "ts-api-utils": "^1.0.1" 333 | }, 334 | "engines": { 335 | "node": "^16.0.0 || >=18.0.0" 336 | }, 337 | "funding": { 338 | "type": "opencollective", 339 | "url": "https://opencollective.com/typescript-eslint" 340 | }, 341 | "peerDependencies": { 342 | "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", 343 | "eslint": "^7.0.0 || ^8.0.0" 344 | }, 345 | "peerDependenciesMeta": { 346 | "typescript": { 347 | "optional": true 348 | } 349 | } 350 | }, 351 | "node_modules/@typescript-eslint/parser": { 352 | "version": "6.4.1", 353 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.1.tgz", 354 | "integrity": "sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg==", 355 | "dev": true, 356 | "dependencies": { 357 | "@typescript-eslint/scope-manager": "6.4.1", 358 | "@typescript-eslint/types": "6.4.1", 359 | "@typescript-eslint/typescript-estree": "6.4.1", 360 | "@typescript-eslint/visitor-keys": "6.4.1", 361 | "debug": "^4.3.4" 362 | }, 363 | "engines": { 364 | "node": "^16.0.0 || >=18.0.0" 365 | }, 366 | "funding": { 367 | "type": "opencollective", 368 | "url": "https://opencollective.com/typescript-eslint" 369 | }, 370 | "peerDependencies": { 371 | "eslint": "^7.0.0 || ^8.0.0" 372 | }, 373 | "peerDependenciesMeta": { 374 | "typescript": { 375 | "optional": true 376 | } 377 | } 378 | }, 379 | "node_modules/@typescript-eslint/scope-manager": { 380 | "version": "6.4.1", 381 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.1.tgz", 382 | "integrity": "sha512-p/OavqOQfm4/Hdrr7kvacOSFjwQ2rrDVJRPxt/o0TOWdFnjJptnjnZ+sYDR7fi4OimvIuKp+2LCkc+rt9fIW+A==", 383 | "dev": true, 384 | "dependencies": { 385 | "@typescript-eslint/types": "6.4.1", 386 | "@typescript-eslint/visitor-keys": "6.4.1" 387 | }, 388 | "engines": { 389 | "node": "^16.0.0 || >=18.0.0" 390 | }, 391 | "funding": { 392 | "type": "opencollective", 393 | "url": "https://opencollective.com/typescript-eslint" 394 | } 395 | }, 396 | "node_modules/@typescript-eslint/type-utils": { 397 | "version": "6.4.1", 398 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.4.1.tgz", 399 | "integrity": "sha512-7ON8M8NXh73SGZ5XvIqWHjgX2f+vvaOarNliGhjrJnv1vdjG0LVIz+ToYfPirOoBi56jxAKLfsLm40+RvxVVXA==", 400 | "dev": true, 401 | "dependencies": { 402 | "@typescript-eslint/typescript-estree": "6.4.1", 403 | "@typescript-eslint/utils": "6.4.1", 404 | "debug": "^4.3.4", 405 | "ts-api-utils": "^1.0.1" 406 | }, 407 | "engines": { 408 | "node": "^16.0.0 || >=18.0.0" 409 | }, 410 | "funding": { 411 | "type": "opencollective", 412 | "url": "https://opencollective.com/typescript-eslint" 413 | }, 414 | "peerDependencies": { 415 | "eslint": "^7.0.0 || ^8.0.0" 416 | }, 417 | "peerDependenciesMeta": { 418 | "typescript": { 419 | "optional": true 420 | } 421 | } 422 | }, 423 | "node_modules/@typescript-eslint/types": { 424 | "version": "6.4.1", 425 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.1.tgz", 426 | "integrity": "sha512-zAAopbNuYu++ijY1GV2ylCsQsi3B8QvfPHVqhGdDcbx/NK5lkqMnCGU53amAjccSpk+LfeONxwzUhDzArSfZJg==", 427 | "dev": true, 428 | "engines": { 429 | "node": "^16.0.0 || >=18.0.0" 430 | }, 431 | "funding": { 432 | "type": "opencollective", 433 | "url": "https://opencollective.com/typescript-eslint" 434 | } 435 | }, 436 | "node_modules/@typescript-eslint/typescript-estree": { 437 | "version": "6.4.1", 438 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.1.tgz", 439 | "integrity": "sha512-xF6Y7SatVE/OyV93h1xGgfOkHr2iXuo8ip0gbfzaKeGGuKiAnzS+HtVhSPx8Www243bwlW8IF7X0/B62SzFftg==", 440 | "dev": true, 441 | "dependencies": { 442 | "@typescript-eslint/types": "6.4.1", 443 | "@typescript-eslint/visitor-keys": "6.4.1", 444 | "debug": "^4.3.4", 445 | "globby": "^11.1.0", 446 | "is-glob": "^4.0.3", 447 | "semver": "^7.5.4", 448 | "ts-api-utils": "^1.0.1" 449 | }, 450 | "engines": { 451 | "node": "^16.0.0 || >=18.0.0" 452 | }, 453 | "funding": { 454 | "type": "opencollective", 455 | "url": "https://opencollective.com/typescript-eslint" 456 | }, 457 | "peerDependenciesMeta": { 458 | "typescript": { 459 | "optional": true 460 | } 461 | } 462 | }, 463 | "node_modules/@typescript-eslint/utils": { 464 | "version": "6.4.1", 465 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.1.tgz", 466 | "integrity": "sha512-F/6r2RieNeorU0zhqZNv89s9bDZSovv3bZQpUNOmmQK1L80/cV4KEu95YUJWi75u5PhboFoKUJBnZ4FQcoqhDw==", 467 | "dev": true, 468 | "dependencies": { 469 | "@eslint-community/eslint-utils": "^4.4.0", 470 | "@types/json-schema": "^7.0.12", 471 | "@types/semver": "^7.5.0", 472 | "@typescript-eslint/scope-manager": "6.4.1", 473 | "@typescript-eslint/types": "6.4.1", 474 | "@typescript-eslint/typescript-estree": "6.4.1", 475 | "semver": "^7.5.4" 476 | }, 477 | "engines": { 478 | "node": "^16.0.0 || >=18.0.0" 479 | }, 480 | "funding": { 481 | "type": "opencollective", 482 | "url": "https://opencollective.com/typescript-eslint" 483 | }, 484 | "peerDependencies": { 485 | "eslint": "^7.0.0 || ^8.0.0" 486 | } 487 | }, 488 | "node_modules/@typescript-eslint/visitor-keys": { 489 | "version": "6.4.1", 490 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.1.tgz", 491 | "integrity": "sha512-y/TyRJsbZPkJIZQXrHfdnxVnxyKegnpEvnRGNam7s3TRR2ykGefEWOhaef00/UUN3IZxizS7BTO3svd3lCOJRQ==", 492 | "dev": true, 493 | "dependencies": { 494 | "@typescript-eslint/types": "6.4.1", 495 | "eslint-visitor-keys": "^3.4.1" 496 | }, 497 | "engines": { 498 | "node": "^16.0.0 || >=18.0.0" 499 | }, 500 | "funding": { 501 | "type": "opencollective", 502 | "url": "https://opencollective.com/typescript-eslint" 503 | } 504 | }, 505 | "node_modules/@webassemblyjs/ast": { 506 | "version": "1.11.6", 507 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", 508 | "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", 509 | "dev": true, 510 | "dependencies": { 511 | "@webassemblyjs/helper-numbers": "1.11.6", 512 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6" 513 | } 514 | }, 515 | "node_modules/@webassemblyjs/floating-point-hex-parser": { 516 | "version": "1.11.6", 517 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", 518 | "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", 519 | "dev": true 520 | }, 521 | "node_modules/@webassemblyjs/helper-api-error": { 522 | "version": "1.11.6", 523 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", 524 | "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", 525 | "dev": true 526 | }, 527 | "node_modules/@webassemblyjs/helper-buffer": { 528 | "version": "1.11.6", 529 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", 530 | "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", 531 | "dev": true 532 | }, 533 | "node_modules/@webassemblyjs/helper-numbers": { 534 | "version": "1.11.6", 535 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", 536 | "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", 537 | "dev": true, 538 | "dependencies": { 539 | "@webassemblyjs/floating-point-hex-parser": "1.11.6", 540 | "@webassemblyjs/helper-api-error": "1.11.6", 541 | "@xtuc/long": "4.2.2" 542 | } 543 | }, 544 | "node_modules/@webassemblyjs/helper-wasm-bytecode": { 545 | "version": "1.11.6", 546 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", 547 | "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", 548 | "dev": true 549 | }, 550 | "node_modules/@webassemblyjs/helper-wasm-section": { 551 | "version": "1.11.6", 552 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", 553 | "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", 554 | "dev": true, 555 | "dependencies": { 556 | "@webassemblyjs/ast": "1.11.6", 557 | "@webassemblyjs/helper-buffer": "1.11.6", 558 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 559 | "@webassemblyjs/wasm-gen": "1.11.6" 560 | } 561 | }, 562 | "node_modules/@webassemblyjs/ieee754": { 563 | "version": "1.11.6", 564 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", 565 | "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", 566 | "dev": true, 567 | "dependencies": { 568 | "@xtuc/ieee754": "^1.2.0" 569 | } 570 | }, 571 | "node_modules/@webassemblyjs/leb128": { 572 | "version": "1.11.6", 573 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", 574 | "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", 575 | "dev": true, 576 | "dependencies": { 577 | "@xtuc/long": "4.2.2" 578 | } 579 | }, 580 | "node_modules/@webassemblyjs/utf8": { 581 | "version": "1.11.6", 582 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", 583 | "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", 584 | "dev": true 585 | }, 586 | "node_modules/@webassemblyjs/wasm-edit": { 587 | "version": "1.11.6", 588 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", 589 | "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", 590 | "dev": true, 591 | "dependencies": { 592 | "@webassemblyjs/ast": "1.11.6", 593 | "@webassemblyjs/helper-buffer": "1.11.6", 594 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 595 | "@webassemblyjs/helper-wasm-section": "1.11.6", 596 | "@webassemblyjs/wasm-gen": "1.11.6", 597 | "@webassemblyjs/wasm-opt": "1.11.6", 598 | "@webassemblyjs/wasm-parser": "1.11.6", 599 | "@webassemblyjs/wast-printer": "1.11.6" 600 | } 601 | }, 602 | "node_modules/@webassemblyjs/wasm-gen": { 603 | "version": "1.11.6", 604 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", 605 | "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", 606 | "dev": true, 607 | "dependencies": { 608 | "@webassemblyjs/ast": "1.11.6", 609 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 610 | "@webassemblyjs/ieee754": "1.11.6", 611 | "@webassemblyjs/leb128": "1.11.6", 612 | "@webassemblyjs/utf8": "1.11.6" 613 | } 614 | }, 615 | "node_modules/@webassemblyjs/wasm-opt": { 616 | "version": "1.11.6", 617 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", 618 | "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", 619 | "dev": true, 620 | "dependencies": { 621 | "@webassemblyjs/ast": "1.11.6", 622 | "@webassemblyjs/helper-buffer": "1.11.6", 623 | "@webassemblyjs/wasm-gen": "1.11.6", 624 | "@webassemblyjs/wasm-parser": "1.11.6" 625 | } 626 | }, 627 | "node_modules/@webassemblyjs/wasm-parser": { 628 | "version": "1.11.6", 629 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", 630 | "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", 631 | "dev": true, 632 | "dependencies": { 633 | "@webassemblyjs/ast": "1.11.6", 634 | "@webassemblyjs/helper-api-error": "1.11.6", 635 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 636 | "@webassemblyjs/ieee754": "1.11.6", 637 | "@webassemblyjs/leb128": "1.11.6", 638 | "@webassemblyjs/utf8": "1.11.6" 639 | } 640 | }, 641 | "node_modules/@webassemblyjs/wast-printer": { 642 | "version": "1.11.6", 643 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", 644 | "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", 645 | "dev": true, 646 | "dependencies": { 647 | "@webassemblyjs/ast": "1.11.6", 648 | "@xtuc/long": "4.2.2" 649 | } 650 | }, 651 | "node_modules/@webpack-cli/configtest": { 652 | "version": "2.1.1", 653 | "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", 654 | "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", 655 | "dev": true, 656 | "engines": { 657 | "node": ">=14.15.0" 658 | }, 659 | "peerDependencies": { 660 | "webpack": "5.x.x", 661 | "webpack-cli": "5.x.x" 662 | } 663 | }, 664 | "node_modules/@webpack-cli/info": { 665 | "version": "2.0.2", 666 | "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", 667 | "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", 668 | "dev": true, 669 | "engines": { 670 | "node": ">=14.15.0" 671 | }, 672 | "peerDependencies": { 673 | "webpack": "5.x.x", 674 | "webpack-cli": "5.x.x" 675 | } 676 | }, 677 | "node_modules/@webpack-cli/serve": { 678 | "version": "2.0.5", 679 | "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", 680 | "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", 681 | "dev": true, 682 | "engines": { 683 | "node": ">=14.15.0" 684 | }, 685 | "peerDependencies": { 686 | "webpack": "5.x.x", 687 | "webpack-cli": "5.x.x" 688 | }, 689 | "peerDependenciesMeta": { 690 | "webpack-dev-server": { 691 | "optional": true 692 | } 693 | } 694 | }, 695 | "node_modules/@xtuc/ieee754": { 696 | "version": "1.2.0", 697 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", 698 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", 699 | "dev": true 700 | }, 701 | "node_modules/@xtuc/long": { 702 | "version": "4.2.2", 703 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", 704 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", 705 | "dev": true 706 | }, 707 | "node_modules/acorn": { 708 | "version": "8.10.0", 709 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 710 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 711 | "dev": true, 712 | "bin": { 713 | "acorn": "bin/acorn" 714 | }, 715 | "engines": { 716 | "node": ">=0.4.0" 717 | } 718 | }, 719 | "node_modules/acorn-import-assertions": { 720 | "version": "1.9.0", 721 | "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", 722 | "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", 723 | "dev": true, 724 | "peerDependencies": { 725 | "acorn": "^8" 726 | } 727 | }, 728 | "node_modules/acorn-jsx": { 729 | "version": "5.3.2", 730 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 731 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 732 | "dev": true, 733 | "peer": true, 734 | "peerDependencies": { 735 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 736 | } 737 | }, 738 | "node_modules/acorn-walk": { 739 | "version": "8.2.0", 740 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 741 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 742 | "dev": true, 743 | "engines": { 744 | "node": ">=0.4.0" 745 | } 746 | }, 747 | "node_modules/ajv": { 748 | "version": "6.12.6", 749 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 750 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 751 | "dev": true, 752 | "dependencies": { 753 | "fast-deep-equal": "^3.1.1", 754 | "fast-json-stable-stringify": "^2.0.0", 755 | "json-schema-traverse": "^0.4.1", 756 | "uri-js": "^4.2.2" 757 | }, 758 | "funding": { 759 | "type": "github", 760 | "url": "https://github.com/sponsors/epoberezkin" 761 | } 762 | }, 763 | "node_modules/ajv-keywords": { 764 | "version": "3.5.2", 765 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", 766 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", 767 | "dev": true, 768 | "peerDependencies": { 769 | "ajv": "^6.9.1" 770 | } 771 | }, 772 | "node_modules/ansi-regex": { 773 | "version": "5.0.1", 774 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 775 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 776 | "dev": true, 777 | "peer": true, 778 | "engines": { 779 | "node": ">=8" 780 | } 781 | }, 782 | "node_modules/ansi-styles": { 783 | "version": "4.3.0", 784 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 785 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 786 | "dev": true, 787 | "dependencies": { 788 | "color-convert": "^2.0.1" 789 | }, 790 | "engines": { 791 | "node": ">=8" 792 | }, 793 | "funding": { 794 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 795 | } 796 | }, 797 | "node_modules/arg": { 798 | "version": "4.1.3", 799 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 800 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 801 | "dev": true 802 | }, 803 | "node_modules/argparse": { 804 | "version": "2.0.1", 805 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 806 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 807 | "dev": true, 808 | "peer": true 809 | }, 810 | "node_modules/array-union": { 811 | "version": "2.1.0", 812 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 813 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 814 | "dev": true, 815 | "engines": { 816 | "node": ">=8" 817 | } 818 | }, 819 | "node_modules/balanced-match": { 820 | "version": "1.0.2", 821 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 822 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 823 | "dev": true, 824 | "peer": true 825 | }, 826 | "node_modules/brace-expansion": { 827 | "version": "1.1.11", 828 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 829 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 830 | "dev": true, 831 | "peer": true, 832 | "dependencies": { 833 | "balanced-match": "^1.0.0", 834 | "concat-map": "0.0.1" 835 | } 836 | }, 837 | "node_modules/braces": { 838 | "version": "3.0.2", 839 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 840 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 841 | "dev": true, 842 | "dependencies": { 843 | "fill-range": "^7.0.1" 844 | }, 845 | "engines": { 846 | "node": ">=8" 847 | } 848 | }, 849 | "node_modules/browserslist": { 850 | "version": "4.21.10", 851 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", 852 | "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", 853 | "dev": true, 854 | "funding": [ 855 | { 856 | "type": "opencollective", 857 | "url": "https://opencollective.com/browserslist" 858 | }, 859 | { 860 | "type": "tidelift", 861 | "url": "https://tidelift.com/funding/github/npm/browserslist" 862 | }, 863 | { 864 | "type": "github", 865 | "url": "https://github.com/sponsors/ai" 866 | } 867 | ], 868 | "dependencies": { 869 | "caniuse-lite": "^1.0.30001517", 870 | "electron-to-chromium": "^1.4.477", 871 | "node-releases": "^2.0.13", 872 | "update-browserslist-db": "^1.0.11" 873 | }, 874 | "bin": { 875 | "browserslist": "cli.js" 876 | }, 877 | "engines": { 878 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 879 | } 880 | }, 881 | "node_modules/buffer-from": { 882 | "version": "1.1.2", 883 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 884 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 885 | "dev": true 886 | }, 887 | "node_modules/callsites": { 888 | "version": "3.1.0", 889 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 890 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 891 | "dev": true, 892 | "peer": true, 893 | "engines": { 894 | "node": ">=6" 895 | } 896 | }, 897 | "node_modules/caniuse-lite": { 898 | "version": "1.0.30001524", 899 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", 900 | "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", 901 | "dev": true, 902 | "funding": [ 903 | { 904 | "type": "opencollective", 905 | "url": "https://opencollective.com/browserslist" 906 | }, 907 | { 908 | "type": "tidelift", 909 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 910 | }, 911 | { 912 | "type": "github", 913 | "url": "https://github.com/sponsors/ai" 914 | } 915 | ] 916 | }, 917 | "node_modules/chalk": { 918 | "version": "4.1.2", 919 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 920 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 921 | "dev": true, 922 | "dependencies": { 923 | "ansi-styles": "^4.1.0", 924 | "supports-color": "^7.1.0" 925 | }, 926 | "engines": { 927 | "node": ">=10" 928 | }, 929 | "funding": { 930 | "url": "https://github.com/chalk/chalk?sponsor=1" 931 | } 932 | }, 933 | "node_modules/chrome-trace-event": { 934 | "version": "1.0.3", 935 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", 936 | "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", 937 | "dev": true, 938 | "engines": { 939 | "node": ">=6.0" 940 | } 941 | }, 942 | "node_modules/clone-deep": { 943 | "version": "4.0.1", 944 | "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", 945 | "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", 946 | "dev": true, 947 | "dependencies": { 948 | "is-plain-object": "^2.0.4", 949 | "kind-of": "^6.0.2", 950 | "shallow-clone": "^3.0.0" 951 | }, 952 | "engines": { 953 | "node": ">=6" 954 | } 955 | }, 956 | "node_modules/color-convert": { 957 | "version": "2.0.1", 958 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 959 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 960 | "dev": true, 961 | "dependencies": { 962 | "color-name": "~1.1.4" 963 | }, 964 | "engines": { 965 | "node": ">=7.0.0" 966 | } 967 | }, 968 | "node_modules/color-name": { 969 | "version": "1.1.4", 970 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 971 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 972 | "dev": true 973 | }, 974 | "node_modules/colorette": { 975 | "version": "2.0.20", 976 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", 977 | "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", 978 | "dev": true 979 | }, 980 | "node_modules/commander": { 981 | "version": "2.20.3", 982 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 983 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 984 | "dev": true 985 | }, 986 | "node_modules/concat-map": { 987 | "version": "0.0.1", 988 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 989 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 990 | "dev": true, 991 | "peer": true 992 | }, 993 | "node_modules/create-require": { 994 | "version": "1.1.1", 995 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 996 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 997 | "dev": true 998 | }, 999 | "node_modules/cross-spawn": { 1000 | "version": "7.0.3", 1001 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1002 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1003 | "dev": true, 1004 | "dependencies": { 1005 | "path-key": "^3.1.0", 1006 | "shebang-command": "^2.0.0", 1007 | "which": "^2.0.1" 1008 | }, 1009 | "engines": { 1010 | "node": ">= 8" 1011 | } 1012 | }, 1013 | "node_modules/debug": { 1014 | "version": "4.3.4", 1015 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1016 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1017 | "dev": true, 1018 | "dependencies": { 1019 | "ms": "2.1.2" 1020 | }, 1021 | "engines": { 1022 | "node": ">=6.0" 1023 | }, 1024 | "peerDependenciesMeta": { 1025 | "supports-color": { 1026 | "optional": true 1027 | } 1028 | } 1029 | }, 1030 | "node_modules/deep-is": { 1031 | "version": "0.1.4", 1032 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1033 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1034 | "dev": true, 1035 | "peer": true 1036 | }, 1037 | "node_modules/diff": { 1038 | "version": "4.0.2", 1039 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 1040 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 1041 | "dev": true, 1042 | "engines": { 1043 | "node": ">=0.3.1" 1044 | } 1045 | }, 1046 | "node_modules/dir-glob": { 1047 | "version": "3.0.1", 1048 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 1049 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 1050 | "dev": true, 1051 | "dependencies": { 1052 | "path-type": "^4.0.0" 1053 | }, 1054 | "engines": { 1055 | "node": ">=8" 1056 | } 1057 | }, 1058 | "node_modules/doctrine": { 1059 | "version": "3.0.0", 1060 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1061 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1062 | "dev": true, 1063 | "peer": true, 1064 | "dependencies": { 1065 | "esutils": "^2.0.2" 1066 | }, 1067 | "engines": { 1068 | "node": ">=6.0.0" 1069 | } 1070 | }, 1071 | "node_modules/electron-to-chromium": { 1072 | "version": "1.4.505", 1073 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.505.tgz", 1074 | "integrity": "sha512-0A50eL5BCCKdxig2SsCXhpuztnB9PfUgRMojj5tMvt8O54lbwz3t6wNgnpiTRosw5QjlJB7ixhVyeg8daLQwSQ==", 1075 | "dev": true 1076 | }, 1077 | "node_modules/enhanced-resolve": { 1078 | "version": "5.15.0", 1079 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", 1080 | "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", 1081 | "dev": true, 1082 | "dependencies": { 1083 | "graceful-fs": "^4.2.4", 1084 | "tapable": "^2.2.0" 1085 | }, 1086 | "engines": { 1087 | "node": ">=10.13.0" 1088 | } 1089 | }, 1090 | "node_modules/envinfo": { 1091 | "version": "7.10.0", 1092 | "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", 1093 | "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", 1094 | "dev": true, 1095 | "bin": { 1096 | "envinfo": "dist/cli.js" 1097 | }, 1098 | "engines": { 1099 | "node": ">=4" 1100 | } 1101 | }, 1102 | "node_modules/es-module-lexer": { 1103 | "version": "1.3.0", 1104 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", 1105 | "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", 1106 | "dev": true 1107 | }, 1108 | "node_modules/escalade": { 1109 | "version": "3.1.1", 1110 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1111 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1112 | "dev": true, 1113 | "engines": { 1114 | "node": ">=6" 1115 | } 1116 | }, 1117 | "node_modules/escape-string-regexp": { 1118 | "version": "4.0.0", 1119 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1120 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1121 | "dev": true, 1122 | "peer": true, 1123 | "engines": { 1124 | "node": ">=10" 1125 | }, 1126 | "funding": { 1127 | "url": "https://github.com/sponsors/sindresorhus" 1128 | } 1129 | }, 1130 | "node_modules/eslint": { 1131 | "version": "8.47.0", 1132 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", 1133 | "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", 1134 | "dev": true, 1135 | "peer": true, 1136 | "dependencies": { 1137 | "@eslint-community/eslint-utils": "^4.2.0", 1138 | "@eslint-community/regexpp": "^4.6.1", 1139 | "@eslint/eslintrc": "^2.1.2", 1140 | "@eslint/js": "^8.47.0", 1141 | "@humanwhocodes/config-array": "^0.11.10", 1142 | "@humanwhocodes/module-importer": "^1.0.1", 1143 | "@nodelib/fs.walk": "^1.2.8", 1144 | "ajv": "^6.12.4", 1145 | "chalk": "^4.0.0", 1146 | "cross-spawn": "^7.0.2", 1147 | "debug": "^4.3.2", 1148 | "doctrine": "^3.0.0", 1149 | "escape-string-regexp": "^4.0.0", 1150 | "eslint-scope": "^7.2.2", 1151 | "eslint-visitor-keys": "^3.4.3", 1152 | "espree": "^9.6.1", 1153 | "esquery": "^1.4.2", 1154 | "esutils": "^2.0.2", 1155 | "fast-deep-equal": "^3.1.3", 1156 | "file-entry-cache": "^6.0.1", 1157 | "find-up": "^5.0.0", 1158 | "glob-parent": "^6.0.2", 1159 | "globals": "^13.19.0", 1160 | "graphemer": "^1.4.0", 1161 | "ignore": "^5.2.0", 1162 | "imurmurhash": "^0.1.4", 1163 | "is-glob": "^4.0.0", 1164 | "is-path-inside": "^3.0.3", 1165 | "js-yaml": "^4.1.0", 1166 | "json-stable-stringify-without-jsonify": "^1.0.1", 1167 | "levn": "^0.4.1", 1168 | "lodash.merge": "^4.6.2", 1169 | "minimatch": "^3.1.2", 1170 | "natural-compare": "^1.4.0", 1171 | "optionator": "^0.9.3", 1172 | "strip-ansi": "^6.0.1", 1173 | "text-table": "^0.2.0" 1174 | }, 1175 | "bin": { 1176 | "eslint": "bin/eslint.js" 1177 | }, 1178 | "engines": { 1179 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1180 | }, 1181 | "funding": { 1182 | "url": "https://opencollective.com/eslint" 1183 | } 1184 | }, 1185 | "node_modules/eslint-scope": { 1186 | "version": "7.2.2", 1187 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 1188 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 1189 | "dev": true, 1190 | "peer": true, 1191 | "dependencies": { 1192 | "esrecurse": "^4.3.0", 1193 | "estraverse": "^5.2.0" 1194 | }, 1195 | "engines": { 1196 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1197 | }, 1198 | "funding": { 1199 | "url": "https://opencollective.com/eslint" 1200 | } 1201 | }, 1202 | "node_modules/eslint-visitor-keys": { 1203 | "version": "3.4.3", 1204 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1205 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1206 | "dev": true, 1207 | "engines": { 1208 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1209 | }, 1210 | "funding": { 1211 | "url": "https://opencollective.com/eslint" 1212 | } 1213 | }, 1214 | "node_modules/espree": { 1215 | "version": "9.6.1", 1216 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 1217 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 1218 | "dev": true, 1219 | "peer": true, 1220 | "dependencies": { 1221 | "acorn": "^8.9.0", 1222 | "acorn-jsx": "^5.3.2", 1223 | "eslint-visitor-keys": "^3.4.1" 1224 | }, 1225 | "engines": { 1226 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1227 | }, 1228 | "funding": { 1229 | "url": "https://opencollective.com/eslint" 1230 | } 1231 | }, 1232 | "node_modules/esquery": { 1233 | "version": "1.5.0", 1234 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 1235 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 1236 | "dev": true, 1237 | "peer": true, 1238 | "dependencies": { 1239 | "estraverse": "^5.1.0" 1240 | }, 1241 | "engines": { 1242 | "node": ">=0.10" 1243 | } 1244 | }, 1245 | "node_modules/esrecurse": { 1246 | "version": "4.3.0", 1247 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1248 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1249 | "dev": true, 1250 | "dependencies": { 1251 | "estraverse": "^5.2.0" 1252 | }, 1253 | "engines": { 1254 | "node": ">=4.0" 1255 | } 1256 | }, 1257 | "node_modules/estraverse": { 1258 | "version": "5.3.0", 1259 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1260 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1261 | "dev": true, 1262 | "engines": { 1263 | "node": ">=4.0" 1264 | } 1265 | }, 1266 | "node_modules/esutils": { 1267 | "version": "2.0.3", 1268 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1269 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1270 | "dev": true, 1271 | "peer": true, 1272 | "engines": { 1273 | "node": ">=0.10.0" 1274 | } 1275 | }, 1276 | "node_modules/events": { 1277 | "version": "3.3.0", 1278 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 1279 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 1280 | "dev": true, 1281 | "engines": { 1282 | "node": ">=0.8.x" 1283 | } 1284 | }, 1285 | "node_modules/fast-deep-equal": { 1286 | "version": "3.1.3", 1287 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1288 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1289 | "dev": true 1290 | }, 1291 | "node_modules/fast-glob": { 1292 | "version": "3.3.1", 1293 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", 1294 | "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", 1295 | "dev": true, 1296 | "dependencies": { 1297 | "@nodelib/fs.stat": "^2.0.2", 1298 | "@nodelib/fs.walk": "^1.2.3", 1299 | "glob-parent": "^5.1.2", 1300 | "merge2": "^1.3.0", 1301 | "micromatch": "^4.0.4" 1302 | }, 1303 | "engines": { 1304 | "node": ">=8.6.0" 1305 | } 1306 | }, 1307 | "node_modules/fast-glob/node_modules/glob-parent": { 1308 | "version": "5.1.2", 1309 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1310 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1311 | "dev": true, 1312 | "dependencies": { 1313 | "is-glob": "^4.0.1" 1314 | }, 1315 | "engines": { 1316 | "node": ">= 6" 1317 | } 1318 | }, 1319 | "node_modules/fast-json-stable-stringify": { 1320 | "version": "2.1.0", 1321 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1322 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1323 | "dev": true 1324 | }, 1325 | "node_modules/fast-levenshtein": { 1326 | "version": "2.0.6", 1327 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1328 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1329 | "dev": true, 1330 | "peer": true 1331 | }, 1332 | "node_modules/fastest-levenshtein": { 1333 | "version": "1.0.16", 1334 | "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", 1335 | "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", 1336 | "dev": true, 1337 | "engines": { 1338 | "node": ">= 4.9.1" 1339 | } 1340 | }, 1341 | "node_modules/fastq": { 1342 | "version": "1.15.0", 1343 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1344 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1345 | "dev": true, 1346 | "dependencies": { 1347 | "reusify": "^1.0.4" 1348 | } 1349 | }, 1350 | "node_modules/file-entry-cache": { 1351 | "version": "6.0.1", 1352 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1353 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1354 | "dev": true, 1355 | "peer": true, 1356 | "dependencies": { 1357 | "flat-cache": "^3.0.4" 1358 | }, 1359 | "engines": { 1360 | "node": "^10.12.0 || >=12.0.0" 1361 | } 1362 | }, 1363 | "node_modules/fill-range": { 1364 | "version": "7.0.1", 1365 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1366 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1367 | "dev": true, 1368 | "dependencies": { 1369 | "to-regex-range": "^5.0.1" 1370 | }, 1371 | "engines": { 1372 | "node": ">=8" 1373 | } 1374 | }, 1375 | "node_modules/find-up": { 1376 | "version": "5.0.0", 1377 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1378 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1379 | "dev": true, 1380 | "peer": true, 1381 | "dependencies": { 1382 | "locate-path": "^6.0.0", 1383 | "path-exists": "^4.0.0" 1384 | }, 1385 | "engines": { 1386 | "node": ">=10" 1387 | }, 1388 | "funding": { 1389 | "url": "https://github.com/sponsors/sindresorhus" 1390 | } 1391 | }, 1392 | "node_modules/flat-cache": { 1393 | "version": "3.0.4", 1394 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1395 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1396 | "dev": true, 1397 | "peer": true, 1398 | "dependencies": { 1399 | "flatted": "^3.1.0", 1400 | "rimraf": "^3.0.2" 1401 | }, 1402 | "engines": { 1403 | "node": "^10.12.0 || >=12.0.0" 1404 | } 1405 | }, 1406 | "node_modules/flatted": { 1407 | "version": "3.2.7", 1408 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", 1409 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", 1410 | "dev": true, 1411 | "peer": true 1412 | }, 1413 | "node_modules/fs.realpath": { 1414 | "version": "1.0.0", 1415 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1416 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1417 | "dev": true, 1418 | "peer": true 1419 | }, 1420 | "node_modules/function-bind": { 1421 | "version": "1.1.1", 1422 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1423 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1424 | "dev": true 1425 | }, 1426 | "node_modules/glob": { 1427 | "version": "7.2.3", 1428 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1429 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1430 | "dev": true, 1431 | "peer": true, 1432 | "dependencies": { 1433 | "fs.realpath": "^1.0.0", 1434 | "inflight": "^1.0.4", 1435 | "inherits": "2", 1436 | "minimatch": "^3.1.1", 1437 | "once": "^1.3.0", 1438 | "path-is-absolute": "^1.0.0" 1439 | }, 1440 | "engines": { 1441 | "node": "*" 1442 | }, 1443 | "funding": { 1444 | "url": "https://github.com/sponsors/isaacs" 1445 | } 1446 | }, 1447 | "node_modules/glob-parent": { 1448 | "version": "6.0.2", 1449 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1450 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1451 | "dev": true, 1452 | "peer": true, 1453 | "dependencies": { 1454 | "is-glob": "^4.0.3" 1455 | }, 1456 | "engines": { 1457 | "node": ">=10.13.0" 1458 | } 1459 | }, 1460 | "node_modules/glob-to-regexp": { 1461 | "version": "0.4.1", 1462 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 1463 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 1464 | "dev": true 1465 | }, 1466 | "node_modules/globals": { 1467 | "version": "13.21.0", 1468 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", 1469 | "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", 1470 | "dev": true, 1471 | "peer": true, 1472 | "dependencies": { 1473 | "type-fest": "^0.20.2" 1474 | }, 1475 | "engines": { 1476 | "node": ">=8" 1477 | }, 1478 | "funding": { 1479 | "url": "https://github.com/sponsors/sindresorhus" 1480 | } 1481 | }, 1482 | "node_modules/globby": { 1483 | "version": "11.1.0", 1484 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 1485 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 1486 | "dev": true, 1487 | "dependencies": { 1488 | "array-union": "^2.1.0", 1489 | "dir-glob": "^3.0.1", 1490 | "fast-glob": "^3.2.9", 1491 | "ignore": "^5.2.0", 1492 | "merge2": "^1.4.1", 1493 | "slash": "^3.0.0" 1494 | }, 1495 | "engines": { 1496 | "node": ">=10" 1497 | }, 1498 | "funding": { 1499 | "url": "https://github.com/sponsors/sindresorhus" 1500 | } 1501 | }, 1502 | "node_modules/graceful-fs": { 1503 | "version": "4.2.11", 1504 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1505 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1506 | "dev": true 1507 | }, 1508 | "node_modules/graphemer": { 1509 | "version": "1.4.0", 1510 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 1511 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 1512 | "dev": true 1513 | }, 1514 | "node_modules/has": { 1515 | "version": "1.0.3", 1516 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1517 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1518 | "dev": true, 1519 | "dependencies": { 1520 | "function-bind": "^1.1.1" 1521 | }, 1522 | "engines": { 1523 | "node": ">= 0.4.0" 1524 | } 1525 | }, 1526 | "node_modules/has-flag": { 1527 | "version": "4.0.0", 1528 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1529 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1530 | "dev": true, 1531 | "engines": { 1532 | "node": ">=8" 1533 | } 1534 | }, 1535 | "node_modules/ignore": { 1536 | "version": "5.2.4", 1537 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 1538 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 1539 | "dev": true, 1540 | "engines": { 1541 | "node": ">= 4" 1542 | } 1543 | }, 1544 | "node_modules/import-fresh": { 1545 | "version": "3.3.0", 1546 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1547 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1548 | "dev": true, 1549 | "peer": true, 1550 | "dependencies": { 1551 | "parent-module": "^1.0.0", 1552 | "resolve-from": "^4.0.0" 1553 | }, 1554 | "engines": { 1555 | "node": ">=6" 1556 | }, 1557 | "funding": { 1558 | "url": "https://github.com/sponsors/sindresorhus" 1559 | } 1560 | }, 1561 | "node_modules/import-local": { 1562 | "version": "3.1.0", 1563 | "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", 1564 | "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", 1565 | "dev": true, 1566 | "dependencies": { 1567 | "pkg-dir": "^4.2.0", 1568 | "resolve-cwd": "^3.0.0" 1569 | }, 1570 | "bin": { 1571 | "import-local-fixture": "fixtures/cli.js" 1572 | }, 1573 | "engines": { 1574 | "node": ">=8" 1575 | }, 1576 | "funding": { 1577 | "url": "https://github.com/sponsors/sindresorhus" 1578 | } 1579 | }, 1580 | "node_modules/imurmurhash": { 1581 | "version": "0.1.4", 1582 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1583 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1584 | "dev": true, 1585 | "peer": true, 1586 | "engines": { 1587 | "node": ">=0.8.19" 1588 | } 1589 | }, 1590 | "node_modules/inflight": { 1591 | "version": "1.0.6", 1592 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1593 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1594 | "dev": true, 1595 | "peer": true, 1596 | "dependencies": { 1597 | "once": "^1.3.0", 1598 | "wrappy": "1" 1599 | } 1600 | }, 1601 | "node_modules/inherits": { 1602 | "version": "2.0.4", 1603 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1604 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1605 | "dev": true, 1606 | "peer": true 1607 | }, 1608 | "node_modules/interpret": { 1609 | "version": "3.1.1", 1610 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", 1611 | "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", 1612 | "dev": true, 1613 | "engines": { 1614 | "node": ">=10.13.0" 1615 | } 1616 | }, 1617 | "node_modules/is-core-module": { 1618 | "version": "2.13.0", 1619 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", 1620 | "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", 1621 | "dev": true, 1622 | "dependencies": { 1623 | "has": "^1.0.3" 1624 | }, 1625 | "funding": { 1626 | "url": "https://github.com/sponsors/ljharb" 1627 | } 1628 | }, 1629 | "node_modules/is-extglob": { 1630 | "version": "2.1.1", 1631 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1632 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1633 | "dev": true, 1634 | "engines": { 1635 | "node": ">=0.10.0" 1636 | } 1637 | }, 1638 | "node_modules/is-glob": { 1639 | "version": "4.0.3", 1640 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1641 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1642 | "dev": true, 1643 | "dependencies": { 1644 | "is-extglob": "^2.1.1" 1645 | }, 1646 | "engines": { 1647 | "node": ">=0.10.0" 1648 | } 1649 | }, 1650 | "node_modules/is-number": { 1651 | "version": "7.0.0", 1652 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1653 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1654 | "dev": true, 1655 | "engines": { 1656 | "node": ">=0.12.0" 1657 | } 1658 | }, 1659 | "node_modules/is-path-inside": { 1660 | "version": "3.0.3", 1661 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1662 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1663 | "dev": true, 1664 | "peer": true, 1665 | "engines": { 1666 | "node": ">=8" 1667 | } 1668 | }, 1669 | "node_modules/is-plain-object": { 1670 | "version": "2.0.4", 1671 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 1672 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 1673 | "dev": true, 1674 | "dependencies": { 1675 | "isobject": "^3.0.1" 1676 | }, 1677 | "engines": { 1678 | "node": ">=0.10.0" 1679 | } 1680 | }, 1681 | "node_modules/isexe": { 1682 | "version": "2.0.0", 1683 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1684 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1685 | "dev": true 1686 | }, 1687 | "node_modules/isobject": { 1688 | "version": "3.0.1", 1689 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 1690 | "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", 1691 | "dev": true, 1692 | "engines": { 1693 | "node": ">=0.10.0" 1694 | } 1695 | }, 1696 | "node_modules/jest-worker": { 1697 | "version": "27.5.1", 1698 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", 1699 | "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", 1700 | "dev": true, 1701 | "dependencies": { 1702 | "@types/node": "*", 1703 | "merge-stream": "^2.0.0", 1704 | "supports-color": "^8.0.0" 1705 | }, 1706 | "engines": { 1707 | "node": ">= 10.13.0" 1708 | } 1709 | }, 1710 | "node_modules/jest-worker/node_modules/supports-color": { 1711 | "version": "8.1.1", 1712 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1713 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1714 | "dev": true, 1715 | "dependencies": { 1716 | "has-flag": "^4.0.0" 1717 | }, 1718 | "engines": { 1719 | "node": ">=10" 1720 | }, 1721 | "funding": { 1722 | "url": "https://github.com/chalk/supports-color?sponsor=1" 1723 | } 1724 | }, 1725 | "node_modules/js-yaml": { 1726 | "version": "4.1.0", 1727 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1728 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1729 | "dev": true, 1730 | "peer": true, 1731 | "dependencies": { 1732 | "argparse": "^2.0.1" 1733 | }, 1734 | "bin": { 1735 | "js-yaml": "bin/js-yaml.js" 1736 | } 1737 | }, 1738 | "node_modules/json-parse-even-better-errors": { 1739 | "version": "2.3.1", 1740 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1741 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 1742 | "dev": true 1743 | }, 1744 | "node_modules/json-schema-traverse": { 1745 | "version": "0.4.1", 1746 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1747 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1748 | "dev": true 1749 | }, 1750 | "node_modules/json-stable-stringify-without-jsonify": { 1751 | "version": "1.0.1", 1752 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1753 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 1754 | "dev": true, 1755 | "peer": true 1756 | }, 1757 | "node_modules/kind-of": { 1758 | "version": "6.0.3", 1759 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 1760 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", 1761 | "dev": true, 1762 | "engines": { 1763 | "node": ">=0.10.0" 1764 | } 1765 | }, 1766 | "node_modules/levn": { 1767 | "version": "0.4.1", 1768 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1769 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1770 | "dev": true, 1771 | "peer": true, 1772 | "dependencies": { 1773 | "prelude-ls": "^1.2.1", 1774 | "type-check": "~0.4.0" 1775 | }, 1776 | "engines": { 1777 | "node": ">= 0.8.0" 1778 | } 1779 | }, 1780 | "node_modules/loader-runner": { 1781 | "version": "4.3.0", 1782 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", 1783 | "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", 1784 | "dev": true, 1785 | "engines": { 1786 | "node": ">=6.11.5" 1787 | } 1788 | }, 1789 | "node_modules/locate-path": { 1790 | "version": "6.0.0", 1791 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1792 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1793 | "dev": true, 1794 | "peer": true, 1795 | "dependencies": { 1796 | "p-locate": "^5.0.0" 1797 | }, 1798 | "engines": { 1799 | "node": ">=10" 1800 | }, 1801 | "funding": { 1802 | "url": "https://github.com/sponsors/sindresorhus" 1803 | } 1804 | }, 1805 | "node_modules/lodash.merge": { 1806 | "version": "4.6.2", 1807 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1808 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1809 | "dev": true, 1810 | "peer": true 1811 | }, 1812 | "node_modules/lru-cache": { 1813 | "version": "6.0.0", 1814 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1815 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1816 | "dev": true, 1817 | "dependencies": { 1818 | "yallist": "^4.0.0" 1819 | }, 1820 | "engines": { 1821 | "node": ">=10" 1822 | } 1823 | }, 1824 | "node_modules/make-error": { 1825 | "version": "1.3.6", 1826 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 1827 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 1828 | "dev": true 1829 | }, 1830 | "node_modules/merge-stream": { 1831 | "version": "2.0.0", 1832 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1833 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1834 | "dev": true 1835 | }, 1836 | "node_modules/merge2": { 1837 | "version": "1.4.1", 1838 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1839 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1840 | "dev": true, 1841 | "engines": { 1842 | "node": ">= 8" 1843 | } 1844 | }, 1845 | "node_modules/micromatch": { 1846 | "version": "4.0.5", 1847 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1848 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1849 | "dev": true, 1850 | "dependencies": { 1851 | "braces": "^3.0.2", 1852 | "picomatch": "^2.3.1" 1853 | }, 1854 | "engines": { 1855 | "node": ">=8.6" 1856 | } 1857 | }, 1858 | "node_modules/mime-db": { 1859 | "version": "1.52.0", 1860 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1861 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1862 | "dev": true, 1863 | "engines": { 1864 | "node": ">= 0.6" 1865 | } 1866 | }, 1867 | "node_modules/mime-types": { 1868 | "version": "2.1.35", 1869 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1870 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1871 | "dev": true, 1872 | "dependencies": { 1873 | "mime-db": "1.52.0" 1874 | }, 1875 | "engines": { 1876 | "node": ">= 0.6" 1877 | } 1878 | }, 1879 | "node_modules/minimatch": { 1880 | "version": "3.1.2", 1881 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1882 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1883 | "dev": true, 1884 | "peer": true, 1885 | "dependencies": { 1886 | "brace-expansion": "^1.1.7" 1887 | }, 1888 | "engines": { 1889 | "node": "*" 1890 | } 1891 | }, 1892 | "node_modules/ms": { 1893 | "version": "2.1.2", 1894 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1895 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1896 | "dev": true 1897 | }, 1898 | "node_modules/natural-compare": { 1899 | "version": "1.4.0", 1900 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1901 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 1902 | "dev": true 1903 | }, 1904 | "node_modules/neo-async": { 1905 | "version": "2.6.2", 1906 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 1907 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", 1908 | "dev": true 1909 | }, 1910 | "node_modules/node-releases": { 1911 | "version": "2.0.13", 1912 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", 1913 | "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", 1914 | "dev": true 1915 | }, 1916 | "node_modules/once": { 1917 | "version": "1.4.0", 1918 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1919 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1920 | "dev": true, 1921 | "peer": true, 1922 | "dependencies": { 1923 | "wrappy": "1" 1924 | } 1925 | }, 1926 | "node_modules/optionator": { 1927 | "version": "0.9.3", 1928 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 1929 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 1930 | "dev": true, 1931 | "peer": true, 1932 | "dependencies": { 1933 | "@aashutoshrathi/word-wrap": "^1.2.3", 1934 | "deep-is": "^0.1.3", 1935 | "fast-levenshtein": "^2.0.6", 1936 | "levn": "^0.4.1", 1937 | "prelude-ls": "^1.2.1", 1938 | "type-check": "^0.4.0" 1939 | }, 1940 | "engines": { 1941 | "node": ">= 0.8.0" 1942 | } 1943 | }, 1944 | "node_modules/p-limit": { 1945 | "version": "3.1.0", 1946 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1947 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1948 | "dev": true, 1949 | "peer": true, 1950 | "dependencies": { 1951 | "yocto-queue": "^0.1.0" 1952 | }, 1953 | "engines": { 1954 | "node": ">=10" 1955 | }, 1956 | "funding": { 1957 | "url": "https://github.com/sponsors/sindresorhus" 1958 | } 1959 | }, 1960 | "node_modules/p-locate": { 1961 | "version": "5.0.0", 1962 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1963 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1964 | "dev": true, 1965 | "peer": true, 1966 | "dependencies": { 1967 | "p-limit": "^3.0.2" 1968 | }, 1969 | "engines": { 1970 | "node": ">=10" 1971 | }, 1972 | "funding": { 1973 | "url": "https://github.com/sponsors/sindresorhus" 1974 | } 1975 | }, 1976 | "node_modules/p-try": { 1977 | "version": "2.2.0", 1978 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1979 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1980 | "dev": true, 1981 | "engines": { 1982 | "node": ">=6" 1983 | } 1984 | }, 1985 | "node_modules/parent-module": { 1986 | "version": "1.0.1", 1987 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1988 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1989 | "dev": true, 1990 | "peer": true, 1991 | "dependencies": { 1992 | "callsites": "^3.0.0" 1993 | }, 1994 | "engines": { 1995 | "node": ">=6" 1996 | } 1997 | }, 1998 | "node_modules/path-exists": { 1999 | "version": "4.0.0", 2000 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2001 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2002 | "dev": true, 2003 | "engines": { 2004 | "node": ">=8" 2005 | } 2006 | }, 2007 | "node_modules/path-is-absolute": { 2008 | "version": "1.0.1", 2009 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2010 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2011 | "dev": true, 2012 | "peer": true, 2013 | "engines": { 2014 | "node": ">=0.10.0" 2015 | } 2016 | }, 2017 | "node_modules/path-key": { 2018 | "version": "3.1.1", 2019 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2020 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2021 | "dev": true, 2022 | "engines": { 2023 | "node": ">=8" 2024 | } 2025 | }, 2026 | "node_modules/path-parse": { 2027 | "version": "1.0.7", 2028 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2029 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2030 | "dev": true 2031 | }, 2032 | "node_modules/path-type": { 2033 | "version": "4.0.0", 2034 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2035 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2036 | "dev": true, 2037 | "engines": { 2038 | "node": ">=8" 2039 | } 2040 | }, 2041 | "node_modules/picocolors": { 2042 | "version": "1.0.0", 2043 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2044 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 2045 | "dev": true 2046 | }, 2047 | "node_modules/picomatch": { 2048 | "version": "2.3.1", 2049 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2050 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2051 | "dev": true, 2052 | "engines": { 2053 | "node": ">=8.6" 2054 | }, 2055 | "funding": { 2056 | "url": "https://github.com/sponsors/jonschlinkert" 2057 | } 2058 | }, 2059 | "node_modules/pkg-dir": { 2060 | "version": "4.2.0", 2061 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 2062 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 2063 | "dev": true, 2064 | "dependencies": { 2065 | "find-up": "^4.0.0" 2066 | }, 2067 | "engines": { 2068 | "node": ">=8" 2069 | } 2070 | }, 2071 | "node_modules/pkg-dir/node_modules/find-up": { 2072 | "version": "4.1.0", 2073 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 2074 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 2075 | "dev": true, 2076 | "dependencies": { 2077 | "locate-path": "^5.0.0", 2078 | "path-exists": "^4.0.0" 2079 | }, 2080 | "engines": { 2081 | "node": ">=8" 2082 | } 2083 | }, 2084 | "node_modules/pkg-dir/node_modules/locate-path": { 2085 | "version": "5.0.0", 2086 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 2087 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 2088 | "dev": true, 2089 | "dependencies": { 2090 | "p-locate": "^4.1.0" 2091 | }, 2092 | "engines": { 2093 | "node": ">=8" 2094 | } 2095 | }, 2096 | "node_modules/pkg-dir/node_modules/p-limit": { 2097 | "version": "2.3.0", 2098 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 2099 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 2100 | "dev": true, 2101 | "dependencies": { 2102 | "p-try": "^2.0.0" 2103 | }, 2104 | "engines": { 2105 | "node": ">=6" 2106 | }, 2107 | "funding": { 2108 | "url": "https://github.com/sponsors/sindresorhus" 2109 | } 2110 | }, 2111 | "node_modules/pkg-dir/node_modules/p-locate": { 2112 | "version": "4.1.0", 2113 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 2114 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 2115 | "dev": true, 2116 | "dependencies": { 2117 | "p-limit": "^2.2.0" 2118 | }, 2119 | "engines": { 2120 | "node": ">=8" 2121 | } 2122 | }, 2123 | "node_modules/prelude-ls": { 2124 | "version": "1.2.1", 2125 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2126 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2127 | "dev": true, 2128 | "peer": true, 2129 | "engines": { 2130 | "node": ">= 0.8.0" 2131 | } 2132 | }, 2133 | "node_modules/prettier": { 2134 | "version": "3.0.3", 2135 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", 2136 | "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", 2137 | "dev": true, 2138 | "bin": { 2139 | "prettier": "bin/prettier.cjs" 2140 | }, 2141 | "engines": { 2142 | "node": ">=14" 2143 | }, 2144 | "funding": { 2145 | "url": "https://github.com/prettier/prettier?sponsor=1" 2146 | } 2147 | }, 2148 | "node_modules/punycode": { 2149 | "version": "2.3.0", 2150 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 2151 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 2152 | "dev": true, 2153 | "engines": { 2154 | "node": ">=6" 2155 | } 2156 | }, 2157 | "node_modules/queue-microtask": { 2158 | "version": "1.2.3", 2159 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2160 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2161 | "dev": true, 2162 | "funding": [ 2163 | { 2164 | "type": "github", 2165 | "url": "https://github.com/sponsors/feross" 2166 | }, 2167 | { 2168 | "type": "patreon", 2169 | "url": "https://www.patreon.com/feross" 2170 | }, 2171 | { 2172 | "type": "consulting", 2173 | "url": "https://feross.org/support" 2174 | } 2175 | ] 2176 | }, 2177 | "node_modules/randombytes": { 2178 | "version": "2.1.0", 2179 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2180 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2181 | "dev": true, 2182 | "dependencies": { 2183 | "safe-buffer": "^5.1.0" 2184 | } 2185 | }, 2186 | "node_modules/rechoir": { 2187 | "version": "0.8.0", 2188 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", 2189 | "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", 2190 | "dev": true, 2191 | "dependencies": { 2192 | "resolve": "^1.20.0" 2193 | }, 2194 | "engines": { 2195 | "node": ">= 10.13.0" 2196 | } 2197 | }, 2198 | "node_modules/resolve": { 2199 | "version": "1.22.4", 2200 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", 2201 | "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", 2202 | "dev": true, 2203 | "dependencies": { 2204 | "is-core-module": "^2.13.0", 2205 | "path-parse": "^1.0.7", 2206 | "supports-preserve-symlinks-flag": "^1.0.0" 2207 | }, 2208 | "bin": { 2209 | "resolve": "bin/resolve" 2210 | }, 2211 | "funding": { 2212 | "url": "https://github.com/sponsors/ljharb" 2213 | } 2214 | }, 2215 | "node_modules/resolve-cwd": { 2216 | "version": "3.0.0", 2217 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 2218 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", 2219 | "dev": true, 2220 | "dependencies": { 2221 | "resolve-from": "^5.0.0" 2222 | }, 2223 | "engines": { 2224 | "node": ">=8" 2225 | } 2226 | }, 2227 | "node_modules/resolve-cwd/node_modules/resolve-from": { 2228 | "version": "5.0.0", 2229 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2230 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2231 | "dev": true, 2232 | "engines": { 2233 | "node": ">=8" 2234 | } 2235 | }, 2236 | "node_modules/resolve-from": { 2237 | "version": "4.0.0", 2238 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2239 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2240 | "dev": true, 2241 | "peer": true, 2242 | "engines": { 2243 | "node": ">=4" 2244 | } 2245 | }, 2246 | "node_modules/reusify": { 2247 | "version": "1.0.4", 2248 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2249 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2250 | "dev": true, 2251 | "engines": { 2252 | "iojs": ">=1.0.0", 2253 | "node": ">=0.10.0" 2254 | } 2255 | }, 2256 | "node_modules/rimraf": { 2257 | "version": "3.0.2", 2258 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2259 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2260 | "dev": true, 2261 | "peer": true, 2262 | "dependencies": { 2263 | "glob": "^7.1.3" 2264 | }, 2265 | "bin": { 2266 | "rimraf": "bin.js" 2267 | }, 2268 | "funding": { 2269 | "url": "https://github.com/sponsors/isaacs" 2270 | } 2271 | }, 2272 | "node_modules/run-parallel": { 2273 | "version": "1.2.0", 2274 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2275 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2276 | "dev": true, 2277 | "funding": [ 2278 | { 2279 | "type": "github", 2280 | "url": "https://github.com/sponsors/feross" 2281 | }, 2282 | { 2283 | "type": "patreon", 2284 | "url": "https://www.patreon.com/feross" 2285 | }, 2286 | { 2287 | "type": "consulting", 2288 | "url": "https://feross.org/support" 2289 | } 2290 | ], 2291 | "dependencies": { 2292 | "queue-microtask": "^1.2.2" 2293 | } 2294 | }, 2295 | "node_modules/safe-buffer": { 2296 | "version": "5.2.1", 2297 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2298 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2299 | "dev": true, 2300 | "funding": [ 2301 | { 2302 | "type": "github", 2303 | "url": "https://github.com/sponsors/feross" 2304 | }, 2305 | { 2306 | "type": "patreon", 2307 | "url": "https://www.patreon.com/feross" 2308 | }, 2309 | { 2310 | "type": "consulting", 2311 | "url": "https://feross.org/support" 2312 | } 2313 | ] 2314 | }, 2315 | "node_modules/schema-utils": { 2316 | "version": "3.3.0", 2317 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", 2318 | "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", 2319 | "dev": true, 2320 | "dependencies": { 2321 | "@types/json-schema": "^7.0.8", 2322 | "ajv": "^6.12.5", 2323 | "ajv-keywords": "^3.5.2" 2324 | }, 2325 | "engines": { 2326 | "node": ">= 10.13.0" 2327 | }, 2328 | "funding": { 2329 | "type": "opencollective", 2330 | "url": "https://opencollective.com/webpack" 2331 | } 2332 | }, 2333 | "node_modules/semver": { 2334 | "version": "7.5.4", 2335 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 2336 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 2337 | "dev": true, 2338 | "dependencies": { 2339 | "lru-cache": "^6.0.0" 2340 | }, 2341 | "bin": { 2342 | "semver": "bin/semver.js" 2343 | }, 2344 | "engines": { 2345 | "node": ">=10" 2346 | } 2347 | }, 2348 | "node_modules/serialize-javascript": { 2349 | "version": "6.0.1", 2350 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", 2351 | "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", 2352 | "dev": true, 2353 | "dependencies": { 2354 | "randombytes": "^2.1.0" 2355 | } 2356 | }, 2357 | "node_modules/shallow-clone": { 2358 | "version": "3.0.1", 2359 | "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", 2360 | "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", 2361 | "dev": true, 2362 | "dependencies": { 2363 | "kind-of": "^6.0.2" 2364 | }, 2365 | "engines": { 2366 | "node": ">=8" 2367 | } 2368 | }, 2369 | "node_modules/shebang-command": { 2370 | "version": "2.0.0", 2371 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2372 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2373 | "dev": true, 2374 | "dependencies": { 2375 | "shebang-regex": "^3.0.0" 2376 | }, 2377 | "engines": { 2378 | "node": ">=8" 2379 | } 2380 | }, 2381 | "node_modules/shebang-regex": { 2382 | "version": "3.0.0", 2383 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2384 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2385 | "dev": true, 2386 | "engines": { 2387 | "node": ">=8" 2388 | } 2389 | }, 2390 | "node_modules/slash": { 2391 | "version": "3.0.0", 2392 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 2393 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 2394 | "dev": true, 2395 | "engines": { 2396 | "node": ">=8" 2397 | } 2398 | }, 2399 | "node_modules/source-map": { 2400 | "version": "0.6.1", 2401 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2402 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2403 | "dev": true, 2404 | "engines": { 2405 | "node": ">=0.10.0" 2406 | } 2407 | }, 2408 | "node_modules/source-map-support": { 2409 | "version": "0.5.21", 2410 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 2411 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 2412 | "dev": true, 2413 | "dependencies": { 2414 | "buffer-from": "^1.0.0", 2415 | "source-map": "^0.6.0" 2416 | } 2417 | }, 2418 | "node_modules/strip-ansi": { 2419 | "version": "6.0.1", 2420 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2421 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2422 | "dev": true, 2423 | "peer": true, 2424 | "dependencies": { 2425 | "ansi-regex": "^5.0.1" 2426 | }, 2427 | "engines": { 2428 | "node": ">=8" 2429 | } 2430 | }, 2431 | "node_modules/strip-json-comments": { 2432 | "version": "3.1.1", 2433 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2434 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2435 | "dev": true, 2436 | "peer": true, 2437 | "engines": { 2438 | "node": ">=8" 2439 | }, 2440 | "funding": { 2441 | "url": "https://github.com/sponsors/sindresorhus" 2442 | } 2443 | }, 2444 | "node_modules/supports-color": { 2445 | "version": "7.2.0", 2446 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2447 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2448 | "dev": true, 2449 | "dependencies": { 2450 | "has-flag": "^4.0.0" 2451 | }, 2452 | "engines": { 2453 | "node": ">=8" 2454 | } 2455 | }, 2456 | "node_modules/supports-preserve-symlinks-flag": { 2457 | "version": "1.0.0", 2458 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2459 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2460 | "dev": true, 2461 | "engines": { 2462 | "node": ">= 0.4" 2463 | }, 2464 | "funding": { 2465 | "url": "https://github.com/sponsors/ljharb" 2466 | } 2467 | }, 2468 | "node_modules/tapable": { 2469 | "version": "2.2.1", 2470 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", 2471 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", 2472 | "dev": true, 2473 | "engines": { 2474 | "node": ">=6" 2475 | } 2476 | }, 2477 | "node_modules/terser": { 2478 | "version": "5.19.3", 2479 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.3.tgz", 2480 | "integrity": "sha512-pQzJ9UJzM0IgmT4FAtYI6+VqFf0lj/to58AV0Xfgg0Up37RyPG7Al+1cepC6/BVuAxR9oNb41/DL4DEoHJvTdg==", 2481 | "dev": true, 2482 | "dependencies": { 2483 | "@jridgewell/source-map": "^0.3.3", 2484 | "acorn": "^8.8.2", 2485 | "commander": "^2.20.0", 2486 | "source-map-support": "~0.5.20" 2487 | }, 2488 | "bin": { 2489 | "terser": "bin/terser" 2490 | }, 2491 | "engines": { 2492 | "node": ">=10" 2493 | } 2494 | }, 2495 | "node_modules/terser-webpack-plugin": { 2496 | "version": "5.3.9", 2497 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", 2498 | "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", 2499 | "dev": true, 2500 | "dependencies": { 2501 | "@jridgewell/trace-mapping": "^0.3.17", 2502 | "jest-worker": "^27.4.5", 2503 | "schema-utils": "^3.1.1", 2504 | "serialize-javascript": "^6.0.1", 2505 | "terser": "^5.16.8" 2506 | }, 2507 | "engines": { 2508 | "node": ">= 10.13.0" 2509 | }, 2510 | "funding": { 2511 | "type": "opencollective", 2512 | "url": "https://opencollective.com/webpack" 2513 | }, 2514 | "peerDependencies": { 2515 | "webpack": "^5.1.0" 2516 | }, 2517 | "peerDependenciesMeta": { 2518 | "@swc/core": { 2519 | "optional": true 2520 | }, 2521 | "esbuild": { 2522 | "optional": true 2523 | }, 2524 | "uglify-js": { 2525 | "optional": true 2526 | } 2527 | } 2528 | }, 2529 | "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { 2530 | "version": "0.3.19", 2531 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", 2532 | "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", 2533 | "dev": true, 2534 | "dependencies": { 2535 | "@jridgewell/resolve-uri": "^3.1.0", 2536 | "@jridgewell/sourcemap-codec": "^1.4.14" 2537 | } 2538 | }, 2539 | "node_modules/text-table": { 2540 | "version": "0.2.0", 2541 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2542 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 2543 | "dev": true, 2544 | "peer": true 2545 | }, 2546 | "node_modules/to-regex-range": { 2547 | "version": "5.0.1", 2548 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2549 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2550 | "dev": true, 2551 | "dependencies": { 2552 | "is-number": "^7.0.0" 2553 | }, 2554 | "engines": { 2555 | "node": ">=8.0" 2556 | } 2557 | }, 2558 | "node_modules/ts-api-utils": { 2559 | "version": "1.0.2", 2560 | "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.2.tgz", 2561 | "integrity": "sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==", 2562 | "dev": true, 2563 | "engines": { 2564 | "node": ">=16.13.0" 2565 | }, 2566 | "peerDependencies": { 2567 | "typescript": ">=4.2.0" 2568 | } 2569 | }, 2570 | "node_modules/ts-loader": { 2571 | "version": "9.4.4", 2572 | "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", 2573 | "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==", 2574 | "dev": true, 2575 | "dependencies": { 2576 | "chalk": "^4.1.0", 2577 | "enhanced-resolve": "^5.0.0", 2578 | "micromatch": "^4.0.0", 2579 | "semver": "^7.3.4" 2580 | }, 2581 | "engines": { 2582 | "node": ">=12.0.0" 2583 | }, 2584 | "peerDependencies": { 2585 | "typescript": "*", 2586 | "webpack": "^5.0.0" 2587 | } 2588 | }, 2589 | "node_modules/ts-node": { 2590 | "version": "10.9.1", 2591 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", 2592 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", 2593 | "dev": true, 2594 | "dependencies": { 2595 | "@cspotcode/source-map-support": "^0.8.0", 2596 | "@tsconfig/node10": "^1.0.7", 2597 | "@tsconfig/node12": "^1.0.7", 2598 | "@tsconfig/node14": "^1.0.0", 2599 | "@tsconfig/node16": "^1.0.2", 2600 | "acorn": "^8.4.1", 2601 | "acorn-walk": "^8.1.1", 2602 | "arg": "^4.1.0", 2603 | "create-require": "^1.1.0", 2604 | "diff": "^4.0.1", 2605 | "make-error": "^1.1.1", 2606 | "v8-compile-cache-lib": "^3.0.1", 2607 | "yn": "3.1.1" 2608 | }, 2609 | "bin": { 2610 | "ts-node": "dist/bin.js", 2611 | "ts-node-cwd": "dist/bin-cwd.js", 2612 | "ts-node-esm": "dist/bin-esm.js", 2613 | "ts-node-script": "dist/bin-script.js", 2614 | "ts-node-transpile-only": "dist/bin-transpile.js", 2615 | "ts-script": "dist/bin-script-deprecated.js" 2616 | }, 2617 | "peerDependencies": { 2618 | "@swc/core": ">=1.2.50", 2619 | "@swc/wasm": ">=1.2.50", 2620 | "@types/node": "*", 2621 | "typescript": ">=2.7" 2622 | }, 2623 | "peerDependenciesMeta": { 2624 | "@swc/core": { 2625 | "optional": true 2626 | }, 2627 | "@swc/wasm": { 2628 | "optional": true 2629 | } 2630 | } 2631 | }, 2632 | "node_modules/type-check": { 2633 | "version": "0.4.0", 2634 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2635 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2636 | "dev": true, 2637 | "peer": true, 2638 | "dependencies": { 2639 | "prelude-ls": "^1.2.1" 2640 | }, 2641 | "engines": { 2642 | "node": ">= 0.8.0" 2643 | } 2644 | }, 2645 | "node_modules/type-fest": { 2646 | "version": "0.20.2", 2647 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 2648 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 2649 | "dev": true, 2650 | "peer": true, 2651 | "engines": { 2652 | "node": ">=10" 2653 | }, 2654 | "funding": { 2655 | "url": "https://github.com/sponsors/sindresorhus" 2656 | } 2657 | }, 2658 | "node_modules/typescript": { 2659 | "version": "5.1.6", 2660 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", 2661 | "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", 2662 | "dev": true, 2663 | "bin": { 2664 | "tsc": "bin/tsc", 2665 | "tsserver": "bin/tsserver" 2666 | }, 2667 | "engines": { 2668 | "node": ">=14.17" 2669 | } 2670 | }, 2671 | "node_modules/update-browserslist-db": { 2672 | "version": "1.0.11", 2673 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", 2674 | "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", 2675 | "dev": true, 2676 | "funding": [ 2677 | { 2678 | "type": "opencollective", 2679 | "url": "https://opencollective.com/browserslist" 2680 | }, 2681 | { 2682 | "type": "tidelift", 2683 | "url": "https://tidelift.com/funding/github/npm/browserslist" 2684 | }, 2685 | { 2686 | "type": "github", 2687 | "url": "https://github.com/sponsors/ai" 2688 | } 2689 | ], 2690 | "dependencies": { 2691 | "escalade": "^3.1.1", 2692 | "picocolors": "^1.0.0" 2693 | }, 2694 | "bin": { 2695 | "update-browserslist-db": "cli.js" 2696 | }, 2697 | "peerDependencies": { 2698 | "browserslist": ">= 4.21.0" 2699 | } 2700 | }, 2701 | "node_modules/uri-js": { 2702 | "version": "4.4.1", 2703 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2704 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2705 | "dev": true, 2706 | "dependencies": { 2707 | "punycode": "^2.1.0" 2708 | } 2709 | }, 2710 | "node_modules/v8-compile-cache-lib": { 2711 | "version": "3.0.1", 2712 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 2713 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 2714 | "dev": true 2715 | }, 2716 | "node_modules/watchpack": { 2717 | "version": "2.4.0", 2718 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", 2719 | "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", 2720 | "dev": true, 2721 | "dependencies": { 2722 | "glob-to-regexp": "^0.4.1", 2723 | "graceful-fs": "^4.1.2" 2724 | }, 2725 | "engines": { 2726 | "node": ">=10.13.0" 2727 | } 2728 | }, 2729 | "node_modules/webpack": { 2730 | "version": "5.88.2", 2731 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", 2732 | "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", 2733 | "dev": true, 2734 | "dependencies": { 2735 | "@types/eslint-scope": "^3.7.3", 2736 | "@types/estree": "^1.0.0", 2737 | "@webassemblyjs/ast": "^1.11.5", 2738 | "@webassemblyjs/wasm-edit": "^1.11.5", 2739 | "@webassemblyjs/wasm-parser": "^1.11.5", 2740 | "acorn": "^8.7.1", 2741 | "acorn-import-assertions": "^1.9.0", 2742 | "browserslist": "^4.14.5", 2743 | "chrome-trace-event": "^1.0.2", 2744 | "enhanced-resolve": "^5.15.0", 2745 | "es-module-lexer": "^1.2.1", 2746 | "eslint-scope": "5.1.1", 2747 | "events": "^3.2.0", 2748 | "glob-to-regexp": "^0.4.1", 2749 | "graceful-fs": "^4.2.9", 2750 | "json-parse-even-better-errors": "^2.3.1", 2751 | "loader-runner": "^4.2.0", 2752 | "mime-types": "^2.1.27", 2753 | "neo-async": "^2.6.2", 2754 | "schema-utils": "^3.2.0", 2755 | "tapable": "^2.1.1", 2756 | "terser-webpack-plugin": "^5.3.7", 2757 | "watchpack": "^2.4.0", 2758 | "webpack-sources": "^3.2.3" 2759 | }, 2760 | "bin": { 2761 | "webpack": "bin/webpack.js" 2762 | }, 2763 | "engines": { 2764 | "node": ">=10.13.0" 2765 | }, 2766 | "funding": { 2767 | "type": "opencollective", 2768 | "url": "https://opencollective.com/webpack" 2769 | }, 2770 | "peerDependenciesMeta": { 2771 | "webpack-cli": { 2772 | "optional": true 2773 | } 2774 | } 2775 | }, 2776 | "node_modules/webpack-cli": { 2777 | "version": "5.1.4", 2778 | "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", 2779 | "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", 2780 | "dev": true, 2781 | "dependencies": { 2782 | "@discoveryjs/json-ext": "^0.5.0", 2783 | "@webpack-cli/configtest": "^2.1.1", 2784 | "@webpack-cli/info": "^2.0.2", 2785 | "@webpack-cli/serve": "^2.0.5", 2786 | "colorette": "^2.0.14", 2787 | "commander": "^10.0.1", 2788 | "cross-spawn": "^7.0.3", 2789 | "envinfo": "^7.7.3", 2790 | "fastest-levenshtein": "^1.0.12", 2791 | "import-local": "^3.0.2", 2792 | "interpret": "^3.1.1", 2793 | "rechoir": "^0.8.0", 2794 | "webpack-merge": "^5.7.3" 2795 | }, 2796 | "bin": { 2797 | "webpack-cli": "bin/cli.js" 2798 | }, 2799 | "engines": { 2800 | "node": ">=14.15.0" 2801 | }, 2802 | "funding": { 2803 | "type": "opencollective", 2804 | "url": "https://opencollective.com/webpack" 2805 | }, 2806 | "peerDependencies": { 2807 | "webpack": "5.x.x" 2808 | }, 2809 | "peerDependenciesMeta": { 2810 | "@webpack-cli/generators": { 2811 | "optional": true 2812 | }, 2813 | "webpack-bundle-analyzer": { 2814 | "optional": true 2815 | }, 2816 | "webpack-dev-server": { 2817 | "optional": true 2818 | } 2819 | } 2820 | }, 2821 | "node_modules/webpack-cli/node_modules/commander": { 2822 | "version": "10.0.1", 2823 | "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", 2824 | "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", 2825 | "dev": true, 2826 | "engines": { 2827 | "node": ">=14" 2828 | } 2829 | }, 2830 | "node_modules/webpack-merge": { 2831 | "version": "5.9.0", 2832 | "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", 2833 | "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", 2834 | "dev": true, 2835 | "dependencies": { 2836 | "clone-deep": "^4.0.1", 2837 | "wildcard": "^2.0.0" 2838 | }, 2839 | "engines": { 2840 | "node": ">=10.0.0" 2841 | } 2842 | }, 2843 | "node_modules/webpack-sources": { 2844 | "version": "3.2.3", 2845 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", 2846 | "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", 2847 | "dev": true, 2848 | "engines": { 2849 | "node": ">=10.13.0" 2850 | } 2851 | }, 2852 | "node_modules/webpack/node_modules/eslint-scope": { 2853 | "version": "5.1.1", 2854 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 2855 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 2856 | "dev": true, 2857 | "dependencies": { 2858 | "esrecurse": "^4.3.0", 2859 | "estraverse": "^4.1.1" 2860 | }, 2861 | "engines": { 2862 | "node": ">=8.0.0" 2863 | } 2864 | }, 2865 | "node_modules/webpack/node_modules/estraverse": { 2866 | "version": "4.3.0", 2867 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 2868 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 2869 | "dev": true, 2870 | "engines": { 2871 | "node": ">=4.0" 2872 | } 2873 | }, 2874 | "node_modules/which": { 2875 | "version": "2.0.2", 2876 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2877 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2878 | "dev": true, 2879 | "dependencies": { 2880 | "isexe": "^2.0.0" 2881 | }, 2882 | "bin": { 2883 | "node-which": "bin/node-which" 2884 | }, 2885 | "engines": { 2886 | "node": ">= 8" 2887 | } 2888 | }, 2889 | "node_modules/wildcard": { 2890 | "version": "2.0.1", 2891 | "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", 2892 | "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", 2893 | "dev": true 2894 | }, 2895 | "node_modules/wrappy": { 2896 | "version": "1.0.2", 2897 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2898 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2899 | "dev": true, 2900 | "peer": true 2901 | }, 2902 | "node_modules/yallist": { 2903 | "version": "4.0.0", 2904 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2905 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2906 | "dev": true 2907 | }, 2908 | "node_modules/yn": { 2909 | "version": "3.1.1", 2910 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 2911 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 2912 | "dev": true, 2913 | "engines": { 2914 | "node": ">=6" 2915 | } 2916 | }, 2917 | "node_modules/yocto-queue": { 2918 | "version": "0.1.0", 2919 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2920 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2921 | "dev": true, 2922 | "peer": true, 2923 | "engines": { 2924 | "node": ">=10" 2925 | }, 2926 | "funding": { 2927 | "url": "https://github.com/sponsors/sindresorhus" 2928 | } 2929 | } 2930 | } 2931 | } 2932 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "build:frontend": "webpack -w", 9 | "build:backend": "tsc" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "devDependencies": { 15 | "@typescript-eslint/eslint-plugin": "^6.4.1", 16 | "@typescript-eslint/parser": "^6.4.1", 17 | "prettier": "^3.0.3", 18 | "ts-loader": "^9.4.4", 19 | "ts-node": "^10.9.1", 20 | "typescript": "^5.1.6", 21 | "webpack": "^5.88.2", 22 | "webpack-cli": "^5.1.4" 23 | }, 24 | "dependencies": { 25 | "@types/validator": "^13.11.1" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/Aula 01 - TypeAnnotation/Aula01.ts: -------------------------------------------------------------------------------- 1 | /*eslint-disable*/ 2 | 3 | // Type basic 4 | let typeName: string = "Stherzada"; 5 | let typeNumber: number = 2525562; 6 | let typeSymbol: symbol = Symbol("QUALQUERCOISA"); 7 | 8 | // Arrays 9 | 10 | let arrayNumber: number[] = [5, 3, 2, 1, 5]; 11 | let arrayString: Array = ["sther", "stherzada", "stherzinha"]; 12 | 13 | //Objects 14 | //transforma em opcional 15 | let pessoa: { nome: string; idade: number; adulto?: boolean } = { 16 | nome: "Stherzada", 17 | idade: 22, 18 | adulto: true, 19 | }; 20 | 21 | //functions 22 | 23 | function sum(x: number, y: number) { 24 | return x + y; 25 | } 26 | const result = sum(4, 2); 27 | 28 | // function sumTwo: (x: number, y:number) => number = (x, y) => x + y; 29 | -------------------------------------------------------------------------------- /src/Aula 02 - Type Any/Aula02.ts: -------------------------------------------------------------------------------- 1 | // NOT USED ANY!!!!!!!! 2 | 3 | function showMessage(msg: any) { 4 | return msg; 5 | } 6 | 7 | console.log(showMessage([1, 2, 3])); 8 | console.log(showMessage("Hello")); 9 | console.log(showMessage(22)); 10 | -------------------------------------------------------------------------------- /src/Aula 03 - Type Void/Aula03.ts: -------------------------------------------------------------------------------- 1 | function semRetorno(...args: string[]): void { 2 | console.log(args.join(" ")); 3 | } 4 | 5 | // void é está em uma função quando não é para retornar nada. 6 | //um exemplo pr ase usar void é que mudar o status de um botão 7 | 8 | const people = { 9 | name: "Sther", 10 | age: 18, 11 | 12 | displayName(): void { 13 | console.log(this.name + "" + this.age); 14 | }, 15 | }; 16 | 17 | export { people }; 18 | 19 | people.displayName(); 20 | 21 | semRetorno("Sther", "Zada"); 22 | -------------------------------------------------------------------------------- /src/Aula 04 - Type Object/Aula04.ts: -------------------------------------------------------------------------------- 1 | const objectA: { 2 | readonly keyA: string; 3 | readonly keyB: string; 4 | readonly keyC?: string; 5 | //index signature para poder adicionar mais coisas dentro deste objeto 6 | [key: string]: unknown; 7 | } = { 8 | keyA: "Value A", 9 | keyB: "Value B", 10 | }; 11 | 12 | console.log(objectA); 13 | -------------------------------------------------------------------------------- /src/Aula 05 - Type Array/Aula05.ts: -------------------------------------------------------------------------------- 1 | export function multipleArgs(...args: Array): number { 2 | return args.reduce((ac, valor) => ac * valor, 1); 3 | } 4 | 5 | export function concatString(...args: string[]): string { 6 | return args.reduce((ac, valor) => ac + valor); 7 | } 8 | 9 | export function toUpperCase(...args: string[]): string[] { 10 | return args.map((value) => value.toUpperCase()); 11 | } 12 | const result = multipleArgs(1, 2, 3); 13 | const concat = concatString("a", "b", "c"); 14 | const upper = toUpperCase("a", "b", "c"); 15 | console.log(result); 16 | console.log(concat); 17 | console.log(upper); 18 | -------------------------------------------------------------------------------- /src/Aula 06 - Type Tuple/Aula06.ts: -------------------------------------------------------------------------------- 1 | //Type tuple 2 | // ? <- sempre que tiver um deste é opcional 3 | 4 | const dataClient: [number, string] = [1, "Luiz"]; 5 | const dataClient2: [number, string, string] = [1, "Luiz", "Alves"]; 6 | const dataClient3: [number, string, string[]] = [ 7 | 1, 8 | "Sther", 9 | ["Alves", "Stherrr"], 10 | ]; 11 | 12 | console.log(dataClient3); 13 | // console.log(dataClient); 14 | // console.log(dataClient2); 15 | 16 | dataClient2[2] = "Jessica"; 17 | dataClient[0] = 20; 18 | dataClient[1] = "Stherzada"; 19 | 20 | // console.log(dataClient2); 21 | // console.log(dataClient); 22 | 23 | //readonly 24 | // indica que a atribuição ao campo só pode ocorrer como parte da declaração ou em um construtor na mesma classe. 25 | const arrayOne: readonly string[] = ["STHER", "ZADA"]; 26 | const arrayTwo: ReadonlyArray = ["STHER", "ZADA"]; 27 | 28 | console.log(arrayOne, arrayTwo); 29 | -------------------------------------------------------------------------------- /src/Aula 07 - Type Null and Undefined/Aula07.ts: -------------------------------------------------------------------------------- 1 | let x; 2 | if (typeof x === "undefined") x = "stherzada"; 3 | console.log(x + " world"); 4 | 5 | export function createPerson( 6 | firstName: string, 7 | lastName?: string 8 | ): { 9 | firstName: string; 10 | lastName?: string; 11 | } { 12 | return { 13 | firstName, 14 | lastName, 15 | }; 16 | } 17 | 18 | export function squareOf(x: unknown) { 19 | if (typeof x === "number") return x * x; 20 | return null; 21 | } 22 | 23 | const squareOfTwoNumber = squareOf(2); 24 | 25 | if (squareOfTwoNumber === null) { 26 | console.log("invalid data"); 27 | } else { 28 | console.log(squareOfTwoNumber * 100); 29 | } 30 | -------------------------------------------------------------------------------- /src/Aula 08 - Type Never/Aula 08.ts: -------------------------------------------------------------------------------- 1 | export function createError(): never { 2 | throw new Error("Error 404"); 3 | } 4 | 5 | createError(); 6 | -------------------------------------------------------------------------------- /src/Aula 09 - Type Enum/Aula09.ts: -------------------------------------------------------------------------------- 1 | //estrutura de dados não ordenada e você poder ordenar colocando vários tipos de coisas 2 | 3 | enum Colors { 4 | Red = 16, 5 | Blue = 15, 6 | Yellow = 18, 7 | Purple = "Purple", 8 | Green = 304, 9 | Pink, 10 | } 11 | 12 | enum Colors { 13 | Black = "Black", 14 | } 15 | 16 | // console.log(Colors); 17 | 18 | //quando escrevo o nome do campo ele me retorna o valor da posição de onde ele está 19 | console.log(Colors.Blue); 20 | 21 | //quando escrevo a posição, ele irá me retornar o valor do campo de onde ele está 22 | console.log(Colors[15]); 23 | 24 | // console.log(Colors.Purple); 25 | 26 | export function choiceColors(color: Colors): void { 27 | console.log(Colors[color]); 28 | } 29 | 30 | choiceColors(Colors.Yellow); 31 | -------------------------------------------------------------------------------- /src/Aula 10 - Type Unknown/Aula10.ts: -------------------------------------------------------------------------------- 1 | //unknown é um type mais seguro que o any e seria o pai para todos os outros tipos 2 | let x: unknown; 3 | 4 | x = 100; 5 | x = "Luiz"; 6 | x = 900; 7 | x = true; 8 | x = 10; 9 | const y = 100; 10 | 11 | if (typeof x === "number") console.log(x * y); 12 | 13 | // a diferença entre o any e unknown é a checagem de type, que é necessária antes de atribuir um valor 14 | -------------------------------------------------------------------------------- /src/Aula 11 - Union Types/Aula11.ts: -------------------------------------------------------------------------------- 1 | function addOrConcat(a: number | string, b: number | string): number | string { 2 | if (typeof a === "number" && b === "number") return a + b; 3 | return `${a}${b}`; 4 | } 5 | 6 | console.log(addOrConcat(10, 290)); 7 | console.log(addOrConcat("10", "290")); 8 | 9 | console.log(addOrConcat(10, "290")); 10 | console.log(addOrConcat("10", 290)); 11 | -------------------------------------------------------------------------------- /src/Aula 12 - Tipos Literais/Aula12.ts: -------------------------------------------------------------------------------- 1 | let x = 10; //eslint-disable-line 2 | x = 239090320932; 3 | const y = 10; 4 | 5 | let a = 100 as const; 6 | 7 | const person = { 8 | name: "Sther" as const, 9 | lastName: "Zada", 10 | }; 11 | 12 | function choiceColors(color: "Red" | "Yellow" | "Blue") { 13 | return color; 14 | } 15 | console.log(choiceColors("Yellow")); 16 | 17 | //Module mode 18 | export default 1; 19 | -------------------------------------------------------------------------------- /src/Aula 13 - Type Alias/Aula13.ts: -------------------------------------------------------------------------------- 1 | type Age = number; 2 | type Person = { 3 | name: string; 4 | age: Age; 5 | salary: number; 6 | favoriteColor?: string; 7 | }; 8 | 9 | type ColorRGB = "Red" | "Green" | "Blue"; 10 | type ColorCMYK = "Cyan" | "Magenta" | "Yellow" | "Black"; 11 | type favoriteColor = ColorRGB | ColorCMYK; 12 | 13 | const person: Person = { 14 | age: 22, 15 | name: "Sther", 16 | salary: 20000, 17 | }; 18 | 19 | export function setFavoriteColor(person: Person, color: favoriteColor): Person { 20 | return { ...person, favoriteColor: color }; 21 | } 22 | 23 | console.log(setFavoriteColor(person, "Magenta")); 24 | console.log(person); 25 | -------------------------------------------------------------------------------- /src/Aula 14 - Intersection Types/Aula14.ts: -------------------------------------------------------------------------------- 1 | //intersection é menos utilizado 2 | 3 | type HaveName = { name: string }; 4 | type HaveLastName = { lastname: string }; 5 | type HaveAge = { age: number }; 6 | 7 | // type Person = HaveName HaveLastName | HaveAge; 8 | // nesse caso ele só precisa de um elemento dentro desse objeto para funcionar e não necessariamente de todos e 9 | 10 | type Person = HaveName & HaveLastName & HaveAge; 11 | //quando se coloca & é necessário ter TODOS os elementos dentro do objeto 12 | 13 | // type AB = "A" | "B"; 14 | // type AC = "A" | "C"; 15 | // type Intercession = AB & AC; 16 | 17 | const person: Person = { 18 | name: "Sther", 19 | lastname: "Zada", 20 | age: 22, 21 | }; 22 | 23 | console.log(person); 24 | 25 | //Module mode 26 | export { person }; 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/Aula 15 - Function types/Aula15.ts: -------------------------------------------------------------------------------- 1 | type mapStringsCallBack = (item: string) => string; 2 | //pra saber o retorno do que irá vir na função 3 | 4 | export function mapStrings( 5 | array: string[], 6 | callbackfn: mapStringsCallBack 7 | ): string[] { 8 | const newArray: string[] = []; 9 | 10 | for (let i = 0; i < array.length; i++) { 11 | newArray.push(callbackfn(array[i])); 12 | } 13 | 14 | return newArray; 15 | } 16 | 17 | const abc = ["a", "b", "c"]; 18 | const abcMapped = mapStrings(abc, (item) => item.toUpperCase()); 19 | console.log(abc); 20 | console.log(abcMapped); 21 | -------------------------------------------------------------------------------- /src/Aula 16 - Structural/Aula16.ts: -------------------------------------------------------------------------------- 1 | //tipagem estruturada 2 | //eu preciso de um objeto que cumpra regras q o "type" tem 3 | 4 | type VerifuUserFn = (user: User, sentValues: User) => boolean; 5 | 6 | type User = { username: string; password: string }; 7 | 8 | const verifyUser: VerifuUserFn = (user, sentValues) => { 9 | return ( 10 | user.username === sentValues.username && 11 | user.password === sentValues.password 12 | ); 13 | }; 14 | 15 | const bdUser = { username: "sther", password: "32a1" }; 16 | const sentUser = { username: "sther", password: "32a1", permissions: "" }; 17 | 18 | const loggedIn = verifyUser(bdUser, sentUser); 19 | 20 | console.log(loggedIn); 21 | -------------------------------------------------------------------------------- /src/Aula 17 - Type Assertions/Aula17.ts: -------------------------------------------------------------------------------- 1 | /* Recommend*/ 2 | 3 | // Condicional 4 | const body = document.querySelector("body"); 5 | if (body) body.style.background = "red"; 6 | 7 | // type assertion 8 | const body3 = document.querySelector("body") as HTMLBodyElement; 9 | if (body3) body3.style.background = "red"; 10 | 11 | //HTMLBodyElement 12 | const input = document.querySelector(".input") as HTMLInputElement; 13 | input.value = "ROI"; 14 | input.focus(); 15 | 16 | /*Non Recommend*/ 17 | 18 | //non - nul assertions (!) 19 | const body2 = document.querySelector("body")!; //esse objeto não pode ser nulo quando se coloca a ! 20 | body2.style.background = "red"; 21 | -------------------------------------------------------------------------------- /src/Aula 18 - WebPack/index.ts: -------------------------------------------------------------------------------- 1 | import funcao from "./mod"; 2 | funcao(); 3 | -------------------------------------------------------------------------------- /src/Aula 18 - WebPack/mod.ts: -------------------------------------------------------------------------------- 1 | export default (): void => { 2 | console.log("Sou o modúlo"); 3 | }; 4 | -------------------------------------------------------------------------------- /src/Aula 19 - Workout/Aula19.ts: -------------------------------------------------------------------------------- 1 | // import "./form-control"; 2 | import "../Aula 33 - Interfaces e Classes/index"; 3 | -------------------------------------------------------------------------------- /src/Aula 19 - Workout/form-control.ts: -------------------------------------------------------------------------------- 1 | import isEmail from "validator/lib/isEmail"; 2 | 3 | const SHOW_ERROR_MESSAGES = "show-error-message"; 4 | 5 | const form = document.querySelector(".form") as HTMLFormElement; 6 | const username = document.querySelector(".username") as HTMLInputElement; 7 | const email = document.querySelector(".email") as HTMLInputElement; 8 | const password = document.querySelector(".password") as HTMLInputElement; 9 | const password2 = document.querySelector(".password2") as HTMLInputElement; 10 | 11 | form.addEventListener("submit", function (event) { 12 | event.preventDefault(); 13 | hideErrorMessages(this); 14 | checkForEmptyFields(username, email, password, password2); 15 | checkEmail(email); 16 | checkEqualPasswords(password, password2); 17 | }); 18 | 19 | function checkForEmptyFields(...inputs: HTMLInputElement[]): void { 20 | inputs.forEach((input) => { 21 | if (!input.value) showErrorMessage(input, "Campo não pode estar vazio"); 22 | }); 23 | } 24 | 25 | function hideErrorMessages(form: HTMLFormElement): void { 26 | // SÓ INTERA DENTRO DO PRÓPRIO ARRAY 27 | form.querySelectorAll("." + SHOW_ERROR_MESSAGES).forEach((item) => 28 | item.classList.remove(SHOW_ERROR_MESSAGES) 29 | ); 30 | } 31 | function showErrorMessage(input: HTMLInputElement, msg: string): void { 32 | const formFields = document.querySelector(".form-fields") as HTMLDivElement; 33 | const errorMessage = formFields.querySelector( 34 | ".error-message" 35 | ) as HTMLSpanElement; 36 | errorMessage.innerText = msg; 37 | formFields.classList.add(SHOW_ERROR_MESSAGES); 38 | } 39 | 40 | function checkEmail(input: HTMLInputElement): void { 41 | if (!isEmail(input.value)) showErrorMessage(input, "Email inválido"); 42 | } 43 | 44 | function checkEqualPasswords( 45 | password: HTMLInputElement, 46 | password2: HTMLInputElement 47 | ) { 48 | if (password.value !== password2.value) { 49 | showErrorMessage(password, "Senhas não batem"); 50 | showErrorMessage(password2, "Senhas não batem"); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/Aula 20 - Classes/Aula20.ts: -------------------------------------------------------------------------------- 1 | // forma longa 2 | export class Enterprise { 3 | public readonly name: string; // public é opcional 4 | protected readonly cnpj: string; 5 | //atributo da classe que é readonly e não o array 6 | private readonly collaborators: Collaborators[] = []; 7 | 8 | constructor(name: string, cnpj: string) { 9 | this.name = name; 10 | this.cnpj = cnpj; 11 | } 12 | 13 | public addColaborator(collaborators: Collaborators): void { 14 | this.collaborators.push(collaborators); 15 | } 16 | 17 | public displayColaborator(): void { 18 | for (const collaborators of this.collaborators) { 19 | console.log(collaborators); 20 | } 21 | } 22 | } 23 | 24 | // forma curta 25 | export class Collaborators { 26 | constructor( 27 | //funciona tanto valor qnt tipo 28 | public readonly name: string, 29 | public readonly lastname: string 30 | ) {} 31 | } 32 | 33 | const enterprise1 = new Enterprise("Twitch", "11.111.111/0001-11"); 34 | const collaborators1 = new Collaborators("Sther", "Zada"); 35 | const collaborators2 = new Collaborators("Luiz", "Bana"); 36 | const collaborators3 = new Collaborators("Maria", "Souza"); 37 | 38 | enterprise1.addColaborator(collaborators1); 39 | enterprise1.addColaborator(collaborators2); 40 | enterprise1.addColaborator(collaborators3); 41 | 42 | //Se um objeto tem as chaves de outro objeto não kliga 43 | enterprise1.addColaborator({ 44 | name: "Random", 45 | lastname: "AAAA", 46 | }); 47 | 48 | // enterprise1.name = "Facebook"; 49 | // não vai deixar até atribuir pq já foi adicionado um valor e ele está com a propiedade de só ler 50 | 51 | console.log(enterprise1); 52 | console.log(enterprise1.name); 53 | 54 | enterprise1.displayColaborator(); 55 | -------------------------------------------------------------------------------- /src/Aula 21 - Modificadores/Aula21.ts: -------------------------------------------------------------------------------- 1 | export class Enterprise { 2 | // 3 | public readonly name: string; 4 | 5 | protected readonly cnpj: string; 6 | private readonly collaborators: Collaborators[] = []; 7 | constructor(name: string, cnpj: string) { 8 | this.name = name; 9 | this.cnpj = cnpj; 10 | } 11 | 12 | //disponibilizada métodos que poderan alterar essa classe 13 | public addColaborator(collaborators: Collaborators): void { 14 | this.collaborators.push(collaborators); 15 | } 16 | public displayColaborator(): void { 17 | for (const collaborators of this.collaborators) { 18 | console.log(collaborators); 19 | } 20 | } 21 | 22 | public getName(): string { 23 | return this.name; 24 | } 25 | } 26 | 27 | export class Collaborators { 28 | constructor( 29 | public readonly name: string, 30 | public readonly lastname: string 31 | ) {} 32 | } 33 | 34 | const enterprise1 = new Enterprise("Twitch", "11.111.111/0001-11"); 35 | console.log(enterprise1.getName(), enterprise1.name); 36 | -------------------------------------------------------------------------------- /src/Aula 22 - Herança/Aula22.ts: -------------------------------------------------------------------------------- 1 | export abstract class Person { 2 | public readonly name: string; 3 | public readonly lastname: string; 4 | private readonly age: number; 5 | protected readonly cpf: string; 6 | 7 | constructor(name: string, lastname: string, age: number, cpf: string) { 8 | this.name = name; 9 | this.lastname = lastname; 10 | this.age = age; 11 | this.cpf = cpf; 12 | } 13 | 14 | getAge(): number { 15 | return this.age; 16 | } 17 | getCpf(): string { 18 | return this.cpf; 19 | } 20 | getName(): string { 21 | return `${this.name} ${this.lastname}`; 22 | } 23 | } 24 | 25 | export class Student extends Person { 26 | getName(): string { 27 | console.log("testando algo"); 28 | const result = super.getName(); 29 | return result + " Heeeeeyyyyyy"; 30 | } 31 | } 32 | export class Client extends Person { 33 | getName(): string { 34 | return `This come from the client ${this.name} ${this.lastname}`; 35 | } 36 | } 37 | 38 | //polimorfismo é sobreescrever os métodos tendo assim formas diferentes de objetos 39 | const student = new Student("Sther", "Zada", 60, "000.000.000-00"); 40 | const client = new Client("Sther", "Zada", 60, "000.000.000-00"); 41 | // const person = new Person("Sther", "Zada", 60, "000.000.000-00"); 42 | 43 | console.log(student.getName()); 44 | console.log(client.getName()); 45 | 46 | // console.log(person); 47 | // não depender de classes concretas, why????? pesquisar 48 | -------------------------------------------------------------------------------- /src/Aula 23 - Protected/Aula23.ts: -------------------------------------------------------------------------------- 1 | export class Enterprise { 2 | public readonly name: string; 3 | protected readonly cnpj: string; 4 | protected readonly collaborators: Collaborators[] = []; 5 | 6 | constructor(name: string, cnpj: string) { 7 | this.name = name; 8 | this.cnpj = cnpj; 9 | } 10 | 11 | public addColaborator(collaborators: Collaborators): void { 12 | this.collaborators.push(collaborators); 13 | } 14 | public displayColaborator(): void { 15 | for (const collaborators of this.collaborators) { 16 | console.log(collaborators); 17 | } 18 | } 19 | } 20 | 21 | export class Twitch extends Enterprise { 22 | constructor() { 23 | super("Twitch", "00.000.000/0000-00"); 24 | } 25 | 26 | popCollaborators(): Collaborators | null { 27 | const collaborators = this.collaborators.pop(); 28 | if (collaborators) return collaborators; 29 | return null; 30 | } 31 | } 32 | export class Collaborators { 33 | constructor( 34 | public readonly name: string, 35 | public readonly lastname: string 36 | ) {} 37 | } 38 | 39 | const enterprise1 = new Twitch(); 40 | const collaborators1 = new Collaborators("Sther", "zada"); 41 | const collaborators2 = new Collaborators("Luiz", "Otavio"); 42 | const collaborators3 = new Collaborators("Sther", "zada"); 43 | enterprise1.addColaborator(collaborators1); 44 | enterprise1.addColaborator(collaborators2); 45 | enterprise1.addColaborator(collaborators3); 46 | console.log(enterprise1.name); 47 | console.log(enterprise1); 48 | 49 | const removeCollaborator = enterprise1.popCollaborators(); 50 | console.log(removeCollaborator); 51 | console.log(enterprise1); 52 | -------------------------------------------------------------------------------- /src/Aula 24 - Get e Set/Aula24.ts: -------------------------------------------------------------------------------- 1 | export class Person { 2 | public name: string; 3 | public lastname: string; 4 | private _age: number; 5 | protected _cpf: string; 6 | constructor(name: string, lastname: string, age: number, cpf: string) { 7 | this.name = name; 8 | this.lastname = lastname; 9 | this._age = age; 10 | this._cpf = cpf; 11 | } 12 | 13 | public get age(): number { 14 | return this._age; 15 | } 16 | 17 | public set cpf(value: string) { 18 | this._cpf = value; 19 | } 20 | public get cpf(): string { 21 | return this._cpf.replace(/\D/g, ""); 22 | } 23 | 24 | getName(): string { 25 | return `${this.name} ${this.lastname}`; 26 | } 27 | } 28 | 29 | const person = new Person("Sther", "Zada", 60, "560.000.000-00"); 30 | console.log(person.age); 31 | 32 | person.cpf = "123.535.534-11"; 33 | console.log(person.cpf); 34 | -------------------------------------------------------------------------------- /src/Aula 25 - Atributo e métodos estáticos/Aula25.ts: -------------------------------------------------------------------------------- 1 | export class Person { 2 | static agePattern = 0; 3 | static cpfPattern = "000.000.000-00"; 4 | public name: string; 5 | public lastname: string; 6 | public _age: number; 7 | private _cpf: string; 8 | constructor(name: string, lastname: string, age: number, cpf: string) { 9 | this.name = name; 10 | this.lastname = lastname; 11 | this._age = age; 12 | this._cpf = cpf; 13 | } 14 | 15 | //chamando o método pela instancia 16 | methodNormal(): void { 17 | console.log(Person.agePattern, Person.cpfPattern); 18 | } 19 | 20 | static createPerson(name: string, lastname: string): Person { 21 | return new Person(name, lastname, Person.agePattern, Person.cpfPattern); 22 | } 23 | } 24 | 25 | const person1 = new Person("Sther", "Zada", 60, "560.000.000-00"); 26 | const person2 = Person.createPerson("Lucas", "Souza"); 27 | console.log(person1); 28 | console.log(person2); 29 | 30 | person1.methodNormal(); 31 | console.log(Person.agePattern, Person.cpfPattern); 32 | -------------------------------------------------------------------------------- /src/Aula 26 - Construtor privado e singleton/Aula26.ts: -------------------------------------------------------------------------------- 1 | //singleton - GoF | Factory Method - GoF 2 | 3 | export class DataBase { 4 | private static database: DataBase; 5 | private host: string; 6 | private user: string; 7 | private password: string; 8 | 9 | private constructor(host: string, user: string, password: string) { 10 | this.host = host; 11 | this.user = user; 12 | this.password = password; 13 | } 14 | 15 | connect(): void { 16 | console.log(`Connect: ${this.host} ${this.user} ${this.password}`); 17 | } 18 | 19 | //criado nossa instância 20 | static getDatabase(host: string, user: string, password: string): DataBase { 21 | if (DataBase.database) { 22 | console.log("This is my instance"); 23 | return DataBase.database; 24 | } 25 | DataBase.database = new DataBase(host, user, password); 26 | return DataBase.database; 27 | } 28 | } 29 | 30 | const database1 = DataBase.getDatabase("localhost", "rest", "123342"); 31 | database1.connect(); 32 | 33 | const database2 = DataBase.getDatabase("localhost", "rest", "123342"); 34 | database2.connect(); 35 | 36 | const database3 = DataBase.getDatabase("localhost", "rest", "123342"); 37 | database3.connect(); 38 | 39 | const database4 = DataBase.getDatabase("localhost", "rest", "123342"); 40 | database3.connect(); 41 | 42 | console.log(database1 === database2); 43 | -------------------------------------------------------------------------------- /src/Aula 27 - Classes, métodos e atributos abstratos/Aula27.ts: -------------------------------------------------------------------------------- 1 | export abstract class Character { 2 | protected abstract emoji: string; 3 | 4 | protected name: string; 5 | protected attack: number; 6 | protected life: number; 7 | constructor(name: string, attack: number, life: number) { 8 | this.name = name; 9 | this.attack = attack; 10 | this.life = life; 11 | } 12 | 13 | attackSeveral(character: Character): void { 14 | this.speak(); 15 | console.log(`${this.name} is attacking`); 16 | character.loseLife(this.attack); 17 | } 18 | 19 | //vai dar dano e tirar a vida de acordo. 20 | loseLife(forceAttack: number): void { 21 | this.life -= forceAttack; 22 | console.log(`${this.emoji} ${this.name} now it had ${this.life} life`); 23 | } 24 | 25 | abstract speak(): void; 26 | } 27 | 28 | class Warrior extends Character { 29 | protected emoji = "\u{1F9DD}"; 30 | speak(): void { 31 | console.log(this.emoji + " SAIIIIIIIIIIIIIIIIAAAAAAA MONSTRO"); 32 | } 33 | } 34 | 35 | class Monster extends Character { 36 | protected emoji = "\u{1f9df}"; 37 | speak(): void { 38 | console.log(this.emoji + " AAAAAAAAARGGGGGGGGGHHHHHHHHHHHHHHH"); 39 | } 40 | } 41 | 42 | const warrior = new Warrior("Stherzada", 20, 1000); 43 | const monster = new Monster("Junin", 10, 200); 44 | 45 | warrior.attackSeveral(monster); 46 | monster.attackSeveral(warrior); 47 | warrior.attackSeveral(monster); 48 | -------------------------------------------------------------------------------- /src/Aula 28 - Associação entre classes/Aula28.ts: -------------------------------------------------------------------------------- 1 | //associação 2 | export class Author { 3 | private _name: string; 4 | // é uma associação fraca esse tipo de coisa 5 | private _tools: Tools | null = null; 6 | 7 | constructor(name: string) { 8 | this._name = name; 9 | } 10 | get name(): string { 11 | return this._name; 12 | } 13 | get tools(): Tools | null { 14 | return this._tools; 15 | } 16 | set tools(tools: Tools) { 17 | this._tools = tools; 18 | } 19 | 20 | write(): void { 21 | if (this.tools === null) { 22 | console.log("Não posso escrever sem a ferramenta"); 23 | return; 24 | } 25 | this.tools.write(); 26 | } 27 | } 28 | 29 | export abstract class Tools { 30 | private _name: string; 31 | constructor(name: string) { 32 | this._name = name; 33 | } 34 | abstract write(): void; 35 | get name(): string { 36 | return this._name; 37 | } 38 | } 39 | 40 | export class Pen extends Tools { 41 | write(): void { 42 | console.log(`${this.name} writing...`); 43 | } 44 | } 45 | 46 | export class TypeWriter extends Tools { 47 | write(): void { 48 | console.log(`${this.name} typing...`); 49 | } 50 | } 51 | 52 | const author = new Author("Sther"); 53 | const pen = new Pen("Bic"); 54 | const typeWriter = new TypeWriter("Phone"); 55 | 56 | // console.log(author.name); 57 | // console.log(pen.name); 58 | // console.log(typeWriter.name); 59 | 60 | author.tools = typeWriter; 61 | author.write(); 62 | -------------------------------------------------------------------------------- /src/Aula 29 - Dependency Inversion/Aula29.ts: -------------------------------------------------------------------------------- 1 | //As classes abstratas e interfaces, me permitem fazer a inversão da dependência. Em vez dele depender da caneta ele depende de um contrato, que neste caso seria a ferramenta. Isso se chama INVERSÃO DE DEPENDÊNCIA! 2 | -------------------------------------------------------------------------------- /src/Aula 30 - Agregação entre classes/Aula30.ts: -------------------------------------------------------------------------------- 1 | export class ShoppingCart { 2 | private readonly product: Product[] = []; 3 | 4 | insertProduct(...products: Product[]): void { 5 | for (const product of products) { 6 | this.product.push(product); 7 | } 8 | } 9 | 10 | amountProducts(): number { 11 | return this.product.length; 12 | } 13 | 14 | totalProducts(): number { 15 | // vai somar o preço dos produtos do carrinho 16 | return this.product.reduce((soma, product) => soma + product.price, 0); 17 | } 18 | } 19 | 20 | export class Product { 21 | name: string; 22 | public price: number; 23 | constructor(name: string, price: number) { 24 | this.name = name; 25 | this.price = price; 26 | } 27 | } 28 | 29 | const product1 = new Product("Shirt", 89.9); 30 | const product2 = new Product("Shorts", 55.7); 31 | const product3 = new Product("Pen", 0.7); 32 | 33 | console.log(product2); 34 | 35 | const shoppingCart = new ShoppingCart(); 36 | 37 | shoppingCart.insertProduct(product1, product2, product3); 38 | 39 | console.log(shoppingCart); 40 | 41 | console.log(shoppingCart.amountProducts()); 42 | console.log(shoppingCart.totalProducts()); 43 | -------------------------------------------------------------------------------- /src/Aula 31 - Composição/Aula31.ts: -------------------------------------------------------------------------------- 1 | export class Car { 2 | private readonly engine = new Engine(); 3 | 4 | turnOn(): void { 5 | this.engine.turnOn(); 6 | } 7 | speedUp(): void { 8 | this.engine.speedUp(); 9 | } 10 | stop(): void { 11 | this.engine.stop(); 12 | } 13 | turnOff(): void { 14 | this.engine.turnOff(); 15 | } 16 | } 17 | 18 | export class Engine { 19 | turnOn(): void { 20 | console.log("vrum vrum vrum"); 21 | } 22 | speedUp(): void { 23 | console.log("vruuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuum"); 24 | } 25 | stop(): void { 26 | console.log("vrummm ᴠʀᴜᴍ ᵛʳᵘᵐ "); 27 | } 28 | turnOff(): void { 29 | console.log("turum...."); 30 | } 31 | } 32 | 33 | const car = new Car(); 34 | 35 | car.speedUp(); 36 | -------------------------------------------------------------------------------- /src/Aula 32 - Type Alias em Classes/Aula32.ts: -------------------------------------------------------------------------------- 1 | type TypePerson = { 2 | name: string; 3 | lastname: string; 4 | fullName: () => string; 5 | }; 6 | 7 | interface TypeTest { 8 | name: string; 9 | lastname: string; 10 | fullName: () => string; 11 | } 12 | 13 | //não tem uma herança ocorrendo por aqui 14 | class Person implements TypePerson { 15 | public name: string; 16 | public lastname: string; 17 | 18 | constructor(name: string, lastname: string) { 19 | this.name = name; 20 | this.lastname = lastname; 21 | } 22 | 23 | fullName(): string { 24 | return this.name + " " + this.lastname; 25 | } 26 | } 27 | 28 | const person = new Person("Sther", "Alves"); 29 | console.log(person.fullName()); 30 | -------------------------------------------------------------------------------- /src/Aula 33 - Interfaces e Classes/index.ts: -------------------------------------------------------------------------------- 1 | type VideoPlayerElements = { 2 | videoPlayer: HTMLVideoElement; 3 | playButton: HTMLButtonElement; 4 | stopButton: HTMLButtonElement; 5 | }; 6 | 7 | interface VideoPlayerProtocol { 8 | playToogle(): void; 9 | stop(): void; 10 | initialEvent(): void; 11 | } 12 | 13 | export default class VideoPlayer implements VideoPlayerProtocol { 14 | private videoPlayer: HTMLVideoElement; 15 | private playButton: HTMLButtonElement; 16 | private stopButton: HTMLButtonElement; 17 | 18 | constructor(videoPlayerElements: VideoPlayerElements) { 19 | this.videoPlayer = videoPlayerElements.videoPlayer; 20 | this.playButton = videoPlayerElements.playButton; 21 | this.stopButton = videoPlayerElements.stopButton; 22 | } 23 | 24 | playToogle(): void { 25 | if (this.videoPlayer.paused) { 26 | this.videoPlayer.play(); 27 | this.playButton.innerText = "Pause"; 28 | } else { 29 | this.videoPlayer.pause(); 30 | this.playButton.innerText = "Play"; 31 | } 32 | } 33 | stop(): void { 34 | // 35 | } 36 | initialEvent(): void { 37 | // se eu passar uma function dentro de uma class do add event, ele passa a ser o botão 38 | this.playButton.addEventListener("click", () => { 39 | this.playToogle(); 40 | }); 41 | 42 | this.stopButton.addEventListener("click", () => { 43 | this.videoPlayer.pause(); 44 | this.videoPlayer.currentTime = 0; 45 | this.playButton.innerText = "Play"; 46 | }); 47 | } 48 | } 49 | 50 | const videoPlayer = new VideoPlayer({ 51 | videoPlayer: document.querySelector(".video") as HTMLVideoElement, 52 | playButton: document.querySelector(".play") as HTMLButtonElement, 53 | stopButton: document.querySelector(".stop") as HTMLButtonElement, 54 | }); 55 | 56 | videoPlayer.initialEvent(); 57 | -------------------------------------------------------------------------------- /src/Aula 34 - Declaration merging/Aula34.ts: -------------------------------------------------------------------------------- 1 | export default interface Person { 2 | name: string; 3 | } 4 | export default interface Person { 5 | lastname: string; 6 | } 7 | export default interface Person { 8 | andress: readonly string[]; 9 | } 10 | export default interface Person { 11 | age: number; 12 | } 13 | const person: Person = { 14 | name: "Sther", 15 | lastname: "Alves", 16 | andress: ["AAAAAA"], 17 | age: 23, 18 | }; 19 | 20 | person.age = 32; 21 | console.log(person); 22 | -------------------------------------------------------------------------------- /src/Aula 35 - Type Guard/Aula35.ts: -------------------------------------------------------------------------------- 1 | export function add(a: unknown, b: unknown) { 2 | return typeof a === "number" && typeof b === "number" ? a + b : `${a}${b}`; 3 | } 4 | 5 | console.log(add(2, 4)); 6 | console.log(add("a", "b")); 7 | 8 | type Person = { 9 | tipo: "person"; 10 | name: string; 11 | }; 12 | 13 | type Animal = { tipo: "animal"; color: string }; 14 | 15 | type PersonOrAnimal = Person | Animal; 16 | 17 | class Student implements Person { 18 | tipo: "person" = "person"; 19 | name: string; 20 | 21 | constructor(name: string) { 22 | this.name = name; 23 | } 24 | } 25 | 26 | function displayName(obj: PersonOrAnimal): void { 27 | // if ("name" in obj) console.log(obj.name); 28 | // //refinação de tipos 29 | // if (obj instanceof Student) console.log(obj.name); 30 | switch (obj.tipo) { 31 | case "person": 32 | console.log(obj.name); 33 | return; 34 | case "animal": 35 | console.log("this is a animal", obj.color); 36 | return; 37 | } 38 | } 39 | 40 | displayName(new Student("Sther")); 41 | displayName({ tipo: "animal", color: "Pink" }); 42 | -------------------------------------------------------------------------------- /src/Aula 36 - Keyof e typeof/Aula36.ts: -------------------------------------------------------------------------------- 1 | type ColorObj = typeof colorObj; 2 | type ColorKey = keyof ColorObj; 3 | 4 | const colorObj = { 5 | vermelho: "red", 6 | verde: "green", 7 | azul: "blue", 8 | roxo: "purple", 9 | }; 10 | 11 | function translateColor(color: ColorKey, colors: typeof colorObj) { 12 | return colors[color]; 13 | } 14 | 15 | console.log(translateColor("vermelho", colorObj)); 16 | console.log(translateColor("verde", colorObj)); 17 | -------------------------------------------------------------------------------- /src/Aula 37 - Usando chaves de tipos/Aula37.ts: -------------------------------------------------------------------------------- 1 | type Vehicle = { 2 | brand: string; 3 | year: number; 4 | }; 5 | 6 | type Car = { 7 | brand_: Vehicle["brand"]; 8 | year_: Vehicle["year"]; 9 | name: string; 10 | }; 11 | 12 | const car: Car = { 13 | brand_: "Ford", 14 | year_: 2077, 15 | name: "Cyberpunk", 16 | }; 17 | 18 | console.log(car); 19 | -------------------------------------------------------------------------------- /src/Aula 38 - Usando this como tipo/Aula38.ts: -------------------------------------------------------------------------------- 1 | export class Calculator { 2 | constructor(public numero: number) {} 3 | 4 | add(n: number): this { 5 | this.numero += n; 6 | return this; 7 | } 8 | sub(n: number): this { 9 | this.numero -= n; 10 | return this; 11 | } 12 | 13 | div(n: number): this { 14 | this.numero /= n; 15 | return this; 16 | } 17 | 18 | mul(n: number): this { 19 | this.numero *= n; 20 | return this; 21 | } 22 | } 23 | 24 | export class SubCalculator extends Calculator { 25 | pow(n: number): this { 26 | this.numero **= n; 27 | return this; 28 | } 29 | } 30 | 31 | const calculator = new SubCalculator(10); 32 | 33 | calculator.add(5).mul(2).div(2).pow(2); 34 | console.log(calculator); 35 | 36 | //Buider - Gof 37 | 38 | export class RequestBuilder { 39 | private method: "get" | "post" | null = null; 40 | private url: string | null = null; 41 | 42 | setMethod(method: "get" | "post"): this { 43 | this.method = method; 44 | return this; 45 | } 46 | setUrl(url: string): this { 47 | this.url = url; 48 | return this; 49 | } 50 | 51 | send(): void { 52 | console.log(`Enviando dados via ${this.method} para ${this.url}`); 53 | } 54 | } 55 | 56 | const request = new RequestBuilder(); 57 | 58 | request.setUrl("http://www.google.com").setMethod("post").send(); 59 | -------------------------------------------------------------------------------- /src/Aula 39 - Overload/Aula39.ts: -------------------------------------------------------------------------------- 1 | type Adder = { 2 | (x: number): number; 3 | (x: number, y: number): number; 4 | (...arg: number[]): number; 5 | }; 6 | 7 | const adder: Adder = (x: number, y?: number, ...args: number[]) => { 8 | if (args.length > 0) return args.reduce((s, v) => s + v, 0) + x + (y || 0); 9 | return x + (y || 0); 10 | }; 11 | 12 | console.log(adder(1)); 13 | 14 | console.log(adder(1, 2)); 15 | -------------------------------------------------------------------------------- /src/Aula 40- Encadeamento opcional e operador de coalescência nula/Aula40.ts: -------------------------------------------------------------------------------- 1 | type Archive = { 2 | title: string; 3 | text: string; 4 | data?: Date; 5 | }; 6 | 7 | const archive: Archive = { 8 | title: "The title", 9 | text: " The text", 10 | // data: new Date(), 11 | }; 12 | 13 | // o operador de coalescenência só verificar isso quando por nullable ou undefined 14 | console.log(archive.data?.toDateString() ?? "EITAH, don't have a date"); 15 | console.log(undefined ?? "2-EITAH, don't have a date"); 16 | console.log(null ?? "3-EITAH, don't have a date"); 17 | console.log(false ?? "EITAH, don't have a date"); 18 | console.log(0 ?? "EITAH, don't have a date"); 19 | console.log("_" ?? "EITAH, don't have a date"); 20 | -------------------------------------------------------------------------------- /src/Aula 41 - Types generics/Aula41.ts: -------------------------------------------------------------------------------- 1 | //como fazer um filtro original 2 | type FilterCallback = (value: U, index?: number, array?: U[]) => boolean; 3 | 4 | function myFilter(array: T[], callbackfn: FilterCallback): T[] { 5 | const newArray = []; 6 | 7 | for (let i = 0; i < array.length; i++) { 8 | if (callbackfn(array[i])) { 9 | newArray.push(array[i]); 10 | } 11 | } 12 | 13 | return newArray; 14 | } 15 | 16 | const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "A"]; 17 | 18 | const arrayFilterOriginal = myFilter(array, (value) => { 19 | if (typeof value === "number") return value < 5; 20 | return false; 21 | }); 22 | 23 | console.log(arrayFilterOriginal); 24 | -------------------------------------------------------------------------------- /src/Aula 42 - Arrays e Promises generics/Aula42.ts: -------------------------------------------------------------------------------- 1 | const arrayNumeros: Array = [1, 2, 3, 4, 5, 6]; 2 | 3 | type MyType = number; 4 | 5 | async function promiseAsync() { 6 | return 1; 7 | } 8 | 9 | function myPromise(): Promise { 10 | return new Promise((resolve) => { 11 | setTimeout(() => { 12 | resolve(1); 13 | }, 1000); 14 | }); 15 | } 16 | 17 | promiseAsync().then((result) => console.log(result + 1)); 18 | myPromise().then((result) => console.log(result + 1)); 19 | -------------------------------------------------------------------------------- /src/Aula 43 - Interfaces e Type Alias/Aula43.ts: -------------------------------------------------------------------------------- 1 | interface PeopleProtocol { 2 | name: T; 3 | lastname: T; 4 | age: U; 5 | } 6 | 7 | const student: PeopleProtocol = { 8 | name: "Stherzada", 9 | lastname: "Linda", 10 | age: 22, 11 | }; 12 | 13 | const student2: PeopleProtocol = { 14 | name: 4544, 15 | lastname: 442, 16 | age: 22, 17 | }; 18 | 19 | const student3: PeopleProtocol = { 20 | name: "Sther", 21 | lastname: "Alves", 22 | age: 22, 23 | }; 24 | 25 | // type ReturnSelfAsMockFetch = { 26 | // data: T; 27 | // status: number; 28 | // isFetching: boolean; 29 | // hasError: boolean; 30 | // }; 31 | 32 | // function useReturnSelfAsMockFetch(data: T): ReturnSelfAsMockFetch { 33 | // //no meu exemplo eu to apenas retornando o que eu recebo, mas vc pode pensar nisso como sendo 34 | // //uma request numa api 35 | // return { 36 | // data, 37 | // status: 200, 38 | // isFetching: false, 39 | // hasError: false, 40 | // }; 41 | // } 42 | // function useReturnSelfAsMockFetchAsAny(data: any) { 43 | // //no meu exemplo eu to apenas retornando o que eu recebo, mas vc pode pensar nisso como sendo 44 | // //uma request numa api 45 | // return { 46 | // data, 47 | // status: 200, 48 | // isFetching: false, 49 | // hasError: false, 50 | // }; 51 | // } 52 | 53 | // type User_ = { 54 | // id: number; 55 | // name: string; 56 | // }; 57 | 58 | // const mockUsers = [ 59 | // { 60 | // id: 1, 61 | // name: "pepega", 62 | // }, 63 | // { 64 | // id: 2, 65 | // name: "mamaco", 66 | // }, 67 | // ]; 68 | 69 | // const users = useReturnSelfAsMockFetch>(mockUsers); 70 | 71 | // //users.data -> vai ter o tipo Array pois informei ele como "parametro" para o generic 72 | 73 | // const users2 = useReturnSelfAsMockFetchAsAny(mockUsers as Array); 74 | 75 | // //users2.data -> vai ter o tipo any mesmo eu sabendo que é Array 76 | 77 | // const users3 = useReturnSelfAsMockFetch(mockUsers); 78 | 79 | // //users3.data vai ter o seu valor inferido pelo ts caso eu esqueça de passar o valor que T deve ter 80 | 81 | // type Company = { 82 | // id: number; 83 | // name: string; 84 | // employees: Array; 85 | // }; 86 | // const mockCompanies = [ 87 | // { 88 | // id: 1, 89 | // name: "Google", 90 | // employees: mockUsers, 91 | // }, 92 | // { 93 | // id: 2, 94 | // name: "empresaFalida", 95 | // employees: [], 96 | // }, 97 | // ]; 98 | 99 | // //como minha funcao de "fetch" é generica eu consigo usar ela pra outras "requests" e vou ter o retorno 100 | // // tipado corretamente 101 | // const company = useReturnSelfAsMockFetch>(mockCompanies); 102 | 103 | // console.log(users, users2, users3); 104 | 105 | // const alfabetoComNumero = { 106 | // a: 1, 107 | // b: 2, 108 | // c: 3, 109 | // }; 110 | // //alfabetoComNumero é const mas eu posso mudar o valor dos atributos dele 111 | // alfabetoComNumero.b = 4; 112 | 113 | // console.log(alfabetoComNumero.b); //4 114 | 115 | // type AlfabetoComNumero2 = { 116 | // readonly a: number; 117 | // readonly b: number; 118 | // readonly c: number; 119 | // }; 120 | // const alfabetoComNumero2 = { 121 | // a: 1, 122 | // b: 2, 123 | // c: 3, 124 | // } as AlfabetoComNumero2; 125 | 126 | // // o ts reclama que n posso, porem é meio verboso pois tenho que declarar o tipo e definir a variavel com o tipo 127 | // // alfabetoComNumero2.b = 4; 128 | 129 | // const alfabetoComNumero3 = { 130 | // a: 1, 131 | // b: 2, 132 | // c: 3, 133 | // } as const; 134 | 135 | // //tudo vira readonly sem ter que definir tipo :) (passa o mouse em cima do alfabetoComNumero3 pra ver o tipo) 136 | // // alfabetoComNumero2.b = 4; 137 | -------------------------------------------------------------------------------- /src/Aula 44 - Restrições em Generics/Aula44.ts: -------------------------------------------------------------------------------- 1 | type GetTheKey = (object: O, key: K) => O[K]; 2 | 3 | const getTheKey: GetTheKey = (object, key) => object[key]; 4 | 5 | const stherzada = { 6 | name: "Sther", 7 | comida: ["Lasanha", "Gnnochi"], 8 | }; 9 | 10 | const comidas = getTheKey(stherzada, "comida"); 11 | const names = getTheKey(stherzada, "name"); 12 | 13 | console.log(comidas, names); 14 | -------------------------------------------------------------------------------- /src/Aula 45 - Generics com classes/Aula45.ts: -------------------------------------------------------------------------------- 1 | export default class Person { 2 | constructor( 3 | public name: T, 4 | public age: U, 5 | ) {} 6 | } 7 | 8 | export class Stack { 9 | private count = 0; 10 | private elements: { [k: number]: T } = {}; 11 | 12 | push(elements: T): void { 13 | this.elements[this.count] = elements; 14 | this.count++; 15 | } 16 | 17 | pop(): T | void { 18 | if (this.itsIsEmpty()) return undefined; 19 | 20 | this.count--; 21 | const element = this.elements[this.count]; 22 | delete this.elements[this.count]; 23 | return element; 24 | } 25 | 26 | itsIsEmpty(): boolean { 27 | return this.count === 0; 28 | } 29 | 30 | size(): number { 31 | return this.count; 32 | } 33 | 34 | showStack(): void { 35 | for (const key in this.elements) { 36 | console.log(this.elements[key]); 37 | } 38 | } 39 | } 40 | 41 | const stack = new Stack(); 42 | 43 | stack.push(2); 44 | stack.push(3); 45 | stack.push(4); 46 | stack.push(5); 47 | // const element1 = stack.pop() 48 | stack.showStack(); 49 | 50 | while (!stack.itsIsEmpty()) { 51 | console.log(stack.pop()); 52 | } 53 | -------------------------------------------------------------------------------- /src/Aula 46 - Generics com intersection/Aula46.ts: -------------------------------------------------------------------------------- 1 | export default function joinObjects(obj1: T, obj2: U): T & U { 2 | // return { ...obj1, ...obj2 }; 3 | return Object.assign({}, obj1, obj2); 4 | } 5 | 6 | const obj1 = { key1: "value 1 " }; 7 | const obj2 = { key2: "value 2 " }; 8 | 9 | const unity = joinObjects(obj1, obj2); 10 | 11 | console.log(unity); 12 | -------------------------------------------------------------------------------- /src/Aula 47 - Type Predicate/Aula47.ts: -------------------------------------------------------------------------------- 1 | export function isNumber(value: unknown): value is number { 2 | return typeof value === "number"; 3 | } 4 | 5 | // console.log(isNumber("123")); 6 | // console.log(isNumber(123)); 7 | 8 | export function sum(...args: T[]): number | null { 9 | const retorno = args.reduce((sum, value) => { 10 | if (isNumber(sum) && isNumber(value)) { 11 | return sum + value; 12 | } 13 | return sum; 14 | }, 0); 15 | 16 | return retorno; 17 | } 18 | 19 | console.log(sum(1, 2, 3)); 20 | console.log(sum(...[1, 2, 3, "a", "b", "c"])); 21 | console.log(sum("a", "b", "c")); 22 | -------------------------------------------------------------------------------- /src/Aula 48 - Generics padrões/Aula48.ts: -------------------------------------------------------------------------------- 1 | const object1: Record = { 2 | name: "Sthe", 3 | lastname: "Silva", 4 | age: 32, 5 | }; 6 | 7 | console.log(object1); 8 | 9 | type PersonProtocol = { 10 | name?: string; 11 | lastname?: string; 12 | age?: number; 13 | }; 14 | 15 | // Required = precisa ter 16 | type PersonRequired = Required; 17 | // Partial = tudo se transforma em opcional 18 | type PersonPartial = Partial; 19 | //Readonly 20 | type PersonReadonly = Readonly; 21 | //Pick = Escolha 22 | type PersonPick = Pick; 23 | 24 | const object2: PersonProtocol = { 25 | name: "Sthe", 26 | lastname: "Silva", 27 | age: 32, 28 | }; 29 | 30 | console.log(object2); 31 | 32 | //EXTRACT AND EXCLUDE 33 | type ABC = "A" | "B" | "C"; 34 | type CDE = "C" | "D" | "E"; 35 | 36 | //computa todos os tipos e exclui o repetido 37 | type TypeExclude = Exclude; 38 | 39 | //computa e só mostra o que repete nos dois 40 | type TypeExtract = Extract; 41 | 42 | // 43 | type AccountMDB = { 44 | _id: string; 45 | name: string; 46 | age: number; 47 | lastname: string; 48 | }; 49 | 50 | type AccountApi = { 51 | id: string; 52 | name: string; 53 | age: number; 54 | lastname: string; 55 | }; 56 | 57 | // type AccountApi = Pick> & { 58 | // id: string; 59 | // }; 60 | 61 | const accountMDB: AccountMDB = { 62 | _id: "ab34-shdhuw00223", 63 | name: "Sther", 64 | age: 34, 65 | lastname: "sther", 66 | }; 67 | 68 | function mapAccount(accountMDB: AccountMDB): AccountApi { 69 | const { _id, ...accountData } = accountMDB; 70 | return { ...accountData, id: _id }; 71 | } 72 | 73 | const AccountApi = mapAccount(accountMDB); 74 | console.log(AccountApi); 75 | // 76 | export default 1; 77 | -------------------------------------------------------------------------------- /src/Aula 49 - Exercicio/Aula49.ts: -------------------------------------------------------------------------------- 1 | type VotationOption = { 2 | numberOfvotes: number; 3 | option: string; 4 | }; 5 | 6 | export class Votation { 7 | private _votationOptions: VotationOption[] = []; 8 | constructor(public details: string) {} 9 | 10 | addVotationOptions(votationOptions: VotationOption): void { 11 | this._votationOptions.push(votationOptions); 12 | } 13 | vote(votationIndex: number): void { 14 | if (!this._votationOptions[votationIndex]) return; 15 | this._votationOptions[votationIndex].numberOfvotes += 1; 16 | } 17 | get votationOptions(): VotationOption[] { 18 | return this._votationOptions; 19 | } 20 | } 21 | 22 | export class VotationApp { 23 | private votations: Votation[] = []; 24 | addVotation(votation: Votation): void { 25 | this.votations.push(votation); 26 | } 27 | showVotations(): void { 28 | for (const votation of this.votations) { 29 | console.log(votation.details); 30 | for (const votationOption of votation.votationOptions) { 31 | console.log( 32 | votationOption.option, 33 | votationOption.numberOfvotes, 34 | ); 35 | } 36 | } 37 | } 38 | } 39 | 40 | const votationUno = new Votation("What is your favorite programming language?"); 41 | votationUno.addVotationOptions({ option: "TypeScript", numberOfvotes: 0 }); 42 | votationUno.addVotationOptions({ option: "JavaScript", numberOfvotes: 0 }); 43 | votationUno.addVotationOptions({ option: "Python", numberOfvotes: 0 }); 44 | 45 | votationUno.vote(2); 46 | votationUno.vote(1); 47 | votationUno.vote(1); 48 | votationUno.vote(1); 49 | votationUno.vote(0); 50 | votationUno.vote(0); 51 | votationUno.vote(0); 52 | votationUno.vote(0); 53 | votationUno.vote(0); 54 | 55 | const votationApp = new VotationApp(); 56 | votationApp.addVotation(votationUno); 57 | 58 | votationApp.showVotations(); 59 | -------------------------------------------------------------------------------- /src/Aula 50 - Decorator de classes no TypeScript/Aula50.ts: -------------------------------------------------------------------------------- 1 | // decorator são chamadas em determinadas partes do seu código 2 | @decorator 3 | export class Animal { 4 | constructor( 5 | public name: string, 6 | public color: string, 7 | ) {} 8 | } 9 | 10 | function decorator any>(target: T): T { 11 | return class extends target { 12 | color: string; 13 | name: string; 14 | 15 | constructor(...args: any[]) { 16 | super(...args); 17 | this.name = this.inverte(args[0]); 18 | this.color = this.inverte(args[1]); 19 | } 20 | inverte(value: string): string { 21 | return value.split("").reverse().join(""); 22 | } 23 | }; 24 | } 25 | 26 | const animal = new Animal("Yakki", "purple"); 27 | console.log(animal); 28 | -------------------------------------------------------------------------------- /src/Aula 51 - Class Decorator/Aula51.ts: -------------------------------------------------------------------------------- 1 | function decorator any>(target: T): T { 2 | console.log("i am your fatherrrr (lied)", target); 3 | return class extends target { 4 | cor: string; 5 | nome: string; 6 | 7 | constructor(...args: any[]) { 8 | super(...args); 9 | this.nome = this.inverte(args[0]); 10 | this.cor = this.inverte(args[1]); 11 | } 12 | 13 | inverte(valor: string): string { 14 | return valor.split("").reverse().join(""); 15 | } 16 | }; 17 | } 18 | 19 | @decorator 20 | export class Animal { 21 | constructor( 22 | public nome: string, 23 | public cor: string, 24 | ) { 25 | console.log("i am a big class muhahahahaha"); 26 | } 27 | } 28 | 29 | const animal = new Animal("Luiz", "roxo"); 30 | console.log(animal); 31 | -------------------------------------------------------------------------------- /src/Aula 52 - Fabrica de decorator/Aula52.ts: -------------------------------------------------------------------------------- 1 | function nameAndClass(param1: string, param2: string) { 2 | //closure 3 | return function any>(target: T): T { 4 | console.log("i am your fatherrrr (lied)", target); 5 | return class extends target { 6 | cor: string; 7 | nome: string; 8 | 9 | constructor(...args: any[]) { 10 | super(...args); 11 | this.nome = this.inverte(args[0]); 12 | this.cor = this.inverte(args[1]); 13 | } 14 | 15 | inverte(valor: string): string { 16 | return ( 17 | valor.split("").reverse().join("") + 18 | "" + 19 | param1 + 20 | "" + 21 | param2 22 | ); 23 | } 24 | }; 25 | }; 26 | } 27 | 28 | @nameAndClass("value 1", "value2") 29 | export class Animal { 30 | constructor( 31 | public nome: string, 32 | public cor: string, 33 | ) { 34 | console.log("i am a big class muhahahahaha"); 35 | } 36 | } 37 | 38 | const animal = new Animal("Luiz", "roxo"); 39 | console.log(animal); 40 | -------------------------------------------------------------------------------- /src/Aula 53 - Composição de decoradores/Aula 53.ts: -------------------------------------------------------------------------------- 1 | type Constructor = new (...args: any[]) => any; 2 | 3 | function nameAndClass(param1: string, param2: string) { 4 | //closure 5 | return function (target: T): T { 6 | console.log("i am your fatherrrr (lied)", target); 7 | return class extends target { 8 | cor: string; 9 | nome: string; 10 | 11 | constructor(...args: any[]) { 12 | super(...args); 13 | this.nome = this.inverte(args[0]); 14 | this.cor = this.inverte(args[1]); 15 | } 16 | 17 | inverte(valor: string): string { 18 | return ( 19 | valor.split("").reverse().join("") + 20 | "" + 21 | param1 + 22 | "" + 23 | param2 24 | ); 25 | } 26 | }; 27 | }; 28 | } 29 | 30 | function heyDecorator(target: Constructor) { 31 | console.log("HELLLLLP!"); 32 | } 33 | 34 | @heyDecorator 35 | @nameAndClass("value 1", "value2") 36 | export class Animal { 37 | constructor( 38 | public nome: string, 39 | public cor: string, 40 | ) { 41 | console.log("i am a big class muhahahahaha"); 42 | } 43 | } 44 | 45 | const animal = new Animal("Luiz", "roxo"); 46 | console.log(animal); 47 | -------------------------------------------------------------------------------- /src/Aula 54 - Method Decorator/Aula54.ts: -------------------------------------------------------------------------------- 1 | function decorator( 2 | classPrototype: any, 3 | propertyKey: string, 4 | descriptor: PropertyDescriptor, 5 | ): PropertyDescriptor | void { 6 | console.log(descriptor); 7 | console.log(propertyKey); 8 | console.log(classPrototype); 9 | return { 10 | value: function (...args: any[]) { 11 | return args[0].toUpperCase(); 12 | }, 13 | }; 14 | } 15 | export class OnePeople { 16 | name: string; 17 | lastname: string; 18 | age: number; 19 | constructor(name: string, lastname: string, age: number) { 20 | this.name = name; 21 | this.lastname = lastname; 22 | this.age = age; 23 | } 24 | @decorator 25 | classMethod(msg: string): string { 26 | return `${this.name} ${this.lastname}: ${msg} `; 27 | } 28 | 29 | get nameAndLastName(): string { 30 | return this.name + " " + this.lastname; 31 | } 32 | 33 | set nameComplete(value: string) { 34 | const words = value.split(/\s+/g); 35 | const firstName = words.shift(); 36 | if (!firstName) return; 37 | this.name = firstName; 38 | this.lastname = words.join(""); 39 | } 40 | } 41 | 42 | const people = new OnePeople("Sther", "Sther", 43); 43 | 44 | const ClassMethod = people.classMethod("HRU?"); 45 | 46 | console.log(ClassMethod); 47 | -------------------------------------------------------------------------------- /src/Aula 55 - Decoradores de parâmetro/Aula55.ts: -------------------------------------------------------------------------------- 1 | function decorator( 2 | classPrototype: any, 3 | propertyKey: string | symbol | undefined, 4 | index: number, 5 | ): void { 6 | console.log(index); 7 | console.log(classPrototype); 8 | console.log(propertyKey); 9 | } 10 | 11 | export class OnePeople { 12 | name: string; 13 | lastname: string; 14 | age: number; 15 | constructor( 16 | @decorator name: string, 17 | @decorator lastname: string, 18 | age: number, 19 | ) { 20 | this.name = name; 21 | this.lastname = lastname; 22 | this.age = age; 23 | } 24 | /// decoradores nos parametros 25 | classMethod(@decorator msg: string): string { 26 | return `${this.name} ${this.lastname}: ${msg} `; 27 | } 28 | 29 | get nameAndLastName(): string { 30 | return this.name + " " + this.lastname; 31 | } 32 | 33 | set nameComplete(value: string) { 34 | const words = value.split(/\s+/g); 35 | const firstName = words.shift(); 36 | if (!firstName) return; 37 | this.name = firstName; 38 | this.lastname = words.join(""); 39 | } 40 | } 41 | 42 | const people = new OnePeople("Sther", "Sther", 43); 43 | 44 | const ClassMethod = people.classMethod("HRU?"); 45 | 46 | console.log(ClassMethod); 47 | -------------------------------------------------------------------------------- /src/Aula 56 - Decoradores de propriedades/Aula56.ts: -------------------------------------------------------------------------------- 1 | function decorator( 2 | classPrototype: any, 3 | propertyKey: string | symbol | undefined, 4 | ): any { 5 | let valueProperty: any; 6 | return { 7 | get: () => valueProperty, 8 | set: (value: any) => { 9 | if (typeof value === "string") { 10 | valueProperty = value.split("").reverse().join(""); 11 | return; 12 | } 13 | valueProperty = value; 14 | }, 15 | }; 16 | } 17 | 18 | export class OnePeople { 19 | @decorator 20 | name: string; 21 | lastname: string; 22 | age: number; 23 | constructor(name: string, lastname: string, age: number) { 24 | this.name = name; 25 | this.lastname = lastname; 26 | this.age = age; 27 | } 28 | /// decoradores nos parametros 29 | classMethod(msg: string): string { 30 | return `${this.name} ${this.lastname}: ${msg} `; 31 | } 32 | 33 | get nameAndLastName(): string { 34 | return this.name + " " + this.lastname; 35 | } 36 | 37 | set nameComplete(value: string) { 38 | const words = value.split(/\s+/g); 39 | const firstName = words.shift(); 40 | if (!firstName) return; 41 | this.name = firstName; 42 | this.lastname = words.join(""); 43 | } 44 | } 45 | 46 | const people = new OnePeople("Sther", "Sther", 43); 47 | 48 | const ClassMethod = people.classMethod("HRU?"); 49 | 50 | console.log(ClassMethod); 51 | -------------------------------------------------------------------------------- /src/Aula 57 - Criando um namespace/Aula57.ts: -------------------------------------------------------------------------------- 1 | /*eslint-+disable @typescript-eslint/no-namespace*/ 2 | 3 | namespace MyNameSpace { 4 | export const nameOfNameSpace = "Stherzada"; 5 | 6 | export class PeopleNameSpace { 7 | constructor(public name: string) {} 8 | } 9 | 10 | const peopleNameSpace = new PeopleNameSpace("Sther"); 11 | console.log(peopleNameSpace); 12 | 13 | export namespace OtherNameSpace { 14 | export const nameOfNameSpace = "Stherzada"; 15 | } 16 | } 17 | 18 | const peopleNameSpace = new MyNameSpace.PeopleNameSpace("Sther"); 19 | console.log(peopleNameSpace); 20 | console.log(MyNameSpace.nameOfNameSpace); 21 | console.log(MyNameSpace.OtherNameSpace.nameOfNameSpace); 22 | export default 1; 23 | -------------------------------------------------------------------------------- /src/Aula 58 - Reference para import de arquivos/Aula58.ts: -------------------------------------------------------------------------------- 1 | /*eslint-+disable @typescript-eslint/triple-slash-namespace*/ 2 | 3 | /// 4 | 5 | console.log(MyNameSpace.nameOfNameSpace); 6 | -------------------------------------------------------------------------------- /src/Aula 58 - Reference para import de arquivos/modulo/module.ts: -------------------------------------------------------------------------------- 1 | /*eslint-+disable @typescript-eslint/no-namespace*/ 2 | 3 | export namespace MyNameSpace { 4 | export const nameOfNameSpace = "Stherzada"; 5 | 6 | export class PeopleNameSpace { 7 | constructor(public name: string) {} 8 | } 9 | 10 | const peopleNameSpace = new PeopleNameSpace("Sther"); 11 | console.log(peopleNameSpace); 12 | 13 | export namespace OtherNameSpace { 14 | export const nameOfNameSpace = "Stherzada"; 15 | } 16 | } 17 | 18 | const peopleNameSpace = new MyNameSpace.PeopleNameSpace("Sther"); 19 | console.log(peopleNameSpace); 20 | console.log(MyNameSpace.nameOfNameSpace); 21 | console.log(MyNameSpace.OtherNameSpace.nameOfNameSpace); 22 | -------------------------------------------------------------------------------- /tsconfig.frontend.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | "lib": ["ESNext", "DOM"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs", /* Specify what module code is generated. */ 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 40 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 41 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 42 | // "resolveJsonModule": true, /* Enable importing .json files. */ 43 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 44 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 45 | 46 | /* JavaScript Support */ 47 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 48 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 49 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 50 | 51 | /* Emit */ 52 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 53 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 54 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 55 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 56 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 57 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 58 | "outDir": "./frontend/assets/js", /* Specify an output folder for all emitted files. */ 59 | // "removeComments": true, /* Disable emitting comments. */ 60 | // "noEmit": true, /* Disable emitting files from a compilation. */ 61 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 62 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 63 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 64 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 65 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 66 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 67 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 68 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 69 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 70 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 71 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 72 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 73 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 74 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 75 | 76 | /* Interop Constraints */ 77 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 78 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 79 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 80 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 81 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 82 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 83 | 84 | /* Type Checking */ 85 | "strict": true, /* Enable all strict type-checking options. */ 86 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 87 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 88 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 89 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 90 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 91 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 92 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 93 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 94 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 95 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 96 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 97 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 98 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 99 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 100 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 101 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 102 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 103 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 104 | 105 | /* Completeness */ 106 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 107 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 108 | }, 109 | "include": [ 110 | "./src" 111 | ] 112 | } 113 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | "lib": ["ESNext", "DOM"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs", /* Specify what module code is generated. */ 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 40 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 41 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 42 | // "resolveJsonModule": true, /* Enable importing .json files. */ 43 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 44 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 45 | 46 | /* JavaScript Support */ 47 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 48 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 49 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 50 | 51 | /* Emit */ 52 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 53 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 54 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 55 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 56 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 57 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 58 | "outDir": "./dist", /* Specify an output folder for all emitted files. */ 59 | // "removeComments": true, /* Disable emitting comments. */ 60 | // "noEmit": true, /* Disable emitting files from a compilation. */ 61 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 62 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 63 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 64 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 65 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 66 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 67 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 68 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 69 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 70 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 71 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 72 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 73 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 74 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 75 | 76 | /* Interop Constraints */ 77 | "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 78 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 79 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 80 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 81 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 82 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 83 | 84 | /* Type Checking */ 85 | "strict": true, /* Enable all strict type-checking options. */ 86 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 87 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 88 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 89 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 90 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 91 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 92 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 93 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 94 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 95 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 96 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 97 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 98 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 99 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 100 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 101 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 102 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 103 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 104 | 105 | /* Completeness */ 106 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 107 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 108 | }, 109 | "include": [ 110 | "./src" 111 | ] 112 | } 113 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | module.exports = { 4 | mode: 'development', 5 | entry: './src/Aula 19 - Workout/Aula19.ts', 6 | module: { 7 | rules: [ 8 | { 9 | test: /\.tsx?$/, 10 | loader: 'ts-loader', 11 | exclude: /node_modules/, 12 | options: { configFile: 'tsconfig.frontend.json' } 13 | }, 14 | ], 15 | }, 16 | resolve: { 17 | extensions: ['.tsx', '.ts', '.js'], 18 | }, 19 | output: { 20 | filename: 'bundle.js', 21 | path: path.resolve(__dirname, 'frontend', 'assets', 'js'), 22 | }, 23 | devtool: 'source-map' 24 | }; 25 | --------------------------------------------------------------------------------