├── .deepsource.toml ├── .editorconfig ├── .github ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── ci.yml │ └── cron.yml ├── .gitignore ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── .python-version ├── .vscode └── settings.json ├── LICENSE ├── Makefile ├── README.md ├── assets ├── .gitkeep └── gfi-logo-white.svg ├── bun.lockb ├── components ├── Banner.vue ├── Navbar.vue ├── RepoBox.vue ├── Sidebar.vue └── SubscriptionForm.vue ├── composables └── states.js ├── data ├── generated.sample.json ├── labels.json ├── repositories.toml └── tags.sample.json ├── gfi ├── __init__.py ├── populate.py └── test_data.py ├── layouts └── default.vue ├── mypy.ini ├── nuxt.config.ts ├── package.json ├── pages ├── index.vue └── language │ └── [slug].vue ├── poetry.lock ├── public ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── gfi-logo-white.svg ├── icon.png ├── images │ ├── icon.png │ ├── mailchimp.jpg │ └── meta.jpg ├── readme-logo.svg ├── site.webmanifest └── social │ ├── github.svg │ ├── heart.svg │ └── twitter.svg ├── pyproject.toml ├── sync.js ├── tailwind.config.js ├── tsconfig.json └── vercel.json /.deepsource.toml: -------------------------------------------------------------------------------- 1 | version = 1 2 | 3 | test_patterns = [ 4 | 'gfi/test_*.py', 5 | ] 6 | 7 | [[analyzers]] 8 | name = 'python' 9 | enabled = true 10 | 11 | [analyzers.meta] 12 | max_line_length = 120 13 | 14 | [[analyzers]] 15 | name = "javascript" 16 | enabled = true 17 | 18 | [analyzers.meta] 19 | environment = [ 20 | "nodejs", 21 | "jest", 22 | "browser" 23 | ] 24 | plugins = ["vue"] 25 | 26 | [[transformers]] 27 | name = 'black' 28 | enabled = true 29 | 30 | [[transformers]] 31 | name = 'prettier' 32 | enabled = true 33 | 34 | [[analyzers]] 35 | name = "secrets" 36 | enabled = true 37 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | # The JSON files contain newlines inconsistently 12 | [*.json] 13 | insert_final_newline = ignore 14 | 15 | # Minified JavaScript files shouldn't be changed 16 | [**.min.js] 17 | indent_style = ignore 18 | insert_final_newline = ignore 19 | 20 | [Makefile] 21 | indent_style = tab 22 | 23 | [*.py] 24 | indent_style = space 25 | indent_size = 4 26 | 27 | [*.md] 28 | trim_trailing_whitespace = false 29 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | #### ℹ️ Repository information 2 | 3 | **The repository has**: 4 | 5 | - [ ] At least three issues with the `good first issue` label. 6 | - [ ] At least 10 contributors. 7 | - [ ] Detailed setup instructions for the project. 8 | - [ ] CONTRIBUTING.md 9 | - [ ] Actively maintained. 10 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push] 4 | 5 | jobs: 6 | test: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: Checkout repo 10 | uses: actions/checkout@v4 11 | 12 | - name: Set up Python 3.12 13 | uses: actions/setup-python@v5 14 | with: 15 | python-version: '3.12' 16 | 17 | - name: Install dependencies 18 | run: make pre-build 19 | 20 | - name: Run tests for data sanity 21 | run: make test 22 | -------------------------------------------------------------------------------- /.github/workflows/cron.yml: -------------------------------------------------------------------------------- 1 | name: Cron 2 | 3 | on: 4 | schedule: 5 | - cron: '0 8 * * *' 6 | workflow_dispatch: 7 | 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout repo 13 | uses: actions/checkout@v4 14 | 15 | - name: Set up Python 3.12 16 | uses: actions/setup-python@v5 17 | with: 18 | python-version: '3.12' 19 | 20 | - name: Set up bun 21 | uses: oven-sh/setup-bun@v1 22 | 23 | - name: Install dependencies 24 | run: | 25 | make pre-build 26 | bun install 27 | 28 | - name: Populate the latest data 29 | run: make generate 30 | env: 31 | GH_ACCESS_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} 32 | 33 | - name: Sync data to the blob store 34 | run: bun sync up 35 | env: 36 | BLOB_READ_WRITE_TOKEN: ${{ secrets.BLOB_READ_WRITE_TOKEN }} 37 | 38 | - name: Trigger deployment 39 | uses: joelwmale/webhook-action@master 40 | with: 41 | url: ${{ secrets.DEPLOY_HOOK_URL }} 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Nuxt dev/build outputs 2 | .output 3 | .data 4 | .nuxt 5 | .nitro 6 | .cache 7 | dist 8 | 9 | # Node dependencies 10 | node_modules 11 | 12 | # Logs 13 | logs 14 | *.log 15 | 16 | # Misc 17 | .DS_Store 18 | .fleet 19 | .idea 20 | 21 | # Local env files 22 | .env 23 | .env.* 24 | !.env.example 25 | 26 | __pycache__ 27 | 28 | # Generated data files 29 | data/generated.json 30 | data/tags.json 31 | content/language/*.md 32 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | node 20.10.0 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .nuxt 2 | pnpm-lock.yaml 3 | dist 4 | .output 5 | *.json 6 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "tabWidth": 2, 4 | "singleQuote": true, 5 | "trailingComma": "none", 6 | "bracketSpacing": true, 7 | "semi": false 8 | } 9 | -------------------------------------------------------------------------------- /.python-version: -------------------------------------------------------------------------------- 1 | 3.12 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.formatting.provider": "black" 3 | } 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 DeepSource Corp. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | 9 | 10 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .ONESHELL: 2 | pre-build: 3 | pip install --upgrade poetry 4 | poetry install --no-root 5 | 6 | build: 7 | bun install 8 | bun generate 9 | 10 | generate: 11 | poetry run python gfi/populate.py 12 | 13 | generate-prod: 14 | bun install 15 | bun sync down 16 | bun generate 17 | 18 | test: 19 | poetry run python gfi/test_data.py 20 | poetry run mypy gfi/*.py 21 | 22 | format: 23 | poetry run ruff format . 24 | bunx prettier --write . 25 | 26 | .DEFAULT_GOAL := build 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | 4 | 5 |

