From 048ea931e7cfd9691cf1262e436850cc115b42e4 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Sun, 27 Jul 2025 11:25:11 +0100 Subject: [PATCH 01/24] feat: add hook without react-query --- package-lock.json | 279 ++++++++++++++++-- package.json | 8 +- .../react-query/useGithubAutomatedRepos.ts | 26 ++ src/hook/useGithubAutomatedRepos.ts | 47 ++- src/hook/utils/_handleRepository.ts | 2 +- src/index.ts | 3 +- src/react-query.ts | 4 + 7 files changed, 322 insertions(+), 47 deletions(-) create mode 100644 src/hook/react-query/useGithubAutomatedRepos.ts create mode 100644 src/react-query.ts diff --git a/package-lock.json b/package-lock.json index c3c37d5..16e9c09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7235,6 +7235,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -7252,6 +7253,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -7263,13 +7265,15 @@ "version": "9.2.2", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -7287,6 +7291,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -7302,6 +7307,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^7.0.4" }, @@ -7313,13 +7319,15 @@ "version": "1.1.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/npm/node_modules/@npmcli/agent": { "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", @@ -7336,6 +7344,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^4.0.0", @@ -7385,6 +7394,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/map-workspaces": "^4.0.1", "@npmcli/package-json": "^6.0.1", @@ -7404,6 +7414,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "semver": "^7.3.5" }, @@ -7416,6 +7427,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/promise-spawn": "^8.0.0", "ini": "^5.0.0", @@ -7436,6 +7448,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "npm-bundled": "^4.0.0", "npm-normalize-package-bin": "^4.0.0" @@ -7452,6 +7465,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/name-from-folder": "^3.0.0", "@npmcli/package-json": "^6.0.0", @@ -7467,6 +7481,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "cacache": "^19.0.0", "json-parse-even-better-errors": "^4.0.0", @@ -7483,6 +7498,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/git": "^6.0.0", "@npmcli/installed-package-contents": "^3.0.0", @@ -7514,6 +7530,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -7523,6 +7540,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -7532,6 +7550,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/git": "^6.0.0", "glob": "^10.2.2", @@ -7550,6 +7569,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "which": "^5.0.0" }, @@ -7562,6 +7582,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "postcss-selector-parser": "^6.1.2" }, @@ -7574,6 +7595,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -7583,6 +7605,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/node-gyp": "^4.0.0", "@npmcli/package-json": "^6.0.0", @@ -7601,6 +7624,7 @@ "inBundle": true, "license": "MIT", "optional": true, + "peer": true, "engines": { "node": ">=14" } @@ -7610,6 +7634,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^16.14.0 || >=18.0.0" } @@ -7619,6 +7644,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@sigstore/protobuf-specs": "^0.3.2", "tuf-js": "^3.0.1" @@ -7632,6 +7658,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": "^16.14.0 || >=18.0.0" } @@ -7641,6 +7668,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -7650,6 +7678,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "^4.3.4" }, @@ -7662,6 +7691,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -7675,6 +7705,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -7684,6 +7715,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -7695,25 +7727,29 @@ "version": "2.0.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/bin-links": { "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "cmd-shim": "^7.0.0", "npm-normalize-package-bin": "^4.0.0", @@ -7730,6 +7766,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" }, @@ -7742,6 +7779,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -7751,6 +7789,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", @@ -7774,6 +7813,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "engines": { "node": ">=18" } @@ -7783,6 +7823,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "minipass": "^7.0.4", "rimraf": "^5.0.5" @@ -7796,6 +7837,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -7811,6 +7853,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -7823,6 +7866,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", @@ -7840,6 +7884,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "engines": { "node": ">=18" } @@ -7849,6 +7894,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -7861,6 +7907,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": ">=10" } @@ -7876,6 +7923,7 @@ ], "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -7885,6 +7933,7 @@ "dev": true, "inBundle": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "ip-regex": "^5.0.0" }, @@ -7897,6 +7946,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -7906,6 +7956,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "string-width": "^4.2.3", "strip-ansi": "^6.0.1" @@ -7919,6 +7970,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -7928,6 +7980,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -7939,19 +7992,22 @@ "version": "1.1.4", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.6", "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -7966,6 +8022,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "isexe": "^2.0.0" }, @@ -7981,6 +8038,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "bin": { "cssesc": "bin/cssesc" }, @@ -7993,6 +8051,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "ms": "^2.1.3" }, @@ -8010,6 +8069,7 @@ "dev": true, "inBundle": true, "license": "BSD-3-Clause", + "peer": true, "engines": { "node": ">=0.3.1" } @@ -8018,13 +8078,15 @@ "version": "0.2.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/encoding": { "version": "0.1.13", @@ -8032,6 +8094,7 @@ "inBundle": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "iconv-lite": "^0.6.2" } @@ -8041,6 +8104,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -8049,19 +8113,22 @@ "version": "2.0.3", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", "dev": true, "inBundle": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 4.9.1" } @@ -8071,6 +8138,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -8087,6 +8155,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^7.0.3" }, @@ -8099,6 +8168,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -8118,13 +8188,15 @@ "version": "4.2.11", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/npm/node_modules/hosted-git-info": { "version": "8.0.2", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "lru-cache": "^10.0.1" }, @@ -8136,13 +8208,15 @@ "version": "4.1.1", "dev": true, "inBundle": true, - "license": "BSD-2-Clause" + "license": "BSD-2-Clause", + "peer": true }, "node_modules/npm/node_modules/http-proxy-agent": { "version": "7.0.2", "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -8156,6 +8230,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -8170,6 +8245,7 @@ "inBundle": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -8182,6 +8258,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minimatch": "^9.0.0" }, @@ -8194,6 +8271,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.19" } @@ -8203,6 +8281,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -8212,6 +8291,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -8221,6 +8301,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/package-json": "^6.0.0", "npm-package-arg": "^12.0.0", @@ -8239,6 +8320,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -8252,6 +8334,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -8264,6 +8347,7 @@ "dev": true, "inBundle": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "cidr-regex": "^4.1.1" }, @@ -8276,6 +8360,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -8284,13 +8369,15 @@ "version": "2.0.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/npm/node_modules/jackspeak": { "version": "3.4.3", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -8305,13 +8392,15 @@ "version": "1.1.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -8321,6 +8410,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -8332,25 +8422,29 @@ "node >= 0.2.0" ], "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/libnpmaccess": { "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "npm-package-arg": "^12.0.0", "npm-registry-fetch": "^18.0.1" @@ -8364,6 +8458,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/arborist": "^8.0.0", "@npmcli/installed-package-contents": "^3.0.0", @@ -8383,6 +8478,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/arborist": "^8.0.0", "@npmcli/run-script": "^9.0.1", @@ -8404,6 +8500,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/arborist": "^8.0.0" }, @@ -8416,6 +8513,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "aproba": "^2.0.0", "npm-registry-fetch": "^18.0.1" @@ -8429,6 +8527,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "aproba": "^2.0.0", "npm-registry-fetch": "^18.0.1" @@ -8442,6 +8541,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/arborist": "^8.0.0", "@npmcli/run-script": "^9.0.1", @@ -8457,6 +8557,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "ci-info": "^4.0.0", "normalize-package-data": "^7.0.0", @@ -8476,6 +8577,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "npm-registry-fetch": "^18.0.1" }, @@ -8488,6 +8590,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "aproba": "^2.0.0", "npm-registry-fetch": "^18.0.1" @@ -8501,6 +8604,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/git": "^6.0.1", "@npmcli/run-script": "^9.0.1", @@ -8516,13 +8620,15 @@ "version": "10.4.3", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "14.0.3", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/agent": "^3.0.0", "cacache": "^19.0.1", @@ -8545,6 +8651,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -8554,6 +8661,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8569,6 +8677,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -8578,6 +8687,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^7.0.3" }, @@ -8590,6 +8700,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", @@ -8607,6 +8718,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "minipass": "^7.0.4", "rimraf": "^5.0.5" @@ -8620,6 +8732,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^3.0.0" }, @@ -8632,6 +8745,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -8644,6 +8758,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^3.0.0" }, @@ -8656,6 +8771,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -8668,6 +8784,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^3.0.0" }, @@ -8680,6 +8797,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -8692,6 +8810,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -8705,6 +8824,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -8717,6 +8837,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -8728,13 +8849,15 @@ "version": "2.1.3", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/mute-stream": { "version": "2.0.0", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -8744,6 +8867,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", @@ -8768,6 +8892,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "engines": { "node": ">=18" } @@ -8777,6 +8902,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "minipass": "^7.0.4", "rimraf": "^5.0.5" @@ -8790,6 +8916,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -8805,6 +8932,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", @@ -8822,6 +8950,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "engines": { "node": ">=18" } @@ -8831,6 +8960,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "abbrev": "^2.0.0" }, @@ -8846,6 +8976,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -8855,6 +8986,7 @@ "dev": true, "inBundle": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "hosted-git-info": "^8.0.0", "semver": "^7.3.5", @@ -8869,6 +9001,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -8878,6 +9011,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "npm-normalize-package-bin": "^4.0.0" }, @@ -8890,6 +9024,7 @@ "dev": true, "inBundle": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "semver": "^7.1.1" }, @@ -8902,6 +9037,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -8911,6 +9047,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "hosted-git-info": "^8.0.0", "proc-log": "^5.0.0", @@ -8926,6 +9063,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "ignore-walk": "^7.0.0" }, @@ -8938,6 +9076,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "npm-install-checks": "^7.1.0", "npm-normalize-package-bin": "^4.0.0", @@ -8953,6 +9092,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "npm-registry-fetch": "^18.0.0", "proc-log": "^5.0.0" @@ -8966,6 +9106,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/redact": "^3.0.0", "jsonparse": "^1.3.1", @@ -8985,6 +9126,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "minipass": "^7.0.4", "rimraf": "^5.0.5" @@ -8998,6 +9140,7 @@ "dev": true, "inBundle": true, "license": "BSD-2-Clause", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -9007,6 +9150,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -9021,13 +9165,15 @@ "version": "1.0.1", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0" + "license": "BlueOak-1.0.0", + "peer": true }, "node_modules/npm/node_modules/pacote": { "version": "19.0.1", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/git": "^6.0.0", "@npmcli/installed-package-contents": "^3.0.0", @@ -9059,6 +9205,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "json-parse-even-better-errors": "^4.0.0", "just-diff": "^6.0.0", @@ -9073,6 +9220,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -9082,6 +9230,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -9098,6 +9247,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -9111,6 +9261,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -9120,6 +9271,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -9129,6 +9281,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -9138,6 +9291,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -9146,13 +9300,15 @@ "version": "1.0.1", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -9166,6 +9322,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "read": "^4.0.0" }, @@ -9177,6 +9334,7 @@ "version": "0.12.0", "dev": true, "inBundle": true, + "peer": true, "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" } @@ -9186,6 +9344,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "mute-stream": "^2.0.0" }, @@ -9198,6 +9357,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -9207,6 +9367,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "json-parse-even-better-errors": "^4.0.0", "npm-normalize-package-bin": "^4.0.0" @@ -9220,6 +9381,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 4" } @@ -9229,6 +9391,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "glob": "^10.3.7" }, @@ -9244,13 +9407,15 @@ "dev": true, "inBundle": true, "license": "MIT", - "optional": true + "optional": true, + "peer": true }, "node_modules/npm/node_modules/semver": { "version": "7.6.3", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -9263,6 +9428,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -9275,6 +9441,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -9284,6 +9451,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": ">=14" }, @@ -9296,6 +9464,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@sigstore/bundle": "^3.0.0", "@sigstore/core": "^2.0.0", @@ -9313,6 +9482,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@sigstore/protobuf-specs": "^0.3.2" }, @@ -9325,6 +9495,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -9334,6 +9505,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@sigstore/bundle": "^3.0.0", "@sigstore/core": "^2.0.0", @@ -9351,6 +9523,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@sigstore/bundle": "^3.0.0", "@sigstore/core": "^2.0.0", @@ -9365,6 +9538,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -9375,6 +9549,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -9389,6 +9564,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "agent-base": "^7.1.1", "debug": "^4.3.4", @@ -9403,6 +9579,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -9413,6 +9590,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -9422,13 +9600,15 @@ "version": "2.5.0", "dev": true, "inBundle": true, - "license": "CC-BY-3.0" + "license": "CC-BY-3.0", + "peer": true }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -9438,19 +9618,22 @@ "version": "3.0.20", "dev": true, "inBundle": true, - "license": "CC0-1.0" + "license": "CC0-1.0", + "peer": true }, "node_modules/npm/node_modules/sprintf-js": { "version": "1.1.3", "dev": true, "inBundle": true, - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/npm/node_modules/ssri": { "version": "12.0.0", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^7.0.3" }, @@ -9463,6 +9646,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -9478,6 +9662,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -9492,6 +9677,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -9505,6 +9691,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -9517,6 +9704,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -9529,6 +9717,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -9546,6 +9735,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^3.0.0" }, @@ -9558,6 +9748,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -9570,6 +9761,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": ">=8" } @@ -9578,19 +9770,22 @@ "version": "0.2.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -9600,6 +9795,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "@tufjs/models": "3.0.1", "debug": "^4.3.6", @@ -9614,6 +9810,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "@tufjs/canonical-json": "2.0.0", "minimatch": "^9.0.5" @@ -9627,6 +9824,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "unique-slug": "^5.0.0" }, @@ -9639,6 +9837,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "imurmurhash": "^0.1.4" }, @@ -9650,13 +9849,15 @@ "version": "1.0.2", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -9667,6 +9868,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -9677,6 +9879,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -9685,13 +9888,15 @@ "version": "3.0.1", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/npm/node_modules/which": { "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "isexe": "^3.1.1" }, @@ -9707,6 +9912,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": ">=16" } @@ -9716,6 +9922,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -9734,6 +9941,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9751,6 +9959,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9766,6 +9975,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -9777,13 +9987,15 @@ "version": "9.2.2", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -9801,6 +10013,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -9816,6 +10029,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" @@ -9828,7 +10042,8 @@ "version": "4.0.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/object-assign": { "version": "4.1.1", diff --git a/package.json b/package.json index ce7c1ae..28263d8 100644 --- a/package.json +++ b/package.json @@ -17,9 +17,13 @@ "homepage": "https://github-automated-repos.vercel.app", "license": "MIT", "main": "index.js", + "exports": { + ".": "./dist/index.js", + "./react-query": "./dist/react-query.js" + }, "scripts": { "clean": "rm -rf dist", - "build": "npm run clean && tsc && cp package.json README.md ./dist && npm run semantic-release", + "build": "npm run clean && tsc && cp package.json README.md ./dist", "yalc:update": "npx yalc push --scripts --update --replace", "lint": "eslint .", "lint:fix": "eslint --fix .", @@ -78,4 +82,4 @@ "@types/react-dom": "^18.3.1", "json-schema": "^0.4.0" } -} +} \ No newline at end of file diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts new file mode 100644 index 0000000..9586bd9 --- /dev/null +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -0,0 +1,26 @@ +import { UseQueryResult, useQuery } from '@tanstack/react-query'; + +import { _handleBanner } from '../utils/_handleBanner'; +import { _handleRepository } from '../utils/_handleRepository'; + +export interface IGithubRepos { + name: string; + topics: string[]; + html_url: string; + description: string; + id: number; + homepage: string; + banner: string[]; +} + +/** + * @param {string} usernameGitHub - Insert your GitHub username. See in your GitHub Ex.: https://github.com/USERNAME + * @param {string} keyWordDeploy - Insert a keyword chosen by you. - This key is responsible for managing your data projects on GitHub in topics field. See in : https://github.com/DIGOARTHUR/github-automated-repos. + * @returns {UseQueryResult} - React Query result containing repositories data with the properties: name, topics[], html_url, description, id, homepage, banner[]. isLoading to await for data TRUE or FALSE. isLoadingError for a bad request TRUE ou FALSE. + */ +export function useGitHubAutomatedRepos(usernameGitHub: string, keyWordDeploy: string): UseQueryResult { + return useQuery({ + queryKey: ['githubRepos', usernameGitHub, keyWordDeploy], + queryFn: () => _handleRepository(usernameGitHub, keyWordDeploy), + }); +} diff --git a/src/hook/useGithubAutomatedRepos.ts b/src/hook/useGithubAutomatedRepos.ts index 4917475..6d62e0c 100644 --- a/src/hook/useGithubAutomatedRepos.ts +++ b/src/hook/useGithubAutomatedRepos.ts @@ -1,8 +1,6 @@ import { UseQueryResult, useQuery } from '@tanstack/react-query'; - -import { _handleBanner } from './utils/_handleBanner'; -import { fetchRepositories } from './utils/_handleRepository'; - +import { _handleRepository } from './utils/_handleRepository'; +import { useEffect, useState } from 'react'; export interface IGithubRepos { name: string; topics: string[]; @@ -13,14 +11,43 @@ export interface IGithubRepos { banner: string[]; } + +interface IUseGithubReposSimpleReturn { + data: IGithubRepos[] | undefined; + isLoading: boolean; + error: Error | null; +} + + /** * @param {string} usernameGitHub - Insert your GitHub username. See in your GitHub Ex.: https://github.com/USERNAME * @param {string} keyWordDeploy - Insert a keyword chosen by you. - This key is responsible for managing your data projects on GitHub in topics field. See in : https://github.com/DIGOARTHUR/github-automated-repos. - * @returns {UseQueryResult} - React Query result containing repositories data with the properties: name, topics[], html_url, description, id, homepage, banner[]. isLoading to await for data TRUE or FALSE. isLoadingError for a bad request TRUE ou FALSE. + * @returns {} - React Query result containing repositories data with the properties: name, topics[], html_url, description, id, homepage, banner[]. isLoading to await for data TRUE or FALSE. isLoadingError for a bad request TRUE ou FALSE. */ -export function useGitHubAutomatedRepos(usernameGitHub: string, keyWordDeploy: string): UseQueryResult { - return useQuery({ - queryKey: ['githubRepos', usernameGitHub, keyWordDeploy], - queryFn: () => fetchRepositories(usernameGitHub, keyWordDeploy), - }); +export function useGitHubAutomatedRepos(usernameGitHub: string, keyWordDeploy: string): IUseGithubReposSimpleReturn { + const [data, setData] = useState(undefined); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(null); + + useEffect(() => { + if (!usernameGitHub || !keyWordDeploy) return; + + const fetchData = async () => { + setIsLoading(true); + setError(null); + + try { + const repos = await _handleRepository(usernameGitHub, keyWordDeploy); + setData(repos); + } catch (err: any) { + setError(err); + } finally { + setIsLoading(false); + } + }; + + fetchData(); + }, [usernameGitHub, keyWordDeploy]); + + return { data, isLoading, error }; } diff --git a/src/hook/utils/_handleRepository.ts b/src/hook/utils/_handleRepository.ts index 458b87e..64af5ec 100644 --- a/src/hook/utils/_handleRepository.ts +++ b/src/hook/utils/_handleRepository.ts @@ -16,7 +16,7 @@ export interface IGithubRepos { * @param {string} keyWordDeploy - Insert a keyword chosen by you. - This key is responsible for managing your projects on GitHub in topics field. See in : https://github.com/DIGOARTHUR/github-automated-repos. */ -export const fetchRepositories = async (usernameGitHub: string, keyWordDeploy: string): Promise => { +export const _handleRepository = async (usernameGitHub: string, keyWordDeploy: string): Promise => { const jsonData = await fetchGitHubAPI(usernameGitHub); const datafilter = jsonData.filter((item: IGithubRepos) => item.topics.includes(keyWordDeploy)); diff --git a/src/index.ts b/src/index.ts index 3ed5e81..6257d37 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,4 @@ export { StackIcons } from './components/StackIcons'; export { StackLabels } from './components/StackLabels/StackLabels'; -export { IGithubRepos, useGitHubAutomatedRepos } from './hook/useGithubAutomatedRepos'; -export { ReactQueryProvider } from './hook/api/QueryClientProvider'; export { stackIconsURL } from './icons/stackIconsURL'; +export { useGitHubAutomatedRepos, IGithubRepos } from './hook/useGithubAutomatedRepos'; diff --git a/src/react-query.ts b/src/react-query.ts new file mode 100644 index 0000000..01620d6 --- /dev/null +++ b/src/react-query.ts @@ -0,0 +1,4 @@ +// src/react-query.ts +export { useGitHubAutomatedRepos } from './hook/react-query/useGithubAutomatedRepos'; +export { ReactQueryProvider } from './hook/api/QueryClientProvider'; +export { IGithubRepos } from './hook/react-query/useGithubAutomatedRepos'; From 6afadf70727af98447695580f08bb64968ec2e25 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Mon, 11 Aug 2025 15:13:22 +0100 Subject: [PATCH 02/24] refactor(react-query): improve hook with react query and JSDoc params, returns, example --- package.json | 14 +++- src/hook/api/QueryClientProvider.tsx | 19 ----- .../react-query/useGithubAutomatedRepos.ts | 79 ++++++++++++++----- src/hook/utils/_handleBanner.ts | 35 ++++---- src/react-query.ts | 1 - 5 files changed, 91 insertions(+), 57 deletions(-) delete mode 100644 src/hook/api/QueryClientProvider.tsx diff --git a/package.json b/package.json index 28263d8..80a7824 100644 --- a/package.json +++ b/package.json @@ -17,9 +17,19 @@ "homepage": "https://github-automated-repos.vercel.app", "license": "MIT", "main": "index.js", + "module": "index.js", + "types": "index.d.ts", "exports": { - ".": "./dist/index.js", - "./react-query": "./dist/react-query.js" + ".": { + "import": "./index.js", + "require": "./index.js", + "types": "./index.d.ts" + }, + "./react-query": { + "import": "./react-query.js", + "require": "./react-query.js", + "types": "./react-query.d.ts" + } }, "scripts": { "clean": "rm -rf dist", diff --git a/src/hook/api/QueryClientProvider.tsx b/src/hook/api/QueryClientProvider.tsx deleted file mode 100644 index cc6b4d8..0000000 --- a/src/hook/api/QueryClientProvider.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import React from 'react'; - -const queryClient = new QueryClient({ - defaultOptions: { - queries: { - staleTime: 1000 * 60 * 5, - refetchOnWindowFocus: false, - }, - }, -}); - -interface IPropsReactQueryProvider { - children: React.ReactNode; -} - -export function ReactQueryProvider({ children }: IPropsReactQueryProvider): JSX.Element { - return {children}; -} diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts index 9586bd9..5d41574 100644 --- a/src/hook/react-query/useGithubAutomatedRepos.ts +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -1,26 +1,67 @@ -import { UseQueryResult, useQuery } from '@tanstack/react-query'; - -import { _handleBanner } from '../utils/_handleBanner'; +import { useQuery, UseQueryOptions, UseQueryResult } from '@tanstack/react-query'; import { _handleRepository } from '../utils/_handleRepository'; export interface IGithubRepos { - name: string; - topics: string[]; - html_url: string; - description: string; - id: number; - homepage: string; - banner: string[]; + name: string; + topics: string[]; + html_url: string; + description: string; + id: number; + homepage: string; + banner: string[]; } /** - * @param {string} usernameGitHub - Insert your GitHub username. See in your GitHub Ex.: https://github.com/USERNAME - * @param {string} keyWordDeploy - Insert a keyword chosen by you. - This key is responsible for managing your data projects on GitHub in topics field. See in : https://github.com/DIGOARTHUR/github-automated-repos. - * @returns {UseQueryResult} - React Query result containing repositories data with the properties: name, topics[], html_url, description, id, homepage, banner[]. isLoading to await for data TRUE or FALSE. isLoadingError for a bad request TRUE ou FALSE. + * Custom React Query hook to fetch GitHub repositories filtered by a deployment keyword. + * Automatically handles caching, refetching and error states. + * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. + * @param {string} userNameGitHub - Your GitHub username (e.g., 'digoarthur') in https://github.com/USERNAME. + * @param {string} keyWord - Keyword to identify deployed repositories (e.g., 'portfolio', 'attached'). PATH: repository > βš™οΈ > Topics > insert your keyWord. + * The hook will filter repositories that contain this keyword in the Topics field. + * @returns {IGithubRepos[]} data - Array of filtered GitHub repositories. + * @returns {boolean} isLoading - True while the initial load is in progress. + * @returns {boolean} isError - True if the query encountered an error. + * @param {Object} [options] - Optional React Query configuration options. + * @param {number} [options.refetchInterval] - Auto-refetch interval in milliseconds (e.g., 60000 for 1 minute). + * Set to `false` to disable auto-refetch. + * @param {boolean} [options.refetchOnWindowFocus] - Whether to refetch when window regains focus. Default: true. + * @param {boolean} [options.enabled] - Whether the query should execute immediately. Set to false for manual triggering. + * @param {Function} [options.onSuccess] - Callback function executed after successful query. + * Receives the data as parameter: `(data: IGithubRepos[]) => void`. + * @param {Function} [options.onError] - Callback function executed when query fails. + * Receives the error as parameter: `(error: Error) => void`. + * @param {number} [options.staleTime] - Time in milliseconds before data becomes stale (default: 0). + * @param {number} [options.cacheTime] - Time in milliseconds to keep unused data in cache (default: 5 minutes). + * @param {number|boolean|Function} [options.retry] - How many times to retry failed queries (default: 3). + * @param {number} [options.retryDelay] - Delay in milliseconds between retries (default: 1000). + * + * @returns {UseQueryResult} - React Query result object containing: + * @returns {Error} error - Error object if query failed. + * @returns {Function} refetch - Function to manually trigger refetch. + * + * + * @example + * // github-automated-repos with React-Query + const { data, isLoading, error } = useGitHubAutomatedRepos('digoarthur', 'attached', { + refetchInterval: 300000, // 5 minutes + refetchOnWindowFocus: false, + staleTime: 10 * 60 * 1000, // 10 minutes + }); + console.log(data) + + + * @see {@link ℹ️ https://tanstack.com/query/latest/docs/react/reference/useQuery} for full React Query documentation. */ -export function useGitHubAutomatedRepos(usernameGitHub: string, keyWordDeploy: string): UseQueryResult { - return useQuery({ - queryKey: ['githubRepos', usernameGitHub, keyWordDeploy], - queryFn: () => _handleRepository(usernameGitHub, keyWordDeploy), - }); -} + + +export function useGitHubAutomatedRepos( + userNameGitHub: string, + keyWord: string, + options?: Omit, 'queryKey' | 'queryFn'> +): UseQueryResult { + return useQuery({ + queryKey: ['githubRepos', userNameGitHub, keyWord], + queryFn: () => _handleRepository(userNameGitHub, keyWord), + ...options, + }); +} \ No newline at end of file diff --git a/src/hook/utils/_handleBanner.ts b/src/hook/utils/_handleBanner.ts index e44380a..2896db2 100644 --- a/src/hook/utils/_handleBanner.ts +++ b/src/hook/utils/_handleBanner.ts @@ -1,25 +1,28 @@ import { fetchGitHubBanner } from '../api/fetchGitHubBanner'; export interface IBanner { - download_url: string; + download_url: string; } -/** - * @param {string} usernameGitHub - Insert your username GitHub Ex.: https://github.com/USERNAME - * @param {string} repositoryName - Insert the repository name - * @returns {(Promise { - const banners_url: string[] = []; + const banners_url: string[] = []; - await fetchGitHubBanner(usernameGitHub, repositoryName).then((repositorie_Banners: IBanner[]) => { - repositorie_Banners.forEach((item: IBanner) => { - if (item.download_url.includes('banner')) { - banners_url.push(item.download_url); - } - }); - }); + try { + const repositorie_Banners = await fetchGitHubBanner(usernameGitHub, repositoryName); + console.log(repositorie_Banners.download_url) + if (Array.isArray(repositorie_Banners)) { + repositorie_Banners.forEach((item: IBanner) => { + if (item?.download_url && item.download_url.includes('banner')) { + banners_url.push(item.download_url); + } else { + // opcional + // banners_url.push(""); + } + }); + } + } catch (error) { + console.error('Erro ao buscar banners:', error); + } - return banners_url; + return banners_url; } diff --git a/src/react-query.ts b/src/react-query.ts index 01620d6..bada767 100644 --- a/src/react-query.ts +++ b/src/react-query.ts @@ -1,4 +1,3 @@ // src/react-query.ts export { useGitHubAutomatedRepos } from './hook/react-query/useGithubAutomatedRepos'; -export { ReactQueryProvider } from './hook/api/QueryClientProvider'; export { IGithubRepos } from './hook/react-query/useGithubAutomatedRepos'; From bf2b08094e6ed9385de4bff3a725d9ac3dc6c0b6 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Wed, 13 Aug 2025 12:23:29 +0100 Subject: [PATCH 03/24] refactor(hook): improve JSDoc --- .../react-query/useGithubAutomatedRepos.ts | 115 ++++++++++++++---- src/hook/useGithubAutomatedRepos.ts | 107 ++++++++++++++-- src/index.ts | 2 +- src/react-query.ts | 2 +- 4 files changed, 190 insertions(+), 36 deletions(-) diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts index 5d41574..dff354d 100644 --- a/src/hook/react-query/useGithubAutomatedRepos.ts +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -1,7 +1,7 @@ import { useQuery, UseQueryOptions, UseQueryResult } from '@tanstack/react-query'; import { _handleRepository } from '../utils/_handleRepository'; -export interface IGithubRepos { +export interface IGitHubRepos { name: string; topics: string[]; html_url: string; @@ -12,13 +12,33 @@ export interface IGithubRepos { } /** - * Custom React Query hook to fetch GitHub repositories filtered by a deployment keyword. - * Automatically handles caching, refetching and error states. * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. - * @param {string} userNameGitHub - Your GitHub username (e.g., 'digoarthur') in https://github.com/USERNAME. - * @param {string} keyWord - Keyword to identify deployed repositories (e.g., 'portfolio', 'attached'). PATH: repository > βš™οΈ > Topics > insert your keyWord. - * The hook will filter repositories that contain this keyword in the Topics field. - * @returns {IGithubRepos[]} data - Array of filtered GitHub repositories. + * @example + * // With React-Query - Usage Example github-automated-repos HOOK + const { data, isLoading, error } = useGitHubAutomatedRepos('digoarthur', 'attached', { + refetchInterval: 300000, // 5 minutes + refetchOnWindowFocus: false, + staleTime: 10 * 60 * 1000, // 10 minutes + }); + console.log(data) + + * @param {string} GitHubUsername - Your GitHub username (e.g., 'digoarthur') in https://github.com/USERNAME. + * @param {string} keyWord - It is chosen by you. KeyWord used to identify and filter repositories (e.g., 'portfolio', 'attached'). + * Set this KeyWord in GitHub at: + * Repository β†’ About - 'βš™οΈ' β†’ Topics β†’ add your KeyWord. + * Only repositories containing this KeyWord in their Topics will be returned. + * @returns {Object} Hook state object containing: + * + * @type {Object} IGitHubRepos + * @property {string} name - Repository name. + * @property {string[]} topics - Topics assigned to the repository. + * @property {string} html_url - Repository URL. + * @property {string} description - Short description of the repository. + * @property {number} id - Unique repository ID. + * @property {string} homepage - Homepage or deployed site URL. + * @property {string[]} banner - Banner image URLs. + * + * @returns {IGitHubRepos[]} data - Array of filtered GitHub repositories. * @returns {boolean} isLoading - True while the initial load is in progress. * @returns {boolean} isError - True if the query encountered an error. * @param {Object} [options] - Optional React Query configuration options. @@ -27,7 +47,7 @@ export interface IGithubRepos { * @param {boolean} [options.refetchOnWindowFocus] - Whether to refetch when window regains focus. Default: true. * @param {boolean} [options.enabled] - Whether the query should execute immediately. Set to false for manual triggering. * @param {Function} [options.onSuccess] - Callback function executed after successful query. - * Receives the data as parameter: `(data: IGithubRepos[]) => void`. + * Receives the data as parameter: `(data: IGitHubRepos[]) => void`. * @param {Function} [options.onError] - Callback function executed when query fails. * Receives the error as parameter: `(error: Error) => void`. * @param {number} [options.staleTime] - Time in milliseconds before data becomes stale (default: 0). @@ -35,33 +55,82 @@ export interface IGithubRepos { * @param {number|boolean|Function} [options.retry] - How many times to retry failed queries (default: 3). * @param {number} [options.retryDelay] - Delay in milliseconds between retries (default: 1000). * - * @returns {UseQueryResult} - React Query result object containing: + * @returns {UseQueryResult} - React Query result object containing: * @returns {Error} error - Error object if query failed. * @returns {Function} refetch - Function to manually trigger refetch. * * + * @see {@link ℹ️ https://tanstack.com/query/latest/docs/react/reference/useQuery} for full React Query documentation. + * * @example - * // github-automated-repos with React-Query - const { data, isLoading, error } = useGitHubAutomatedRepos('digoarthur', 'attached', { - refetchInterval: 300000, // 5 minutes - refetchOnWindowFocus: false, - staleTime: 10 * 60 * 1000, // 10 minutes - }); + * // Usage Example + * + import { useGitHubAutomatedRepos, StackIcons, StackLabels } from "github-automated-repos/react-query"; + if (isLoading) return

