diff --git a/.eslintrc.json b/.eslintrc.json index 367f484a665f5..be5088141b1ed 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -94,10 +94,10 @@ // Produce warnings when something is commented as TODO or FIXME - // "no-warning-comments": [ "warn", { - // "terms": [ "TODO", "FIXME" ], - // "location": "start" - // }], + "no-warning-comments": [ "warn", { + "terms": [ "TODO", "FIXME" ], + "location": "start" + }], // "no-with": "warn", // "radix": "warn", // "vars-on-top": "error", @@ -158,7 +158,7 @@ // "no-dupe-class-members": "error", // "no-this-before-super": "error", // "no-var": "warn", - "object-shorthand": [ "warn" ] + "object-shorthand": [ "warn" ], // "prefer-arrow-callback": "warn", // "prefer-spread": "warn", // "prefer-template": "warn", @@ -211,13 +211,13 @@ // "padded-blocks": [ "warn", "never" ], // "quote-props": [ "warn", "consistent-as-needed" ], // "quotes": [ "warn", "single" ], - // "require-jsdoc": [ "warn", { - // "require": { - // "FunctionDeclaration": true, - // "MethodDefinition": true, - // "ClassDeclaration": false - // } - // }], + "require-jsdoc": [ "warn", { + "require": { + "FunctionDeclaration": true, + "MethodDefinition": true, + "ClassDeclaration": false + } + }] // "semi-spacing": [ "warn", { "before": false, "after": true }], // "semi": [ "error", "always" ], // "sort-vars": "off", diff --git a/.github/workflows/deploy-prep.yml b/.github/workflows/deploy-prep.yml index 7fd91d6525cfd..759c97a84bf0e 100644 --- a/.github/workflows/deploy-prep.yml +++ b/.github/workflows/deploy-prep.yml @@ -10,7 +10,7 @@ jobs: if: github.repository == 'anuraghazra/github-readme-stats' runs-on: ubuntu-latest steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Deployment Prep run: python ./.github/workflows/deploy-prep.py - uses: stefanzweifel/git-auto-commit-action@3ea6ae190baf489ba007f7c92608f33ce20ef04a # v4.16.0 diff --git a/.github/workflows/e2e-test.yml b/.github/workflows/e2e-test.yml index 077c982addeb1..e0ecbf4ba34e9 100644 --- a/.github/workflows/e2e-test.yml +++ b/.github/workflows/e2e-test.yml @@ -17,7 +17,7 @@ jobs: node-version: [18.x] steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Node uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 diff --git a/.github/workflows/empty-issues-closer.yaml b/.github/workflows/empty-issues-closer.yaml index 54a184c8404aa..e675faf269673 100644 --- a/.github/workflows/empty-issues-closer.yaml +++ b/.github/workflows/empty-issues-closer.yaml @@ -27,10 +27,10 @@ jobs: runs-on: ubuntu-latest steps: # NOTE: Retrieve issue templates. - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Run empty issues closer action - uses: rickstaa/empty-issues-closer-action@7b2290364eb15bc228f7e7e1bb1b930fd850a71b # v1.1.14 + uses: rickstaa/empty-issues-closer-action@2976d7763c8490535b108c414d8a147ffea86f28 # v1.1.20 env: github_token: ${{ secrets.GITHUB_TOKEN }} with: diff --git a/.github/workflows/generate-theme-doc.yml b/.github/workflows/generate-theme-doc.yml index e23711d558d0b..2968f397e4622 100644 --- a/.github/workflows/generate-theme-doc.yml +++ b/.github/workflows/generate-theme-doc.yml @@ -29,7 +29,7 @@ jobs: node-version: [18.x] steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Node uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 diff --git a/.github/workflows/ossf-analysis.yml b/.github/workflows/ossf-analysis.yml index a0ce38206d89a..be6576d4dabf7 100644 --- a/.github/workflows/ossf-analysis.yml +++ b/.github/workflows/ossf-analysis.yml @@ -21,7 +21,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 with: persist-credentials: false @@ -35,7 +35,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/preview-theme.yml b/.github/workflows/preview-theme.yml index ced80bc761eeb..131ec6e64f3be 100644 --- a/.github/workflows/preview-theme.yml +++ b/.github/workflows/preview-theme.yml @@ -30,7 +30,7 @@ jobs: node-version: [18.x] steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Node uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 diff --git a/.github/workflows/prs-cache-clean.yml b/.github/workflows/prs-cache-clean.yml index 7899b83b23034..cec9a9b07d99a 100644 --- a/.github/workflows/prs-cache-clean.yml +++ b/.github/workflows/prs-cache-clean.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Cleanup run: | diff --git a/.github/workflows/stale-theme-pr-closer.yaml b/.github/workflows/stale-theme-pr-closer.yaml index b5229b8e260f3..a65dd324ccf9c 100644 --- a/.github/workflows/stale-theme-pr-closer.yaml +++ b/.github/workflows/stale-theme-pr-closer.yaml @@ -36,7 +36,7 @@ jobs: node-version: [18.x] steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Node uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ea5aa36af3b6d..598e39a13ddae 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,7 +18,7 @@ jobs: node-version: [18.x] steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Node uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 diff --git a/.github/workflows/top-issues-dashboard.yml b/.github/workflows/top-issues-dashboard.yml index 0e88e95fcfaf3..46be04a133ff8 100644 --- a/.github/workflows/top-issues-dashboard.yml +++ b/.github/workflows/top-issues-dashboard.yml @@ -34,7 +34,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Run top issues action - uses: rickstaa/top-issues-action@48db57e0490567d15d3116edc8ae76c641239c27 # v1.3.40 + uses: rickstaa/top-issues-action@20822b6d133fa88780e87f154bef34a6911005ec # v1.3.46 env: github_token: ${{ secrets.GITHUB_TOKEN }} with: diff --git a/.github/workflows/update-langs.yaml b/.github/workflows/update-langs.yaml index 30b21fab16075..7a4f198bdc178 100644 --- a/.github/workflows/update-langs.yaml +++ b/.github/workflows/update-langs.yaml @@ -36,7 +36,7 @@ jobs: node-version: [18.x] steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Node uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cf6fa2a7c40ef..9693c4b62a11b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,7 +51,7 @@ GitHub Readme Stats supports custom theming, and you can also contribute new the > If you are contributing your theme just because you are using it personally, then you can [customize the looks](./readme.md#customization) of your card with URL params instead. > [!NOTE]\ -> Keep in mind that we already have a vast collection of different themes. To keep their number manageable, we began to add only themes supported by the community. Your pull request with theme addition will be merged once we get enough positive feedback from the community in the form of thumbs up (see [#1935](https://github.com/anuraghazra/github-readme-stats/issues/1935#top-themes-prs)). Remember that you can also support themes of other contributors that you liked to speed up their merge. +> Keep in mind that we already have a vast collection of different themes. To keep their number manageable, we began to add only themes supported by the community. Your pull request with theme addition will be merged once we get enough positive feedback from the community in the form of thumbs up :+1: emojis (see [#1935](https://github.com/anuraghazra/github-readme-stats/issues/1935#top-themes-prs)). We expect to see at least 10-15 thumbs up before making a decision to merge your pull request into the master branch. Remember that you can also support themes of other contributors that you liked to speed up their merge. > [!NOTE]\ > Before submitting pull request, please make sure that your theme pass WCAG 2.0 level AA contrast ration test. You can use [this tool](https://webaim.org/resources/contrastchecker/) to check it. diff --git a/docs/readme_cn.md b/docs/readme_cn.md index 8e9e7769c5fa4..386f90422ecf3 100644 --- a/docs/readme_cn.md +++ b/docs/readme_cn.md @@ -33,7 +33,7 @@