6 |
7 | 8 | Welcome! 👋🏼 9 | 10 | **Good First Issue** is an initiative to curate easy pickings from popular projects, so developers who've never contributed to open-source can get started quickly. 11 | 12 | Open-source maintainers are always looking to get more people involved, but new developers generally think it's challenging to become a contributor. We believe getting developers to fix super-easy issues removes the barrier for future contributions. This is why Good First Issue exists. 13 | 14 | ## Adding a new project 15 | 16 | You're welcome to add a new project in Good First Issue, and we encourage all projects — old and new, big and small. 17 | 18 | Follow these simple steps: 19 | 20 | - Our goal is to narrow down projects for new open-source contributors. To maintain the quality of projects in Good First Issue, please make sure your GitHub repository meets the following criteria: 21 | 22 | - It has at least three issues with the `good first issue` label. This label is already present on all repositories by default. If not, you can follow the steps [here](https://help.github.com/en/github/managing-your-work-on-github/applying-labels-to-issues-and-pull-requests). 23 | 24 | - It has at least 10 contributors. 25 | 26 | - It contains a README.md with detailed setup instructions for the project, and a CONTRIBUTING.md with guidelines for new contributors. 27 | 28 | - It is actively maintained. 29 | 30 | - Add your repository's path (in lexicographic order) in [data/repositories.toml](data/repositories.toml). 31 | 32 | - Create a new pull-request. Please add the link to the issues page of the repository in the PR description. Once the pull request is merged, the changes will be live on [goodfirstissue.dev](https://goodfirstissue.dev/). 33 | 34 | ## Setting up the project locally 35 | 36 | Good First Issue has two components — the front-end app built with Nuxt.js and a data population script written in Python. 37 | 38 | To contribute new features and changes to the website, you would want to run the app locally. Please follow these steps: 39 | 40 | 1. Clone the project locally. Make sure you have Python 3 and a recent version of Node.js installed on your computer. 41 | 42 | 2. Make a copy of the sample data files for your local app to use and rename them to the filename that the app expects. **This step is important, as the front-end app won't work without these data files.** 43 | 44 | ```bash 45 | $ cp data/generated.sample.json data/generated.json 46 | $ cp data/tags.sample.json data/tags.json 47 | ``` 48 | 49 | 3. Build the front-end app and start the development server. 50 | 51 | ```bash 52 | $ bun install # install the dependencies 53 | $ bun dev # start the development server 54 | ``` 55 | 56 | The app should open in your browser. 57 | -------------------------------------------------------------------------------- /assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chriskthomas/good-first-issue/38424a9d9c68f19a567d2fddad0a1e850995c3c5/assets/.gitkeep -------------------------------------------------------------------------------- /assets/gfi-logo-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chriskthomas/good-first-issue/38424a9d9c68f19a567d2fddad0a1e850995c3c5/bun.lockb -------------------------------------------------------------------------------- /components/Banner.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 26 | -------------------------------------------------------------------------------- /components/Navbar.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 24 | -------------------------------------------------------------------------------- /components/RepoBox.vue: -------------------------------------------------------------------------------- 1 | 71 | 72 | 117 | -------------------------------------------------------------------------------- /components/Sidebar.vue: -------------------------------------------------------------------------------- 1 | 62 | 63 | 68 | 80 | -------------------------------------------------------------------------------- /components/SubscriptionForm.vue: -------------------------------------------------------------------------------- 1 | 22 | -------------------------------------------------------------------------------- /composables/states.js: -------------------------------------------------------------------------------- 1 | export const useOpenRepoId = () => useState('openRepoId', () => null) 2 | -------------------------------------------------------------------------------- /data/labels.json: -------------------------------------------------------------------------------- 1 | { 2 | "labels": ["good first issue", "good-first-issue"] 3 | } 4 | -------------------------------------------------------------------------------- /data/repositories.toml: -------------------------------------------------------------------------------- 1 | repositories = [ 2 | 'github.com/deepsourcelabs/good-first-issue', 3 | 'github.com/4paradigm/OpenMLDB', 4 | 'github.com/abpframework/abp', 5 | 'github.com/AcademySoftwareFoundation/openvdb', 6 | 'github.com/activecm/rita', 7 | 'github.com/AdityaMulgundkar/flutter_opencv', 8 | 'github.com/agershun/alasql', 9 | 'github.com/akiran/react-slick', 10 | 'github.com/akxcv/vuera', 11 | 'github.com/alexellis/arkade', 12 | 'github.com/alexfertel/rust-algorithms', 13 | 'github.com/alfasoftware/astra', 14 | 'github.com/alibaba/nacos', 15 | 'github.com/alibaba/Sentinel', 16 | 'github.com/allure-framework/allure2', 17 | 'github.com/ampproject/amphtml', 18 | 'github.com/AMU-Code-Squad/food-up', 19 | 'github.com/angular-ui/ui-grid', 20 | 'github.com/angular/components', 21 | 'github.com/ankidroid/Anki-Android', 22 | 'github.com/ansible/awx', 23 | 'github.com/AntennaPod/AntennaPod', 24 | 'github.com/apache/age', 25 | 'github.com/apache/apisix', 26 | 'github.com/apache/dubbo', 27 | 'github.com/apache/incubator-doris', 28 | 'github.com/apache/incubator-mxnet', 29 | 'github.com/apache/incubator-superset', 30 | 'github.com/apache/openwhisk', 31 | 'github.com/apache/shardingsphere', 32 | 'github.com/apache/skywalking', 33 | 'github.com/apache/trafficserver', 34 | 'github.com/apifytech/apify-js', 35 | 'github.com/apoclyps/reviews', 36 | 'github.com/apollographql/apollo-kotlin', 37 | 'github.com/apostrophecms/apostrophe', 38 | 'github.com/appbaseio/reactivesearch', 39 | 'github.com/appium/appium-desktop', 40 | 'github.com/appleseedhq/appleseed', 41 | 'github.com/appsmithorg/appsmith', 42 | 'github.com/appwrite/appwrite', 43 | 'github.com/arduino/arduino-cli', 44 | 'github.com/ArduPilot/ardupilot', 45 | 'github.com/argoproj/argo-cd', 46 | 'github.com/argoproj/argo', 47 | 'github.com/arguflow/arguflow', 48 | 'github.com/ARMmbed/mbedtls', 49 | 'github.com/Arsenic-ATG/Qt-calculator', 50 | 'github.com/artalar/reatom', 51 | 'github.com/arxiv-vanity/engrafo', 52 | 'github.com/AssemblyScript/assemblyscript', 53 | 'github.com/assertj/assertj-core', 54 | 'github.com/astropy/astropy', 55 | 'github.com/atlassian/react-beautiful-dnd', 56 | 'github.com/AtomicGameEngine/AtomicGameEngine', 57 | 'github.com/auroraeditor/auroraeditor', 58 | 'github.com/AutoFixture/AutoFixture', 59 | 'github.com/Automattic/wp-calypso', 60 | 'github.com/automl/auto-sklearn', 61 | 'github.com/Avaiga/taipy', 62 | 'github.com/aws-amplify/amplify-cli', 63 | 'github.com/aws-amplify/amplify-js', 64 | 'github.com/aws/amazon-vpc-cni-k8s', 65 | 'github.com/aws/aws-cdk', 66 | 'github.com/awslabs/s2n', 67 | 'github.com/awslabs/serverless-application-model', 68 | 'github.com/axel-download-accelerator/axel', 69 | 'github.com/Azure/mmlspark', 70 | 'github.com/babel/babel', 71 | 'github.com/badges/shields', 72 | 'github.com/ballercat/walt', 73 | 'github.com/ballerina-platform/ballerina-lang', 74 | 'github.com/bancodobrasil/stop-analyzing-api', 75 | 'github.com/bancodobrasil/stop-analyzing-embed', 76 | 'github.com/bastion-rs/bastion', 77 | 'github.com/bazelbuild/bazel', 78 | 'github.com/bbatsov/projectile', 79 | 'github.com/bcherny/json-schema-to-typescript', 80 | 'github.com/beautify-web/js-beautify', 81 | 'github.com/billimarie/prosecutor-database', 82 | 'github.com/biopython/biopython', 83 | 'github.com/bisq-network/bisq', 84 | 'github.com/bitcoin/bitcoin', 85 | 'github.com/bitwarden/clients', 86 | 'github.com/bitwarden/mobile', 87 | 'github.com/BlitzKraft/saythanks.io', 88 | 'github.com/blockstack/blockstack-browser', 89 | 'github.com/bmarvinb/react-trello-clone', 90 | 'github.com/boa-dev/boa', 91 | 'github.com/bokeh/bokeh', 92 | 'github.com/borgbackup/borg', 93 | 'github.com/bpmn-io/bpmn-js', 94 | 'github.com/brave/brave-browser', 95 | 'github.com/brianegan/flutter_architecture_samples', 96 | 'github.com/brigadecore/brigade', 97 | 'github.com/Brightify/Cuckoo', 98 | 'github.com/brndnmtthws/conky', 99 | 'github.com/btcpayserver/btcpayserver', 100 | 'github.com/buildbot/buildbot', 101 | 'github.com/buildpacks/pack', 102 | 'github.com/buzzfeed/sso', 103 | 'github.com/c410-f3r/oapth', 104 | 'github.com/CachetHQ/Cachet', 105 | 'github.com/cake-build/cake', 106 | 'github.com/cake-build/website', 107 | 'github.com/canonical/multipass', 108 | 'github.com/casey/just', 109 | 'github.com/catboost/catboost', 110 | 'github.com/ccrama/Slide', 111 | 'github.com/centerofci/mathesar', 112 | 'github.com/certbot/certbot', 113 | 'github.com/CesiumGS/cesium', 114 | 'github.com/chaos-mesh/chaos-mesh', 115 | 'github.com/chapel-lang/chapel', 116 | 'github.com/chatwoot/chatwoot', 117 | 'github.com/Chocobozzz/PeerTube', 118 | 'github.com/ckb-next/ckb-next', 119 | 'github.com/ckeditor/ckeditor4', 120 | 'github.com/clab/dynet', 121 | 'github.com/CleverRaven/Cataclysm-DDA', 122 | 'github.com/clojure-emacs/cider', 123 | 'github.com/cloudflare/wrangler', 124 | 'github.com/cobrateam/splinter', 125 | 'github.com/cockroachdb/cockroach', 126 | 'github.com/codenameone/CodenameOne', 127 | 'github.com/coder/coder', 128 | 'github.com/coder/code-server', 129 | 'github.com/coder/envbuilder', 130 | 'github.com/coder/modules', 131 | 'github.com/coder/terraform-provider-coder', 132 | 'github.com/collectd/collectd', 133 | 'github.com/commandlineparser/commandline', 134 | 'github.com/compas-dev/compas_fab', 135 | 'github.com/composer/composer', 136 | 'github.com/conan-io/conan', 137 | 'github.com/concourse/concourse', 138 | 'github.com/containers/libpod', 139 | 'github.com/containers/skopeo', 140 | 'github.com/continuedev/continue', 141 | 'github.com/conversejs/converse.js', 142 | 'github.com/coq/coq', 143 | 'github.com/corda/corda', 144 | 'github.com/cornellius-gp/gpytorch', 145 | 'github.com/CorsixTH/CorsixTH', 146 | 'github.com/cortexlabs/cortex', 147 | 'github.com/cosmos/cosmos-sdk', 148 | 'github.com/crate/crate', 149 | 'github.com/creativecommons/project_creativecommons.org', 150 | 'github.com/creativecommons/vocabulary', 151 | 'github.com/creativecommons/wp-plugin-creativecommons', 152 | 'github.com/crossbario/autobahn-python', 153 | 'github.com/crossoverJie/cim', 154 | 'github.com/crossplaneio/crossplane', 155 | 'github.com/cupy/cupy', 156 | 'github.com/cython/cython', 157 | 'github.com/cztomczak/cefpython', 158 | 'github.com/dabl/dabl', 159 | 'github.com/dabreegster/abstreet', 160 | 'github.com/dagster-io/dagster', 161 | 'github.com/dapr/dapr', 162 | 'github.com/darrenburns/ward', 163 | 'github.com/dask/dask-ml', 164 | 'github.com/dask/dask', 165 | 'github.com/datafuselabs/datafuse', 166 | 'github.com/db-migrate/node-db-migrate', 167 | 'github.com/dbeaver/dbeaver', 168 | 'github.com/dbidwell94/vanilact', 169 | 'github.com/denoland/deno', 170 | 'github.com/denysdovhan/spaceship-prompt', 171 | 'github.com/DesignSystemsOSS/eccentrictouch', 172 | 'github.com/developit/microbundle', 173 | 'github.com/diasurgical/devilutionX', 174 | 'github.com/diesel-rs/diesel', 175 | 'github.com/DiFronzo/blockchair', 176 | 'github.com/dis-moi/extension', 177 | 'github.com/django-import-export/django-import-export', 178 | 'github.com/djc/quinn', 179 | 'github.com/dmlc/gluon-nlp', 180 | 'github.com/dmlc/xgboost', 181 | 'github.com/doccano/doccano', 182 | 'github.com/docker-slim/docker-slim', 183 | 'github.com/Dolibarr/dolibarr', 184 | 'github.com/dotenv-linter/dotenv-linter', 185 | 'github.com/dotfiles/dotfiles.github.com', 186 | 'github.com/dotnet/aspnetcore', 187 | 'github.com/dotnet/BenchmarkDotNet', 188 | 'github.com/dotnet/command-line-api', 189 | 'github.com/dotnet/efcore', 190 | 'github.com/dotnet/extensions', 191 | 'github.com/dotnet/machinelearning', 192 | 'github.com/dotnet/spark', 193 | 'github.com/dotnetcore/FreeSql', 194 | 'github.com/Dreamacro/clash', 195 | 'github.com/duo-labs/cloudmapper', 196 | 'github.com/dylan-power/dinosaur-exploder', 197 | 'github.com/DynamoRIO/drmemory', 198 | 'github.com/DynamoRIO/dynamorio', 199 | 'github.com/ealush/vest', 200 | 'github.com/EasyEngine/easyengine', 201 | 'github.com/eclipse/che', 202 | 'github.com/eclipse/eclipse-collections', 203 | 'github.com/eclipse/omr', 204 | 'github.com/eclipse/openj9', 205 | 'github.com/eclipsesource/J2V8', 206 | 'github.com/EFForg/https-everywhere', 207 | 'github.com/einsteinpy/einsteinpy', 208 | 'github.com/elastic/beats', 209 | 'github.com/elastic/elasticsearch', 210 | 'github.com/elastic/eui', 211 | 'github.com/elastic/kibana', 212 | 'github.com/elastic/rally', 213 | 'github.com/electron/electron', 214 | 'github.com/electron/electronjs.org', 215 | 'github.com/ElementsProject/lightning', 216 | 'github.com/emanuele-em/proxelar', 217 | 'github.com/ember-cli/ember-cli', 218 | 'github.com/empathyco/x', 219 | 'github.com/empathyco/x-archetype', 220 | 'github.com/encode/httpx', 221 | 'github.com/epicmaxco/vuestic-admin', 222 | 'github.com/eslint/eslint', 223 | 'github.com/ethereum/go-ethereum', 224 | 'github.com/ethereum/solidity', 225 | 'github.com/ethereum/web3.py', 226 | 'github.com/ethyca/fides', 227 | 'github.com/ethyca/fidesops', 228 | 'github.com/evhub/coconut', 229 | 'github.com/external-secrets/external-secrets', 230 | 'github.com/facebook/docusaurus', 231 | 'github.com/facebook/draft-js', 232 | 'github.com/facebook/flipper', 233 | 'github.com/facebook/flow', 234 | 'github.com/facebook/fresco', 235 | 'github.com/facebook/jest', 236 | 'github.com/facebook/react-native-website', 237 | 'github.com/facebook/react-native', 238 | 'github.com/facebookincubator/Bowler', 239 | 'github.com/facebookresearch/pythia', 240 | 'github.com/Factom-Asset-Tokens/fatd', 241 | 'github.com/fairfield-programming/backend-server', 242 | 'github.com/falconry/falcon', 243 | 'github.com/fastify/fastify', 244 | 'github.com/FeatureLabs/featuretools', 245 | 'github.com/find-sec-bugs/find-sec-bugs', 246 | 'github.com/fish-shell/fish-shell', 247 | 'github.com/fishtown-analytics/dbt', 248 | 'github.com/flarum/core', 249 | 'github.com/flipt-io/flipt', 250 | 'github.com/fluffyP4nd4/NoteIt', 251 | 'github.com/fortio/fortio', 252 | 'github.com/fossasia/open-event-server', 253 | 'github.com/Foundry376/Mailspring', 254 | 'github.com/freedomofpress/securedrop', 255 | 'github.com/FreshRSS/FreshRSS', 256 | 'github.com/FStarLang/FStar', 257 | 'github.com/GameFoundry/bsf', 258 | 'github.com/gatsbyjs/gatsby', 259 | 'github.com/gchq/CyberChef', 260 | 'github.com/gcushen/hugo-academic', 261 | 'github.com/geopandas/geopandas', 262 | 'github.com/getgauge/taiko', 263 | 'github.com/getzola/zola', 264 | 'github.com/git-cola/git-cola', 265 | 'github.com/git-tfs/git-tfs', 266 | 'github.com/gitcoinco/web', 267 | 'github.com/gitcommitshow/auth-jwt', 268 | 'github.com/Giuliano1993/make-js-component', 269 | 'github.com/gizak/termui', 270 | 'github.com/Glavin001/atom-beautify', 271 | 'github.com/globaleaks/GlobaLeaks', 272 | 'github.com/glpi-project/glpi', 273 | 'github.com/gnuradio/gnuradio', 274 | 'github.com/go-gitea/gitea', 275 | 'github.com/go-swagger/go-swagger', 276 | 'github.com/goatshriek/stumpless', 277 | 'github.com/goharbor/harbor', 278 | 'github.com/gomods/athens', 279 | 'github.com/google/data-transfer-project', 280 | 'github.com/google/gvisor', 281 | 'github.com/google/jax', 282 | 'github.com/google/TensorNetwork', 283 | 'github.com/google/timesketch', 284 | 'github.com/GoogleChrome/lighthouse', 285 | 'github.com/GoogleChrome/rendertron', 286 | 'github.com/GoogleChrome/workbox', 287 | 'github.com/GoogleChromeLabs/ProjectVisBug', 288 | 'github.com/GoogleChromeLabs/squoosh', 289 | 'github.com/GoogleContainerTools/jib', 290 | 'github.com/GoogleContainerTools/kaniko', 291 | 'github.com/GoogleContainerTools/skaffold', 292 | 'github.com/googleforgames/agones', 293 | 'github.com/gophish/gophish', 294 | 'github.com/goreleaser/goreleaser', 295 | 'github.com/gpbl/react-day-picker', 296 | 'github.com/grafana/loki', 297 | 'github.com/grammyjs/grammY', 298 | 'github.com/grandnode/grandnode', 299 | 'github.com/graph-gophers/graphql-go', 300 | 'github.com/graphhopper/graphhopper', 301 | 'github.com/Graylog2/graylog2-server', 302 | 'github.com/grpc-ecosystem/grpc-gateway', 303 | 'github.com/gruntwork-io/terragrunt', 304 | 'github.com/Guake/guake', 305 | 'github.com/hackmdio/codimd', 306 | 'github.com/hamaluik/timecop', 307 | 'github.com/haproxy/haproxy', 308 | 'github.com/hardkoded/puppeteer-sharp', 309 | 'github.com/Harvey-OS/harvey', 310 | 'github.com/hashicorp/packer', 311 | 'github.com/hasura/gitkube', 312 | 'github.com/hasura/graphql-engine', 313 | 'github.com/hazelcast/hazelcast', 314 | 'github.com/helm/helm', 315 | 'github.com/Heptagram-Bot/Heptagram', 316 | 'github.com/Hermit-Tools/Thumbnail-Maker', 317 | 'github.com/hewiefreeman/GopherGameServer', 318 | 'github.com/hoppscotch/hoppscotch', 319 | 'github.com/http4s/http4s', 320 | 'github.com/hubtype/botonic', 321 | 'github.com/hudson-and-thames/mlfinlab', 322 | 'github.com/Hypfer/Valetudo', 323 | 'github.com/ibis-project/ibis', 324 | 'github.com/Icinga/icinga2', 325 | 'github.com/Idrinth/api-bench', 326 | 'github.com/imsnif/bandwhich', 327 | 'github.com/indeedeng/starfish', 328 | 'github.com/infection/infection', 329 | 'github.com/Infisical/infisical', 330 | 'github.com/intel/cve-bin-tool', 331 | 'github.com/intel/dffml', 332 | 'github.com/internetarchive/openlibrary', 333 | 'github.com/iodide-project/iodide', 334 | 'github.com/ionic-team/capacitor', 335 | 'github.com/iovisor/bpftrace', 336 | 'github.com/ipython/ipython', 337 | 'github.com/isomorphic-git/isomorphic-git', 338 | 'github.com/iterative/dvc', 339 | 'github.com/iusehooks/usetheform', 340 | 'github.com/JabRef/jabref', 341 | 'github.com/jaegertracing/jaeger', 342 | 'github.com/janko/vim-test', 343 | 'github.com/jbush001/NyuziProcessor', 344 | 'github.com/JdeRobot/RoboticsAcademy', 345 | 'github.com/jendrikseipp/vulture', 346 | 'github.com/jenkins-x/jx', 347 | 'github.com/JetBrains/Exposed', 348 | 'github.com/jetstack/cert-manager', 349 | 'github.com/jgm/pandoc', 350 | 'github.com/JiahuiYu/generative_inpainting', 351 | 'github.com/jina-ai/jina', 352 | 'github.com/joomla/joomla-cms', 353 | 'github.com/jopohl/urh', 354 | 'github.com/jshint/jshint', 355 | 'github.com/julialang/julia', 356 | 'github.com/JuliaOpt/JuMP.jl', 357 | 'github.com/jupyter-widgets/ipywidgets', 358 | 'github.com/jupyter/notebook', 359 | 'github.com/jupyterhub/binderhub', 360 | 'github.com/jupyterlab/jupyterlab', 361 | 'github.com/justadudewhohacks/opencv4nodejs', 362 | 'github.com/juspay/hyperswitch', 363 | 'github.com/kariustobias/acme-rs', 364 | 'github.com/KaTeX/KaTeX', 365 | 'github.com/kedro-org/kedro', 366 | 'github.com/kelektiv/node-cron', 367 | 'github.com/keptn/keptn', 368 | 'github.com/keephq/keep', 369 | 'github.com/keras-team/keras', 370 | 'github.com/kevinfjiang/FuncNotify', 371 | 'github.com/kevinanielsen/go-fast-cdn', 372 | 'github.com/keystonejs/keystone', 373 | 'github.com/kiali/kiali', 374 | 'github.com/knative/serving', 375 | 'github.com/knex/knex', 376 | 'github.com/kodadot/nft-gallery', 377 | 'github.com/komeiji-satori/Dress', 378 | 'github.com/Kong/insomnia', 379 | 'github.com/Kong/kong', 380 | 'github.com/krassowski/jupyterlab-lsp', 381 | 'github.com/krishdevdb/reseter.css', 382 | 'github.com/ktorio/ktor', 383 | 'github.com/kubeapps/kubeapps', 384 | 'github.com/kubearmor/kubearmor', 385 | 'github.com/KubeOperator/KubeOperator', 386 | 'github.com/kubernetes-sigs/krew', 387 | 'github.com/kubernetes/dashboard', 388 | 'github.com/kubernetes/kubernetes', 389 | 'github.com/kubernetes/minikube', 390 | 'github.com/kubernetes/test-infra', 391 | 'github.com/kubernetes/website', 392 | 'github.com/kumahq/kuma', 393 | 'github.com/lagom/lagom', 394 | 'github.com/lando/lando', 395 | 'github.com/LangTrans/LangTrans', 396 | 'github.com/LappleApple/feedmereadmes', 397 | 'github.com/lark-parser/lark', 398 | 'github.com/launchbadge/sqlx', 399 | 'github.com/laurent22/joplin', 400 | 'github.com/layer5io/layer5', 401 | 'github.com/leandrowd/react-responsive-carousel', 402 | 'github.com/learn-awesome/learn', 403 | 'github.com/lerna/lerna', 404 | 'github.com/less/less.js', 405 | 'github.com/lhsazevedo/vuetify-material-auth', 406 | 'github.com/lifting-bits/mcsema', 407 | 'github.com/lightdash/lightdash', 408 | 'github.com/lightningnetwork/lnd', 409 | 'github.com/LightTable/LightTable', 410 | 'github.com/line/armeria', 411 | 'github.com/linkedin/cruise-control', 412 | 'github.com/linkerd/linkerd2', 413 | 'github.com/linq2db/linq2db', 414 | 'github.com/LMMS/lmms', 415 | 'github.com/loadimpact/k6', 416 | 'github.com/lobsters/lobsters', 417 | 'github.com/ludwig-ai/ludwig', 418 | 'github.com/ludwig-ai/ludwig-docs', 419 | 'github.com/lukasoppermann/html5sortable', 420 | 'github.com/lusaxweb/vuesax', 421 | 'github.com/maartenbreddels/ipyvolume', 422 | 'github.com/maddypie/PyCalc', 423 | 'github.com/MadhuNimmo/QuinesInAllLangs', 424 | 'github.com/magento/magento2', 425 | 'github.com/Magicianred/learn-by-doing', 426 | 'github.com/mailchain/mailchain', 427 | 'github.com/MakeContributions/ideahub', 428 | 'github.com/MakeContributions/markdown-dungeon', 429 | 'github.com/mamamia5x/markdownpedia', 430 | 'github.com/mapbox/mapbox-gl-js', 431 | 'github.com/mapbox/mapbox-gl-native', 432 | 'github.com/margaritahumanitarian/helpafamily', 433 | 'github.com/marmelab/react-admin', 434 | 'github.com/mars-project/mars', 435 | 'github.com/masoniteframework/masonite', 436 | 'github.com/masoniteframework/orm', 437 | 'github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit', 438 | 'github.com/mateuszz0000/imgprocalgs', 439 | 'github.com/matplotlib/matplotlib', 440 | 'github.com/mattermost/mattermost-server', 441 | 'github.com/mattgodbolt/compiler-explorer', 442 | 'github.com/mavoweb/mavo', 443 | 'github.com/mcollina/autocannon', 444 | 'github.com/mdx-js/mdx', 445 | 'github.com/medusajs/medusa', 446 | 'github.com/meilisearch/MeiliSearch', 447 | 'github.com/mermaid-js/mermaid', 448 | 'github.com/meshery/meshery', 449 | 'github.com/mesonbuild/meson', 450 | 'github.com/MessageKit/MessageKit', 451 | 'github.com/MetaMask/metamask-extension', 452 | 'github.com/microsoft/ChakraCore', 453 | 'github.com/microsoft/graspologic', 454 | 'github.com/microsoft/GSL', 455 | 'github.com/microsoft/TypeScript', 456 | 'github.com/microsoft/vcpkg', 457 | 'github.com/Microsoft/vscode', 458 | 'github.com/mike42/escpos-php', 459 | 'github.com/milvus-io/bootcamp', 460 | 'github.com/milvus-io/milvus', 461 | 'github.com/mimblewimble/grin', 462 | 'github.com/mindsphere/mindconnect-nodejs', 463 | 'github.com/miroiu/nodify', 464 | 'github.com/mlflow/mlflow', 465 | 'github.com/mlpack/mlpack', 466 | 'github.com/moaazsidat/react-native-qrcode-scanner', 467 | 'github.com/mobile-shell/mosh', 468 | 'github.com/mockk/mockk', 469 | 'github.com/modin-project/modin', 470 | 'github.com/monicahq/monica', 471 | 'github.com/mono/mono', 472 | 'github.com/MonoGame/MonoGame', 473 | 'github.com/MontFerret/ferret', 474 | 'github.com/mopidy/mopidy', 475 | 'github.com/morenoh149/react-native-contacts', 476 | 'github.com/MovingBlocks/Terasology', 477 | 'github.com/MrSwitch/hello.js', 478 | 'github.com/mui-org/material-ui', 479 | 'github.com/muke1908/chat-e2ee', 480 | 'github.com/mumble-voip/mumble', 481 | 'github.com/Musish/Musish', 482 | 'github.com/namespace-ee/react-calendar-timeline', 483 | 'github.com/namhyung/uftrace', 484 | 'github.com/nannou-org/nannou', 485 | 'github.com/nas5w/use-local-storage', 486 | 'github.com/NativeScript/NativeScript', 487 | 'github.com/nclient/NClient', 488 | 'github.com/neo4jrb/activegraph', 489 | 'github.com/neovim/neovim', 490 | 'github.com/nestjsx/crud', 491 | 'github.com/netlify/netlify-cms', 492 | 'github.com/neurodata/hyppo', 493 | 'github.com/neutraltone/awesome-stock-resources', 494 | 'github.com/newsboat/newsboat', 495 | 'github.com/nexB/scancode-toolkit', 496 | 'github.com/nextcloud/android', 497 | 'github.com/nextcloud/server', 498 | 'github.com/nidhaloff/b_rabbit', 499 | 'github.com/nidhaloff/deep-translator', 500 | 'github.com/nidhaloff/dolmetscher', 501 | 'github.com/nidhaloff/gpx_converter', 502 | 'github.com/nidhaloff/igel', 503 | 'github.com/nodejs/node', 504 | 'github.com/nokia/ntt', 505 | 'github.com/Noovolari/leapp', 506 | 'github.com/npm/cli', 507 | 'github.com/nteract/hydrogen', 508 | 'github.com/nukeop/nuclear', 509 | 'github.com/numba/numba', 510 | 'github.com/numpy/numpy', 511 | 'github.com/nushell/nushell', 512 | 'github.com/nuxt/nuxt.js', 513 | 'github.com/oauth-xx/oauth2', 514 | 'github.com/objectbox/objectbox-dart', 515 | 'github.com/obsproject/obs-studio', 516 | 'github.com/ockam-network/ockam', 517 | 'github.com/OfflineIMAP/offlineimap', 518 | 'github.com/oilshell/oil', 519 | 'github.com/okteto/okteto', 520 | 'github.com/OneStep-elecTRON/onestep-electron-content', 521 | 'github.com/onlydustxyz/starklings', 522 | 'github.com/open-sauced/open-sauced', 523 | 'github.com/openatx/uiautomator2', 524 | 'github.com/OpenBeta/open-tacos', 525 | 'github.com/openchemistry/avogadrolibs', 526 | 'github.com/opencv/cvat', 527 | 'github.com/opencv/opencv', 528 | 'github.com/OpenDroneMap/WebODM', 529 | 'github.com/openemr/openemr', 530 | 'github.com/OpenGenus/cosmos', 531 | 'github.com/OpenLightingProject/open-fixture-library', 532 | 'github.com/OpenLiveWriter/OpenLiveWriter', 533 | 'github.com/OpenMined/PySyft', 534 | 'github.com/OpenRCT2/OpenRCT2', 535 | 'github.com/OpenRefine/OpenRefine', 536 | 'github.com/openseadragon/openseadragon', 537 | 'github.com/opensearch-project/OpenSearch', 538 | 'github.com/opensearch-project/OpenSearch-Dashboards', 539 | 'github.com/openssl/openssl', 540 | 'github.com/OpenTTD/OpenTTD', 541 | 'github.com/openzfs/zfs', 542 | 'github.com/oppia/oppia', 543 | 'github.com/optuna/optuna', 544 | 'github.com/oracle/opengrok', 545 | 'github.com/osm-search/Nominatim', 546 | 'github.com/owncloud/client', 547 | 'github.com/oxyplot/oxyplot', 548 | 'github.com/p4lang/behavioral-model', 549 | 'github.com/panda3d/panda3d', 550 | 'github.com/pandas-dev/pandas', 551 | 'github.com/pantsbuild/pants', 552 | 'github.com/parse-community/parse-server', 553 | 'github.com/pester/Pester', 554 | 'github.com/PetrochukM/PyTorch-NLP', 555 | 'github.com/PHP-FFMpeg/PHP-FFMpeg', 556 | 'github.com/phpmd/phpmd', 557 | 'github.com/phpmyadmin/phpmyadmin', 558 | 'github.com/phpservermon/phpservermon', 559 | 'github.com/pieces-app/example-ts', 560 | 'github.com/playframework/playframework', 561 | 'github.com/Plume-org/Plume', 562 | 'github.com/pmd/pmd', 563 | 'github.com/pnpm/pnpm', 564 | 'github.com/PointCloudLibrary/pcl', 565 | 'github.com/portainer/portainer', 566 | 'github.com/PostHog/posthog', 567 | 'github.com/predibase/lorax', 568 | 'github.com/PrefectHQ/prefect', 569 | 'github.com/PrestaShop/PrestaShop', 570 | 'github.com/PrismJS/prism', 571 | 'github.com/projectcontour/contour', 572 | 'github.com/Provenance-Emu/Provenance', 573 | 'github.com/prysmaticlabs/prysm', 574 | 'github.com/pterodactyl/panel', 575 | 'github.com/pugjs/pug', 576 | 'github.com/purpleidea/mgmt', 577 | 'github.com/pwndbg/pwndbg', 578 | 'github.com/pydata/xarray', 579 | 'github.com/pygame/pygame', 580 | 'github.com/pyinstaller/pyinstaller', 581 | 'github.com/pypa/pip', 582 | 'github.com/pypa/pipenv', 583 | 'github.com/pypa/warehouse', 584 | 'github.com/pyqtgraph/pyqtgraph', 585 | 'github.com/pyro-ppl/pyro', 586 | 'github.com/pyroscope-io/pyroscope', 587 | 'github.com/python-geeks/Automation-scripts', 588 | 'github.com/python-visualization/folium', 589 | 'github.com/pythonnet/pythonnet', 590 | 'github.com/pytorch/glow', 591 | 'github.com/pytorch/ignite', 592 | 'github.com/pytorch/pytorch', 593 | 'github.com/PyTorchLightning/pytorch-lightning', 594 | 'github.com/pywinauto/pywinauto', 595 | 'github.com/Qiskit/qiskit-terra', 596 | 'github.com/qmk/qmk_firmware', 597 | 'github.com/qTox/qTox', 598 | 'github.com/QuantConnect/Lean', 599 | 'github.com/quantumlib/Cirq', 600 | 'github.com/quarkusio/quarkus', 601 | 'github.com/questdb/questdb', 602 | 'github.com/quicktype/quicktype', 603 | 'github.com/radareorg/cutter', 604 | 'github.com/radareorg/radare2', 605 | 'github.com/rakudo/rakudo', 606 | 'github.com/randombit/botan', 607 | 'github.com/rapidsai/cuml', 608 | 'github.com/RaRe-Technologies/gensim', 609 | 'github.com/ray-project/ray', 610 | 'github.com/rclone/rclone', 611 | 'github.com/react-native-community/cli', 612 | 'github.com/react-native-community/react-native-share', 613 | 'github.com/react-native-community/react-native-svg', 614 | 'github.com/react-toolbox/react-toolbox', 615 | 'github.com/reactioncommerce/reaction', 616 | 'github.com/reactjs/react-rails', 617 | 'github.com/reactjs/reactjs.org', 618 | 'github.com/readthedocs/readthedocs.org', 619 | 'github.com/redux-saga/redux-saga', 620 | 'github.com/refinedev/refine', 621 | 'github.com/remacs/remacs', 622 | 'github.com/renovatebot/renovate', 623 | 'github.com/responsively-org/responsively-app', 624 | 'github.com/RetroShare/RetroShare', 625 | 'github.com/revertinc/revert', 626 | 'github.com/rigetti/pyquil', 627 | 'github.com/ripple/rippled', 628 | 'github.com/rjsf-team/react-jsonschema-form', 629 | 'github.com/rodrigo-arenas/Sklearn-genetic-opt', 630 | 'github.com/rstudio/keras', 631 | 'github.com/rubberduck-vba/Rubberduck', 632 | 'github.com/rubocop-hq/rubocop', 633 | 'github.com/rudderlabs/rudder-server', 634 | 'github.com/rust-analyzer/rust-analyzer', 635 | 'github.com/rust-lang/rust-by-example', 636 | 'github.com/rust-lang/rust-clippy', 637 | 'github.com/rust-lang/rustfmt', 638 | 'github.com/rust-windowing/glutin', 639 | 'github.com/rust-windowing/winit', 640 | 'github.com/rustsim/nalgebra', 641 | 'github.com/Sable/soot', 642 | 'github.com/SAP/chevrotain', 643 | 'github.com/SasanLabs/VulnerableApp', 644 | 'github.com/sayanarijit/xplr', 645 | 'github.com/sbt/sbt', 646 | 'github.com/sButtons/sbuttons', 647 | 'github.com/scalanlp/breeze', 648 | 'github.com/scalaz/scalaz', 649 | 'github.com/scikit-image/scikit-image', 650 | 'github.com/scikit-learn/scikit-learn', 651 | 'github.com/scipy/scipy', 652 | 'github.com/scrapy/scrapy', 653 | 'github.com/SeaQL/sea-orm', 654 | 'github.com/SeaQL/sea-query', 655 | 'github.com/SeaQL/sea-schema', 656 | 'github.com/seata/seata', 657 | 'github.com/sebastianbergmann/phpunit', 658 | 'github.com/sendgrid/sendgrid-php', 659 | 'github.com/sequelize/sequelize', 660 | 'github.com/serialport/node-serialport', 661 | 'github.com/serverless/components', 662 | 'github.com/serverless/serverless', 663 | 'github.com/SFTtech/openage', 664 | 'github.com/shahednasser/awesome-resources', 665 | 'github.com/shaynethiessen/terrene', 666 | 'github.com/SheetJS/sheetjs', 667 | 'github.com/shentao/vue-multiselect', 668 | 'github.com/shogun-toolbox/shogun', 669 | 'github.com/shravan20/github-readme-quotes', 670 | 'github.com/Sibyx/django_api_forms', 671 | 'github.com/sif/Ghost-Artemis', 672 | 'github.com/Signoz/signoz', 673 | 'github.com/simonmichael/hledger', 674 | 'github.com/simple-icons/simple-icons', 675 | 'github.com/sindresorhus/refined-github', 676 | 'github.com/SirVer/ultisnips', 677 | 'github.com/sitespeedio/coach', 678 | 'github.com/sitespeedio/sitespeed.io', 679 | 'github.com/slackapi/node-slack-sdk', 680 | 'github.com/slic3r/Slic3r', 681 | 'github.com/smallstep/certificates', 682 | 'github.com/smallstep/cli', 683 | 'github.com/snabbdom/snabbdom', 684 | 'github.com/snowtrack/snowfs', 685 | 'github.com/solid/node-solid-server', 686 | 'github.com/solidusio/solidus', 687 | 'github.com/sorbet/sorbet', 688 | 'github.com/sourcegraph/sourcegraph', 689 | 'github.com/sourcerer-io/sourcerer-app', 690 | 'github.com/spaceuptech/space-cloud', 691 | 'github.com/spack/spack', 692 | 'github.com/splitbrain/dokuwiki', 693 | 'github.com/spotbugs/spotbugs', 694 | 'github.com/spotify/backstage', 695 | 'github.com/spotify/scio', 696 | 'github.com/square/retrofit', 697 | 'github.com/SSENSE/vue-carousel', 698 | 'github.com/StackStorm/st2', 699 | 'github.com/stan-dev/stan', 700 | 'github.com/statsmodels/statsmodels', 701 | 'github.com/Stellarium/stellarium', 702 | 'github.com/storybookjs/storybook', 703 | 'github.com/strapi/strapi', 704 | 'github.com/streamich/react-use', 705 | 'github.com/streamlit/streamlit', 706 | 'github.com/strongbox/strongbox', 707 | 'github.com/strongloop/loopback-next', 708 | 'github.com/stryker-mutator/stryker-net', 709 | 'github.com/STVIR/pysot', 710 | 'github.com/styleguidist/react-styleguidist', 711 | 'github.com/stylelint/stylelint', 712 | 'github.com/subethaedit/SubEthaEdit', 713 | 'github.com/supercollider/supercollider', 714 | 'github.com/sveltejs/sapper', 715 | 'github.com/sveltejs/svelte', 716 | 'github.com/swapagarwal/swag-for-dev', 717 | 'github.com/sylabs/singularity', 718 | 'github.com/Sylius/Sylius', 719 | 'github.com/symfony/symfony', 720 | 'github.com/sympy/sympy', 721 | 'github.com/syncthing/syncthing', 722 | 'github.com/sysgears/apollo-universal-starter-kit', 723 | 'github.com/TandoorRecipes/recipes', 724 | 'github.com/tantivy-search/tantivy', 725 | 'github.com/tarantool/tarantool', 726 | 'github.com/tchiotludo/akhq', 727 | 'github.com/TDAmeritrade/stumpy', 728 | 'github.com/TeamAmaze/AmazeFileManager', 729 | 'github.com/TeamNewPipe/NewPipe', 730 | 'github.com/tektoncd/pipeline', 731 | 'github.com/telepresenceio/telepresence', 732 | 'github.com/tenancy/multi-tenant', 733 | 'github.com/Tencent/wepy', 734 | 'github.com/tendermint/tendermint', 735 | 'github.com/tensorflow/probability', 736 | 'github.com/tensorflow/tensorflow', 737 | 'github.com/tensorflow/tfjs', 738 | 'github.com/terraform-providers/terraform-provider-aws', 739 | 'github.com/terraform-providers/terraform-provider-azurerm', 740 | 'github.com/testcontainers/testcontainers-java', 741 | 'github.com/textlint/textlint', 742 | 'github.com/thanos-io/thanos', 743 | 'github.com/themesberg/flowbite-react', 744 | 'github.com/themix-project/oomox', 745 | 'github.com/thepracticaldev/dev.to', 746 | 'github.com/theroopesh/freshbey', 747 | 'github.com/theupdateframework/tuf', 748 | 'github.com/ThreeMammals/Ocelot', 749 | 'github.com/tiangolo/fastapi', 750 | 'github.com/timothycrosley/isort', 751 | 'github.com/tinacms/tinacms', 752 | 'github.com/tizonia/tizonia-openmax-il', 753 | 'github.com/tomkp/react-split-pane', 754 | 'github.com/tongueroo/jets', 755 | 'github.com/ToolJet/ToolJet', 756 | 'github.com/traceloop/openllmetry', 757 | 'github.com/trailofbits/manticore', 758 | 'github.com/tridactyl/tridactyl', 759 | 'github.com/tweag/asterius', 760 | 'github.com/typescript-eslint/typescript-eslint', 761 | 'github.com/tzapu/WiFiManager', 762 | 'github.com/ubuntu/microk8s', 763 | 'github.com/Udayraj123/OMRChecker', 764 | 'github.com/unisonweb/unison', 765 | 'github.com/UniversalMediaServer/UniversalMediaServer', 766 | 'github.com/unoplatform/uno', 767 | 'github.com/UPC/ravada', 768 | 'github.com/uutils/coreutils', 769 | 'github.com/valhalla/valhalla', 770 | 'github.com/validatorjs/validator.js', 771 | 'github.com/Varying-Vagrant-Vagrants/VVV', 772 | 'github.com/version0chiro/Find-Me-Issues', 773 | 'github.com/vesoft-inc/nebula', 774 | 'github.com/vespa-engine/vespa', 775 | 'github.com/vicky002/AlgoWiki', 776 | 'github.com/vimeo/psalm', 777 | 'github.com/vmware-tanzu/carvel', 778 | 'github.com/vmware-tanzu/community-edition', 779 | 'github.com/vmware-tanzu/velero', 780 | 'github.com/vmware/versatile-data-kit', 781 | 'github.com/volta-cli/volta', 782 | 'github.com/VSCodeVim/Vim', 783 | 'github.com/vuejs/vue-router', 784 | 'github.com/vuejs/vue', 785 | 'github.com/vuejs/vuepress', 786 | 'github.com/vuetifyjs/vuetify', 787 | 'github.com/VulcanJS/Vulcan', 788 | 'github.com/wagtail/wagtail', 789 | 'github.com/WallarooLabs/wallaroo', 790 | 'github.com/wasdk/WebAssemblyStudio', 791 | 'github.com/weaveworks/eksctl', 792 | 'github.com/weaveworks/footloose', 793 | 'github.com/weaveworks/ignite', 794 | 'github.com/weaveworks/weave', 795 | 'github.com/web-platform-tests/wpt', 796 | 'github.com/webhintio/hint', 797 | 'github.com/WeblateOrg/weblate', 798 | 'github.com/wemake-services/wemake-python-styleguide', 799 | 'github.com/wesnoth/wesnoth', 800 | 'github.com/wger-project/flutter', 801 | 'github.com/wger-project/wger', 802 | 'github.com/whatwg/fetch', 803 | 'github.com/whatwg/html', 804 | 'github.com/whitesmith/rubycritic', 805 | 'github.com/winstonjs/winston', 806 | 'github.com/winsw/winsw', 807 | 'github.com/withspectrum/spectrum', 808 | 'github.com/woocommerce/woocommerce', 809 | 'github.com/wordpress-mobile/WordPress-Android', 810 | 'github.com/wordpress-mobile/WordPress-iOS', 811 | 'github.com/WordPress/gutenberg', 812 | 'github.com/WordPress/openverse-api', 813 | 'github.com/WordPress/openverse-catalog', 814 | 'github.com/WordPress/openverse-frontend', 815 | 'github.com/WordPress/openverse', 816 | 'github.com/wp-graphql/wp-graphql', 817 | 'github.com/wyattowalsh/data-science-notes', 818 | 'github.com/xenia-project/xenia', 819 | 'github.com/xtermjs/xterm.js', 820 | 'github.com/xunit/xunit', 821 | 'github.com/yarnpkg/yarn', 822 | 'github.com/yashaka/selene', 823 | 'github.com/yewstack/yew', 824 | 'github.com/Yoast/wordpress-seo', 825 | 'github.com/yugabyte/yugabyte-db', 826 | 'github.com/zaproxy/zaproxy', 827 | 'github.com/zcash/zcash', 828 | 'github.com/zeebe-io/zeebe', 829 | 'github.com/zeek/zeek', 830 | 'github.com/zeit/hyper', 831 | 'github.com/zeit/next.js', 832 | 'github.com/zenml-io/zenml', 833 | 'github.com/zephyrproject-rtos/zephyr', 834 | 'github.com/zio/zio', 835 | 'github.com/zitadel/zitadel', 836 | 'github.com/zsh-users/zsh-completions', 837 | 'github.com/zsh-users/zsh-syntax-highlighting', 838 | 'github.com/zulip/zulip', 839 | 'github.com/ZupIT/charlescd', 840 | 'github.com/ZupIT/ritchie-cli', 841 | 'github.com/ZupIT/ritchie-formulas' 842 | ] 843 | -------------------------------------------------------------------------------- /data/tags.sample.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "language": "JavaScript", "count": 7, "slug": "javascript" }, 3 | { "language": "Python", "count": 5, "slug": "python" }, 4 | { "language": "HTML", "count": 4, "slug": "html" }, 5 | { "language": "TypeScript", "count": 3, "slug": "typescript" }, 6 | { "language": "C", "count": 3, "slug": "c" } 7 | ] 8 | -------------------------------------------------------------------------------- /gfi/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | -------------------------------------------------------------------------------- /gfi/populate.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | import itertools 4 | import json 5 | import random 6 | import re 7 | from collections import Counter 8 | from concurrent.futures import ThreadPoolExecutor 9 | from operator import itemgetter 10 | from os import getenv, path 11 | from typing import TypedDict, Dict, Union, Sequence, Optional, Mapping 12 | 13 | import toml 14 | 15 | from github3 import exceptions, login 16 | from numerize import numerize 17 | from emoji import emojize 18 | from slugify import slugify 19 | from loguru import logger 20 | 21 | MAX_CONCURRENCY = 25 # max number of requests to make to GitHub in parallel 22 | MAX_REPOSITORIES = 500 # max number of repositories populated in one session 23 | REPO_DATA_FILE = "data/repositories.toml" 24 | REPO_GENERATED_DATA_FILE = "data/generated.json" 25 | TAGS_GENERATED_DATA_FILE = "data/tags.json" 26 | GH_URL_PATTERN = re.compile(r"[http://|https://]?github.com/(?P[\w\.-]+)/(?P[\w\.-]+)/?") 27 | LABELS_DATA_FILE = "data/labels.json" 28 | ISSUE_STATE = "open" 29 | ISSUE_SORT = "created" 30 | ISSUE_SORT_DIRECTION = "desc" 31 | ISSUE_LIMIT = 10 32 | SLUGIFY_REPLACEMENTS = [["#", "sharp"], ["+", "plus"]] 33 | 34 | if not path.exists(LABELS_DATA_FILE): 35 | raise RuntimeError("No labels data file found. Exiting.") 36 | 37 | with open(LABELS_DATA_FILE) as labels_file: 38 | LABELS_DATA = json.load(labels_file) 39 | 40 | ISSUE_LABELS = LABELS_DATA["labels"] 41 | 42 | 43 | class RepoNotFoundException(Exception): 44 | """Exception class for repo not found.""" 45 | 46 | 47 | def parse_github_url(url: str) -> dict: 48 | """Take the GitHub repo URL and return a tuple with owner login and repo name.""" 49 | match = GH_URL_PATTERN.search(url) 50 | if match: 51 | return match.groupdict() 52 | return {} 53 | 54 | 55 | class RepositoryIdentifier(TypedDict): 56 | owner: str 57 | name: str 58 | 59 | 60 | RepositoryInfo = Dict["str", Union[str, int, Sequence]] 61 | 62 | 63 | def get_repository_info(identifier: RepositoryIdentifier) -> Optional[RepositoryInfo]: 64 | """Get the relevant information needed for the repository from its owner login and name.""" 65 | owner, name = identifier["owner"], identifier["name"] 66 | 67 | logger.info("Getting info for {}/{}", owner, name) 68 | 69 | # create a logged in GitHub client 70 | client = login(token=getenv("GH_ACCESS_TOKEN")) 71 | 72 | info: RepositoryInfo = {} 73 | 74 | # get the repository; if the repo is not found, log a warning 75 | try: 76 | repository = client.repository(owner, name) 77 | # Don't find issues inside archived repos. 78 | if repository.archived: 79 | return None 80 | 81 | good_first_issues = set( 82 | itertools.chain.from_iterable( 83 | repository.issues( 84 | labels=label, 85 | state=ISSUE_STATE, 86 | number=ISSUE_LIMIT, 87 | sort=ISSUE_SORT, 88 | direction=ISSUE_SORT_DIRECTION, 89 | ) 90 | for label in ISSUE_LABELS 91 | ) 92 | ) 93 | logger.info("\t found {} good first issues", len(good_first_issues)) 94 | # check if repo has at least one good first issue 95 | if good_first_issues and repository.language: 96 | # store the repo info 97 | info["name"] = name 98 | info["owner"] = owner 99 | info["description"] = emojize(repository.description or "") 100 | info["language"] = repository.language 101 | info["slug"] = slugify(repository.language, replacements=SLUGIFY_REPLACEMENTS) 102 | info["url"] = repository.html_url 103 | info["stars"] = repository.stargazers_count 104 | info["stars_display"] = numerize.numerize(repository.stargazers_count) 105 | info["last_modified"] = repository.pushed_at.isoformat() 106 | info["id"] = str(repository.id) 107 | 108 | # get the latest issues with the tag 109 | issues = [] 110 | for issue in good_first_issues: 111 | issues.append( 112 | { 113 | "title": issue.title, 114 | "url": issue.html_url, 115 | "number": issue.number, 116 | "comments_count": issue.comments_count, 117 | "created_at": issue.created_at.isoformat(), 118 | } 119 | ) 120 | 121 | info["issues"] = issues 122 | else: 123 | logger.info("\t skipping due to insufficient issues or info") 124 | except exceptions.NotFoundError: 125 | logger.warning("Not Found: {}/{}", owner, name) 126 | except exceptions.ForbiddenError: 127 | logger.warning("Skipped due to rate-limits: {}/{}", owner, name) 128 | except exceptions.ConnectionError: 129 | logger.warning("Skipped due to connection errors: {}/{}", owner, name) 130 | 131 | return info 132 | 133 | 134 | if __name__ == "__main__": 135 | # parse the repositories data file and get the list of repos 136 | # for generating pages for. 137 | 138 | if not path.exists(REPO_DATA_FILE): 139 | raise RuntimeError("No config data file found. Exiting.") 140 | 141 | # if the GitHub Access Token isn't found, raise an error 142 | if not getenv("GH_ACCESS_TOKEN"): 143 | raise RuntimeError("Access token not present in the env variable `GH_ACCESS_TOKEN`") 144 | 145 | REPOSITORIES = [] 146 | TAGS: Counter = Counter() 147 | with open(REPO_DATA_FILE, "r") as data_file: 148 | DATA = toml.load(REPO_DATA_FILE) 149 | 150 | logger.info( 151 | "Found {} repository entries in {}", 152 | len(DATA["repositories"]), 153 | REPO_DATA_FILE, 154 | ) 155 | 156 | # pre-process the URLs and only continue with the list of valid GitHub URLs 157 | repositories = list(filter(bool, [parse_github_url(url) for url in DATA["repositories"]])) 158 | 159 | # shuffle the order of the repositories 160 | random.shuffle(repositories) 161 | 162 | with ThreadPoolExecutor(max_workers=MAX_CONCURRENCY) as executor: 163 | results = executor.map(get_repository_info, repositories[:MAX_REPOSITORIES]) 164 | 165 | # filter out repositories with valid data and increment tag counts 166 | for result in results: 167 | if result: 168 | REPOSITORIES.append(result) 169 | TAGS[result["language"]] += 1 170 | 171 | # write to generated JSON files 172 | 173 | with open(REPO_GENERATED_DATA_FILE, "w") as file_desc: 174 | json.dump(REPOSITORIES, file_desc) 175 | logger.info("Wrote data for {} repos to {}", len(REPOSITORIES), REPO_GENERATED_DATA_FILE) 176 | 177 | # use only those tags that have at least three occurrences 178 | tags = [ 179 | { 180 | "language": key, 181 | "count": value, 182 | "slug": slugify(key, replacements=SLUGIFY_REPLACEMENTS), 183 | } 184 | for (key, value) in TAGS.items() 185 | if value >= 3 186 | ] 187 | tags_sorted = sorted(tags, key=itemgetter("count"), reverse=True) 188 | with open(TAGS_GENERATED_DATA_FILE, "w") as file_desc: 189 | json.dump(tags_sorted, file_desc) 190 | logger.info("Wrote {} tags to {}", len(tags), TAGS_GENERATED_DATA_FILE) 191 | -------------------------------------------------------------------------------- /gfi/test_data.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | import json 4 | import os 5 | import unittest 6 | from collections import Counter 7 | 8 | import toml 9 | 10 | DATA_FILE_PATH = "data/repositories.toml" 11 | LABELS_FILE_PATH = "data/labels.json" 12 | 13 | 14 | def _get_data_from_toml(file_path): 15 | with open(file_path, "r") as file_desc: 16 | return toml.load(file_desc) 17 | 18 | 19 | def _get_data_from_json(file_path): 20 | with open(file_path, "r") as file_desc: 21 | return json.load(file_desc) 22 | 23 | 24 | class TestDataSanity(unittest.TestCase): 25 | """Test for sanity of the data file.""" 26 | 27 | @staticmethod 28 | def test_data_file_exists(): 29 | """Verify that the data file exists.""" 30 | assert os.path.exists(DATA_FILE_PATH) 31 | 32 | @staticmethod 33 | def test_labels_file_exists(): 34 | """Verify that the labels file exists.""" 35 | assert os.path.exists(LABELS_FILE_PATH) 36 | 37 | @staticmethod 38 | def test_data_file_sane(): 39 | """Verify that the file is a valid TOML with required data.""" 40 | data = _get_data_from_toml(DATA_FILE_PATH) 41 | assert "repositories" in data 42 | 43 | @staticmethod 44 | def test_labels_file_sane(): 45 | """Verify that the labels file is a valid JSON""" 46 | data = _get_data_from_json(LABELS_FILE_PATH) 47 | assert "labels" in data 48 | 49 | @staticmethod 50 | def test_no_duplicates(): 51 | """Verify that all entries are unique.""" 52 | data = _get_data_from_toml(DATA_FILE_PATH) 53 | repos = data.get("repositories", []) 54 | print([item for item, count in Counter(repos).items() if count > 1]) 55 | assert len(repos) == len(set(repos)) 56 | 57 | 58 | if __name__ == "__main__": 59 | unittest.main() 60 | -------------------------------------------------------------------------------- /layouts/default.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 54 | -------------------------------------------------------------------------------- /mypy.ini: -------------------------------------------------------------------------------- 1 | [mypy] 2 | warn_redundant_casts = True 3 | warn_unused_ignores = True 4 | 5 | [mypy-github3.*] 6 | ignore_missing_imports = True 7 | 8 | [mypy-numerize.*] 9 | ignore_missing_imports = True 10 | 11 | [mypy-emoji.*] 12 | ignore_missing_imports = True 13 | -------------------------------------------------------------------------------- /nuxt.config.ts: -------------------------------------------------------------------------------- 1 | // https://nuxt.com/docs/api/configuration/nuxt-config 2 | export default defineNuxtConfig({ 3 | devtools: { enabled: true }, 4 | modules: ['@nuxtjs/tailwindcss', 'nuxt-gtag', 'nuxt-simple-sitemap'], 5 | nitro: { 6 | prerender: { 7 | crawlLinks: true 8 | } 9 | }, 10 | site: { 11 | url: 'https://goodfirstissue.dev' 12 | } 13 | }) 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nuxt-app", 3 | "private": true, 4 | "type": "module", 5 | "scripts": { 6 | "build": "nuxt build", 7 | "dev": "nuxt dev", 8 | "generate": "nuxt generate", 9 | "preview": "nuxt preview", 10 | "postinstall": "nuxt prepare", 11 | "sync": "bun sync.js" 12 | }, 13 | "devDependencies": { 14 | "@nuxt/devtools": "latest", 15 | "@nuxtjs/tailwindcss": "latest", 16 | "nuxt": "^3.8.2", 17 | "nuxt-gtag": "^0.5.9", 18 | "nuxt-simple-sitemap": "^3.4.0", 19 | "prettier": "^3.1.1" 20 | }, 21 | "dependencies": { 22 | "@heroicons/vue": "^2.0.18", 23 | "@vercel/blob": "^0.16.1", 24 | "dayjs": "^1.11.10" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /pages/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 20 | -------------------------------------------------------------------------------- /pages/language/[slug].vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 25 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "certifi" 5 | version = "2023.11.17" 6 | description = "Python package for providing Mozilla's CA Bundle." 7 | optional = false 8 | python-versions = ">=3.6" 9 | files = [ 10 | {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, 11 | {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, 12 | ] 13 | 14 | [[package]] 15 | name = "cffi" 16 | version = "1.16.0" 17 | description = "Foreign Function Interface for Python calling C code." 18 | optional = false 19 | python-versions = ">=3.8" 20 | files = [ 21 | {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, 22 | {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, 23 | {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, 24 | {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, 25 | {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, 26 | {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, 27 | {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, 28 | {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, 29 | {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, 30 | {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, 31 | {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, 32 | {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, 33 | {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, 34 | {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, 35 | {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, 36 | {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, 37 | {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, 38 | {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, 39 | {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, 40 | {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, 41 | {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, 42 | {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, 43 | {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, 44 | {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, 45 | {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, 46 | {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, 47 | {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, 48 | {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, 49 | {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, 50 | {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, 51 | {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, 52 | {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, 53 | {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, 54 | {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, 55 | {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, 56 | {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, 57 | {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, 58 | {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, 59 | {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, 60 | {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, 61 | {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, 62 | {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, 63 | {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, 64 | {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, 65 | {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, 66 | {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, 67 | {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, 68 | {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, 69 | {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, 70 | {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, 71 | {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, 72 | {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, 73 | ] 74 | 75 | [package.dependencies] 76 | pycparser = "*" 77 | 78 | [[package]] 79 | name = "charset-normalizer" 80 | version = "3.3.2" 81 | description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." 82 | optional = false 83 | python-versions = ">=3.7.0" 84 | files = [ 85 | {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, 86 | {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, 87 | {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, 88 | {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, 89 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, 90 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, 91 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, 92 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, 93 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, 94 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, 95 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, 96 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, 97 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, 98 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, 99 | {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, 100 | {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, 101 | {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, 102 | {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, 103 | {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, 104 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, 105 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, 106 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, 107 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, 108 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, 109 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, 110 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, 111 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, 112 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, 113 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, 114 | {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, 115 | {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, 116 | {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, 117 | {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, 118 | {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, 119 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, 120 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, 121 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, 122 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, 123 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, 124 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, 125 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, 126 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, 127 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, 128 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, 129 | {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, 130 | {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, 131 | {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, 132 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, 133 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, 134 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, 135 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, 136 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, 137 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, 138 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, 139 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, 140 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, 141 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, 142 | {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, 143 | {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, 144 | {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, 145 | {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, 146 | {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, 147 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, 148 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, 149 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, 150 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, 151 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, 152 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, 153 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, 154 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, 155 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, 156 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, 157 | {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, 158 | {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, 159 | {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, 160 | {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, 161 | {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, 162 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, 163 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, 164 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, 165 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, 166 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, 167 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, 168 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, 169 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, 170 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, 171 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, 172 | {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, 173 | {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, 174 | {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, 175 | ] 176 | 177 | [[package]] 178 | name = "colorama" 179 | version = "0.4.6" 180 | description = "Cross-platform colored terminal text." 181 | optional = false 182 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" 183 | files = [ 184 | {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, 185 | {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, 186 | ] 187 | 188 | [[package]] 189 | name = "cryptography" 190 | version = "41.0.7" 191 | description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." 192 | optional = false 193 | python-versions = ">=3.7" 194 | files = [ 195 | {file = "cryptography-41.0.7-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:3c78451b78313fa81607fa1b3f1ae0a5ddd8014c38a02d9db0616133987b9cdf"}, 196 | {file = "cryptography-41.0.7-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:928258ba5d6f8ae644e764d0f996d61a8777559f72dfeb2eea7e2fe0ad6e782d"}, 197 | {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a1b41bc97f1ad230a41657d9155113c7521953869ae57ac39ac7f1bb471469a"}, 198 | {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:841df4caa01008bad253bce2a6f7b47f86dc9f08df4b433c404def869f590a15"}, 199 | {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5429ec739a29df2e29e15d082f1d9ad683701f0ec7709ca479b3ff2708dae65a"}, 200 | {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:43f2552a2378b44869fe8827aa19e69512e3245a219104438692385b0ee119d1"}, 201 | {file = "cryptography-41.0.7-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:af03b32695b24d85a75d40e1ba39ffe7db7ffcb099fe507b39fd41a565f1b157"}, 202 | {file = "cryptography-41.0.7-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:49f0805fc0b2ac8d4882dd52f4a3b935b210935d500b6b805f321addc8177406"}, 203 | {file = "cryptography-41.0.7-cp37-abi3-win32.whl", hash = "sha256:f983596065a18a2183e7f79ab3fd4c475205b839e02cbc0efbbf9666c4b3083d"}, 204 | {file = "cryptography-41.0.7-cp37-abi3-win_amd64.whl", hash = "sha256:90452ba79b8788fa380dfb587cca692976ef4e757b194b093d845e8d99f612f2"}, 205 | {file = "cryptography-41.0.7-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:079b85658ea2f59c4f43b70f8119a52414cdb7be34da5d019a77bf96d473b960"}, 206 | {file = "cryptography-41.0.7-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b640981bf64a3e978a56167594a0e97db71c89a479da8e175d8bb5be5178c003"}, 207 | {file = "cryptography-41.0.7-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e3114da6d7f95d2dee7d3f4eec16dacff819740bbab931aff8648cb13c5ff5e7"}, 208 | {file = "cryptography-41.0.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d5ec85080cce7b0513cfd233914eb8b7bbd0633f1d1703aa28d1dd5a72f678ec"}, 209 | {file = "cryptography-41.0.7-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7a698cb1dac82c35fcf8fe3417a3aaba97de16a01ac914b89a0889d364d2f6be"}, 210 | {file = "cryptography-41.0.7-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:37a138589b12069efb424220bf78eac59ca68b95696fc622b6ccc1c0a197204a"}, 211 | {file = "cryptography-41.0.7-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:68a2dec79deebc5d26d617bfdf6e8aab065a4f34934b22d3b5010df3ba36612c"}, 212 | {file = "cryptography-41.0.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:09616eeaef406f99046553b8a40fbf8b1e70795a91885ba4c96a70793de5504a"}, 213 | {file = "cryptography-41.0.7-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48a0476626da912a44cc078f9893f292f0b3e4c739caf289268168d8f4702a39"}, 214 | {file = "cryptography-41.0.7-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c7f3201ec47d5207841402594f1d7950879ef890c0c495052fa62f58283fde1a"}, 215 | {file = "cryptography-41.0.7-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c5ca78485a255e03c32b513f8c2bc39fedb7f5c5f8535545bdc223a03b24f248"}, 216 | {file = "cryptography-41.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6c391c021ab1f7a82da5d8d0b3cee2f4b2c455ec86c8aebbc84837a631ff309"}, 217 | {file = "cryptography-41.0.7.tar.gz", hash = "sha256:13f93ce9bea8016c253b34afc6bd6a75993e5c40672ed5405a9c832f0d4a00bc"}, 218 | ] 219 | 220 | [package.dependencies] 221 | cffi = ">=1.12" 222 | 223 | [package.extras] 224 | docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] 225 | docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] 226 | nox = ["nox"] 227 | pep8test = ["black", "check-sdist", "mypy", "ruff"] 228 | sdist = ["build"] 229 | ssh = ["bcrypt (>=3.1.5)"] 230 | test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] 231 | test-randomorder = ["pytest-randomly"] 232 | 233 | [[package]] 234 | name = "emoji" 235 | version = "0.6.0" 236 | description = "Emoji for Python" 237 | optional = false 238 | python-versions = "*" 239 | files = [ 240 | {file = "emoji-0.6.0.tar.gz", hash = "sha256:e42da4f8d648f8ef10691bc246f682a1ec6b18373abfd9be10ec0b398823bd11"}, 241 | ] 242 | 243 | [package.extras] 244 | dev = ["coverage", "coveralls", "pytest"] 245 | 246 | [[package]] 247 | name = "github3-py" 248 | version = "4.0.1" 249 | description = "Python wrapper for the GitHub API(http://developer.github.com/v3)" 250 | optional = false 251 | python-versions = ">=3.7" 252 | files = [ 253 | {file = "github3.py-4.0.1-py3-none-any.whl", hash = "sha256:a89af7de25650612d1da2f0609622bcdeb07ee8a45a1c06b2d16a05e4234e753"}, 254 | {file = "github3.py-4.0.1.tar.gz", hash = "sha256:30d571076753efc389edc7f9aaef338a4fcb24b54d8968d5f39b1342f45ddd36"}, 255 | ] 256 | 257 | [package.dependencies] 258 | pyjwt = {version = ">=2.3.0", extras = ["crypto"]} 259 | python-dateutil = ">=2.6.0" 260 | requests = ">=2.18" 261 | uritemplate = ">=3.0.0" 262 | 263 | [package.extras] 264 | dev = ["build", "github3-py[test]", "tox (>=3.1.3)", "twine", "wheel"] 265 | test = ["betamax (>=0.5.1)", "betamax-matchers (>=0.3.0)", "pytest (>=7.0)", "pytest-xdist[psutil]"] 266 | 267 | [[package]] 268 | name = "idna" 269 | version = "3.6" 270 | description = "Internationalized Domain Names in Applications (IDNA)" 271 | optional = false 272 | python-versions = ">=3.5" 273 | files = [ 274 | {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, 275 | {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, 276 | ] 277 | 278 | [[package]] 279 | name = "loguru" 280 | version = "0.7.2" 281 | description = "Python logging made (stupidly) simple" 282 | optional = false 283 | python-versions = ">=3.5" 284 | files = [ 285 | {file = "loguru-0.7.2-py3-none-any.whl", hash = "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb"}, 286 | {file = "loguru-0.7.2.tar.gz", hash = "sha256:e671a53522515f34fd406340ee968cb9ecafbc4b36c679da03c18fd8d0bd51ac"}, 287 | ] 288 | 289 | [package.dependencies] 290 | colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} 291 | win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} 292 | 293 | [package.extras] 294 | dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.4.1)", "mypy (==v1.5.1)", "pre-commit (==3.4.0)", "pytest (==6.1.2)", "pytest (==7.4.0)", "pytest-cov (==2.12.1)", "pytest-cov (==4.1.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.0.0)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.3.0)", "tox (==3.27.1)", "tox (==4.11.0)"] 295 | 296 | [[package]] 297 | name = "mypy" 298 | version = "1.7.1" 299 | description = "Optional static typing for Python" 300 | optional = false 301 | python-versions = ">=3.8" 302 | files = [ 303 | {file = "mypy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12cce78e329838d70a204293e7b29af9faa3ab14899aec397798a4b41be7f340"}, 304 | {file = "mypy-1.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1484b8fa2c10adf4474f016e09d7a159602f3239075c7bf9f1627f5acf40ad49"}, 305 | {file = "mypy-1.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31902408f4bf54108bbfb2e35369877c01c95adc6192958684473658c322c8a5"}, 306 | {file = "mypy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f2c2521a8e4d6d769e3234350ba7b65ff5d527137cdcde13ff4d99114b0c8e7d"}, 307 | {file = "mypy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:fcd2572dd4519e8a6642b733cd3a8cfc1ef94bafd0c1ceed9c94fe736cb65b6a"}, 308 | {file = "mypy-1.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b901927f16224d0d143b925ce9a4e6b3a758010673eeded9b748f250cf4e8f7"}, 309 | {file = "mypy-1.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2f7f6985d05a4e3ce8255396df363046c28bea790e40617654e91ed580ca7c51"}, 310 | {file = "mypy-1.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:944bdc21ebd620eafefc090cdf83158393ec2b1391578359776c00de00e8907a"}, 311 | {file = "mypy-1.7.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9c7ac372232c928fff0645d85f273a726970c014749b924ce5710d7d89763a28"}, 312 | {file = "mypy-1.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:f6efc9bd72258f89a3816e3a98c09d36f079c223aa345c659622f056b760ab42"}, 313 | {file = "mypy-1.7.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6dbdec441c60699288adf051f51a5d512b0d818526d1dcfff5a41f8cd8b4aaf1"}, 314 | {file = "mypy-1.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4fc3d14ee80cd22367caaaf6e014494415bf440980a3045bf5045b525680ac33"}, 315 | {file = "mypy-1.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c6e4464ed5f01dc44dc9821caf67b60a4e5c3b04278286a85c067010653a0eb"}, 316 | {file = "mypy-1.7.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:d9b338c19fa2412f76e17525c1b4f2c687a55b156320acb588df79f2e6fa9fea"}, 317 | {file = "mypy-1.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:204e0d6de5fd2317394a4eff62065614c4892d5a4d1a7ee55b765d7a3d9e3f82"}, 318 | {file = "mypy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:84860e06ba363d9c0eeabd45ac0fde4b903ad7aa4f93cd8b648385a888e23200"}, 319 | {file = "mypy-1.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8c5091ebd294f7628eb25ea554852a52058ac81472c921150e3a61cdd68f75a7"}, 320 | {file = "mypy-1.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40716d1f821b89838589e5b3106ebbc23636ffdef5abc31f7cd0266db936067e"}, 321 | {file = "mypy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cf3f0c5ac72139797953bd50bc6c95ac13075e62dbfcc923571180bebb662e9"}, 322 | {file = "mypy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:78e25b2fd6cbb55ddfb8058417df193f0129cad5f4ee75d1502248e588d9e0d7"}, 323 | {file = "mypy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75c4d2a6effd015786c87774e04331b6da863fc3fc4e8adfc3b40aa55ab516fe"}, 324 | {file = "mypy-1.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2643d145af5292ee956aa0a83c2ce1038a3bdb26e033dadeb2f7066fb0c9abce"}, 325 | {file = "mypy-1.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75aa828610b67462ffe3057d4d8a4112105ed211596b750b53cbfe182f44777a"}, 326 | {file = "mypy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ee5d62d28b854eb61889cde4e1dbc10fbaa5560cb39780c3995f6737f7e82120"}, 327 | {file = "mypy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:72cf32ce7dd3562373f78bd751f73c96cfb441de147cc2448a92c1a308bd0ca6"}, 328 | {file = "mypy-1.7.1-py3-none-any.whl", hash = "sha256:f7c5d642db47376a0cc130f0de6d055056e010debdaf0707cd2b0fc7e7ef30ea"}, 329 | {file = "mypy-1.7.1.tar.gz", hash = "sha256:fcb6d9afb1b6208b4c712af0dafdc650f518836065df0d4fb1d800f5d6773db2"}, 330 | ] 331 | 332 | [package.dependencies] 333 | mypy-extensions = ">=1.0.0" 334 | tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} 335 | typing-extensions = ">=4.1.0" 336 | 337 | [package.extras] 338 | dmypy = ["psutil (>=4.0)"] 339 | install-types = ["pip"] 340 | mypyc = ["setuptools (>=50)"] 341 | reports = ["lxml"] 342 | 343 | [[package]] 344 | name = "mypy-extensions" 345 | version = "1.0.0" 346 | description = "Type system extensions for programs checked with the mypy type checker." 347 | optional = false 348 | python-versions = ">=3.5" 349 | files = [ 350 | {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, 351 | {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, 352 | ] 353 | 354 | [[package]] 355 | name = "numerize" 356 | version = "0.12" 357 | description = "Convert large numbers into readable numbers for humans." 358 | optional = false 359 | python-versions = "*" 360 | files = [ 361 | {file = "numerize-0.12.tar.gz", hash = "sha256:5548fe72adceb2c7964998179697d80117bb117f57cd02f872cf5db40d615c04"}, 362 | ] 363 | 364 | [[package]] 365 | name = "pycparser" 366 | version = "2.21" 367 | description = "C parser in Python" 368 | optional = false 369 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 370 | files = [ 371 | {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, 372 | {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, 373 | ] 374 | 375 | [[package]] 376 | name = "pyjwt" 377 | version = "2.8.0" 378 | description = "JSON Web Token implementation in Python" 379 | optional = false 380 | python-versions = ">=3.7" 381 | files = [ 382 | {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, 383 | {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, 384 | ] 385 | 386 | [package.dependencies] 387 | cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} 388 | 389 | [package.extras] 390 | crypto = ["cryptography (>=3.4.0)"] 391 | dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] 392 | docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] 393 | tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] 394 | 395 | [[package]] 396 | name = "python-dateutil" 397 | version = "2.8.2" 398 | description = "Extensions to the standard Python datetime module" 399 | optional = false 400 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" 401 | files = [ 402 | {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, 403 | {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, 404 | ] 405 | 406 | [package.dependencies] 407 | six = ">=1.5" 408 | 409 | [[package]] 410 | name = "python-slugify" 411 | version = "4.0.1" 412 | description = "A Python Slugify application that handles Unicode" 413 | optional = false 414 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 415 | files = [ 416 | {file = "python-slugify-4.0.1.tar.gz", hash = "sha256:69a517766e00c1268e5bbfc0d010a0a8508de0b18d30ad5a1ff357f8ae724270"}, 417 | ] 418 | 419 | [package.dependencies] 420 | text-unidecode = ">=1.3" 421 | 422 | [package.extras] 423 | unidecode = ["Unidecode (>=1.1.1)"] 424 | 425 | [[package]] 426 | name = "requests" 427 | version = "2.31.0" 428 | description = "Python HTTP for Humans." 429 | optional = false 430 | python-versions = ">=3.7" 431 | files = [ 432 | {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, 433 | {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, 434 | ] 435 | 436 | [package.dependencies] 437 | certifi = ">=2017.4.17" 438 | charset-normalizer = ">=2,<4" 439 | idna = ">=2.5,<4" 440 | urllib3 = ">=1.21.1,<3" 441 | 442 | [package.extras] 443 | socks = ["PySocks (>=1.5.6,!=1.5.7)"] 444 | use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] 445 | 446 | [[package]] 447 | name = "ruff" 448 | version = "0.1.8" 449 | description = "An extremely fast Python linter and code formatter, written in Rust." 450 | optional = false 451 | python-versions = ">=3.7" 452 | files = [ 453 | {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7de792582f6e490ae6aef36a58d85df9f7a0cfd1b0d4fe6b4fb51803a3ac96fa"}, 454 | {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c8e3255afd186c142eef4ec400d7826134f028a85da2146102a1172ecc7c3696"}, 455 | {file = "ruff-0.1.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff78a7583020da124dd0deb835ece1d87bb91762d40c514ee9b67a087940528b"}, 456 | {file = "ruff-0.1.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd8ee69b02e7bdefe1e5da2d5b6eaaddcf4f90859f00281b2333c0e3a0cc9cd6"}, 457 | {file = "ruff-0.1.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a05b0ddd7ea25495e4115a43125e8a7ebed0aa043c3d432de7e7d6e8e8cd6448"}, 458 | {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e6f08ca730f4dc1b76b473bdf30b1b37d42da379202a059eae54ec7fc1fbcfed"}, 459 | {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f35960b02df6b827c1b903091bb14f4b003f6cf102705efc4ce78132a0aa5af3"}, 460 | {file = "ruff-0.1.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d076717c67b34c162da7c1a5bda16ffc205e0e0072c03745275e7eab888719f"}, 461 | {file = "ruff-0.1.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6a21ab023124eafb7cef6d038f835cb1155cd5ea798edd8d9eb2f8b84be07d9"}, 462 | {file = "ruff-0.1.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ce697c463458555027dfb194cb96d26608abab920fa85213deb5edf26e026664"}, 463 | {file = "ruff-0.1.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:db6cedd9ffed55548ab313ad718bc34582d394e27a7875b4b952c2d29c001b26"}, 464 | {file = "ruff-0.1.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:05ffe9dbd278965271252704eddb97b4384bf58b971054d517decfbf8c523f05"}, 465 | {file = "ruff-0.1.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5daaeaf00ae3c1efec9742ff294b06c3a2a9db8d3db51ee4851c12ad385cda30"}, 466 | {file = "ruff-0.1.8-py3-none-win32.whl", hash = "sha256:e49fbdfe257fa41e5c9e13c79b9e79a23a79bd0e40b9314bc53840f520c2c0b3"}, 467 | {file = "ruff-0.1.8-py3-none-win_amd64.whl", hash = "sha256:f41f692f1691ad87f51708b823af4bb2c5c87c9248ddd3191c8f088e66ce590a"}, 468 | {file = "ruff-0.1.8-py3-none-win_arm64.whl", hash = "sha256:aa8ee4f8440023b0a6c3707f76cadce8657553655dcbb5fc9b2f9bb9bee389f6"}, 469 | {file = "ruff-0.1.8.tar.gz", hash = "sha256:f7ee467677467526cfe135eab86a40a0e8db43117936ac4f9b469ce9cdb3fb62"}, 470 | ] 471 | 472 | [[package]] 473 | name = "six" 474 | version = "1.16.0" 475 | description = "Python 2 and 3 compatibility utilities" 476 | optional = false 477 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 478 | files = [ 479 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 480 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 481 | ] 482 | 483 | [[package]] 484 | name = "text-unidecode" 485 | version = "1.3" 486 | description = "The most basic Text::Unidecode port" 487 | optional = false 488 | python-versions = "*" 489 | files = [ 490 | {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, 491 | {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, 492 | ] 493 | 494 | [[package]] 495 | name = "toml" 496 | version = "0.10.2" 497 | description = "Python Library for Tom's Obvious, Minimal Language" 498 | optional = false 499 | python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" 500 | files = [ 501 | {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, 502 | {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, 503 | ] 504 | 505 | [[package]] 506 | name = "tomli" 507 | version = "2.0.1" 508 | description = "A lil' TOML parser" 509 | optional = false 510 | python-versions = ">=3.7" 511 | files = [ 512 | {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, 513 | {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, 514 | ] 515 | 516 | [[package]] 517 | name = "types-python-slugify" 518 | version = "8.0.0.3" 519 | description = "Typing stubs for python-slugify" 520 | optional = false 521 | python-versions = "*" 522 | files = [ 523 | {file = "types-python-slugify-8.0.0.3.tar.gz", hash = "sha256:868e6610ab9a01c01b2ccc1b982363e694d6bbb4fcf32e0d82688c89dceb4e2c"}, 524 | {file = "types_python_slugify-8.0.0.3-py3-none-any.whl", hash = "sha256:2353c161c79ab6cce955b50720c6cd03586ec297558122236d130e4a19f21209"}, 525 | ] 526 | 527 | [[package]] 528 | name = "types-toml" 529 | version = "0.10.8.7" 530 | description = "Typing stubs for toml" 531 | optional = false 532 | python-versions = "*" 533 | files = [ 534 | {file = "types-toml-0.10.8.7.tar.gz", hash = "sha256:58b0781c681e671ff0b5c0319309910689f4ab40e8a2431e205d70c94bb6efb1"}, 535 | {file = "types_toml-0.10.8.7-py3-none-any.whl", hash = "sha256:61951da6ad410794c97bec035d59376ce1cbf4453dc9b6f90477e81e4442d631"}, 536 | ] 537 | 538 | [[package]] 539 | name = "typing-extensions" 540 | version = "4.9.0" 541 | description = "Backported and Experimental Type Hints for Python 3.8+" 542 | optional = false 543 | python-versions = ">=3.8" 544 | files = [ 545 | {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, 546 | {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, 547 | ] 548 | 549 | [[package]] 550 | name = "uritemplate" 551 | version = "4.1.1" 552 | description = "Implementation of RFC 6570 URI Templates" 553 | optional = false 554 | python-versions = ">=3.6" 555 | files = [ 556 | {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, 557 | {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, 558 | ] 559 | 560 | [[package]] 561 | name = "urllib3" 562 | version = "2.1.0" 563 | description = "HTTP library with thread-safe connection pooling, file post, and more." 564 | optional = false 565 | python-versions = ">=3.8" 566 | files = [ 567 | {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, 568 | {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, 569 | ] 570 | 571 | [package.extras] 572 | brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] 573 | socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] 574 | zstd = ["zstandard (>=0.18.0)"] 575 | 576 | [[package]] 577 | name = "win32-setctime" 578 | version = "1.1.0" 579 | description = "A small Python utility to set file creation time on Windows" 580 | optional = false 581 | python-versions = ">=3.5" 582 | files = [ 583 | {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, 584 | {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, 585 | ] 586 | 587 | [package.extras] 588 | dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] 589 | 590 | [metadata] 591 | lock-version = "2.0" 592 | python-versions = "^3.9" 593 | content-hash = "4f6c9f1c40c4fcdb4e4472f5e30c758de96ae8f9431e8ca3b04cf0c933aff0b3" 594 | -------------------------------------------------------------------------------- /public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chriskthomas/good-first-issue/38424a9d9c68f19a567d2fddad0a1e850995c3c5/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chriskthomas/good-first-issue/38424a9d9c68f19a567d2fddad0a1e850995c3c5/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chriskthomas/good-first-issue/38424a9d9c68f19a567d2fddad0a1e850995c3c5/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chriskthomas/good-first-issue/38424a9d9c68f19a567d2fddad0a1e850995c3c5/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chriskthomas/good-first-issue/38424a9d9c68f19a567d2fddad0a1e850995c3c5/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chriskthomas/good-first-issue/38424a9d9c68f19a567d2fddad0a1e850995c3c5/public/favicon.ico -------------------------------------------------------------------------------- /public/gfi-logo-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chriskthomas/good-first-issue/38424a9d9c68f19a567d2fddad0a1e850995c3c5/public/icon.png -------------------------------------------------------------------------------- /public/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chriskthomas/good-first-issue/38424a9d9c68f19a567d2fddad0a1e850995c3c5/public/images/icon.png -------------------------------------------------------------------------------- /public/images/mailchimp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chriskthomas/good-first-issue/38424a9d9c68f19a567d2fddad0a1e850995c3c5/public/images/mailchimp.jpg -------------------------------------------------------------------------------- /public/images/meta.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chriskthomas/good-first-issue/38424a9d9c68f19a567d2fddad0a1e850995c3c5/public/images/meta.jpg -------------------------------------------------------------------------------- /public/readme-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /public/site.webmanifest: -------------------------------------------------------------------------------- 1 | {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#33cb9a","background_color":"#16181d","display":"standalone"} 2 | -------------------------------------------------------------------------------- /public/social/github.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /public/social/heart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /public/social/twitter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "good-first-issue" 3 | version = "0.1.0" 4 | description = "https://goodfirstissue.dev" 5 | license = "MIT" 6 | authors = ["Sanket Saurav "] 7 | 8 | [tool.poetry.dependencies] 9 | python = "^3.9" 10 | "github3.py" = "^4.0.1" 11 | toml = "^0.10.2" 12 | numerize = "^0.12" 13 | emoji = "^0.6.0" 14 | requests = "^2.23.0" 15 | python-slugify = "^4.0.1" 16 | 17 | [tool.poetry.group.dev.dependencies] 18 | ruff = "^0.1.8" 19 | types-toml = "^0.10.8.7" 20 | types-python-slugify = "^8.0.0.3" 21 | loguru = "^0.7.2" 22 | mypy = "^1.7.1" 23 | 24 | [tool.ruff] 25 | line-length = 120 26 | 27 | [build-system] 28 | requires = ["poetry-core"] 29 | build-backend = "poetry.core.masonry.api" 30 | -------------------------------------------------------------------------------- /sync.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | import path from 'path' 3 | import https from 'https' 4 | 5 | import { put, list } from '@vercel/blob' 6 | 7 | const dirToSync = './data' 8 | const filesToSync = ['generated.json', 'tags.json'] 9 | 10 | /** 11 | * Downloads a file from a given url to a specified destination. 12 | * 13 | * @param {string} url - The URL of the file to download. 14 | * @param {string} dest - The destination where the file should be saved. 15 | * @return {Promise} A Promise that resolves when the file has been downloaded. 16 | */ 17 | function downloadFile(url, dest) { 18 | return new Promise((resolve, reject) => { 19 | // Check if the file already exists 20 | const fileExists = fs.existsSync(dest) 21 | 22 | const file = fs.createWriteStream(dest, { flags: 'w' }) // 'w' flag for write mode 23 | 24 | https 25 | .get(url, (response) => { 26 | if (response.statusCode !== 200) { 27 | reject(new Error(`failed to download file: status code ${response.statusCode}`)) 28 | return 29 | } 30 | 31 | response.pipe(file) 32 | 33 | if (fileExists) { 34 | console.log(`file ${dest} already exists. overwriting.`) 35 | } 36 | }) 37 | .on('error', (err) => { 38 | reject(err) 39 | }) 40 | 41 | file.on('finish', () => { 42 | resolve() 43 | }) 44 | 45 | file.on('error', (err) => { 46 | fs.unlink(dest) // delete the file on error 47 | reject(err) 48 | }) 49 | }) 50 | } 51 | 52 | /** 53 | * Sync files from local to Vercel Blob 54 | */ 55 | async function syncFilesUp() { 56 | for (const fileName of filesToSync) { 57 | const filePath = path.resolve(path.join(dirToSync, fileName)) 58 | const stat = await fs.statSync(filePath) 59 | 60 | if (stat.isFile()) { 61 | const fileContent = await fs.readFileSync(filePath) 62 | await put(fileName, fileContent, { access: 'public', addRandomSuffix: false }) 63 | } 64 | } 65 | } 66 | 67 | /** 68 | * Sync files from Vercel Blob to local 69 | */ 70 | async function syncFilesDown() { 71 | const response = await list() 72 | for (const blob of response.blobs) { 73 | await downloadFile(blob.url, path.resolve(path.join(dirToSync, blob.pathname))) 74 | } 75 | } 76 | 77 | if (!("BLOB_READ_WRITE_TOKEN" in process.env)) { 78 | console.error('`BLOB_READ_WRITE_TOKEN` not set in env. exiting.') 79 | process.exit(1) // skicq: JS-0263 80 | } 81 | 82 | switch (process.argv[2]) { 83 | case 'up': 84 | await syncFilesUp() 85 | console.info('syncing up successful.') 86 | break 87 | case 'down': 88 | await syncFilesDown() 89 | console.info('syncing down successful.') 90 | break 91 | default: 92 | console.error('must provide a valid sync direction. exiting.') 93 | } 94 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | content: [], 4 | theme: { 5 | extend: { 6 | colors: { 7 | transparent: 'transparent', 8 | current: 'currentColor', 9 | juniper: '#33cb9a', 10 | light_juniper: '#2EB78B', 11 | robin: '#4568dc', 12 | slate: '#52575c', 13 | cherry: '#df6145', 14 | honey: '#f6d87c', 15 | aqua: '#23c4f8', 16 | gitlab: '#6753B5', 17 | vanilla: { 18 | 100: '#ffffff', 19 | 200: '#f5f5f5', 20 | 300: '#eeeeee', 21 | 400: '#c0c1c3' 22 | }, 23 | ink: { 24 | 100: '#373c49', 25 | 200: '#2c303a', 26 | 300: '#21242c', 27 | 400: '#16181d' 28 | } 29 | }, 30 | fontFamily: { 31 | sans: [ 32 | 'Inter', 33 | 'system-ui', 34 | '-apple-system', 35 | 'BlinkMacSystemFont', 36 | '"Segoe UI"', 37 | 'Roboto', 38 | '"Helvetica Neue"', 39 | 'Arial', 40 | '"Noto Sans"', 41 | 'sans-serif', 42 | '"Apple Color Emoji"', 43 | '"Segoe UI Emoji"', 44 | '"Segoe UI Symbol"', 45 | '"Noto Color Emoji"' 46 | ], 47 | serif: ['Georgia', 'Cambria', '"Times New Roman"', 'Times', 'serif'], 48 | mono: ['Menlo', 'Monaco', 'Consolas', '"Liberation Mono"', '"Courier New"', 'monospace'] 49 | } 50 | } 51 | }, 52 | plugins: [] 53 | } 54 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // https://nuxt.com/docs/guide/concepts/typescript 3 | "extends": "./.nuxt/tsconfig.json" 4 | } 5 | -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://openapi.vercel.sh/vercel.json", 3 | "buildCommand": "make generate-prod", 4 | "framework": "nuxtjs", 5 | "installCommand": "yum install -y python3-pip" 6 | } 7 | --------------------------------------------------------------------------------