Loading...

; console.log(data) + return ( +
+ {data?.map((repo, index) => ( +
+ +

+ {repo.name} +

- - * @see {@link ℹ️ https://tanstack.com/query/latest/docs/react/reference/useQuery} for full React Query documentation. + +
+ {repo.banner.map((banner_url, index) => ( + + ))} +
+ + +
+ {repo.topics.map((t, j) => ( + + + + ))} +
+ + +

+ {repo.description} +

+ + + +
+ ))} +
+ ); + * */ export function useGitHubAutomatedRepos( - userNameGitHub: string, + GitHubUsername: string, keyWord: string, - options?: Omit, 'queryKey' | 'queryFn'> -): UseQueryResult { - return useQuery({ - queryKey: ['githubRepos', userNameGitHub, keyWord], - queryFn: () => _handleRepository(userNameGitHub, keyWord), + options?: Omit, 'queryKey' | 'queryFn'> +): UseQueryResult { + return useQuery({ + queryKey: ['githubRepos', GitHubUsername, keyWord], + queryFn: () => _handleRepository(GitHubUsername, keyWord), ...options, }); } \ No newline at end of file diff --git a/src/hook/useGithubAutomatedRepos.ts b/src/hook/useGithubAutomatedRepos.ts index 6d62e0c..3b45411 100644 --- a/src/hook/useGithubAutomatedRepos.ts +++ b/src/hook/useGithubAutomatedRepos.ts @@ -1,7 +1,6 @@ -import { UseQueryResult, useQuery } from '@tanstack/react-query'; import { _handleRepository } from './utils/_handleRepository'; import { useEffect, useState } from 'react'; -export interface IGithubRepos { +export interface IGitHubRepos { name: string; topics: string[]; html_url: string; @@ -13,31 +12,117 @@ export interface IGithubRepos { interface IUseGithubReposSimpleReturn { - data: IGithubRepos[] | undefined; + data: IGitHubRepos[] | undefined; isLoading: boolean; error: Error | null; } /** - * @param {string} usernameGitHub - Insert your GitHub username. See in your GitHub Ex.: https://github.com/USERNAME - * @param {string} keyWordDeploy - Insert a keyword chosen by you. - This key is responsible for managing your data projects on GitHub in topics field. See in : https://github.com/DIGOARTHUR/github-automated-repos. - * @returns {} - React Query result containing repositories data with the properties: name, topics[], html_url, description, id, homepage, banner[]. isLoading to await for data TRUE or FALSE. isLoadingError for a bad request TRUE ou FALSE. + * + * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. + * @example + * // Usage Example github-automated-repos HOOK + import { useGitHubAutomatedRepos, StackIcons, StackLabels } from "github-automated-repos"; + const { data, isLoading, error } = useGitHubAutomatedRepos('digoarthur', 'attached'); + console.log(data) + * + * @param {string} GitHubUsername - Your GitHub username as seen in your profile URL. + * Example: 'digoarthur' from https://github.com/USERNAME. + * @param {string} KeyWord - It is chosen by you. KeyWord used to identify and filter repositories (e.g., 'portfolio', 'attached'). + * Set this KeyWord in GitHub at: + * Repository β†’ About - 'βš™οΈ' β†’ Topics β†’ add your KeyWord. + * Only repositories containing this KeyWord in their Topics will be returned. + * @returns {Object} Hook state object containing: + * + * @type {Object} IGitHubRepos + * @property {string} name - Repository name. + * @property {string[]} topics - Topics assigned to the repository. + * @property {string} html_url - Repository URL. + * @property {string} description - Short description of the repository. + * @property {number} id - Unique repository ID. + * @property {string} homepage - Homepage or deployed site URL. + * @property {string[]} banner - Banner image URLs. + * + * @returns {IGitHubRepos[]|undefined} data - Array of filtered repositories, or `undefined` while loading. + * @returns {boolean} isLoading - `true` while fetching data, otherwise `false`. + * @returns {Error|null} error - Error object if the request failed, otherwise `null`. + * + * @example + * // Usage Example + * + import { useGitHubAutomatedRepos, StackIcons, StackLabels } from "github-automated-repos"; + const { data, isLoading } = useGitHubAutomatedRepos("digoarthur", "deploy"); + if (isLoading) return

Loading...

; + console.log(data) + return ( +
+ {data?.map((repo, index) => ( +
+ +

+ {repo.name} +

+ + +
+ {repo.banner.map((banner_url, index) => ( + + ))} +
+ + +
+ {repo.topics.map((t, j) => ( + + + + ))} +
+ + +

+ {repo.description} +

+ + + +
+ ))} +
+ ); + * */ -export function useGitHubAutomatedRepos(usernameGitHub: string, keyWordDeploy: string): IUseGithubReposSimpleReturn { - const [data, setData] = useState(undefined); + +export function useGitHubAutomatedRepos(GitHubUsername: string, KeyWord: string): IUseGithubReposSimpleReturn { + const [data, setData] = useState(undefined); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { - if (!usernameGitHub || !keyWordDeploy) return; + if (!GitHubUsername || !KeyWord) return; const fetchData = async () => { setIsLoading(true); setError(null); try { - const repos = await _handleRepository(usernameGitHub, keyWordDeploy); + const repos = await _handleRepository(GitHubUsername, KeyWord); setData(repos); } catch (err: any) { setError(err); @@ -47,7 +132,7 @@ export function useGitHubAutomatedRepos(usernameGitHub: string, keyWordDeploy: s }; fetchData(); - }, [usernameGitHub, keyWordDeploy]); + }, [GitHubUsername, KeyWord]); return { data, isLoading, error }; } diff --git a/src/index.ts b/src/index.ts index 6257d37..a723a0c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ export { StackIcons } from './components/StackIcons'; export { StackLabels } from './components/StackLabels/StackLabels'; export { stackIconsURL } from './icons/stackIconsURL'; -export { useGitHubAutomatedRepos, IGithubRepos } from './hook/useGithubAutomatedRepos'; +export { useGitHubAutomatedRepos, IGitHubRepos } from './hook/useGithubAutomatedRepos'; diff --git a/src/react-query.ts b/src/react-query.ts index bada767..6902ef9 100644 --- a/src/react-query.ts +++ b/src/react-query.ts @@ -1,3 +1,3 @@ // src/react-query.ts export { useGitHubAutomatedRepos } from './hook/react-query/useGithubAutomatedRepos'; -export { IGithubRepos } from './hook/react-query/useGithubAutomatedRepos'; +export { IGitHubRepos } from './hook/react-query/useGithubAutomatedRepos'; From a4b4bee1d8ac95eec492b65ee6e1875e4f8a1fc0 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Thu, 14 Aug 2025 21:13:42 +0100 Subject: [PATCH 04/24] feat: add StackIcons and StackLabels components --- src/react-query.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/react-query.ts b/src/react-query.ts index 6902ef9..b13a92f 100644 --- a/src/react-query.ts +++ b/src/react-query.ts @@ -1,3 +1,5 @@ // src/react-query.ts export { useGitHubAutomatedRepos } from './hook/react-query/useGithubAutomatedRepos'; export { IGitHubRepos } from './hook/react-query/useGithubAutomatedRepos'; +export { StackIcons } from './components/StackIcons'; +export { StackLabels } from './components/StackLabels/StackLabels'; \ No newline at end of file From c4e29586409cac609aa3e94c65f5ee1774ac44c8 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Thu, 14 Aug 2025 21:30:21 +0100 Subject: [PATCH 05/24] fix: remove deprecated stackIconsURL --- src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index a723a0c..0be41ab 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,3 @@ export { StackIcons } from './components/StackIcons'; export { StackLabels } from './components/StackLabels/StackLabels'; -export { stackIconsURL } from './icons/stackIconsURL'; export { useGitHubAutomatedRepos, IGitHubRepos } from './hook/useGithubAutomatedRepos'; From b1643ae1fd23aaf793562e2d3b9b26b9fd996d31 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Sun, 17 Aug 2025 11:30:29 +0100 Subject: [PATCH 06/24] refactor(hook): improvement JSDoc --- .../react-query/useGithubAutomatedRepos.ts | 115 +++++++++--------- src/hook/useGithubAutomatedRepos.ts | 110 ++++++++--------- 2 files changed, 115 insertions(+), 110 deletions(-) diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts index dff354d..92f2e20 100644 --- a/src/hook/react-query/useGithubAutomatedRepos.ts +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -14,7 +14,7 @@ export interface IGitHubRepos { /** * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. * @example - * // With React-Query - Usage Example github-automated-repos HOOK + * // Usage Example github-automated-repos HOOK with React-Query const { data, isLoading, error } = useGitHubAutomatedRepos('digoarthur', 'attached', { refetchInterval: 300000, // 5 minutes refetchOnWindowFocus: false, @@ -65,60 +65,65 @@ export interface IGitHubRepos { * @example * // Usage Example * - import { useGitHubAutomatedRepos, StackIcons, StackLabels } from "github-automated-repos/react-query"; - if (isLoading) return

Loading...

; - console.log(data) - return ( -
- {data?.map((repo, index) => ( -
- -

- {repo.name} -

- - -
- {repo.banner.map((banner_url, index) => ( - - ))} -
- - -
- {repo.topics.map((t, j) => ( - - - - ))} -
- - -

- {repo.description} -

- - - -
- ))} -
- ); + * import { useGitHubAutomatedRepos, StackIcons, StackLabels } from "github-automated-repos/react-query"; + * ... + * + * const { data, isLoading } = useGitHubAutomatedRepos('digoarthur', 'attached', { + * refetchInterval: 300000, // 5 minutes + * refetchOnWindowFocus: false, + * staleTime: 10 * 60 * 1000, // 10 minutes + * }); + * + * if (isLoading) return

Loading...

; + * + * return ( + *
+ * Header + * + * {data?.map((repo) => ( + *
+ *

{repo.name}

+ * + *
+ * {repo.banner.map((url) => Banner)} + *
+ * + *
+ * {repo.topics.map((topic) => ( + * + * + * + * ))} + *
+ * + *

{repo.description}

+ * + * + *
+ * ))} + * + * + *
+ * ); * */ diff --git a/src/hook/useGithubAutomatedRepos.ts b/src/hook/useGithubAutomatedRepos.ts index 3b45411..f076c0f 100644 --- a/src/hook/useGithubAutomatedRepos.ts +++ b/src/hook/useGithubAutomatedRepos.ts @@ -51,61 +51,61 @@ interface IUseGithubReposSimpleReturn { * @example * // Usage Example * - import { useGitHubAutomatedRepos, StackIcons, StackLabels } from "github-automated-repos"; - const { data, isLoading } = useGitHubAutomatedRepos("digoarthur", "deploy"); - if (isLoading) return

Loading...

; - console.log(data) - return ( -
- {data?.map((repo, index) => ( -
- -

- {repo.name} -

- - -
- {repo.banner.map((banner_url, index) => ( - - ))} -
- - -
- {repo.topics.map((t, j) => ( - - - - ))} -
- - -

- {repo.description} -

- - - -
- ))} -
- ); + * import { useGitHubAutomatedRepos, StackIcons, StackLabels } from "github-automated-repos"; + * + * ... + * + * const { data, isLoading } = useGitHubAutomatedRepos('digoarthur', 'attached'); + * if (isLoading) return

Loading...

; + * + * return ( + *
+ * Header + * + * {data?.map((repo) => ( + *
+ *

{repo.name}

+ * + *
+ * {repo.banner.map((url) => Banner)} + *
+ * + *
+ * {repo.topics.map((topic) => ( + * + * + * + * ))} + *
+ * + *

{repo.description}

+ * + * + *
+ * ))} + * + * + *
+ * ); * */ From 4a06bf68063054fb59d2a34e016fbecdc92b0d07 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Sun, 17 Aug 2025 14:17:18 +0100 Subject: [PATCH 07/24] refactor(hook/components): improvement JSDoc --- src/components/StackIcons.tsx | 13 ++++++++++++- src/components/StackLabels/StackLabels.tsx | 12 +++++++++++- src/hook/react-query/useGithubAutomatedRepos.ts | 6 ++++-- src/hook/useGithubAutomatedRepos.ts | 5 +++-- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/components/StackIcons.tsx b/src/components/StackIcons.tsx index 2d1e048..e5f0dcb 100644 --- a/src/components/StackIcons.tsx +++ b/src/components/StackIcons.tsx @@ -9,11 +9,22 @@ type PropsStackIcons = { }; /** - * @param {string} itemTopics - Mandatory: ex.: item.topics.map(icon) ... itemTopics={icon} + * 🧩 < StackIcons /> + * - Renders a ICONS for technology stacks with optional styling. + * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. + * @example + * {repo.topics.map((topic) => ( + * + * + * + * ))} + * + * @param {string} itemTopics - **Mandatory**: e.g: item.topics.map(icon) ... itemTopics={icon} * @param {string} className - Optional: style className - TailwindCSS. * @param {React.CSSProperties} style - Optional: style CSS Properties. * @returns {ReactNode} - Return tag img(SVG). */ + export function StackIcons({ itemTopics, className, style }: PropsStackIcons): JSX.Element | null { return itemTopics === 'deploy' ? ( <> diff --git a/src/components/StackLabels/StackLabels.tsx b/src/components/StackLabels/StackLabels.tsx index b97c5ad..6165c5c 100644 --- a/src/components/StackLabels/StackLabels.tsx +++ b/src/components/StackLabels/StackLabels.tsx @@ -10,7 +10,17 @@ type PropsStackLabels = { }; /** - * @param {string} itemTopics - Mandatory: ex.: item.topics.map(icon) ... itemTopics={icon} + * 🧩 < StackLabels /> + * - Renders a LABELS for technology stacks with optional styling. + * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. + * @example + * {repo.topics.map((topic) => ( + * + * + * + * ))} + * + * @param {string} itemTopics - **Mandatory**: e.g: item.topics.map(icon) ... itemTopics={icon} * @param {string} className - Optional: style className - TailwindCSS. * @param {React.CSSProperties} style - Optional: style CSS Properties. * @returns {ReactNode} - Return tag img(SVG). diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts index 92f2e20..7fc3446 100644 --- a/src/hook/react-query/useGithubAutomatedRepos.ts +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -12,10 +12,12 @@ export interface IGitHubRepos { } /** + * βš™οΈ github-automated-repos ( ) + [ React Query ] + * - Control, choose and get data from your GitHub repositories. * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. * @example - * // Usage Example github-automated-repos HOOK with React-Query - const { data, isLoading, error } = useGitHubAutomatedRepos('digoarthur', 'attached', { + * // Usage Example + [ React Query ] + const { data, isLoading } = useGitHubAutomatedRepos('digoarthur', 'attached', { refetchInterval: 300000, // 5 minutes refetchOnWindowFocus: false, staleTime: 10 * 60 * 1000, // 10 minutes diff --git a/src/hook/useGithubAutomatedRepos.ts b/src/hook/useGithubAutomatedRepos.ts index f076c0f..a3f2352 100644 --- a/src/hook/useGithubAutomatedRepos.ts +++ b/src/hook/useGithubAutomatedRepos.ts @@ -19,10 +19,11 @@ interface IUseGithubReposSimpleReturn { /** - * + * βš™οΈ github-automated-repos ( ) + * - Control, choose and get data from your GitHub repositories. * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. * @example - * // Usage Example github-automated-repos HOOK + * // Usage Example import { useGitHubAutomatedRepos, StackIcons, StackLabels } from "github-automated-repos"; const { data, isLoading, error } = useGitHubAutomatedRepos('digoarthur', 'attached'); console.log(data) From 6acefaa017f4398a5ff508ee29a6c36cfea70241 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Thu, 21 Aug 2025 19:31:05 +0100 Subject: [PATCH 08/24] refactor(banner): improvement of error handling --- src/hook/api/fetchGitHubBanner.ts | 44 +++++++++++++++++++++++++++++-- src/hook/utils/_handleBanner.ts | 5 +--- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/hook/api/fetchGitHubBanner.ts b/src/hook/api/fetchGitHubBanner.ts index f941de4..b268398 100644 --- a/src/hook/api/fetchGitHubBanner.ts +++ b/src/hook/api/fetchGitHubBanner.ts @@ -1,11 +1,51 @@ -export async function fetchGitHubBanner(usernameGitHub: string, repositoryName: string) { +export async function fetchGitHubBanner( + usernameGitHub: string, + repositoryName: string +): Promise<{ success: boolean; message: string; details?: any } | Error> { try { const response = await fetch(`https://api.github.com/repos/${usernameGitHub}/${repositoryName}/contents/public`); + if (!response.ok) { - throw new Error(`Unsuccessful request: ${response.statusText}`); + if (response.status === 404) { + const notFoundFolder = { + success: false, + message: `βš οΈπŸ“‚ In the repository >${repositoryName}< the "public" folder was not found.`, + details: { + suggestion: 'Create a "public" folder and insert your banner (e.g: banner.png, banner.jpg or banner.svg)', + status: 404 + } + }; + + console.warn(notFoundFolder.message + ' ℹ️' + notFoundFolder.details.suggestion); + return notFoundFolder; + } + throw new Error(`Erro ${response.status}: ${response.statusText}`); + } + const jsonData = await response.json(); + + const validExtensions = [".png", ".jpg", ".jpeg", ".svg"]; + const hasBanner = (jsonData as any[]).some(item => + item.type === "file" && + item.name.toLowerCase().includes("banner") && + validExtensions.some(ext => item.name.toLowerCase().endsWith(ext)) + ); + + if (!hasBanner) { + const noBannerFound = { + success: false, + message: `βš οΈπŸ–ΌοΈ In repository >${repositoryName}< no banner file was found in folder "public".`, + details: { + suggestion: 'Insert an image that contains the name "banner" and is png, jpg, jpeg or svg', + status: 200 + } + }; + console.warn(noBannerFound.message + ' ℹ️' + noBannerFound.details.suggestion); + return noBannerFound; + } + return jsonData; } catch (err) { return err as Error; diff --git a/src/hook/utils/_handleBanner.ts b/src/hook/utils/_handleBanner.ts index 2896db2..0fc5de3 100644 --- a/src/hook/utils/_handleBanner.ts +++ b/src/hook/utils/_handleBanner.ts @@ -9,14 +9,11 @@ export async function _handleBanner(usernameGitHub: string, repositoryName: stri try { const repositorie_Banners = await fetchGitHubBanner(usernameGitHub, repositoryName); - console.log(repositorie_Banners.download_url) + if (Array.isArray(repositorie_Banners)) { repositorie_Banners.forEach((item: IBanner) => { if (item?.download_url && item.download_url.includes('banner')) { banners_url.push(item.download_url); - } else { - // opcional - // banners_url.push(""); } }); } From 1ce015ee22017705efa8f3516a89dd831dd12199 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Sat, 23 Aug 2025 17:27:42 +0100 Subject: [PATCH 09/24] refactor(eslint): apply eslint:fix for code standardization --- .changelogrc.js | 10 +- .editorconfig | 3 - changelog-config.js | 154 +++++++++--------- generate-changelog.js | 19 +-- src/components/StackIcons.tsx | 6 +- src/components/StackLabels/StackLabels.tsx | 8 +- src/hook/api/fetchGitHubBanner.ts | 25 ++- .../react-query/useGithubAutomatedRepos.ts | 34 ++-- src/hook/useGithubAutomatedRepos.ts | 6 +- src/hook/utils/_handleBanner.ts | 26 +-- src/react-query.ts | 5 +- 11 files changed, 144 insertions(+), 152 deletions(-) diff --git a/.changelogrc.js b/.changelogrc.js index 664ca56..54c52a6 100644 --- a/.changelogrc.js +++ b/.changelogrc.js @@ -3,12 +3,12 @@ module.exports = { releaseCommitMessageFormat: 'chore(release): {{currentTag}}', writerOpts: { transform: (commit, context) => { - // Ignorar completamente commits do tipo 'docs' e 'chore' + if (['docs', 'chore'].includes(commit.type)) { - return false; // Retornar false remove completamente o commit + return false; } - // Mapear tipos para nomes mais amigΓ‘veis + const typeMap = { feat: '✨ Features', fix: 'πŸ› Bug Fixes', @@ -17,12 +17,12 @@ module.exports = { improvement: 'βœ… Improvements' }; - // Renomear tipos + if (typeMap[commit.type]) { commit.type = typeMap[commit.type]; } - // Processar referΓͺncias de issues + if (context.repository) { const issueUrl = `${context.host}/${context.owner}/${context.repository}/issues/`; commit.subject = commit.subject.replace(/#([0-9]+)/g, (_, issue) => { diff --git a/.editorconfig b/.editorconfig index b9c127d..11f75ff 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,6 +1,3 @@ -# EditorConfig is awesome: https://EditorConfig.org - -# top-most EditorConfig file root = true [*] diff --git a/changelog-config.js b/changelog-config.js index 748b62b..20e8050 100644 --- a/changelog-config.js +++ b/changelog-config.js @@ -1,85 +1,83 @@ module.exports = { - preset: 'angular', - writerOpts: { - transform: (commit, context) => { - if (!commit.hash) return null; - - // Lista completa de scopes especiais - const specialScopes = [ - 'useGithubAutomatedRepos', - 'StackLabels', - 'StackIcons', - 'Banner', - 'API', - 'Repository', - 'QueryClient', - 'Hooks', - 'Icons', - 'docs' - ]; - - // Verifica se o commit deve ser incluΓ­do: - // 1. Γ‰ do tipo feat ou fix OU - // 2. Tem um scope especial - const shouldInclude = - ['feat', 'fix'].includes(commit.type) || - (commit.scope && specialScopes.includes(commit.scope)); - - if (!shouldInclude) return null; - - commit.hashLink = `https://github.com/DIGOARTHUR/github-automated-repos/commit/${commit.hash}`; - commit.shortHash = commit.hash.substring(0, 7); - - // PadronizaΓ§Γ£o de nomes de scopes - if (commit.scope) { - commit.scope = commit.scope - .replace(/stack[-_]?icons?/i, 'StackIcons') - .replace(/stack[-_]?labels?/i, 'StackLabels') - .replace(/banner/i, 'Banner') - .replace(/api/i, 'API') - .replace(/repository/i, 'Repository') - .replace(/query[-_]?client/i, 'QueryClient') - .replace(/hooks?/i, 'Hooks') - .replace(/icons?/i, 'Icons'); - } - - // Agrupa em General se: - // 1. NΓ£o tem scope OU - // 2. Tem scope mas nΓ£o estΓ‘ na lista especial - if (!commit.scope || !specialScopes.includes(commit.scope)) { - commit.scope = 'General'; - } - - return commit; - }, - groupBy: 'scope', - commitGroupsSort: (a, b) => { - // Ordem customizada dos grupos - const order = [ - 'useGithubAutomatedRepos', - 'StackIcons', - 'StackLabels', - 'Banner', - 'API', - 'Repository', - 'QueryClient', - 'Hooks', - 'Icons', - 'docs', - 'General' - ]; - return order.indexOf(a.title) - order.indexOf(b.title); - }, - commitsSort: ['type', 'subject'], - headerPartial: '\n# {{version}} ({{date}})\n\n', - commitPartial: '| [{{shortHash}}]({{hashLink}}) | {{type}} | {{subject}} |\n', - mainTemplate: `{{> header}} + preset: 'angular', + writerOpts: { + transform: (commit, context) => { + if (!commit.hash) return null; + + // Lista completa de scopes especiais + const specialScopes = [ + 'useGithubAutomatedRepos', + 'StackLabels', + 'StackIcons', + 'Banner', + 'API', + 'Repository', + 'QueryClient', + 'Hooks', + 'Icons', + 'docs', + ]; + + // Verifica se o commit deve ser incluΓ­do: + // 1. Γ‰ do tipo feat ou fix OU + // 2. Tem um scope especial + const shouldInclude = ['feat', 'fix'].includes(commit.type) || (commit.scope && specialScopes.includes(commit.scope)); + + if (!shouldInclude) return null; + + commit.hashLink = `https://github.com/DIGOARTHUR/github-automated-repos/commit/${commit.hash}`; + commit.shortHash = commit.hash.substring(0, 7); + + // PadronizaΓ§Γ£o de nomes de scopes + if (commit.scope) { + commit.scope = commit.scope + .replace(/stack[-_]?icons?/i, 'StackIcons') + .replace(/stack[-_]?labels?/i, 'StackLabels') + .replace(/banner/i, 'Banner') + .replace(/api/i, 'API') + .replace(/repository/i, 'Repository') + .replace(/query[-_]?client/i, 'QueryClient') + .replace(/hooks?/i, 'Hooks') + .replace(/icons?/i, 'Icons'); + } + + // Agrupa em General se: + // 1. NΓ£o tem scope OU + // 2. Tem scope mas nΓ£o estΓ‘ na lista especial + if (!commit.scope || !specialScopes.includes(commit.scope)) { + commit.scope = 'General'; + } + + return commit; + }, + groupBy: 'scope', + commitGroupsSort: (a, b) => { + // Ordem customizada dos grupos + const order = [ + 'useGithubAutomatedRepos', + 'StackIcons', + 'StackLabels', + 'Banner', + 'API', + 'Repository', + 'QueryClient', + 'Hooks', + 'Icons', + 'docs', + 'General', + ]; + return order.indexOf(a.title) - order.indexOf(b.title); + }, + commitsSort: ['type', 'subject'], + headerPartial: '\n# {{version}} ({{date}})\n\n', + commitPartial: '| [{{shortHash}}]({{hashLink}}) | {{type}} | {{subject}} |\n', + mainTemplate: `{{> header}} {{#each commitGroups}} ### {{title}} | Commit | Type | Description | |--------|------|-------------| {{#each commits}}{{> commit}}{{/each}} -{{/each}}` - } -}; \ No newline at end of file +{{/each}}`, + }, +}; diff --git a/generate-changelog.js b/generate-changelog.js index c33668a..e762e60 100644 --- a/generate-changelog.js +++ b/generate-changelog.js @@ -3,16 +3,15 @@ const { writeFileSync } = require('fs'); const conventionalChangelog = require('conventional-changelog'); const config = { - config: require('./changelog-config.js'), - context: { - host: 'https://github.com', - owner: 'DIGOARTHUR', - repository: 'github-automated-repos' - }, - releaseCount: 0 + config: require('./changelog-config.js'), + context: { + host: 'https://github.com', + owner: 'DIGOARTHUR', + repository: 'github-automated-repos', + }, + releaseCount: 0, }; -conventionalChangelog(config) - .on('data', (chunk) => { +conventionalChangelog(config).on('data', (chunk) => { writeFileSync('CHANGELOG.md', chunk); - }); \ No newline at end of file +}); diff --git a/src/components/StackIcons.tsx b/src/components/StackIcons.tsx index e5f0dcb..49465b7 100644 --- a/src/components/StackIcons.tsx +++ b/src/components/StackIcons.tsx @@ -9,16 +9,16 @@ type PropsStackIcons = { }; /** - * 🧩 < StackIcons /> + * 🧩 < StackIcons /> * - Renders a ICONS for technology stacks with optional styling. - * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. + * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. * @example * {repo.topics.map((topic) => ( * * * * ))} - * + * * @param {string} itemTopics - **Mandatory**: e.g: item.topics.map(icon) ... itemTopics={icon} * @param {string} className - Optional: style className - TailwindCSS. * @param {React.CSSProperties} style - Optional: style CSS Properties. diff --git a/src/components/StackLabels/StackLabels.tsx b/src/components/StackLabels/StackLabels.tsx index 6165c5c..073ba3e 100644 --- a/src/components/StackLabels/StackLabels.tsx +++ b/src/components/StackLabels/StackLabels.tsx @@ -10,16 +10,16 @@ type PropsStackLabels = { }; /** - * 🧩 < StackLabels /> - * - Renders a LABELS for technology stacks with optional styling. - * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. + * 🧩 < StackLabels /> + * - Renders a LABELS for technology stacks with optional styling. + * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. * @example * {repo.topics.map((topic) => ( * * * * ))} - * + * * @param {string} itemTopics - **Mandatory**: e.g: item.topics.map(icon) ... itemTopics={icon} * @param {string} className - Optional: style className - TailwindCSS. * @param {React.CSSProperties} style - Optional: style CSS Properties. diff --git a/src/hook/api/fetchGitHubBanner.ts b/src/hook/api/fetchGitHubBanner.ts index b268398..d6d6699 100644 --- a/src/hook/api/fetchGitHubBanner.ts +++ b/src/hook/api/fetchGitHubBanner.ts @@ -12,25 +12,24 @@ export async function fetchGitHubBanner( message: `βš οΈπŸ“‚ In the repository >${repositoryName}< the "public" folder was not found.`, details: { suggestion: 'Create a "public" folder and insert your banner (e.g: banner.png, banner.jpg or banner.svg)', - status: 404 - } + status: 404, + }, }; - console.warn(notFoundFolder.message + ' ℹ️' + notFoundFolder.details.suggestion); + console.warn(`${notFoundFolder.message} ℹ️${notFoundFolder.details.suggestion}`); return notFoundFolder; } throw new Error(`Erro ${response.status}: ${response.statusText}`); - } const jsonData = await response.json(); - - const validExtensions = [".png", ".jpg", ".jpeg", ".svg"]; - const hasBanner = (jsonData as any[]).some(item => - item.type === "file" && - item.name.toLowerCase().includes("banner") && - validExtensions.some(ext => item.name.toLowerCase().endsWith(ext)) + const validExtensions = ['.png', '.jpg', '.jpeg', '.svg']; + const hasBanner = (jsonData as any[]).some( + (item) => + item.type === 'file' && + item.name.toLowerCase().includes('banner') && + validExtensions.some((ext) => item.name.toLowerCase().endsWith(ext)) ); if (!hasBanner) { @@ -39,10 +38,10 @@ export async function fetchGitHubBanner( message: `βš οΈπŸ–ΌοΈ In repository >${repositoryName}< no banner file was found in folder "public".`, details: { suggestion: 'Insert an image that contains the name "banner" and is png, jpg, jpeg or svg', - status: 200 - } + status: 200, + }, }; - console.warn(noBannerFound.message + ' ℹ️' + noBannerFound.details.suggestion); + console.warn(`${noBannerFound.message} ℹ️${noBannerFound.details.suggestion}`); return noBannerFound; } diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts index 7fc3446..bc2ec87 100644 --- a/src/hook/react-query/useGithubAutomatedRepos.ts +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -1,14 +1,15 @@ import { useQuery, UseQueryOptions, UseQueryResult } from '@tanstack/react-query'; + import { _handleRepository } from '../utils/_handleRepository'; export interface IGitHubRepos { - name: string; - topics: string[]; - html_url: string; - description: string; - id: number; - homepage: string; - banner: string[]; + name: string; + topics: string[]; + html_url: string; + description: string; + id: number; + homepage: string; + banner: string[]; } /** @@ -129,15 +130,14 @@ export interface IGitHubRepos { * */ - export function useGitHubAutomatedRepos( - GitHubUsername: string, - keyWord: string, - options?: Omit, 'queryKey' | 'queryFn'> + GitHubUsername: string, + keyWord: string, + options?: Omit, 'queryKey' | 'queryFn'> ): UseQueryResult { - return useQuery({ - queryKey: ['githubRepos', GitHubUsername, keyWord], - queryFn: () => _handleRepository(GitHubUsername, keyWord), - ...options, - }); -} \ No newline at end of file + return useQuery({ + queryKey: ['githubRepos', GitHubUsername, keyWord], + queryFn: () => _handleRepository(GitHubUsername, keyWord), + ...options, + }); +} diff --git a/src/hook/useGithubAutomatedRepos.ts b/src/hook/useGithubAutomatedRepos.ts index a3f2352..2d45f79 100644 --- a/src/hook/useGithubAutomatedRepos.ts +++ b/src/hook/useGithubAutomatedRepos.ts @@ -1,5 +1,7 @@ -import { _handleRepository } from './utils/_handleRepository'; import { useEffect, useState } from 'react'; + +import { _handleRepository } from './utils/_handleRepository'; + export interface IGitHubRepos { name: string; topics: string[]; @@ -10,14 +12,12 @@ export interface IGitHubRepos { banner: string[]; } - interface IUseGithubReposSimpleReturn { data: IGitHubRepos[] | undefined; isLoading: boolean; error: Error | null; } - /** * βš™οΈ github-automated-repos ( ) * - Control, choose and get data from your GitHub repositories. diff --git a/src/hook/utils/_handleBanner.ts b/src/hook/utils/_handleBanner.ts index 0fc5de3..2eab9e6 100644 --- a/src/hook/utils/_handleBanner.ts +++ b/src/hook/utils/_handleBanner.ts @@ -1,25 +1,25 @@ import { fetchGitHubBanner } from '../api/fetchGitHubBanner'; export interface IBanner { - download_url: string; + download_url: string; } export async function _handleBanner(usernameGitHub: string, repositoryName: string): Promise { - const banners_url: string[] = []; + const banners_url: string[] = []; - try { - const repositorie_Banners = await fetchGitHubBanner(usernameGitHub, repositoryName); + try { + const repositorie_Banners = await fetchGitHubBanner(usernameGitHub, repositoryName); - if (Array.isArray(repositorie_Banners)) { - repositorie_Banners.forEach((item: IBanner) => { - if (item?.download_url && item.download_url.includes('banner')) { - banners_url.push(item.download_url); + if (Array.isArray(repositorie_Banners)) { + repositorie_Banners.forEach((item: IBanner) => { + if (item?.download_url && item.download_url.includes('banner')) { + banners_url.push(item.download_url); + } + }); } - }); + } catch (error) { + console.error('Erro ao buscar banners:', error); } - } catch (error) { - console.error('Erro ao buscar banners:', error); - } - return banners_url; + return banners_url; } diff --git a/src/react-query.ts b/src/react-query.ts index b13a92f..a415352 100644 --- a/src/react-query.ts +++ b/src/react-query.ts @@ -1,5 +1,4 @@ -// src/react-query.ts export { useGitHubAutomatedRepos } from './hook/react-query/useGithubAutomatedRepos'; -export { IGitHubRepos } from './hook/react-query/useGithubAutomatedRepos'; +export { IGitHubRepos } from './hook/react-query/useGithubAutomatedRepos'; export { StackIcons } from './components/StackIcons'; -export { StackLabels } from './components/StackLabels/StackLabels'; \ No newline at end of file +export { StackLabels } from './components/StackLabels/StackLabels'; From 8d2fc02b4768ea4511458b2d95e9e260f1865603 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Sat, 23 Aug 2025 17:53:13 +0100 Subject: [PATCH 10/24] refactor(changelog): improve and add scopes --- changelog-config.js | 83 +++++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/changelog-config.js b/changelog-config.js index 20e8050..8a6a431 100644 --- a/changelog-config.js +++ b/changelog-config.js @@ -1,26 +1,38 @@ +/** + * -------------------------- + * CHANGELOG.md Generator + *--------------------------- + * Rules implemented: + * - Includes commits of type `feat` and `fix`. + * - Includes commits that have "special" scopes defined in `specialScopes`. + * - Normalizes scope names (e.g., stack-icons -> stackIcons). + * - Commits without a scope or with a non-special scope are grouped under `general`. + * - Adds GitHub commit links with short hashes. + * - Sorts commit groups according to the priority defined in `order`. + * - Formats the changelog output in Markdown using tables. + */ + module.exports = { preset: 'angular', writerOpts: { - transform: (commit, context) => { + transform: (commit) => { if (!commit.hash) return null; - // Lista completa de scopes especiais const specialScopes = [ 'useGithubAutomatedRepos', - 'StackLabels', - 'StackIcons', - 'Banner', - 'API', - 'Repository', - 'QueryClient', - 'Hooks', - 'Icons', + 'stackLabels', + 'stackIcons', + 'banner', + 'api', + 'repository', + 'react-query', + 'hook', + 'icons', 'docs', + 'eslint', + 'changelog' ]; - // Verifica se o commit deve ser incluΓ­do: - // 1. Γ‰ do tipo feat ou fix OU - // 2. Tem um scope especial const shouldInclude = ['feat', 'fix'].includes(commit.type) || (commit.scope && specialScopes.includes(commit.scope)); if (!shouldInclude) return null; @@ -28,43 +40,42 @@ module.exports = { commit.hashLink = `https://github.com/DIGOARTHUR/github-automated-repos/commit/${commit.hash}`; commit.shortHash = commit.hash.substring(0, 7); - // PadronizaΓ§Γ£o de nomes de scopes if (commit.scope) { commit.scope = commit.scope - .replace(/stack[-_]?icons?/i, 'StackIcons') - .replace(/stack[-_]?labels?/i, 'StackLabels') - .replace(/banner/i, 'Banner') - .replace(/api/i, 'API') - .replace(/repository/i, 'Repository') - .replace(/query[-_]?client/i, 'QueryClient') - .replace(/hooks?/i, 'Hooks') - .replace(/icons?/i, 'Icons'); + .replace(/stack[-_]?icons?/i, 'stackIcons') + .replace(/stack[-_]?labels?/i, 'stackLabels') + .replace(/banner/i, 'banner') + .replace(/api/i, 'api') + .replace(/repository/i, 'repository') + .replace(/query[-_]?client/i, 'react-query') + .replace(/hooks?/i, 'hook') + .replace(/icons?/i, 'icons') + .replace(/icons?/i, 'eslint') + .replace(/icons?/i, 'changelog'); } - // Agrupa em General se: - // 1. NΓ£o tem scope OU - // 2. Tem scope mas nΓ£o estΓ‘ na lista especial if (!commit.scope || !specialScopes.includes(commit.scope)) { - commit.scope = 'General'; + commit.scope = 'general'; } return commit; }, groupBy: 'scope', commitGroupsSort: (a, b) => { - // Ordem customizada dos grupos const order = [ 'useGithubAutomatedRepos', - 'StackIcons', - 'StackLabels', - 'Banner', - 'API', - 'Repository', - 'QueryClient', - 'Hooks', - 'Icons', + 'stackIcons', + 'stackLabels', + 'banner', + 'api', + 'repository', + 'react-query', + 'hook', + 'icons', 'docs', - 'General', + 'general', + 'eslint', + 'changelog' ]; return order.indexOf(a.title) - order.indexOf(b.title); }, From 193457def883bcba1ef605d543464eb566248a6e Mon Sep 17 00:00:00 2001 From: digoarthur Date: Fri, 12 Sep 2025 12:17:27 +0100 Subject: [PATCH 11/24] chore: improve eslint rules --- .eslintignore | 4 +- .eslintrc.json | 150 +- .vscode/extensions.json | 1 + .vscode/settings.json | 29 +- changelog-config.js | 4 +- package.json | 1 + src/components/StackIcons.tsx | 31 +- src/components/StackLabels/StackLabels.tsx | 10 +- src/components/StackLabels/styles.ts | 2 +- src/hook/api/fetchGitHubAPI.ts | 17 +- src/hook/api/fetchGitHubBanner.ts | 38 +- .../react-query/useGithubAutomatedRepos.ts | 33 +- src/hook/useGithubAutomatedRepos.ts | 36 +- src/hook/utils/_handleBanner.ts | 25 - src/hook/utils/handleBanner.ts | 25 + ...andleRepository.ts => handleRepository.ts} | 18 +- yarn.lock | 3735 +++++++++++++++++ 17 files changed, 3983 insertions(+), 176 deletions(-) delete mode 100644 src/hook/utils/_handleBanner.ts create mode 100644 src/hook/utils/handleBanner.ts rename src/hook/utils/{_handleRepository.ts => handleRepository.ts} (66%) create mode 100644 yarn.lock diff --git a/.eslintignore b/.eslintignore index 3bf722d..cc4222b 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,5 +1,5 @@ dist commitlint.config.js node_modules - - +changelog-config.js +generate-changelog.js diff --git a/.eslintrc.json b/.eslintrc.json index c2a4d90..4b9dc8f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -2,96 +2,134 @@ "env": { "browser": true, "es2021": true, - "jest": true + "jest": true, + "node": true }, "extends": [ - "plugin:react/recommended", "airbnb", + "airbnb-typescript", + "airbnb/hooks", + "plugin:react/recommended", "plugin:@typescript-eslint/recommended", - "prettier", + "plugin:@typescript-eslint/recommended-requiring-type-checking", "plugin:prettier/recommended" ], "parser": "@typescript-eslint/parser", "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 12, - "sourceType": "module" + "ecmaFeatures": { "jsx": true }, + "ecmaVersion": "latest", + "sourceType": "module", + "project": "./tsconfig.json" }, "plugins": [ "react", + "react-hooks", "@typescript-eslint", - "eslint-plugin-import-helpers", + "import-helpers", "prettier" ], "rules": { - - "react/require-default-props": "off", - "camelcase": "off", - "import/no-unresolved": "error", - "@typescript-eslint/naming-convention": [ + // --- Geral --- + "no-console": ["error", { "allow": ["warn", "error"] }], + "no-shadow": "off", + "no-void": ["error", { "allowAsStatement": true }], + "@typescript-eslint/no-use-before-define": "error", + "curly": ["error", "all"], + + // --- Arrow functions (ΓΊnico padrΓ£o) --- + "func-style": ["error", "expression", { "allowArrowFunctions": true }], + "prefer-arrow-callback": "error", + "arrow-body-style": ["error", "as-needed"], + "no-restricted-syntax": [ "error", { - "selector": "interface", - "format": ["PascalCase"], - "custom": { - "regex": "^I[A-Z]", - "match": true - } + "selector": "FunctionDeclaration", + "message": "Use arrow functions only. Function declarations are not allowed." } ], - "class-methods-use-this": "off", - "import/prefer-default-export": "off", - "no-shadow": "off", - "no-console": "off", - "no-useless-constructor": "off", - "no-empty-function": "off", - "lines-between-class-members": "off", - "import/extensions": [ + + // --- React --- + "react/function-component-definition": [ "error", - "ignorePackages", + { "namedComponents": "arrow-function", "unnamedComponents": "arrow-function" } + ], + "react/jsx-filename-extension": ["error", { "extensions": [".tsx"] }], + "react/react-in-jsx-scope": "off", + "react/require-default-props": "off", + + // --- Naming Convention (default: camelCase) --- + "@typescript-eslint/naming-convention": [ + "error", + { "selector": "default", "format": ["camelCase"] }, + { "selector": "variable", "format": ["camelCase"] }, + { "selector": "function", "format": ["camelCase"] }, + { "selector": "typeLike", "format": ["PascalCase"] }, + { "selector": "interface", "format": ["PascalCase"], "custom": { "regex": "^I[A-Z]", "match": true } }, + { "selector": "enumMember", "format": ["PascalCase"] }, { - "ts": "never", - "tsx": "never" - } + "selector": "variable", + "modifiers": ["const", "global"], + "types": ["boolean", "string", "number", "array"], + "format": ["UPPER_CASE"] + }, + { "selector": "property", "format": ["camelCase", "snake_case"], "leadingUnderscore": "forbid" }, + { "selector": "property", "modifiers": ["requiresQuotes"], "format": null }, + { "selector": "parameter", "format": ["camelCase"] } ], + + // --- Imports --- + "import/extensions": ["error", "ignorePackages", { "ts": "never", "tsx": "never" }], "import-helpers/order-imports": [ - "warn", + "error", { "newlinesBetween": "always", - "groups": ["module", "/^@shared/", ["parent", "sibling", "index"]], - "alphabetize": { - "order": "asc", - "ignoreCase": true - } + "groups": [["/^react/"], ["module"], ["/^@\\//"], ["parent", "sibling", "index"]], + "alphabetize": { "order": "asc", "ignoreCase": true } } ], + "import/no-default-export": "error", + "import/prefer-default-export": "off", "import/no-extraneous-dependencies": [ "error", { - "devDependencies": true + "devDependencies": [ + "**/*.test.{ts,tsx}", + "**/*.spec.{ts,tsx}", + "src/setupTests.{ts,tsx}", + "src/**/*.stories.{ts,tsx}", + "src/**/*.test.{ts,tsx}", + "src/**/*.spec.{ts,tsx}", + "**/vite.config.{ts,js}", + "**/webpack.config.{ts,js}", + "**/jest.config.{ts,js}", + "src/**/*.tsx", + "src/**/*.ts" + ], + "optionalDependencies": false, + "peerDependencies": true } ], + + // --- Prettier --- "prettier/prettier": "error", - "react/jsx-filename-extension": [ - 1, - { - "extensions": [".jsx", ".tsx"] - } - ], - "react/react-in-jsx-scope": "off", - "no-use-before-define": "off", - "@typescript-eslint/no-use-before-define": ["error"] + + // --- Promises --- + "@typescript-eslint/no-floating-promises": ["error", { "ignoreVoid": true }] }, - "settings": { - "import/resolver": { - "typescript": {} + "overrides": [ + { + "files": ["src/components/**/*.{ts,tsx}"], + "rules": { + "@typescript-eslint/naming-convention": [ + "error", + { "selector": "function", "modifiers": ["exported"], "format": ["PascalCase"] }, + { "selector": "variable", "modifiers": ["const", "exported"], "format": ["PascalCase"] } + ] + } } + ], + "settings": { + "import/resolver": { "typescript": {} }, + "react": { "version": "detect" } } } - - - - - diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 9d9323c..f8d3b80 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,5 +2,6 @@ "recommendations": [ "esbenp.prettier-vscode", "dbaeumer.vscode-eslint" + ] } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 43ec95d..da4869e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,15 +1,24 @@ { + // Formatar sempre que salvar + "editor.formatOnSave": true, + // Prettier como padrΓ£o global + "editor.defaultFormatter": "esbenp.prettier-vscode", - // Set the default + // Regras por linguagem + "[javascript]": { "editor.formatOnSave": true, - "editor.defaultFormatter": "esbenp.prettier-vscode", - // Enable per-language - "[javascript]": { - "editor.formatOnSave": true - }, - "[json]": { - "editor.defaultFormatter": "vscode.json-language-features" - } + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescript]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescriptreact]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[json]": { + "editor.defaultFormatter": "vscode.json-language-features" + } } - diff --git a/changelog-config.js b/changelog-config.js index 8a6a431..7f3e6bf 100644 --- a/changelog-config.js +++ b/changelog-config.js @@ -30,7 +30,7 @@ module.exports = { 'icons', 'docs', 'eslint', - 'changelog' + 'changelog', ]; const shouldInclude = ['feat', 'fix'].includes(commit.type) || (commit.scope && specialScopes.includes(commit.scope)); @@ -75,7 +75,7 @@ module.exports = { 'docs', 'general', 'eslint', - 'changelog' + 'changelog', ]; return order.indexOf(a.title) - order.indexOf(b.title); }, diff --git a/package.json b/package.json index 80a7824..0dcaa20 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "eslint-import-resolver-typescript": "^3.5.3", "eslint-plugin-import": "^2.25.3", "eslint-plugin-import-helpers": "^1.3.1", + "eslint-plugin-jsdoc": "^54.1.1", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-jsx-fragments": "^0.2.0", "eslint-plugin-prettier": "^4.2.1", diff --git a/src/components/StackIcons.tsx b/src/components/StackIcons.tsx index 49465b7..810a19f 100644 --- a/src/components/StackIcons.tsx +++ b/src/components/StackIcons.tsx @@ -9,26 +9,23 @@ type PropsStackIcons = { }; /** - * 🧩 < StackIcons /> - * - Renders a ICONS for technology stacks with optional styling. - * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. + * 🧩 + * - Renders an icon for technology stacks with optional styling. + * + * @see {@link https://github.com/DIGOARTHUR/github-automated-repos} for docs * @example * {repo.topics.map((topic) => ( - * - * - * - * ))} + * + * + * + * ))} * * @param {string} itemTopics - **Mandatory**: e.g: item.topics.map(icon) ... itemTopics={icon} - * @param {string} className - Optional: style className - TailwindCSS. - * @param {React.CSSProperties} style - Optional: style CSS Properties. - * @returns {ReactNode} - Return tag img(SVG). + * @param {string} className - Optional: TailwindCSS className. + * @param {React.CSSProperties} style - Optional: inline style CSS. + * @returns {JSX.Element | null} - Rendered `img` or `null`. */ -export function StackIcons({ itemTopics, className, style }: PropsStackIcons): JSX.Element | null { - return itemTopics === 'deploy' ? ( - <> - ) : ( - {stackIconsURL[itemTopics]} - ); -} +// eslint-disable-next-line @typescript-eslint/naming-convention +export const StackIcons = ({ itemTopics, className, style }: PropsStackIcons): JSX.Element | null => + itemTopics === 'deploy' ? null : {stackIconsURL[itemTopics]}; diff --git a/src/components/StackLabels/StackLabels.tsx b/src/components/StackLabels/StackLabels.tsx index 073ba3e..c9ff7dc 100644 --- a/src/components/StackLabels/StackLabels.tsx +++ b/src/components/StackLabels/StackLabels.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { stackIconsURL } from '../../icons/stackIconsURL'; -import { css } from './styles.js'; +import { CSS } from './styles.js'; type PropsStackLabels = { itemTopics: string; @@ -19,21 +19,19 @@ type PropsStackLabels = { * * * ))} - * * @param {string} itemTopics - **Mandatory**: e.g: item.topics.map(icon) ... itemTopics={icon} * @param {string} className - Optional: style className - TailwindCSS. * @param {React.CSSProperties} style - Optional: style CSS Properties. * @returns {ReactNode} - Return tag img(SVG). */ -export function StackLabels({ itemTopics, className = 'styleStackLabels', style }: PropsStackLabels): JSX.Element | null { - return itemTopics === 'deploy' || stackIconsURL[itemTopics] === undefined ? ( +export const StackLabels = ({ itemTopics, className = 'styleStackLabels', style }: PropsStackLabels): JSX.Element | null => + itemTopics === 'deploy' || stackIconsURL[itemTopics] === undefined ? ( <> ) : ( <> - +

{itemTopics}

); -} diff --git a/src/components/StackLabels/styles.ts b/src/components/StackLabels/styles.ts index f1013a7..4c0c770 100644 --- a/src/components/StackLabels/styles.ts +++ b/src/components/StackLabels/styles.ts @@ -1,4 +1,4 @@ -export const css = ` +export const CSS = ` .styleStackLabels { font-weight: 500; color: white; diff --git a/src/hook/api/fetchGitHubAPI.ts b/src/hook/api/fetchGitHubAPI.ts index d4cd38e..9ab6021 100644 --- a/src/hook/api/fetchGitHubAPI.ts +++ b/src/hook/api/fetchGitHubAPI.ts @@ -1,8 +1,19 @@ -export async function fetchGitHubAPI(usernameGitHub: string) { +export interface IGithubAPIResponse { + id: number; + name: string; + topics: string[]; + html_url: string; + description: string; + homepage: string; +} + +export const fetchGitHubAPI = async (usernameGitHub: string): Promise => { const response = await fetch(`https://api.github.com/users/${usernameGitHub}/repos?sort=created&per_page=999`); + if (!response.ok) { throw new Error(`Unsuccessful request: ${response.statusText}`); } - const jsonData = await response.json(); + + const jsonData: IGithubAPIResponse[] = (await response.json()) as IGithubAPIResponse[]; return jsonData; -} +}; diff --git a/src/hook/api/fetchGitHubBanner.ts b/src/hook/api/fetchGitHubBanner.ts index d6d6699..0dd8a43 100644 --- a/src/hook/api/fetchGitHubBanner.ts +++ b/src/hook/api/fetchGitHubBanner.ts @@ -1,13 +1,31 @@ -export async function fetchGitHubBanner( - usernameGitHub: string, - repositoryName: string -): Promise<{ success: boolean; message: string; details?: any } | Error> { +export interface IGitHubFile { + name: string; + path: string; + sha: string; + size: number; + url: string; + html_url: string; + git_url: string; + download_url: string | null; + type: 'file' | 'dir'; +} + +export interface IFetchResult { + success: boolean; + message: string; + details: { + suggestion: string; + status: number; + }; +} + +export const fetchGitHubBanner = async (usernameGitHub: string, repositoryName: string): Promise => { try { const response = await fetch(`https://api.github.com/repos/${usernameGitHub}/${repositoryName}/contents/public`); if (!response.ok) { if (response.status === 404) { - const notFoundFolder = { + const notFoundFolder: IFetchResult = { success: false, message: `βš οΈπŸ“‚ In the repository >${repositoryName}< the "public" folder was not found.`, details: { @@ -19,13 +37,13 @@ export async function fetchGitHubBanner( console.warn(`${notFoundFolder.message} ℹ️${notFoundFolder.details.suggestion}`); return notFoundFolder; } - throw new Error(`Erro ${response.status}: ${response.statusText}`); + throw new Error(`Error ${response.status}: ${response.statusText}`); } - const jsonData = await response.json(); + const jsonData = (await response.json()) as IGitHubFile[]; const validExtensions = ['.png', '.jpg', '.jpeg', '.svg']; - const hasBanner = (jsonData as any[]).some( + const hasBanner = jsonData.some( (item) => item.type === 'file' && item.name.toLowerCase().includes('banner') && @@ -33,7 +51,7 @@ export async function fetchGitHubBanner( ); if (!hasBanner) { - const noBannerFound = { + const noBannerFound: IFetchResult = { success: false, message: `βš οΈπŸ–ΌοΈ In repository >${repositoryName}< no banner file was found in folder "public".`, details: { @@ -49,4 +67,4 @@ export async function fetchGitHubBanner( } catch (err) { return err as Error; } -} +}; diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts index bc2ec87..831a73a 100644 --- a/src/hook/react-query/useGithubAutomatedRepos.ts +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -1,6 +1,6 @@ import { useQuery, UseQueryOptions, UseQueryResult } from '@tanstack/react-query'; -import { _handleRepository } from '../utils/_handleRepository'; +import { handleRepository } from '../utils/handleRepository'; export interface IGitHubRepos { name: string; @@ -24,15 +24,13 @@ export interface IGitHubRepos { staleTime: 10 * 60 * 1000, // 10 minutes }); console.log(data) - * @param {string} GitHubUsername - Your GitHub username (e.g., 'digoarthur') in https://github.com/USERNAME. * @param {string} keyWord - It is chosen by you. KeyWord used to identify and filter repositories (e.g., 'portfolio', 'attached'). * Set this KeyWord in GitHub at: * Repository β†’ About - 'βš™οΈ' β†’ Topics β†’ add your KeyWord. * Only repositories containing this KeyWord in their Topics will be returned. - * @returns {Object} Hook state object containing: - * - * @type {Object} IGitHubRepos + * @returns {object} Hook state object containing: + * @type {object} IGitHubRepos * @property {string} name - Repository name. * @property {string[]} topics - Topics assigned to the repository. * @property {string} html_url - Repository URL. @@ -40,11 +38,10 @@ export interface IGitHubRepos { * @property {number} id - Unique repository ID. * @property {string} homepage - Homepage or deployed site URL. * @property {string[]} banner - Banner image URLs. - * * @returns {IGitHubRepos[]} data - Array of filtered GitHub repositories. * @returns {boolean} isLoading - True while the initial load is in progress. * @returns {boolean} isError - True if the query encountered an error. - * @param {Object} [options] - Optional React Query configuration options. + * @param {object} [options] - Optional React Query configuration options. * @param {number} [options.refetchInterval] - Auto-refetch interval in milliseconds (e.g., 60000 for 1 minute). * Set to `false` to disable auto-refetch. * @param {boolean} [options.refetchOnWindowFocus] - Whether to refetch when window regains focus. Default: true. @@ -57,14 +54,10 @@ export interface IGitHubRepos { * @param {number} [options.cacheTime] - Time in milliseconds to keep unused data in cache (default: 5 minutes). * @param {number|boolean|Function} [options.retry] - How many times to retry failed queries (default: 3). * @param {number} [options.retryDelay] - Delay in milliseconds between retries (default: 1000). - * * @returns {UseQueryResult} - React Query result object containing: * @returns {Error} error - Error object if query failed. * @returns {Function} refetch - Function to manually trigger refetch. - * - * * @see {@link ℹ️ https://tanstack.com/query/latest/docs/react/reference/useQuery} for full React Query documentation. - * * @example * // Usage Example * @@ -127,17 +120,19 @@ export interface IGitHubRepos { * * * ); - * */ -export function useGitHubAutomatedRepos( - GitHubUsername: string, +/** + * + */ + +export const useGitHubAutomatedRepos = ( + gitHubUsername: string, keyWord: string, options?: Omit, 'queryKey' | 'queryFn'> -): UseQueryResult { - return useQuery({ - queryKey: ['githubRepos', GitHubUsername, keyWord], - queryFn: () => _handleRepository(GitHubUsername, keyWord), +): UseQueryResult => + useQuery({ + queryKey: ['githubRepos', gitHubUsername, keyWord], + queryFn: () => handleRepository(gitHubUsername, keyWord), ...options, }); -} diff --git a/src/hook/useGithubAutomatedRepos.ts b/src/hook/useGithubAutomatedRepos.ts index 2d45f79..a8a5890 100644 --- a/src/hook/useGithubAutomatedRepos.ts +++ b/src/hook/useGithubAutomatedRepos.ts @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; -import { _handleRepository } from './utils/_handleRepository'; +import { handleRepository } from './utils/handleRepository'; export interface IGitHubRepos { name: string; @@ -27,16 +27,14 @@ interface IUseGithubReposSimpleReturn { import { useGitHubAutomatedRepos, StackIcons, StackLabels } from "github-automated-repos"; const { data, isLoading, error } = useGitHubAutomatedRepos('digoarthur', 'attached'); console.log(data) - * * @param {string} GitHubUsername - Your GitHub username as seen in your profile URL. * Example: 'digoarthur' from https://github.com/USERNAME. * @param {string} KeyWord - It is chosen by you. KeyWord used to identify and filter repositories (e.g., 'portfolio', 'attached'). * Set this KeyWord in GitHub at: * Repository β†’ About - 'βš™οΈ' β†’ Topics β†’ add your KeyWord. * Only repositories containing this KeyWord in their Topics will be returned. - * @returns {Object} Hook state object containing: - * - * @type {Object} IGitHubRepos + * @returns {object} Hook state object containing: + * @type {object} IGitHubRepos * @property {string} name - Repository name. * @property {string[]} topics - Topics assigned to the repository. * @property {string} html_url - Repository URL. @@ -44,11 +42,9 @@ interface IUseGithubReposSimpleReturn { * @property {number} id - Unique repository ID. * @property {string} homepage - Homepage or deployed site URL. * @property {string[]} banner - Banner image URLs. - * * @returns {IGitHubRepos[]|undefined} data - Array of filtered repositories, or `undefined` while loading. * @returns {boolean} isLoading - `true` while fetching data, otherwise `false`. * @returns {Error|null} error - Error object if the request failed, otherwise `null`. - * * @example * // Usage Example * @@ -107,33 +103,39 @@ interface IUseGithubReposSimpleReturn { * * * ); - * */ -export function useGitHubAutomatedRepos(GitHubUsername: string, KeyWord: string): IUseGithubReposSimpleReturn { +/** + + + */ + +export const useGitHubAutomatedRepos = (gitHubUsername: string, keyWord: string): IUseGithubReposSimpleReturn => { const [data, setData] = useState(undefined); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { - if (!GitHubUsername || !KeyWord) return; + if (!gitHubUsername || !keyWord) { + return; + } - const fetchData = async () => { + const fetchData = async (): Promise => { setIsLoading(true); setError(null); try { - const repos = await _handleRepository(GitHubUsername, KeyWord); + const repos = await handleRepository(gitHubUsername, keyWord); setData(repos); - } catch (err: any) { - setError(err); + } catch (err: unknown) { + setError(err instanceof Error ? err : new Error('Unknown error occurred')); } finally { setIsLoading(false); } }; - fetchData(); - }, [GitHubUsername, KeyWord]); + void fetchData(); + }, [gitHubUsername, keyWord]); return { data, isLoading, error }; -} +}; diff --git a/src/hook/utils/_handleBanner.ts b/src/hook/utils/_handleBanner.ts deleted file mode 100644 index 2eab9e6..0000000 --- a/src/hook/utils/_handleBanner.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { fetchGitHubBanner } from '../api/fetchGitHubBanner'; - -export interface IBanner { - download_url: string; -} - -export async function _handleBanner(usernameGitHub: string, repositoryName: string): Promise { - const banners_url: string[] = []; - - try { - const repositorie_Banners = await fetchGitHubBanner(usernameGitHub, repositoryName); - - if (Array.isArray(repositorie_Banners)) { - repositorie_Banners.forEach((item: IBanner) => { - if (item?.download_url && item.download_url.includes('banner')) { - banners_url.push(item.download_url); - } - }); - } - } catch (error) { - console.error('Erro ao buscar banners:', error); - } - - return banners_url; -} diff --git a/src/hook/utils/handleBanner.ts b/src/hook/utils/handleBanner.ts new file mode 100644 index 0000000..b0dd6ae --- /dev/null +++ b/src/hook/utils/handleBanner.ts @@ -0,0 +1,25 @@ +import { fetchGitHubBanner } from '../api/fetchGitHubBanner'; + +export interface IGitHubBanner { + download_url: string | null; +} + +export const handleBanner = async (usernameGitHub: string, repositoryName: string): Promise => { + const bannersUrl: string[] = []; + + try { + const repositoryBanners = await fetchGitHubBanner(usernameGitHub, repositoryName); + + if (Array.isArray(repositoryBanners)) { + repositoryBanners.forEach((item: IGitHubBanner) => { + if (item?.download_url && item.download_url.includes('banner')) { + bannersUrl.push(item.download_url); + } + }); + } + } catch (error) { + console.error('Error fetching banners:', error); + } + + return bannersUrl; +}; diff --git a/src/hook/utils/_handleRepository.ts b/src/hook/utils/handleRepository.ts similarity index 66% rename from src/hook/utils/_handleRepository.ts rename to src/hook/utils/handleRepository.ts index 64af5ec..3c6aaf5 100644 --- a/src/hook/utils/_handleRepository.ts +++ b/src/hook/utils/handleRepository.ts @@ -1,12 +1,12 @@ import { fetchGitHubAPI } from '../api/fetchGitHubAPI'; -import { _handleBanner } from './_handleBanner'; +import { handleBanner } from './handleBanner'; export interface IGithubRepos { + id: number; name: string; topics: string[]; html_url: string; description: string; - id: number; homepage: string; banner: string[]; } @@ -15,15 +15,17 @@ export interface IGithubRepos { * @param {string} usernameGitHub - Insert your GitHub username. See in your GitHub Ex.: https://github.com/USERNAME * @param {string} keyWordDeploy - Insert a keyword chosen by you. - This key is responsible for managing your projects on GitHub in topics field. See in : https://github.com/DIGOARTHUR/github-automated-repos. */ - -export const _handleRepository = async (usernameGitHub: string, keyWordDeploy: string): Promise => { +export const handleRepository = async (usernameGitHub: string, keyWordDeploy: string): Promise => { + // πŸ”Ή Tipar o retorno aqui const jsonData = await fetchGitHubAPI(usernameGitHub); - const datafilter = jsonData.filter((item: IGithubRepos) => item.topics.includes(keyWordDeploy)); + // πŸ”Ή Agora nΓ£o dΓ‘ erro de `any` + const dataFilter = jsonData.filter((item) => item.topics.includes(keyWordDeploy)); + + const repositories: IGithubRepos[] = await Promise.all( + dataFilter.map(async (item) => { + const banner = await handleBanner(usernameGitHub, item.name); - const repositories = await Promise.all( - datafilter.map(async (item: IGithubRepos) => { - const banner = await _handleBanner(usernameGitHub, item.name); return { id: item.id, name: item.name, diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..9c8904e --- /dev/null +++ b/yarn.lock @@ -0,0 +1,3735 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.26.2": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + dependencies: + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + +"@emnapi/core@^1.4.3": + version "1.4.5" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.5.tgz#bfbb0cbbbb9f96ec4e2c4fd917b7bbe5495ceccb" + integrity sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q== + dependencies: + "@emnapi/wasi-threads" "1.0.4" + tslib "^2.4.0" + +"@emnapi/runtime@^1.4.3": + version "1.4.5" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.5.tgz#c67710d0661070f38418b6474584f159de38aba9" + integrity sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz#703fc094d969e273b1b71c292523b2f792862bf4" + integrity sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g== + dependencies: + tslib "^2.4.0" + +"@es-joy/jsdoccomment@~0.53.0": + version "0.53.0" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.53.0.tgz#cc044a1f4d518f716da24f330d4ec5386215f2f2" + integrity sha512-Wyed8Wfn3vMNVwrZrgLMxmqwmlcCE1/RfUAOHFzMJb3QLH03mi9Yv1iOCZjif0yx5EZUeJ+17VD1MHPka9IQjQ== + dependencies: + "@types/estree" "^1.0.8" + "@typescript-eslint/types" "^8.39.1" + comment-parser "1.4.1" + esquery "^1.6.0" + jsdoc-type-pratt-parser "~4.8.0" + +"@eslint-community/eslint-utils@^4.2.0": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" + integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== + +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== + dependencies: + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + +"@napi-rs/wasm-runtime@^0.2.11": + version "0.2.12" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz#3e78a8b96e6c33a6c517e1894efbd5385a7cb6f2" + integrity sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ== + dependencies: + "@emnapi/core" "^1.4.3" + "@emnapi/runtime" "^1.4.3" + "@tybys/wasm-util" "^0.10.0" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nolyfill/is-core-module@1.0.39": + version "1.0.39" + resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" + integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + +"@semantic-release/release-notes-generator@^14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-14.0.3.tgz#8f120280ba5ac4b434afe821388c697664e7eb9a" + integrity sha512-XxAZRPWGwO5JwJtS83bRdoIhCiYIx8Vhr+u231pQAsdFIAbm19rSVJLdnBN+Avvk7CKvNQE/nJ4y7uqKH6WTiw== + dependencies: + conventional-changelog-angular "^8.0.0" + conventional-changelog-writer "^8.0.0" + conventional-commits-filter "^5.0.0" + conventional-commits-parser "^6.0.0" + debug "^4.0.0" + get-stream "^7.0.0" + import-from-esm "^2.0.0" + into-stream "^7.0.0" + lodash-es "^4.17.21" + read-package-up "^11.0.0" + +"@tanstack/query-core@5.85.5": + version "5.85.5" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.85.5.tgz#c4adc126bb3a927e4d60280bf3cf62210700147c" + integrity sha512-KO0WTob4JEApv69iYp1eGvfMSUkgw//IpMnq+//cORBzXf0smyRwPLrUvEe5qtAEGjwZTXrjxg+oJNP/C00t6w== + +"@tanstack/react-query@^5.61.5": + version "5.85.5" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.85.5.tgz#50a1c02b50a59f93eba8f0d91d54d39c6c534c5e" + integrity sha512-/X4EFNcnPiSs8wM2v+b6DqS5mmGeuJQvxBglmDxl6ZQb5V26ouD2SJYAcC3VjbNwqhY2zjxVD15rDA5nGbMn3A== + dependencies: + "@tanstack/query-core" "5.85.5" + +"@tybys/wasm-util@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.0.tgz#2fd3cd754b94b378734ce17058d0507c45c88369" + integrity sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ== + dependencies: + tslib "^2.4.0" + +"@types/estree@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@types/json-schema@^7.0.15", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/minimist@^1.2.0": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== + +"@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.3": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + +"@types/prop-types@*": + version "15.7.15" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" + integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== + +"@types/react-dom@^18.3.1": + version "18.3.7" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.7.tgz#b89ddf2cd83b4feafcc4e2ea41afdfb95a0d194f" + integrity sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ== + +"@types/react@^18.3.12": + version "18.3.24" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.24.tgz#f6a5a4c613242dfe3af0dcee2b4ec47b92d9b6bd" + integrity sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/semver@^7.3.12": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.7.0.tgz#64c441bdae033b378b6eef7d0c3d77c329b9378e" + integrity sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA== + +"@typescript-eslint/eslint-plugin@^5.50.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.50.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/types@^8.39.1": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.41.0.tgz#9935afeaae65e535abcbcee95383fa649c64d16d" + integrity sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@ungap/structured-clone@^1.2.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + +"@unrs/resolver-binding-android-arm-eabi@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz#9f5b04503088e6a354295e8ea8fe3cb99e43af81" + integrity sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw== + +"@unrs/resolver-binding-android-arm64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz#7414885431bd7178b989aedc4d25cccb3865bc9f" + integrity sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g== + +"@unrs/resolver-binding-darwin-arm64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz#b4a8556f42171fb9c9f7bac8235045e82aa0cbdf" + integrity sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g== + +"@unrs/resolver-binding-darwin-x64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz#fd4d81257b13f4d1a083890a6a17c00de571f0dc" + integrity sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ== + +"@unrs/resolver-binding-freebsd-x64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz#d2513084d0f37c407757e22f32bd924a78cfd99b" + integrity sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw== + +"@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz#844d2605d057488d77fab09705f2866b86164e0a" + integrity sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw== + +"@unrs/resolver-binding-linux-arm-musleabihf@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz#204892995cefb6bd1d017d52d097193bc61ddad3" + integrity sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw== + +"@unrs/resolver-binding-linux-arm64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz#023eb0c3aac46066a10be7a3f362e7b34f3bdf9d" + integrity sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ== + +"@unrs/resolver-binding-linux-arm64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz#9e6f9abb06424e3140a60ac996139786f5d99be0" + integrity sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w== + +"@unrs/resolver-binding-linux-ppc64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz#b111417f17c9d1b02efbec8e08398f0c5527bb44" + integrity sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA== + +"@unrs/resolver-binding-linux-riscv64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz#92ffbf02748af3e99873945c9a8a5ead01d508a9" + integrity sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ== + +"@unrs/resolver-binding-linux-riscv64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz#0bec6f1258fc390e6b305e9ff44256cb207de165" + integrity sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew== + +"@unrs/resolver-binding-linux-s390x-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz#577843a084c5952f5906770633ccfb89dac9bc94" + integrity sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg== + +"@unrs/resolver-binding-linux-x64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz#36fb318eebdd690f6da32ac5e0499a76fa881935" + integrity sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w== + +"@unrs/resolver-binding-linux-x64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz#bfb9af75f783f98f6a22c4244214efe4df1853d6" + integrity sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA== + +"@unrs/resolver-binding-wasm32-wasi@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz#752c359dd875684b27429500d88226d7cc72f71d" + integrity sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.11" + +"@unrs/resolver-binding-win32-arm64-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz#ce5735e600e4c2fbb409cd051b3b7da4a399af35" + integrity sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw== + +"@unrs/resolver-binding-win32-ia32-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz#72fc57bc7c64ec5c3de0d64ee0d1810317bc60a6" + integrity sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ== + +"@unrs/resolver-binding-win32-x64-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz#538b1e103bf8d9864e7b85cc96fa8d6fb6c40777" + integrity sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g== + +JSONStream@^1.0.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.15.0, acorn@^8.9.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +are-docs-informative@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" + integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== + +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-includes@^3.1.6, array-includes@^3.1.8, array-includes@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" + integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + get-intrinsic "^1.3.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.findlastindex@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" + +array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +ast-types-flow@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== + +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axe-core@^4.10.0: + version "4.10.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.3.tgz#04145965ac7894faddbac30861e5d8f11bfd14fc" + integrity sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg== + +axobject-query@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" + integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +comment-parser@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" + integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confusing-browser-globals@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +conventional-changelog-angular@^5.0.12: + version "5.0.13" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" + integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-angular@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-8.0.0.tgz#5701386850f0e0c2e630b43ee7821d322d87e7a6" + integrity sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA== + dependencies: + compare-func "^2.0.0" + +conventional-changelog-atom@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz#a759ec61c22d1c1196925fca88fe3ae89fd7d8de" + integrity sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw== + dependencies: + q "^1.5.1" + +conventional-changelog-cli@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/conventional-changelog-cli/-/conventional-changelog-cli-2.2.2.tgz#9a7746cede92c6a8f27dc46692efaadfbed60daa" + integrity sha512-8grMV5Jo8S0kP3yoMeJxV2P5R6VJOqK72IiSV9t/4H5r/HiRqEBQ83bYGuz4Yzfdj4bjaAEhZN/FFbsFXr5bOA== + dependencies: + add-stream "^1.0.0" + conventional-changelog "^3.1.24" + lodash "^4.17.15" + meow "^8.0.0" + tempfile "^3.0.0" + +conventional-changelog-codemirror@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz#398e9530f08ce34ec4640af98eeaf3022eb1f7dc" + integrity sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw== + dependencies: + q "^1.5.1" + +conventional-changelog-conventionalcommits@^4.5.0: + version "4.6.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz#0765490f56424b46f6cb4db9135902d6e5a36dc2" + integrity sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g== + dependencies: + compare-func "^2.0.0" + lodash "^4.17.15" + q "^1.5.1" + +conventional-changelog-core@^4.2.1: + version "4.2.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" + integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^5.0.0" + conventional-commits-parser "^3.2.0" + dateformat "^3.0.0" + get-pkg-repo "^4.0.0" + git-raw-commits "^2.0.8" + git-remote-origin-url "^2.0.0" + git-semver-tags "^4.1.1" + lodash "^4.17.15" + normalize-package-data "^3.0.0" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^4.0.0" + +conventional-changelog-ember@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz#619b37ec708be9e74a220f4dcf79212ae1c92962" + integrity sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A== + dependencies: + q "^1.5.1" + +conventional-changelog-eslint@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz#689bd0a470e02f7baafe21a495880deea18b7cdb" + integrity sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA== + dependencies: + q "^1.5.1" + +conventional-changelog-express@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz#420c9d92a347b72a91544750bffa9387665a6ee8" + integrity sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ== + dependencies: + q "^1.5.1" + +conventional-changelog-jquery@^3.0.11: + version "3.0.11" + resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz#d142207400f51c9e5bb588596598e24bba8994bf" + integrity sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw== + dependencies: + q "^1.5.1" + +conventional-changelog-jshint@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz#f2d7f23e6acd4927a238555d92c09b50fe3852ff" + integrity sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-preset-loader@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" + integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== + dependencies: + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" + +conventional-changelog-writer@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-8.2.0.tgz#1b77ef8e45ccc4559e02a23a34d50c15d2051e5a" + integrity sha512-Y2aW4596l9AEvFJRwFGJGiQjt2sBYTjPD18DdvxX9Vpz0Z7HQ+g1Z+6iYDAm1vR3QOJrDBkRHixHK/+FhkR6Pw== + dependencies: + conventional-commits-filter "^5.0.0" + handlebars "^4.7.7" + meow "^13.0.0" + semver "^7.5.2" + +conventional-changelog@^3.1.24, conventional-changelog@^3.1.25: + version "3.1.25" + resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.25.tgz#3e227a37d15684f5aa1fb52222a6e9e2536ccaff" + integrity sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ== + dependencies: + conventional-changelog-angular "^5.0.12" + conventional-changelog-atom "^2.0.8" + conventional-changelog-codemirror "^2.0.8" + conventional-changelog-conventionalcommits "^4.5.0" + conventional-changelog-core "^4.2.1" + conventional-changelog-ember "^2.0.9" + conventional-changelog-eslint "^3.0.9" + conventional-changelog-express "^2.0.6" + conventional-changelog-jquery "^3.0.11" + conventional-changelog-jshint "^2.0.9" + conventional-changelog-preset-loader "^2.3.4" + +conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-filter@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz#72811f95d379e79d2d39d5c0c53c9351ef284e86" + integrity sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q== + +conventional-commits-parser@^3.2.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +conventional-commits-parser@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-6.2.0.tgz#1a2159471896f43101b8817e5709b8da78334aaa" + integrity sha512-uLnoLeIW4XaoFtH37qEcg/SXMJmKF4vi7V0H2rnPueg+VEtFGA/asSCNTcq4M/GQ6QmlzchAEtOoDTtKqWeHag== + dependencies: + meow "^13.0.0" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cross-spawn@^7.0.2: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0, debug@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== + dependencies: + ms "^2.1.3" + +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.1.3, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9, es-abstract@^1.24.0: + version "1.24.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328" + integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-negative-zero "^2.0.3" + is-regex "^1.2.1" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75" + integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.6" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + iterator.prototype "^1.1.4" + safe-array-concat "^1.1.3" + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== + dependencies: + hasown "^2.0.2" + +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-airbnb-base@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" + integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.5" + semver "^6.3.0" + +eslint-config-airbnb-typescript@^17.0.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz#fda960eee4a510f092a9a1c139035ac588937ddc" + integrity sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig== + dependencies: + eslint-config-airbnb-base "^15.0.0" + +eslint-config-airbnb@^19.0.4: + version "19.0.4" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" + integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== + dependencies: + eslint-config-airbnb-base "^15.0.0" + object.assign "^4.1.2" + object.entries "^1.1.5" + +eslint-config-prettier@^8.6.0: + version "8.10.2" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz#0642e53625ebc62c31c24726b0f050df6bd97a2e" + integrity sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A== + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-import-resolver-typescript@^3.5.3: + version "3.10.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz#23dac32efa86a88e2b8232eb244ac499ad636db2" + integrity sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ== + dependencies: + "@nolyfill/is-core-module" "1.0.39" + debug "^4.4.0" + get-tsconfig "^4.10.0" + is-bun-module "^2.0.0" + stable-hash "^0.0.5" + tinyglobby "^0.2.13" + unrs-resolver "^1.6.2" + +eslint-module-utils@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" + integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== + dependencies: + debug "^3.2.7" + +eslint-plugin-import-helpers@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import-helpers/-/eslint-plugin-import-helpers-1.3.1.tgz#48721a702e758b5d2220ee119d6199e6e29b6819" + integrity sha512-MrACDozK6TmTJoCFHD71Ew3r5210Za3zlTrhX+fQGsyvxceaFvAI9AcvZ/8oSU0pZ61G3nDEn6mXY0T4S8cJEg== + +eslint-plugin-import@^2.25.3: + version "2.32.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" + integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.9" + array.prototype.findlastindex "^1.2.6" + array.prototype.flat "^1.3.3" + array.prototype.flatmap "^1.3.3" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.1" + hasown "^2.0.2" + is-core-module "^2.16.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.1" + semver "^6.3.1" + string.prototype.trimend "^1.0.9" + tsconfig-paths "^3.15.0" + +eslint-plugin-jsdoc@^54.1.1: + version "54.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-54.1.1.tgz#6f48d1d3428cb2d8e59754003eee6c1b220f0232" + integrity sha512-qoY2Gl0OkvATXIxRaG2irS2ue78+RTaOyYrADvg1ue+9FHE+2Mp7RcpO0epkuhhQgOkH/REv1oJFe58dYv8SGg== + dependencies: + "@es-joy/jsdoccomment" "~0.53.0" + are-docs-informative "^0.0.2" + comment-parser "1.4.1" + debug "^4.4.1" + escape-string-regexp "^4.0.0" + espree "^10.4.0" + esquery "^1.6.0" + parse-imports-exports "^0.2.4" + semver "^7.7.2" + spdx-expression-parse "^4.0.0" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" + integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== + dependencies: + aria-query "^5.3.2" + array-includes "^3.1.8" + array.prototype.flatmap "^1.3.2" + ast-types-flow "^0.0.8" + axe-core "^4.10.0" + axobject-query "^4.1.0" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + hasown "^2.0.2" + jsx-ast-utils "^3.3.5" + language-tags "^1.0.9" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + safe-regex-test "^1.0.3" + string.prototype.includes "^2.0.1" + +eslint-plugin-jsx-fragments@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-fragments/-/eslint-plugin-jsx-fragments-0.2.0.tgz#115ec28eb2b9007266f4f845ea19ca92c31eba80" + integrity sha512-d0I8V3Ntx2QJC4eWlJY74xvXdQwKTSHHYZipOpdqWPqXzH6ETkwTTd19J1obIr4VhRVL0O0FPugpJZBV8N6fPw== + dependencies: + requireindex "~1.1.0" + +eslint-plugin-prettier@^4.2.1: + version "4.2.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.5.tgz#91ca3f2f01a84f1272cce04e9717550494c0fe06" + integrity sha512-9Ni+xgemM2IWLq6aXEpP2+V/V30GeA/46Ar629vcMqVPodFFWC9skHu/D1phvuqtS8bJCFnNf01/qcmqYEwNfg== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-react-hooks@^4.3.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== + +eslint-plugin-react@^7.28.0: + version "7.37.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065" + integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA== + dependencies: + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.3" + array.prototype.tosorted "^1.1.4" + doctrine "^2.1.0" + es-iterator-helpers "^1.2.1" + estraverse "^5.3.0" + hasown "^2.0.2" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.9" + object.fromentries "^2.0.8" + object.values "^1.2.1" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.12" + string.prototype.repeat "^1.0.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== + +eslint@^8.33.0: + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== + dependencies: + acorn "^8.15.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.1" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2, esquery@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + dependencies: + reusify "^1.0.4" + +fdir@^6.4.4: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up-simple@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/find-up-simple/-/find-up-simple-1.0.1.tgz#18fb90ad49e45252c4d7fca56baade04fa3fca1e" + integrity sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ== + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== + +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + +from2@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-pkg-repo@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-stream@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-7.0.1.tgz#1664dfe7d1678540ea6a4da3ae7cd59bf4e4a91e" + integrity sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ== + +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + +get-tsconfig@^4.10.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e" + integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== + dependencies: + resolve-pkg-maps "^1.0.0" + +git-raw-commits@^2.0.8: + version "2.0.11" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" + integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" + integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== + dependencies: + meow "^8.0.0" + semver "^6.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + dependencies: + ini "^1.3.2" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.2: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +handlebars@^4.7.7: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" + integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== + dependencies: + lru-cache "^10.0.1" + +ignore@^5.2.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +import-fresh@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from-esm@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-from-esm/-/import-from-esm-2.0.0.tgz#184eb9aad4f557573bd6daf967ad5911b537797a" + integrity sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g== + dependencies: + debug "^4.3.4" + import-meta-resolve "^4.0.0" + +import-meta-resolve@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706" + integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +index-to-position@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/index-to-position/-/index-to-position-1.1.0.tgz#2e50bd54c8040bdd6d9b3d95ec2a8fedf86b4d44" + integrity sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.2: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + +into-stream@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-7.0.0.tgz#d1a211e146be8acfdb84dabcbf00fe8205e72936" + integrity sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw== + dependencies: + from2 "^2.3.0" + p-is-promise "^3.0.0" + +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-async-function@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== + dependencies: + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-bun-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-2.0.0.tgz#4d7859a87c0fcac950c95e666730e745eae8bddd" + integrity sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ== + dependencies: + semver "^7.7.1" + +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0, is-core-module@^2.16.0, is-core-module@^2.16.1, is-core-module@^2.5.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.10: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + +is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +iterator.prototype@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" + integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== + dependencies: + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + get-proto "^1.0.0" + has-symbols "^1.1.0" + set-function-name "^2.0.2" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdoc-type-pratt-parser@~4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.8.0.tgz#f2a649747278cbf9f2957d15cf772a841b16f003" + integrity sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +language-subtag-registry@^0.3.20: + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== + +language-tags@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== + dependencies: + language-subtag-registry "^0.3.20" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.15: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^10.0.1: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +meow@^13.0.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f" + integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA== + +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +napi-postinstall@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.3.3.tgz#93d045c6b576803ead126711d3093995198c6eb9" + integrity sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" + integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== + dependencies: + hosted-git-info "^7.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + +object.entries@^1.1.5, object.entries@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" + integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-object-atoms "^1.1.1" + +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.1.6, object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + +p-is-promise@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" + integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-imports-exports@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz#e3fb3b5e264cfb55c25b5dfcbe7f410f8dc4e7af" + integrity sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ== + dependencies: + parse-statements "1.0.11" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-json@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-8.3.0.tgz#88a195a2157025139a2317a4f2f9252b61304ed5" + integrity sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ== + dependencies: + "@babel/code-frame" "^7.26.2" + index-to-position "^1.1.0" + type-fest "^4.39.1" + +parse-statements@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/parse-statements/-/parse-statements-1.0.11.tgz#8787c5d383ae5746568571614be72b0689584344" + integrity sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.8.3: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +react-dom@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.2" + +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== + dependencies: + loose-envify "^1.1.0" + +read-package-up@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/read-package-up/-/read-package-up-11.0.0.tgz#71fb879fdaac0e16891e6e666df22de24a48d5ba" + integrity sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ== + dependencies: + find-up-simple "^1.0.0" + read-pkg "^9.0.0" + type-fest "^4.6.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read-pkg@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-9.0.1.tgz#b1b81fb15104f5dbb121b6bbdee9bbc9739f569b" + integrity sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA== + dependencies: + "@types/normalize-package-data" "^2.4.3" + normalize-package-data "^6.0.0" + parse-json "^8.0.0" + type-fest "^4.6.0" + unicorn-magic "^0.1.0" + +readable-stream@3, readable-stream@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.0.0, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + +regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +requireindex@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" + integrity sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve@^1.10.0, resolve@^1.22.4: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== + dependencies: + loose-envify "^1.1.0" + +"semver@2 || 3 || 4 || 5": + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.7.1, semver@^7.7.2: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-expression-parse@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" + integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.22" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz#abf5a08a6f5d7279559b669f47f0a43e8f3464ef" + integrity sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ== + +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +stable-hash@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" + integrity sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA== + +stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.includes@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" + integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + +string.prototype.matchall@^4.0.12: + version "4.0.12" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" + integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + gopd "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + regexp.prototype.flags "^1.5.3" + set-function-name "^2.0.2" + side-channel "^1.1.0" + +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +tempfile@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-3.0.0.tgz#5376a3492de7c54150d0cc0612c3f00e2cdaf76c" + integrity sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw== + dependencies: + temp-dir "^2.0.0" + uuid "^3.3.2" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +through@2, "through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tinyglobby@^0.2.13: + version "0.2.14" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" + integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== + dependencies: + fdir "^6.4.4" + picomatch "^4.0.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.4.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-fest@^4.39.1, type-fest@^4.6.0: + version "4.41.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" + integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== + +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typescript@^5.7.2: + version "5.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" + integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== + +uglify-js@^3.1.4: + version "3.19.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== + +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + +unicorn-magic@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== + +unrs-resolver@^1.6.2: + version "1.11.1" + resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.11.1.tgz#be9cd8686c99ef53ecb96df2a473c64d304048a9" + integrity sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg== + dependencies: + napi-postinstall "^0.3.0" + optionalDependencies: + "@unrs/resolver-binding-android-arm-eabi" "1.11.1" + "@unrs/resolver-binding-android-arm64" "1.11.1" + "@unrs/resolver-binding-darwin-arm64" "1.11.1" + "@unrs/resolver-binding-darwin-x64" "1.11.1" + "@unrs/resolver-binding-freebsd-x64" "1.11.1" + "@unrs/resolver-binding-linux-arm-gnueabihf" "1.11.1" + "@unrs/resolver-binding-linux-arm-musleabihf" "1.11.1" + "@unrs/resolver-binding-linux-arm64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-arm64-musl" "1.11.1" + "@unrs/resolver-binding-linux-ppc64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-riscv64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-riscv64-musl" "1.11.1" + "@unrs/resolver-binding-linux-s390x-gnu" "1.11.1" + "@unrs/resolver-binding-linux-x64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-x64-musl" "1.11.1" + "@unrs/resolver-binding-wasm32-wasi" "1.11.1" + "@unrs/resolver-binding-win32-arm64-msvc" "1.11.1" + "@unrs/resolver-binding-win32-ia32-msvc" "1.11.1" + "@unrs/resolver-binding-win32-x64-msvc" "1.11.1" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.16, which-typed-array@^1.1.19: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 458ed3814af35626c67162321f4d4a06d01f207b Mon Sep 17 00:00:00 2001 From: digoarthur Date: Sat, 20 Sep 2025 19:24:49 +0100 Subject: [PATCH 12/24] chore: improve JSDoc --- src/components/StackIcons.tsx | 5 ++--- src/hook/api/fetchGitHubAPI.ts | 4 ++-- src/hook/api/fetchGitHubBanner.ts | 4 ++-- src/hook/useGithubAutomatedRepos.ts | 20 ++++++++++---------- src/hook/utils/handleBanner.ts | 4 ++-- src/hook/utils/handleRepository.ts | 10 ++++------ 6 files changed, 22 insertions(+), 25 deletions(-) diff --git a/src/components/StackIcons.tsx b/src/components/StackIcons.tsx index 810a19f..b307bbc 100644 --- a/src/components/StackIcons.tsx +++ b/src/components/StackIcons.tsx @@ -7,12 +7,12 @@ type PropsStackIcons = { className?: string; style?: React.CSSProperties; }; - + /** * 🧩 * - Renders an icon for technology stacks with optional styling. * - * @see {@link https://github.com/DIGOARTHUR/github-automated-repos} for docs + * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. * @example * {repo.topics.map((topic) => ( * @@ -26,6 +26,5 @@ type PropsStackIcons = { * @returns {JSX.Element | null} - Rendered `img` or `null`. */ -// eslint-disable-next-line @typescript-eslint/naming-convention export const StackIcons = ({ itemTopics, className, style }: PropsStackIcons): JSX.Element | null => itemTopics === 'deploy' ? null : {stackIconsURL[itemTopics]}; diff --git a/src/hook/api/fetchGitHubAPI.ts b/src/hook/api/fetchGitHubAPI.ts index 9ab6021..7078d8a 100644 --- a/src/hook/api/fetchGitHubAPI.ts +++ b/src/hook/api/fetchGitHubAPI.ts @@ -7,8 +7,8 @@ export interface IGithubAPIResponse { homepage: string; } -export const fetchGitHubAPI = async (usernameGitHub: string): Promise => { - const response = await fetch(`https://api.github.com/users/${usernameGitHub}/repos?sort=created&per_page=999`); +export const fetchGitHubAPI = async (gitHubUsername: string): Promise => { + const response = await fetch(`https://api.github.com/users/${gitHubUsername}/repos?sort=created&per_page=999`); if (!response.ok) { throw new Error(`Unsuccessful request: ${response.statusText}`); diff --git a/src/hook/api/fetchGitHubBanner.ts b/src/hook/api/fetchGitHubBanner.ts index 0dd8a43..47736ea 100644 --- a/src/hook/api/fetchGitHubBanner.ts +++ b/src/hook/api/fetchGitHubBanner.ts @@ -19,9 +19,9 @@ export interface IFetchResult { }; } -export const fetchGitHubBanner = async (usernameGitHub: string, repositoryName: string): Promise => { +export const fetchGitHubBanner = async (gitHubUsername: string, repositoryName: string): Promise => { try { - const response = await fetch(`https://api.github.com/repos/${usernameGitHub}/${repositoryName}/contents/public`); + const response = await fetch(`https://api.github.com/repos/${gitHubUsername}/${repositoryName}/contents/public`); if (!response.ok) { if (response.status === 404) { diff --git a/src/hook/useGithubAutomatedRepos.ts b/src/hook/useGithubAutomatedRepos.ts index a8a5890..1e7fd74 100644 --- a/src/hook/useGithubAutomatedRepos.ts +++ b/src/hook/useGithubAutomatedRepos.ts @@ -27,9 +27,9 @@ interface IUseGithubReposSimpleReturn { import { useGitHubAutomatedRepos, StackIcons, StackLabels } from "github-automated-repos"; const { data, isLoading, error } = useGitHubAutomatedRepos('digoarthur', 'attached'); console.log(data) - * @param {string} GitHubUsername - Your GitHub username as seen in your profile URL. + * @param {string} gitHubUsername - Your GitHub username as seen in your profile URL. * Example: 'digoarthur' from https://github.com/USERNAME. - * @param {string} KeyWord - It is chosen by you. KeyWord used to identify and filter repositories (e.g., 'portfolio', 'attached'). + * @param {string} keyWord - It is chosen by you. KeyWord used to identify and filter repositories (e.g., 'portfolio', 'attached'). * Set this KeyWord in GitHub at: * Repository β†’ About - 'βš™οΈ' β†’ Topics β†’ add your KeyWord. * Only repositories containing this KeyWord in their Topics will be returned. @@ -59,27 +59,27 @@ interface IUseGithubReposSimpleReturn { *
* Header * - * {data?.map((repo) => ( - *
- *

{repo.name}

+ * {data?.map((item) => ( + *
+ *

{item.name}

* *
- * {repo.banner.map((url) => Banner)} + * {item.banner.map((url) => Banner)} *
* *
- * {repo.topics.map((topic) => ( + * {item.topics.map((topic) => ( * * * * ))} *
* - *

{repo.description}

+ *

{item.description}

* * *
* ))} diff --git a/src/hook/utils/handleBanner.ts b/src/hook/utils/handleBanner.ts index b0dd6ae..5244adf 100644 --- a/src/hook/utils/handleBanner.ts +++ b/src/hook/utils/handleBanner.ts @@ -4,11 +4,11 @@ export interface IGitHubBanner { download_url: string | null; } -export const handleBanner = async (usernameGitHub: string, repositoryName: string): Promise => { +export const handleBanner = async (gitHubUsername: string, repositoryName: string): Promise => { const bannersUrl: string[] = []; try { - const repositoryBanners = await fetchGitHubBanner(usernameGitHub, repositoryName); + const repositoryBanners = await fetchGitHubBanner(gitHubUsername, repositoryName); if (Array.isArray(repositoryBanners)) { repositoryBanners.forEach((item: IGitHubBanner) => { diff --git a/src/hook/utils/handleRepository.ts b/src/hook/utils/handleRepository.ts index 3c6aaf5..c3ebe09 100644 --- a/src/hook/utils/handleRepository.ts +++ b/src/hook/utils/handleRepository.ts @@ -12,19 +12,17 @@ export interface IGithubRepos { } /** - * @param {string} usernameGitHub - Insert your GitHub username. See in your GitHub Ex.: https://github.com/USERNAME + * @param {string} gitHubUsername - Insert your GitHub username. See in your GitHub Ex.: https://github.com/USERNAME * @param {string} keyWordDeploy - Insert a keyword chosen by you. - This key is responsible for managing your projects on GitHub in topics field. See in : https://github.com/DIGOARTHUR/github-automated-repos. */ -export const handleRepository = async (usernameGitHub: string, keyWordDeploy: string): Promise => { - // πŸ”Ή Tipar o retorno aqui - const jsonData = await fetchGitHubAPI(usernameGitHub); +export const handleRepository = async (gitHubUsername: string, keyWordDeploy: string): Promise => { + const jsonData = await fetchGitHubAPI(gitHubUsername); - // πŸ”Ή Agora nΓ£o dΓ‘ erro de `any` const dataFilter = jsonData.filter((item) => item.topics.includes(keyWordDeploy)); const repositories: IGithubRepos[] = await Promise.all( dataFilter.map(async (item) => { - const banner = await handleBanner(usernameGitHub, item.name); + const banner = await handleBanner(gitHubUsername, item.name); return { id: item.id, From 2ddf52779888bd3d0399431be3b6ddfdcf310e18 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Tue, 23 Sep 2025 21:03:32 +0100 Subject: [PATCH 13/24] chore: simplify build command for testing using yalc --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 0dcaa20..b269322 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "scripts": { "clean": "rm -rf dist", "build": "npm run clean && tsc && cp package.json README.md ./dist", + "build:yalc": "npm run build && npx yalc publish dist", "yalc:update": "npx yalc push --scripts --update --replace", "lint": "eslint .", "lint:fix": "eslint --fix .", From caa80e9e45631b3fca9403b058c73f2f51bd2b6a Mon Sep 17 00:00:00 2001 From: digoarthur Date: Tue, 23 Sep 2025 21:04:11 +0100 Subject: [PATCH 14/24] refactor: improve JSDoc --- src/components/StackIcons.tsx | 20 ++++++++++-------- src/components/StackLabels/StackLabels.tsx | 15 +++++++------ .../react-query/useGithubAutomatedRepos.ts | 12 ++++------- src/hook/useGithubAutomatedRepos.ts | 21 +++++++------------ 4 files changed, 32 insertions(+), 36 deletions(-) diff --git a/src/components/StackIcons.tsx b/src/components/StackIcons.tsx index b307bbc..336a21b 100644 --- a/src/components/StackIcons.tsx +++ b/src/components/StackIcons.tsx @@ -7,23 +7,25 @@ type PropsStackIcons = { className?: string; style?: React.CSSProperties; }; - + /** * 🧩 - * - Renders an icon for technology stacks with optional styling. + * - Render your icons from the used stacks. + * ⚠️ Set the stackIcon in GitHub at: + * Repository β†’ About - 'βš™οΈ' β†’ Topics β†’ add your stackName. * * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. * @example - * {repo.topics.map((topic) => ( - * - * + * {repo.topics.map((stackName) => ( + * + * * * ))} * - * @param {string} itemTopics - **Mandatory**: e.g: item.topics.map(icon) ... itemTopics={icon} - * @param {string} className - Optional: TailwindCSS className. - * @param {React.CSSProperties} style - Optional: inline style CSS. - * @returns {JSX.Element | null} - Rendered `img` or `null`. + * @param {string} itemTopics - ⚠️ **Mandatory**: e.g: repo.topics.map(stackName) ... itemTopics={stackName} + * @param {string} className - Optional: TailwindCSS CSS Properties. + * @param {React.CSSProperties} style - Optional: style CSS Properties. + * @returns {JSX.Element} - Return tag img(SVG). */ export const StackIcons = ({ itemTopics, className, style }: PropsStackIcons): JSX.Element | null => diff --git a/src/components/StackLabels/StackLabels.tsx b/src/components/StackLabels/StackLabels.tsx index c9ff7dc..5f6115a 100644 --- a/src/components/StackLabels/StackLabels.tsx +++ b/src/components/StackLabels/StackLabels.tsx @@ -11,16 +11,19 @@ type PropsStackLabels = { /** * 🧩 < StackLabels /> - * - Renders a LABELS for technology stacks with optional styling. + * - Render your labels from the used stacks. + * ⚠️ Set the stackLabels in GitHub at: + * Repository β†’ About - 'βš™οΈ' β†’ Topics β†’ add your stackName. + * * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. * @example - * {repo.topics.map((topic) => ( - * - * + * {repo.topics.map((stackName) => ( + * + * * * ))} - * @param {string} itemTopics - **Mandatory**: e.g: item.topics.map(icon) ... itemTopics={icon} - * @param {string} className - Optional: style className - TailwindCSS. + * @param {string} itemTopics - ⚠️ **Mandatory**: e.g: item.topics.map(stackName) ... itemTopics={stackName} + * @param {string} className - Optional: TailwindCSS CSS Properties. * @param {React.CSSProperties} style - Optional: style CSS Properties. * @returns {ReactNode} - Return tag img(SVG). */ diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts index 831a73a..64d9828 100644 --- a/src/hook/react-query/useGithubAutomatedRepos.ts +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -26,7 +26,7 @@ export interface IGitHubRepos { console.log(data) * @param {string} GitHubUsername - Your GitHub username (e.g., 'digoarthur') in https://github.com/USERNAME. * @param {string} keyWord - It is chosen by you. KeyWord used to identify and filter repositories (e.g., 'portfolio', 'attached'). - * Set this KeyWord in GitHub at: + * ⚠️ Set this KeyWord in GitHub at: * Repository β†’ About - 'βš™οΈ' β†’ Topics β†’ add your KeyWord. * Only repositories containing this KeyWord in their Topics will be returned. * @returns {object} Hook state object containing: @@ -85,9 +85,9 @@ export interface IGitHubRepos { *
* *
- * {repo.topics.map((topic) => ( - * - * + * {repo.topics.map((stackName) => ( + * + * * * ))} *
@@ -122,10 +122,6 @@ export interface IGitHubRepos { * ); */ -/** - * - */ - export const useGitHubAutomatedRepos = ( gitHubUsername: string, keyWord: string, diff --git a/src/hook/useGithubAutomatedRepos.ts b/src/hook/useGithubAutomatedRepos.ts index 1e7fd74..df98a82 100644 --- a/src/hook/useGithubAutomatedRepos.ts +++ b/src/hook/useGithubAutomatedRepos.ts @@ -59,27 +59,27 @@ interface IUseGithubReposSimpleReturn { *
* Header * - * {data?.map((item) => ( - *
- *

{item.name}

+ * {data?.map((repo) => ( + *
+ *

{repo.name}

* *
- * {item.banner.map((url) => Banner)} + * {repo.banner.map((url) => Banner)} *
* *
- * {item.topics.map((topic) => ( + * {repo.topics.map((topic) => ( * * * * ))} *
* - *

{item.description}

+ *

{repo.description}

* * *
* ))} @@ -105,11 +105,6 @@ interface IUseGithubReposSimpleReturn { * ); */ -/** - - - */ - export const useGitHubAutomatedRepos = (gitHubUsername: string, keyWord: string): IUseGithubReposSimpleReturn => { const [data, setData] = useState(undefined); const [isLoading, setIsLoading] = useState(false); From 9d3644d94ddff64ead32c35a057bea278e790895 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Sun, 28 Sep 2025 19:16:00 +0100 Subject: [PATCH 15/24] refactor: improve JSDoc --- src/components/StackIcons.tsx | 10 +++++----- src/components/StackLabels/StackLabels.tsx | 10 +++++----- src/hook/react-query/useGithubAutomatedRepos.ts | 6 +++--- src/hook/useGithubAutomatedRepos.ts | 10 +++++----- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/components/StackIcons.tsx b/src/components/StackIcons.tsx index 336a21b..8c845eb 100644 --- a/src/components/StackIcons.tsx +++ b/src/components/StackIcons.tsx @@ -10,11 +10,11 @@ type PropsStackIcons = { /** * 🧩 - * - Render your icons from the used stacks. - * ⚠️ Set the stackIcon in GitHub at: - * Repository β†’ About - 'βš™οΈ' β†’ Topics β†’ add your stackName. + * - Add icons representing the stacks/technologies used in your repositories. + * ⚠️ Set the icons in GitHub at: + * Repository β†’ About 'βš™οΈ' β†’ Topics β†’ add your stackName. * - * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. + * @see {@link https://github.com/DIGOARTHUR/github-automated-repos} β¬… check the available stack names here. (GitHub Topics) * @example * {repo.topics.map((stackName) => ( * @@ -25,7 +25,7 @@ type PropsStackIcons = { * @param {string} itemTopics - ⚠️ **Mandatory**: e.g: repo.topics.map(stackName) ... itemTopics={stackName} * @param {string} className - Optional: TailwindCSS CSS Properties. * @param {React.CSSProperties} style - Optional: style CSS Properties. - * @returns {JSX.Element} - Return tag img(SVG). + * @returns {JSX.Element} - Return tag ``. */ export const StackIcons = ({ itemTopics, className, style }: PropsStackIcons): JSX.Element | null => diff --git a/src/components/StackLabels/StackLabels.tsx b/src/components/StackLabels/StackLabels.tsx index 5f6115a..132a411 100644 --- a/src/components/StackLabels/StackLabels.tsx +++ b/src/components/StackLabels/StackLabels.tsx @@ -11,11 +11,11 @@ type PropsStackLabels = { /** * 🧩 < StackLabels /> - * - Render your labels from the used stacks. - * ⚠️ Set the stackLabels in GitHub at: - * Repository β†’ About - 'βš™οΈ' β†’ Topics β†’ add your stackName. + * - Add labels representing the stacks/technologies used in your repositories. + * ⚠️ Set the labels in GitHub at: + * Repository β†’ About 'βš™οΈ' β†’ Topics β†’ add your stackName. * - * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. + * @see {@link https://github.com/DIGOARTHUR/github-automated-repos} β¬… check the available stack names here. (GitHub Topics) * @example * {repo.topics.map((stackName) => ( * @@ -25,7 +25,7 @@ type PropsStackLabels = { * @param {string} itemTopics - ⚠️ **Mandatory**: e.g: item.topics.map(stackName) ... itemTopics={stackName} * @param {string} className - Optional: TailwindCSS CSS Properties. * @param {React.CSSProperties} style - Optional: style CSS Properties. - * @returns {ReactNode} - Return tag img(SVG). + * @returns {ReactNode} - Return tag ``. */ export const StackLabels = ({ itemTopics, className = 'styleStackLabels', style }: PropsStackLabels): JSX.Element | null => itemTopics === 'deploy' || stackIconsURL[itemTopics] === undefined ? ( diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts index 64d9828..bf91db2 100644 --- a/src/hook/react-query/useGithubAutomatedRepos.ts +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -15,7 +15,7 @@ export interface IGitHubRepos { /** * βš™οΈ github-automated-repos ( ) + [ React Query ] * - Control, choose and get data from your GitHub repositories. - * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. + * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} β¬… for more info github-automated-repos documentation. * @example * // Usage Example + [ React Query ] const { data, isLoading } = useGitHubAutomatedRepos('digoarthur', 'attached', { @@ -24,10 +24,10 @@ export interface IGitHubRepos { staleTime: 10 * 60 * 1000, // 10 minutes }); console.log(data) - * @param {string} GitHubUsername - Your GitHub username (e.g., 'digoarthur') in https://github.com/USERNAME. + * @param {string} gitHubUsername - Your GitHub username (e.g., 'digoarthur') in https://github.com/USERNAME. * @param {string} keyWord - It is chosen by you. KeyWord used to identify and filter repositories (e.g., 'portfolio', 'attached'). * ⚠️ Set this KeyWord in GitHub at: - * Repository β†’ About - 'βš™οΈ' β†’ Topics β†’ add your KeyWord. + * Repository β†’ About 'βš™οΈ' β†’ Topics β†’ add your KeyWord. * Only repositories containing this KeyWord in their Topics will be returned. * @returns {object} Hook state object containing: * @type {object} IGitHubRepos diff --git a/src/hook/useGithubAutomatedRepos.ts b/src/hook/useGithubAutomatedRepos.ts index df98a82..027578f 100644 --- a/src/hook/useGithubAutomatedRepos.ts +++ b/src/hook/useGithubAutomatedRepos.ts @@ -21,7 +21,7 @@ interface IUseGithubReposSimpleReturn { /** * βš™οΈ github-automated-repos ( ) * - Control, choose and get data from your GitHub repositories. - * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} for more info github-automated-repos documentation. + * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} β¬… for more info github-automated-repos documentation. * @example * // Usage Example import { useGitHubAutomatedRepos, StackIcons, StackLabels } from "github-automated-repos"; @@ -31,7 +31,7 @@ interface IUseGithubReposSimpleReturn { * Example: 'digoarthur' from https://github.com/USERNAME. * @param {string} keyWord - It is chosen by you. KeyWord used to identify and filter repositories (e.g., 'portfolio', 'attached'). * Set this KeyWord in GitHub at: - * Repository β†’ About - 'βš™οΈ' β†’ Topics β†’ add your KeyWord. + * Repository β†’ About 'βš™οΈ' β†’ Topics β†’ add your KeyWord. * Only repositories containing this KeyWord in their Topics will be returned. * @returns {object} Hook state object containing: * @type {object} IGitHubRepos @@ -68,9 +68,9 @@ interface IUseGithubReposSimpleReturn { *
* *
- * {repo.topics.map((topic) => ( - * - * + * {repo.topics.map((stackName) => ( + * + * * * ))} *
From f90f2bfb3c92e5dc00e51351eb07201d40c4f8ab Mon Sep 17 00:00:00 2001 From: digoarthur Date: Sun, 28 Sep 2025 20:42:06 +0100 Subject: [PATCH 16/24] refactor: improve display stack Icons and Labels --- src/components/StackIcons.tsx | 9 +++++++-- src/components/StackLabels/StackLabels.tsx | 11 +++++++---- src/components/StackLabels/styles.ts | 9 ++++++++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/components/StackIcons.tsx b/src/components/StackIcons.tsx index 8c845eb..be540f7 100644 --- a/src/components/StackIcons.tsx +++ b/src/components/StackIcons.tsx @@ -28,5 +28,10 @@ type PropsStackIcons = { * @returns {JSX.Element} - Return tag ``. */ -export const StackIcons = ({ itemTopics, className, style }: PropsStackIcons): JSX.Element | null => - itemTopics === 'deploy' ? null : {stackIconsURL[itemTopics]}; +export const StackIcons = ({ itemTopics, className, style }: PropsStackIcons): JSX.Element | null => { + if (!stackIconsURL[itemTopics]) { + return null; + } + + return {itemTopics}; +}; diff --git a/src/components/StackLabels/StackLabels.tsx b/src/components/StackLabels/StackLabels.tsx index 132a411..3686d4b 100644 --- a/src/components/StackLabels/StackLabels.tsx +++ b/src/components/StackLabels/StackLabels.tsx @@ -27,10 +27,12 @@ type PropsStackLabels = { * @param {React.CSSProperties} style - Optional: style CSS Properties. * @returns {ReactNode} - Return tag ``. */ -export const StackLabels = ({ itemTopics, className = 'styleStackLabels', style }: PropsStackLabels): JSX.Element | null => - itemTopics === 'deploy' || stackIconsURL[itemTopics] === undefined ? ( - <> - ) : ( +export const StackLabels = ({ itemTopics, className = 'styleStackLabels', style }: PropsStackLabels): JSX.Element | null => { + if (itemTopics === 'deploy' || !stackIconsURL[itemTopics]) { + return null; + } + + return ( <>

@@ -38,3 +40,4 @@ export const StackLabels = ({ itemTopics, className = 'styleStackLabels', style

); +}; diff --git a/src/components/StackLabels/styles.ts b/src/components/StackLabels/styles.ts index 4c0c770..e83d577 100644 --- a/src/components/StackLabels/styles.ts +++ b/src/components/StackLabels/styles.ts @@ -6,4 +6,11 @@ export const CSS = ` padding: 1px; border-radius: 10px; background-color: #646cff; -}`; + flex: none; + flex-shrink: 0; + align-self: center; + box-sizing: border-box; + display: flex; + justify-content: center; + align-items: center; +}`; \ No newline at end of file From 3915af24e26042ce1a073f4f349535a40d47b837 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Mon, 29 Sep 2025 19:16:26 +0100 Subject: [PATCH 17/24] refactor: improve JSDoc --- src/hook/react-query/useGithubAutomatedRepos.ts | 13 ++++++++++--- src/hook/useGithubAutomatedRepos.ts | 6 +++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts index bf91db2..78e81b6 100644 --- a/src/hook/react-query/useGithubAutomatedRepos.ts +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -31,13 +31,17 @@ export interface IGitHubRepos { * Only repositories containing this KeyWord in their Topics will be returned. * @returns {object} Hook state object containing: * @type {object} IGitHubRepos + * @property {string[]} banner - ⚠️ Array of banner image URLs found in the public folder. + * The name of the image file must contain banner in the name. Insert your images inside project in the following path: e.g: + * + * File structure requirement: /public β†’ bannerXYZ.png - bannerABC.svg - bannerJKL.jpg + * * @property {string} name - Repository name. * @property {string[]} topics - Topics assigned to the repository. - * @property {string} html_url - Repository URL. + * @property {string} html_url - Repository UR. * @property {string} description - Short description of the repository. * @property {number} id - Unique repository ID. * @property {string} homepage - Homepage or deployed site URL. - * @property {string[]} banner - Banner image URLs. * @returns {IGitHubRepos[]} data - Array of filtered GitHub repositories. * @returns {boolean} isLoading - True while the initial load is in progress. * @returns {boolean} isError - True if the query encountered an error. @@ -125,7 +129,10 @@ export interface IGitHubRepos { export const useGitHubAutomatedRepos = ( gitHubUsername: string, keyWord: string, - options?: Omit, 'queryKey' | 'queryFn'> + options?: Omit< + UseQueryOptions, + 'queryKey' | 'queryFn' + > ): UseQueryResult => useQuery({ queryKey: ['githubRepos', gitHubUsername, keyWord], diff --git a/src/hook/useGithubAutomatedRepos.ts b/src/hook/useGithubAutomatedRepos.ts index 027578f..692bbac 100644 --- a/src/hook/useGithubAutomatedRepos.ts +++ b/src/hook/useGithubAutomatedRepos.ts @@ -35,13 +35,17 @@ interface IUseGithubReposSimpleReturn { * Only repositories containing this KeyWord in their Topics will be returned. * @returns {object} Hook state object containing: * @type {object} IGitHubRepos + * @property {string[]} banner - ⚠️ Array of banner image URLs found in the public folder. + * The name of the image file must contain banner in the name. Insert your images inside project in the following path: e.g: + * + * File structure requirement: /public β†’ bannerXYZ.png - bannerABC.svg - bannerJKL.jpg + * * @property {string} name - Repository name. * @property {string[]} topics - Topics assigned to the repository. * @property {string} html_url - Repository URL. * @property {string} description - Short description of the repository. * @property {number} id - Unique repository ID. * @property {string} homepage - Homepage or deployed site URL. - * @property {string[]} banner - Banner image URLs. * @returns {IGitHubRepos[]|undefined} data - Array of filtered repositories, or `undefined` while loading. * @returns {boolean} isLoading - `true` while fetching data, otherwise `false`. * @returns {Error|null} error - Error object if the request failed, otherwise `null`. From 013737ed16514b87117d3dad673597b0d2133bb8 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Fri, 3 Oct 2025 21:17:35 +0100 Subject: [PATCH 18/24] refactor: remove JSDoc from utils functions --- src/components/StackLabels/styles.ts | 2 +- src/hook/react-query/useGithubAutomatedRepos.ts | 5 +---- src/hook/utils/handleRepository.ts | 4 ---- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/components/StackLabels/styles.ts b/src/components/StackLabels/styles.ts index e83d577..19ae754 100644 --- a/src/components/StackLabels/styles.ts +++ b/src/components/StackLabels/styles.ts @@ -13,4 +13,4 @@ export const CSS = ` display: flex; justify-content: center; align-items: center; -}`; \ No newline at end of file +}`; diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts index 78e81b6..64f69bc 100644 --- a/src/hook/react-query/useGithubAutomatedRepos.ts +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -129,10 +129,7 @@ export interface IGitHubRepos { export const useGitHubAutomatedRepos = ( gitHubUsername: string, keyWord: string, - options?: Omit< - UseQueryOptions, - 'queryKey' | 'queryFn' - > + options?: Omit, 'queryKey' | 'queryFn'> ): UseQueryResult => useQuery({ queryKey: ['githubRepos', gitHubUsername, keyWord], diff --git a/src/hook/utils/handleRepository.ts b/src/hook/utils/handleRepository.ts index c3ebe09..e04e097 100644 --- a/src/hook/utils/handleRepository.ts +++ b/src/hook/utils/handleRepository.ts @@ -11,10 +11,6 @@ export interface IGithubRepos { banner: string[]; } -/** - * @param {string} gitHubUsername - Insert your GitHub username. See in your GitHub Ex.: https://github.com/USERNAME - * @param {string} keyWordDeploy - Insert a keyword chosen by you. - This key is responsible for managing your projects on GitHub in topics field. See in : https://github.com/DIGOARTHUR/github-automated-repos. - */ export const handleRepository = async (gitHubUsername: string, keyWordDeploy: string): Promise => { const jsonData = await fetchGitHubAPI(gitHubUsername); From a08e26b2962f6d9b2e1bc4e08fa69a387b242ea3 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Sat, 4 Oct 2025 09:48:56 +0100 Subject: [PATCH 19/24] refactor: improve JSDoc --- package.json | 2 +- src/components/StackIcons.tsx | 4 ++-- src/components/StackLabels/StackLabels.tsx | 4 ++-- src/hook/react-query/useGithubAutomatedRepos.ts | 4 ++-- src/hook/useGithubAutomatedRepos.ts | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index b269322..d6fb6da 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-automated-repos", - "version": "1.3.1", + "version": "1.4.0", "description": "The library, ReactJS, that gives you the power to control / automate your GitHub data, your projects on the portfolio / website, in your own GitHub in one place!", "author": { "name": "Diego Arthur @digoarthur", diff --git a/src/components/StackIcons.tsx b/src/components/StackIcons.tsx index be540f7..291b5d3 100644 --- a/src/components/StackIcons.tsx +++ b/src/components/StackIcons.tsx @@ -9,8 +9,8 @@ type PropsStackIcons = { }; /** - * 🧩 - * - Add icons representing the stacks/technologies used in your repositories. + * 🧩 StackIcons Component + * - `Add icons` representing the stacks/technologies used in your repositories. * ⚠️ Set the icons in GitHub at: * Repository β†’ About 'βš™οΈ' β†’ Topics β†’ add your stackName. * diff --git a/src/components/StackLabels/StackLabels.tsx b/src/components/StackLabels/StackLabels.tsx index 3686d4b..7d16231 100644 --- a/src/components/StackLabels/StackLabels.tsx +++ b/src/components/StackLabels/StackLabels.tsx @@ -10,8 +10,8 @@ type PropsStackLabels = { }; /** - * 🧩 < StackLabels /> - * - Add labels representing the stacks/technologies used in your repositories. + * 🧩 StackLabels Component + * - `Add labels` representing the stacks/technologies used in your repositories. * ⚠️ Set the labels in GitHub at: * Repository β†’ About 'βš™οΈ' β†’ Topics β†’ add your stackName. * diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts index 64f69bc..fe92d30 100644 --- a/src/hook/react-query/useGithubAutomatedRepos.ts +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -13,8 +13,8 @@ export interface IGitHubRepos { } /** - * βš™οΈ github-automated-repos ( ) + [ React Query ] - * - Control, choose and get data from your GitHub repositories. + * βš™οΈ github-automated-repos ( ) hook + [ React Query ] + * - Control, choose and get data from your GitHub repositories in your `Portolio`. * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} β¬… for more info github-automated-repos documentation. * @example * // Usage Example + [ React Query ] diff --git a/src/hook/useGithubAutomatedRepos.ts b/src/hook/useGithubAutomatedRepos.ts index 692bbac..6aaa92b 100644 --- a/src/hook/useGithubAutomatedRepos.ts +++ b/src/hook/useGithubAutomatedRepos.ts @@ -19,8 +19,8 @@ interface IUseGithubReposSimpleReturn { } /** - * βš™οΈ github-automated-repos ( ) - * - Control, choose and get data from your GitHub repositories. + * βš™οΈ github-automated-repos ( ) hook + * - Control, choose and get data from your GitHub repositories in your `Portolio`. * @see {@link ℹ️ https://github.com/DIGOARTHUR/github-automated-repos} β¬… for more info github-automated-repos documentation. * @example * // Usage Example From c35b26776ee890a29859d23c34b1ee9095cce86a Mon Sep 17 00:00:00 2001 From: digoarthur Date: Sun, 5 Oct 2025 10:23:43 +0100 Subject: [PATCH 20/24] chore: update general config files --- .changelogrc.js | 44 ----------------------------------------- .editorconfig | 12 +++++++---- .vscode/extensions.json | 21 ++++++++++++++------ Handlebars.hbs | 34 ------------------------------- generate-changelog.js | 17 ---------------- package.json | 2 +- 6 files changed, 24 insertions(+), 106 deletions(-) delete mode 100644 .changelogrc.js delete mode 100644 Handlebars.hbs delete mode 100644 generate-changelog.js diff --git a/.changelogrc.js b/.changelogrc.js deleted file mode 100644 index 54c52a6..0000000 --- a/.changelogrc.js +++ /dev/null @@ -1,44 +0,0 @@ -module.exports = { - preset: 'angular', - releaseCommitMessageFormat: 'chore(release): {{currentTag}}', - writerOpts: { - transform: (commit, context) => { - - if (['docs', 'chore'].includes(commit.type)) { - return false; - } - - - const typeMap = { - feat: '✨ Features', - fix: 'πŸ› Bug Fixes', - perf: 'πŸš€ Performance', - refactor: '♻️ Refactors', - improvement: 'βœ… Improvements' - }; - - - if (typeMap[commit.type]) { - commit.type = typeMap[commit.type]; - } - - - if (context.repository) { - const issueUrl = `${context.host}/${context.owner}/${context.repository}/issues/`; - commit.subject = commit.subject.replace(/#([0-9]+)/g, (_, issue) => { - return `[#${issue}](${issueUrl}${issue})`; - }); - } - - return commit; - }, - groupBy: 'type', - commitGroupsSort: (a, b) => { - const order = ['✨ Features', 'πŸ› Bug Fixes', 'πŸš€ Performance', '♻️ Refactors']; - return order.indexOf(a.title) - order.indexOf(b.title); - }, - commitsSort: ['scope', 'subject'], - noteGroupsSort: 'title', - notesSort: 'text' - } - }; \ No newline at end of file diff --git a/.editorconfig b/.editorconfig index 11f75ff..271822f 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,9 +1,13 @@ root = true [*] -indent_style = space -indent_size = 4 -end_of_line = crlf charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false trim_trailing_whitespace = false -insert_final_newline = false \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json index f8d3b80..d69cd49 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,7 +1,16 @@ { - "recommendations": [ - "esbenp.prettier-vscode", - "dbaeumer.vscode-eslint" - - ] -} \ No newline at end of file + "recommendations": [ + // --- Essential Extensions --- + "dbaeumer.vscode-eslint", // ESLint integration: shows errors and warnings in real-time + "esbenp.prettier-vscode", // Prettier formatter: auto-format code on save + "rbbit.typescript-hero", // TypeScript helper: auto-imports and code completion + "eamodio.gitlens", // GitLens: shows commit history, authorship, and line changes + "christian-kohler.path-intellisense", // Path IntelliSense: auto-complete relative file paths + + // --- Very Useful Extensions --- + "planbcoding.vscode-react-refactor", // React Refactor: helps refactor React components quickly + "steoates.autoimport", // Auto Import: automatically adds missing imports while typing + "yzhang.markdown-all-in-one", // Markdown All-in-One: editing README.md, changelogs, documentation + "humao.rest-client" // REST Client: test APIs directly inside VSCode + ] +} diff --git a/Handlebars.hbs b/Handlebars.hbs deleted file mode 100644 index 33eb65a..0000000 --- a/Handlebars.hbs +++ /dev/null @@ -1,34 +0,0 @@ -{{#each releases}} - - # {{version}} ({{date}}) - - {{#if summary}} - {{summary}} - {{/if}} - - {{#if breakingChanges}} - ## Breaking Changes - {{#each breakingChanges}} - ### {{scope}} - - {{capitalize subject}} - {{/each}} - {{/if}} - - {{#if deprecations}} - ## Deprecations - {{#each deprecations}} - ### {{scope}} - - {{capitalize subject}} - {{/each}} - {{/if}} - - {{#each commitGroups}} - ### {{title}} - {{#each commits}} - | [{{shortHash}}]({{commitUrl}}) | {{type}} | {{subject}} {{#if references}}({{#each references}}[{{this.prefix}}{{this.issue}}]({{this.repository}}/issues/{{this.issue}}){{/each}}){{/if}} | - {{/each}} - {{/each}} - - {{#if isLast}} - {{/if}} -{{/each}} \ No newline at end of file diff --git a/generate-changelog.js b/generate-changelog.js deleted file mode 100644 index e762e60..0000000 --- a/generate-changelog.js +++ /dev/null @@ -1,17 +0,0 @@ -// generate-changelog.js -const { writeFileSync } = require('fs'); -const conventionalChangelog = require('conventional-changelog'); - -const config = { - config: require('./changelog-config.js'), - context: { - host: 'https://github.com', - owner: 'DIGOARTHUR', - repository: 'github-automated-repos', - }, - releaseCount: 0, -}; - -conventionalChangelog(config).on('data', (chunk) => { - writeFileSync('CHANGELOG.md', chunk); -}); diff --git a/package.json b/package.json index d6fb6da..87bb539 100644 --- a/package.json +++ b/package.json @@ -94,4 +94,4 @@ "@types/react-dom": "^18.3.1", "json-schema": "^0.4.0" } -} \ No newline at end of file +} From a89f3f2f987076f6c1bff38974cb7269fdfa48d6 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Sun, 5 Oct 2025 11:09:43 +0100 Subject: [PATCH 21/24] chore(files):reorganize files and folders --- src/{hook => }/api/fetchGitHubAPI.ts | 0 src/{hook => }/api/fetchGitHubBanner.ts | 0 src/hook/react-query/useGithubAutomatedRepos.ts | 2 +- src/hook/useGithubAutomatedRepos.ts | 2 +- src/{hook => }/utils/handleBanner.ts | 0 src/{hook => }/utils/handleRepository.ts | 0 6 files changed, 2 insertions(+), 2 deletions(-) rename src/{hook => }/api/fetchGitHubAPI.ts (100%) rename src/{hook => }/api/fetchGitHubBanner.ts (100%) rename src/{hook => }/utils/handleBanner.ts (100%) rename src/{hook => }/utils/handleRepository.ts (100%) diff --git a/src/hook/api/fetchGitHubAPI.ts b/src/api/fetchGitHubAPI.ts similarity index 100% rename from src/hook/api/fetchGitHubAPI.ts rename to src/api/fetchGitHubAPI.ts diff --git a/src/hook/api/fetchGitHubBanner.ts b/src/api/fetchGitHubBanner.ts similarity index 100% rename from src/hook/api/fetchGitHubBanner.ts rename to src/api/fetchGitHubBanner.ts diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts index fe92d30..4165097 100644 --- a/src/hook/react-query/useGithubAutomatedRepos.ts +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -1,6 +1,6 @@ import { useQuery, UseQueryOptions, UseQueryResult } from '@tanstack/react-query'; -import { handleRepository } from '../utils/handleRepository'; +import { handleRepository } from '../../utils/handleRepository'; export interface IGitHubRepos { name: string; diff --git a/src/hook/useGithubAutomatedRepos.ts b/src/hook/useGithubAutomatedRepos.ts index 6aaa92b..c7551f8 100644 --- a/src/hook/useGithubAutomatedRepos.ts +++ b/src/hook/useGithubAutomatedRepos.ts @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; -import { handleRepository } from './utils/handleRepository'; +import { handleRepository } from '../utils/handleRepository'; export interface IGitHubRepos { name: string; diff --git a/src/hook/utils/handleBanner.ts b/src/utils/handleBanner.ts similarity index 100% rename from src/hook/utils/handleBanner.ts rename to src/utils/handleBanner.ts diff --git a/src/hook/utils/handleRepository.ts b/src/utils/handleRepository.ts similarity index 100% rename from src/hook/utils/handleRepository.ts rename to src/utils/handleRepository.ts From 6f2391cfee4b108159510b585b488315e6111956 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Tue, 7 Oct 2025 07:40:25 +0100 Subject: [PATCH 22/24] refactor: improve JSDoc --- .../react-query/useGithubAutomatedRepos.ts | 29 ++++++++----------- src/hook/useGithubAutomatedRepos.ts | 2 ++ 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/hook/react-query/useGithubAutomatedRepos.ts b/src/hook/react-query/useGithubAutomatedRepos.ts index 4165097..f9c0c54 100644 --- a/src/hook/react-query/useGithubAutomatedRepos.ts +++ b/src/hook/react-query/useGithubAutomatedRepos.ts @@ -23,7 +23,9 @@ export interface IGitHubRepos { refetchOnWindowFocus: false, staleTime: 10 * 60 * 1000, // 10 minutes }); - console.log(data) + console.log(data) + * + * @section πŸͺ **Hook Params** * @param {string} gitHubUsername - Your GitHub username (e.g., 'digoarthur') in https://github.com/USERNAME. * @param {string} keyWord - It is chosen by you. KeyWord used to identify and filter repositories (e.g., 'portfolio', 'attached'). * ⚠️ Set this KeyWord in GitHub at: @@ -35,7 +37,7 @@ export interface IGitHubRepos { * The name of the image file must contain banner in the name. Insert your images inside project in the following path: e.g: * * File structure requirement: /public β†’ bannerXYZ.png - bannerABC.svg - bannerJKL.jpg - * + * * @property {string} name - Repository name. * @property {string[]} topics - Topics assigned to the repository. * @property {string} html_url - Repository UR. @@ -45,22 +47,15 @@ export interface IGitHubRepos { * @returns {IGitHubRepos[]} data - Array of filtered GitHub repositories. * @returns {boolean} isLoading - True while the initial load is in progress. * @returns {boolean} isError - True if the query encountered an error. + * + * @section βš›οΈ **React Query Params (data refresh control)** * @param {object} [options] - Optional React Query configuration options. - * @param {number} [options.refetchInterval] - Auto-refetch interval in milliseconds (e.g., 60000 for 1 minute). - * Set to `false` to disable auto-refetch. - * @param {boolean} [options.refetchOnWindowFocus] - Whether to refetch when window regains focus. Default: true. - * @param {boolean} [options.enabled] - Whether the query should execute immediately. Set to false for manual triggering. - * @param {Function} [options.onSuccess] - Callback function executed after successful query. - * Receives the data as parameter: `(data: IGitHubRepos[]) => void`. - * @param {Function} [options.onError] - Callback function executed when query fails. - * Receives the error as parameter: `(error: Error) => void`. - * @param {number} [options.staleTime] - Time in milliseconds before data becomes stale (default: 0). - * @param {number} [options.cacheTime] - Time in milliseconds to keep unused data in cache (default: 5 minutes). - * @param {number|boolean|Function} [options.retry] - How many times to retry failed queries (default: 3). - * @param {number} [options.retryDelay] - Delay in milliseconds between retries (default: 1000). - * @returns {UseQueryResult} - React Query result object containing: - * @returns {Error} error - Error object if query failed. - * @returns {Function} refetch - Function to manually trigger refetch. + * @param {number|false} [options.refetchInterval=60000] - Auto-refetch interval in milliseconds. + * Use `false` to disable automatic refetching. + * @param {number} [options.staleTime=600000] - Time in milliseconds before cached data becomes stale. + * During this time, React Query will not refetch automatically. + * @param {boolean} [options.refetchOnWindowFocus=true] - Whether to refetch when the window regains focus. + * @param {boolean} [options.enabled=true] - Whether the query should run automatically on mount. * @see {@link ℹ️ https://tanstack.com/query/latest/docs/react/reference/useQuery} for full React Query documentation. * @example * // Usage Example diff --git a/src/hook/useGithubAutomatedRepos.ts b/src/hook/useGithubAutomatedRepos.ts index c7551f8..6977071 100644 --- a/src/hook/useGithubAutomatedRepos.ts +++ b/src/hook/useGithubAutomatedRepos.ts @@ -27,6 +27,8 @@ interface IUseGithubReposSimpleReturn { import { useGitHubAutomatedRepos, StackIcons, StackLabels } from "github-automated-repos"; const { data, isLoading, error } = useGitHubAutomatedRepos('digoarthur', 'attached'); console.log(data) + + * @section πŸͺ **Hook Params** * @param {string} gitHubUsername - Your GitHub username as seen in your profile URL. * Example: 'digoarthur' from https://github.com/USERNAME. * @param {string} keyWord - It is chosen by you. KeyWord used to identify and filter repositories (e.g., 'portfolio', 'attached'). From 9b97dd341f071e52822a53f0bfc129be7a9806d1 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Fri, 10 Oct 2025 10:41:11 +0100 Subject: [PATCH 23/24] refactor: improve .vscode settings file --- .vscode/settings.json | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index da4869e..ccb3aed 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,24 +1,39 @@ { - // Formatar sempre que salvar + // Automatically format the code every time you save a file. "editor.formatOnSave": true, - // Prettier como padrΓ£o global + // Set Prettier as the global default code formatter for the workspace. "editor.defaultFormatter": "esbenp.prettier-vscode", - // Regras por linguagem + // --- Language-specific configurations --- + + // For JavaScript files (.js) "[javascript]": { + // Format the file automatically when saving. "editor.formatOnSave": true, + // Use Prettier as the formatter for JavaScript files. "editor.defaultFormatter": "esbenp.prettier-vscode" }, + + // For TypeScript files (.ts) "[typescript]": { + // Format automatically on save. "editor.formatOnSave": true, + // Use Prettier as the formatter for TypeScript. "editor.defaultFormatter": "esbenp.prettier-vscode" }, + + // For React TypeScript files (.tsx) "[typescriptreact]": { + // Format automatically on save. "editor.formatOnSave": true, + // Use Prettier as the formatter for React TypeScript files. "editor.defaultFormatter": "esbenp.prettier-vscode" }, + + // For JSON files (.json) "[json]": { + // Use VS Code’s built-in JSON formatter (not Prettier). "editor.defaultFormatter": "vscode.json-language-features" } } From a93b41585778f2406fbbe2e840b78069417b1060 Mon Sep 17 00:00:00 2001 From: digoarthur Date: Fri, 10 Oct 2025 11:17:51 +0100 Subject: [PATCH 24/24] refactor: improve SEO package.json file --- package.json | 60 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index 87bb539..c665815 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,15 @@ { "name": "github-automated-repos", "version": "1.4.0", - "description": "The library, ReactJS, that gives you the power to control / automate your GitHub data, your projects on the portfolio / website, in your own GitHub in one place!", + "description": "A powerful React library that automatically displays and updates your GitHub repositories on your portfolio or personal website. Use simple React hooks to sync your GitHub projects and keep your developer portfolio always up to date.", "author": { - "name": "Diego Arthur @digoarthur", + "name": "Diego Arthur (@digoarthur)", "url": "https://www.linkedin.com/in/digoarthur/", "github": "https://github.com/DIGOARTHUR" }, "repository": { - "type": "git", - "url": "https://github.com/DIGOARTHUR/github-automated-repos.git" - }, - "bugs": { - "url": "https://github.com/DIGOARTHUR/github-automated-repos/issues" + "type": "github", + "url": "https://github.com/digoarthur/github-automated-repos" }, "homepage": "https://github-automated-repos.vercel.app", "license": "MIT", @@ -41,28 +38,43 @@ "changelog": "conventional-changelog --config changelog-config.js -i CHANGELOG.md -s -r 0" }, "keywords": [ - "reactjs-library", - "github-integration", + "react", + "reactjs", + "react-library", + "react-hook", + "usegithubautomatedrepos", + "github", "github-api", - "repositories-automation", + "github-repositories", "github-repos-display", - "developer-portfolio", + "github-projects", + "github-integration", "github-portfolio", + "developer-portfolio", "portfolio-automation", - "project-showcase", - "react-hook", - "javascript-library", - "frontend-library", - "react-query-support", - "automate-projects", - "manage-repositories", - "github-topics", - "dynamic-content", + "portfolio-builder", + "portfolio-integration", + "auto-update-portfolio", + "sync-github-repos", + "display-github-projects", + "react-github-component", + "react-github-integration", + "react-github-projects", + "fetch-github-repos", + "automate-github-portfolio", + "github-projects-showcase", + "frontend-github-automation", + "react-developer-tools", "open-source-tools", - "developer-tools", - "npm-library", - "react-libraries" + "project-showcase" ], + "engines": { + "node": ">=16" + }, + "readmeFilename": "README.md", + "publishConfig": { + "access": "public" + }, "devDependencies": { "@semantic-release/release-notes-generator": "^14.0.3", "@types/json-schema": "^7.0.15", @@ -94,4 +106,4 @@ "@types/react-dom": "^18.3.1", "json-schema": "^0.4.0" } -} +} \ No newline at end of file