- 查看 Demo + 查看 Demo · 报告 Bug · diff --git a/docs/readme_de.md b/docs/readme_de.md index 6753d7f31678f..b1c43f0111f70 100644 --- a/docs/readme_de.md +++ b/docs/readme_de.md @@ -34,7 +34,7 @@

- Beispiele ansehen + Beispiele ansehen · Fehler melden · diff --git a/docs/readme_es.md b/docs/readme_es.md index 9c8b335566577..b49f5f72ef323 100644 --- a/docs/readme_es.md +++ b/docs/readme_es.md @@ -34,7 +34,7 @@

- Ver un ejemplo + Ver un ejemplo · Reportar un bug · diff --git a/docs/readme_fr.md b/docs/readme_fr.md index e0762303fcaa6..4d5866365cd40 100644 --- a/docs/readme_fr.md +++ b/docs/readme_fr.md @@ -33,7 +33,7 @@

- Voir la démo + Voir la démo · Soumettre un bug · diff --git a/package-lock.json b/package-lock.json index 47b0d50172168..2fff2e7751028 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,14 +17,14 @@ "word-wrap": "^1.2.5" }, "devDependencies": { - "@actions/core": "^1.10.0", + "@actions/core": "^1.10.1", "@actions/github": "^5.1.1", "@testing-library/dom": "^9.3.1", - "@testing-library/jest-dom": "^6.1.2", + "@testing-library/jest-dom": "^6.1.3", "@uppercod/css-to-object": "^1.1.1", - "axios-mock-adapter": "^1.21.5", + "axios-mock-adapter": "^1.22.0", "color-contrast-checker": "^2.1.0", - "eslint": "^8.48.0", + "eslint": "^8.49.0", "eslint-config-prettier": "^9.0.0", "hjson": "^3.2.2", "husky": "^8.0.3", @@ -34,7 +34,7 @@ "lint-staged": "^14.0.1", "lodash.snakecase": "^4.1.1", "parse-diff": "^0.11.1", - "prettier": "^3.0.2" + "prettier": "^3.0.3" }, "engines": { "node": ">=18.0.0" @@ -50,9 +50,9 @@ } }, "node_modules/@actions/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz", - "integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", + "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", "dev": true, "dependencies": { "@actions/http-client": "^2.0.1", @@ -745,18 +745,18 @@ } }, "node_modules/@eslint/js": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", - "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", + "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -1436,9 +1436,9 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.2.tgz", - "integrity": "sha512-NP9jl1Q2qDDtx+cqogowtQtmgD2OVs37iMSIsTv5eN5ETRkf26Kj6ugVwA93/gZzzFWQAsgkKkcftDe91BJCkQ==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.3.tgz", + "integrity": "sha512-YzpjRHoCBWPzpPNtg6gnhasqtE/5O4qz8WCwDEaxtfnPO6gkaLrnuXusrGSPyhIGPezr1HM7ZH0CFaUTY9PJEQ==", "dev": true, "dependencies": { "@adobe/css-tools": "^4.3.0", @@ -1810,9 +1810,9 @@ } }, "node_modules/axios-mock-adapter": { - "version": "1.21.5", - "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.21.5.tgz", - "integrity": "sha512-5NI1V/VK+8+JeTF8niqOowuysA4b8mGzdlMN/QnTnoXbYh4HZSNiopsDclN2g/m85+G++IrEtUdZaQ3GnaMsSA==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.22.0.tgz", + "integrity": "sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", @@ -2619,16 +2619,16 @@ } }, "node_modules/eslint": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", - "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", + "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.48.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", @@ -5952,9 +5952,9 @@ } }, "node_modules/prettier": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz", - "integrity": "sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -7028,9 +7028,9 @@ "dev": true }, "@actions/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz", - "integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", + "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", "dev": true, "requires": { "@actions/http-client": "^2.0.1", @@ -7551,15 +7551,15 @@ } }, "@eslint/js": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", - "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", + "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -8122,9 +8122,9 @@ } }, "@testing-library/jest-dom": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.2.tgz", - "integrity": "sha512-NP9jl1Q2qDDtx+cqogowtQtmgD2OVs37iMSIsTv5eN5ETRkf26Kj6ugVwA93/gZzzFWQAsgkKkcftDe91BJCkQ==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.3.tgz", + "integrity": "sha512-YzpjRHoCBWPzpPNtg6gnhasqtE/5O4qz8WCwDEaxtfnPO6gkaLrnuXusrGSPyhIGPezr1HM7ZH0CFaUTY9PJEQ==", "dev": true, "requires": { "@adobe/css-tools": "^4.3.0", @@ -8422,9 +8422,9 @@ } }, "axios-mock-adapter": { - "version": "1.21.5", - "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.21.5.tgz", - "integrity": "sha512-5NI1V/VK+8+JeTF8niqOowuysA4b8mGzdlMN/QnTnoXbYh4HZSNiopsDclN2g/m85+G++IrEtUdZaQ3GnaMsSA==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.22.0.tgz", + "integrity": "sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.3", @@ -9014,16 +9014,16 @@ } }, "eslint": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", - "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", + "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.48.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", @@ -11412,9 +11412,9 @@ "dev": true }, "prettier": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz", - "integrity": "sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true }, "pretty-format": { diff --git a/package.json b/package.json index e0558694ecbf9..cf54c78ce01ea 100644 --- a/package.json +++ b/package.json @@ -35,14 +35,14 @@ "author": "Anurag Hazra", "license": "MIT", "devDependencies": { - "@actions/core": "^1.10.0", + "@actions/core": "^1.10.1", "@actions/github": "^5.1.1", "@testing-library/dom": "^9.3.1", - "@testing-library/jest-dom": "^6.1.2", + "@testing-library/jest-dom": "^6.1.3", "@uppercod/css-to-object": "^1.1.1", - "axios-mock-adapter": "^1.21.5", + "axios-mock-adapter": "^1.22.0", "color-contrast-checker": "^2.1.0", - "eslint": "^8.48.0", + "eslint": "^8.49.0", "eslint-config-prettier": "^9.0.0", "hjson": "^3.2.2", "husky": "^8.0.3", @@ -52,7 +52,7 @@ "lint-staged": "^14.0.1", "lodash.snakecase": "^4.1.1", "parse-diff": "^0.11.1", - "prettier": "^3.0.2" + "prettier": "^3.0.3" }, "dependencies": { "axios": "^1.5.0", diff --git a/scripts/close-stale-theme-prs.js b/scripts/close-stale-theme-prs.js index f33834052452f..3b513f1732d15 100644 --- a/scripts/close-stale-theme-prs.js +++ b/scripts/close-stale-theme-prs.js @@ -156,13 +156,13 @@ const run = async () => { for (const prNumber of staleThemePRsNumbers) { debug(`Closing #${prNumber} because it is stale...`); if (!dryRun) { - await octokit.issues.createComment({ + await octokit.rest.issues.createComment({ owner, repo, issue_number: prNumber, body: CLOSING_COMMENT, }); - await octokit.pulls.update({ + await octokit.rest.pulls.update({ owner, repo, pull_number: prNumber, diff --git a/scripts/preview-theme.js b/scripts/preview-theme.js index 1e220864e2be9..6528fcf323974 100644 --- a/scripts/preview-theme.js +++ b/scripts/preview-theme.js @@ -30,7 +30,7 @@ const THEME_CONTRIB_GUIDELINES = ` \rHi, thanks for the theme contribution. Please read our theme [contribution guidelines](https://github.com/anuraghazra/github-readme-stats/blob/master/CONTRIBUTING.md#themes-contribution). \r> [!WARNING]\ - \r> Keep in mind that we already have a vast collection of different themes. To keep their number manageable, we began to add only themes supported by the community. Your pull request with theme addition will be merged once we get enough positive feedback from the community in the form of thumbs up (see [#1935](https://github.com/anuraghazra/github-readme-stats/issues/1935#top-themes-prs)). Remember that you can also support themes of other contributors that you liked to speed up their merge. + \r> Keep in mind that we already have a vast collection of different themes. To keep their number manageable, we began to add only themes supported by the community. Your pull request with theme addition will be merged once we get enough positive feedback from the community in the form of thumbs up :+1: emojis (see [#1935](https://github.com/anuraghazra/github-readme-stats/issues/1935#top-themes-prs)). We expect to see at least 10-15 thumbs up before making a decision to merge your pull request into the master branch. Remember that you can also support themes of other contributors that you liked to speed up their merge. \r> [!NOTE]\ \r> Also, note that if this theme is exclusively for your personal use, then instead of adding it to our theme collection, you can use card [customization options](https://github.com/anuraghazra/github-readme-stats#customization). diff --git a/src/cards/gist-card.js b/src/cards/gist-card.js index 37e11184e4ce3..9e889e74424cd 100644 --- a/src/cards/gist-card.js +++ b/src/cards/gist-card.js @@ -8,6 +8,8 @@ import { kFormatter, measureText, flexLayout, + iconWithLabel, + createLanguageNode, } from "../common/utils.js"; import Card from "../common/Card.js"; import { icons } from "../common/icons.js"; @@ -27,48 +29,6 @@ const ICON_SIZE = 16; const CARD_DEFAULT_WIDTH = 400; const HEADER_MAX_LENGTH = 35; -/** - * Creates a node to display the primary programming language of the gist. - * - * @param {string} langName Language name. - * @param {string} langColor Language color. - * @returns {string} Language display SVG object. - */ -const createLanguageNode = (langName, langColor) => { - return ` - - - ${langName} - - `; -}; - -/** - * Creates an icon with label to display gist stats like forks, stars, etc. - * - * @param {string} icon The icon to display. - * @param {number|string} label The label to display. - * @param {string} testid The testid to assign to the label. - * @returns {string} Icon with label SVG object. - */ -const iconWithLabel = (icon, label, testid) => { - if (typeof label === "number" && label <= 0) return ""; - const iconSvg = ` - - ${icon} - - `; - const text = `${label}`; - return flexLayout({ items: [iconSvg, text], gap: 20 }).join(""); -}; - /** * @typedef {import('./types').GistCardOptions} GistCardOptions Gist card options. * @typedef {import('../fetchers/types').GistData} GistData Gist data. @@ -122,8 +82,18 @@ const renderGistCard = (gistData, options = {}) => { const totalStars = kFormatter(starsCount); const totalForks = kFormatter(forksCount); - const svgStars = iconWithLabel(icons.star, totalStars, "starsCount"); - const svgForks = iconWithLabel(icons.fork, totalForks, "forksCount"); + const svgStars = iconWithLabel( + icons.star, + totalStars, + "starsCount", + ICON_SIZE, + ); + const svgForks = iconWithLabel( + icons.fork, + totalForks, + "forksCount", + ICON_SIZE, + ); const languageName = language || "Unspecified"; const languageColor = languageColors[languageName] || "#858585"; diff --git a/src/cards/repo-card.js b/src/cards/repo-card.js index 3706c96dbfb10..09b5841880a97 100644 --- a/src/cards/repo-card.js +++ b/src/cards/repo-card.js @@ -10,9 +10,13 @@ import { measureText, parseEmojis, wrapTextMultiline, + iconWithLabel, + createLanguageNode, } from "../common/utils.js"; import { repoCardLocales } from "../translations.js"; +const ICON_SIZE = 16; + /** * Retrieves the repository description and wraps it to fit the card width. * @@ -35,50 +39,6 @@ const getBadgeSVG = (label, textColor) => ` `; -/** - * Creates a node to display the primary programming language of the repository. - * - * @param {string} langName Language name. - * @param {string} langColor Language color. - * @returns {string} Language display SVG object. - */ -const createLanguageNode = (langName, langColor) => { - return ` - - - ${langName} - - `; -}; - -const ICON_SIZE = 16; - -/** - * Creates an icon with label to display repository stats like forks, stars, etc. - * - * @param {string} icon The icon to display. - * @param {number|string} label The label to display. - * @param {string} testid The testid to assign to the label. - * @returns {string} Icon with label SVG object. - */ -const iconWithLabel = (icon, label, testid) => { - if (typeof label === "number" && label <= 0) return ""; - const iconSvg = ` - - ${icon} - - `; - const text = `${label}`; - return flexLayout({ items: [iconSvg, text], gap: 20 }).join(""); -}; - /** * @typedef {import("../fetchers/types").RepositoryData} RepositoryData Repository data. * @typedef {import("./types").RepoCardOptions} RepoCardOptions Repo card options. @@ -151,8 +111,18 @@ const renderRepoCard = (repo, options = {}) => { const totalStars = kFormatter(starCount); const totalForks = kFormatter(forkCount); - const svgStars = iconWithLabel(icons.star, totalStars, "stargazers"); - const svgForks = iconWithLabel(icons.fork, totalForks, "forkcount"); + const svgStars = iconWithLabel( + icons.star, + totalStars, + "stargazers", + ICON_SIZE, + ); + const svgForks = iconWithLabel( + icons.fork, + totalForks, + "forkcount", + ICON_SIZE, + ); const starAndForkCount = flexLayout({ items: [svgLanguage, svgStars, svgForks], diff --git a/src/cards/wakatime-card.js b/src/cards/wakatime-card.js index 6aedc5c9a02d4..e3f5433c4cb72 100644 --- a/src/cards/wakatime-card.js +++ b/src/cards/wakatime-card.js @@ -96,7 +96,7 @@ const createLanguageTextNode = ({ langs, y }) => { * @param {string} args.value The value of the text node item. * @param {number} args.index The index of the text node item. * @param {string} args.percent Percentage of the text node item. - * @param {boolean} args.hideProgress Whether to hide the progress bar. + * @param {boolean=} args.hideProgress Whether to hide the progress bar. * @param {string} args.progressBarColor The color of the progress bar. * @param {string} args.progressBarBackgroundColor The color of the progress bar background. * @returns {string} The text SVG node. diff --git a/src/common/utils.js b/src/common/utils.js index 4b5dced487453..5edadbdff1130 100644 --- a/src/common/utils.js +++ b/src/common/utils.js @@ -34,6 +34,49 @@ const renderError = (message, secondaryMessage = "") => { `; }; +/** + * Creates a node to display the primary programming language of the repository/gist. + * + * @param {string} langName Language name. + * @param {string} langColor Language color. + * @returns {string} Language display SVG object. + */ +const createLanguageNode = (langName, langColor) => { + return ` + + + ${langName} + + `; +}; + +/** + * Creates an icon with label to display repository/gist stats like forks, stars, etc. + * + * @param {string} icon The icon to display. + * @param {number|string} label The label to display. + * @param {string} testid The testid to assign to the label. + * @param {number} iconSize The size of the icon. + * @returns {string} Icon with label SVG object. + */ +const iconWithLabel = (icon, label, testid, iconSize) => { + if (typeof label === "number" && label <= 0) return ""; + const iconSvg = ` + + ${icon} + + `; + const text = `${label}`; + return flexLayout({ items: [iconSvg, text], gap: 20 }).join(""); +}; + /** * Encode string as HTML. * @@ -198,12 +241,12 @@ const flexLayout = ({ items, gap, direction, sizes = [] }) => { /** * Object containing card colors. * @typedef {{ - * titleColor: string | string[]; - * iconColor: string | string[]; - * textColor: string | string[]; + * titleColor: string; + * iconColor: string; + * textColor: string; * bgColor: string | string[]; - * borderColor: string | string[]; - * ringColor: string | string[]; + * borderColor: string; + * ringColor: string; * }} CardColors */ @@ -267,6 +310,18 @@ const getCardColors = ({ "#" + defaultBorderColor, ); + if ( + typeof titleColor !== "string" || + typeof textColor !== "string" || + typeof ringColor !== "string" || + typeof iconColor !== "string" || + typeof borderColor !== "string" + ) { + throw new Error( + "Unexpected behavior, all colors except background should be string.", + ); + } + return { titleColor, iconColor, textColor, bgColor, borderColor, ringColor }; }; @@ -469,6 +524,8 @@ const dateDiff = (d1, d2) => { export { ERROR_CARD_LENGTH, renderError, + createLanguageNode, + iconWithLabel, encodeHTML, kFormatter, isValidHexColor, diff --git a/tests/card.test.js b/tests/card.test.js index b01816132f02b..049b9e2635128 100644 --- a/tests/card.test.js +++ b/tests/card.test.js @@ -41,6 +41,16 @@ describe("Card", () => { ); }); + it("should set custom title", () => { + const card = new Card({}); + card.setTitle("custom title"); + + document.body.innerHTML = card.render(``); + expect(queryByTestId(document.body, "card-title")).toHaveTextContent( + "custom title", + ); + }); + it("should hide title", () => { const card = new Card({}); card.setHideTitle(true);