Repository: carloscuesta/gitmoji Branch: master Commit: dc7b6915e132 Files: 118 Total size: 132.4 KB Directory structure: gitextract_os7qfgki/ ├── .editorconfig ├── .github/ │ ├── CONTRIBUTING.md │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ ├── config.yml │ │ ├── discussion.yml │ │ ├── feature-request.yml │ │ └── gitmoji-proposal.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── dependabot.yml │ └── workflows/ │ ├── ci.yml │ ├── lock.yml │ └── npm-publish.yml ├── .gitignore ├── .husky/ │ ├── .gitignore │ ├── pre-commit │ └── pre-push ├── .lintstagedrc.json ├── .node-version ├── AGENTS.md ├── LICENSE ├── README.md ├── package.json ├── packages/ │ ├── gitmojis/ │ │ ├── .lintstagedrc.json │ │ ├── README.md │ │ ├── package.json │ │ └── src/ │ │ ├── gitmojis.json │ │ ├── index.d.ts │ │ ├── index.js │ │ └── schema.json │ └── website/ │ ├── .lintstagedrc.json │ ├── __mocks__/ │ │ └── svg.js │ ├── eslint.config.mjs │ ├── jest.config.js │ ├── jest.d.ts │ ├── jest.setup.js │ ├── jsconfig.json │ ├── next-env.d.ts │ ├── next-sitemap.config.js │ ├── next-sitemap.js │ ├── next.config.js │ ├── package.json │ ├── public/ │ │ ├── _redirects │ │ └── static/ │ │ ├── browserconfig.xml │ │ ├── manifest.json │ │ └── opensearchdescription.xml │ ├── scripts/ │ │ └── generate-api.js │ ├── src/ │ │ ├── __tests__/ │ │ │ ├── pages.spec.tsx │ │ │ └── stubs.tsx │ │ ├── app/ │ │ │ ├── about/ │ │ │ │ └── page.tsx │ │ │ ├── contributors/ │ │ │ │ └── page.tsx │ │ │ ├── layout.tsx │ │ │ ├── page.tsx │ │ │ ├── related-tools/ │ │ │ │ └── page.tsx │ │ │ └── specification/ │ │ │ └── page.tsx │ │ ├── components/ │ │ │ ├── Button/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── button.spec.tsx │ │ │ │ │ └── stubs.ts │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── CarbonAd/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── carbonAd.spec.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── ContributorsList/ │ │ │ │ ├── Contributor/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── contributorsList.spec.tsx │ │ │ │ │ └── stubs.ts │ │ │ │ └── index.tsx │ │ │ ├── GitmojiList/ │ │ │ │ ├── Gitmoji/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── SearchParamsSync.tsx │ │ │ │ ├── Toolbar/ │ │ │ │ │ ├── Kbd/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ ├── ListModeSelector/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ ├── ThemeSelector/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── gitmojiList.spec.tsx │ │ │ │ │ └── stubs.ts │ │ │ │ ├── emojiColorsMap.ts │ │ │ │ ├── hooks/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ ├── stubs.ts │ │ │ │ │ │ └── useLocalStorage.spec.tsx │ │ │ │ │ └── useLocalStorage.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── Icon/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── icon.spec.tsx │ │ │ │ │ └── stubs.ts │ │ │ │ ├── definitions.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ └── Layout/ │ │ │ ├── Footer/ │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── Hamburger/ │ │ │ │ ├── CloseIcon/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── MenuLink/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── OpenIcon/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── Header/ │ │ │ │ ├── Logo/ │ │ │ │ │ ├── Status/ │ │ │ │ │ │ ├── Joy/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── Loved/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── Sexy/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── Smiling/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── Sunglasses/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── Tongue/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── __tests__/ │ │ │ │ ├── layout.spec.tsx │ │ │ │ └── stubs.ts │ │ │ └── index.tsx │ │ └── utils/ │ │ └── theme/ │ │ └── theme.css │ └── tsconfig.json ├── pnpm-workspace.yaml └── turbo.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .editorconfig ================================================ # http://editorconfig.org root = true [*] indent_style = spaces tab_width = 2 charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.md] trim_trailing_whitespace = false [*.js] indent_style = spaces tab_width = 2 charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true ================================================ FILE: .github/CONTRIBUTING.md ================================================ # Contributing to gitmoji Hello! Thanks for contributing on [gitmoji](https://github.com/carloscuesta/gitmoji). Before implementing new features and changes, please [submit an issue](https://github.com/carloscuesta/gitmoji/issues/new). We will discuss here! :stuck_out_tongue_winking_eye:. If you would like to add a new emoji to gitmoji, fill the provided `ISSUE_TEMPLATE` when creating an issue and take a look at the contributing section. ## How to submit a pull request? 1. Fork [this repository](https://github.com/carloscuesta/gitmoji/fork). 2. Create a new branch with the feature name. (Eg: add-emoji-deploy, fix-website-header) 3. Make your changes. 4. Test you changes by running `pnpm turbo test` - 4.1. If the snapshots are failing run `pnpm turbo test -- -u` and be sure that the new snapshots match your changes 5. Commit your changes. Don't forget to add a commit title with an emoji and a description. 6. Push your changes. 7. Submit your pull request. ## How to add a gitmoji 1. Open the **gitmojis.json** file located at `packages/gitmojis/src/gitmojis.json`. 2. Add your emoji using the following code inside of the `gitmojis array []`: 3. Add a new color to [the emojiColorsMap.js](https://github.com/carloscuesta/gitmoji/blob/master/packages/website/src/components/GitmojiList/emojiColorsMap.js) file. Matching the name you added at the JSON file. 4. Save the file and create a pull request. ```json { "emoji": "", "entity": "entity (Ex: 👀)", "code": ":code:", "description": "Enter the description for the gitmoji. Use present form for verbs.", "name": "code (same as code but without ':' replace underscores for dashes _ => - )", "semver": "The semantic versioning effect (can be `'major'`, `'minor'`, `'patch'` or `null` if the commit has no effect on the version)" } ``` If you want to find the hexadecimal entity of icon, search for it in this site: http://graphemica.com/ Every suggestion will be reviewed carefully, ⚠️ take into account that not every suggestion will be accepted! ## How to start the website If you want to make changes to the site, follow the next steps: 1. Clone gitmoji ```bash $ git clone https://github.com/carloscuesta/gitmoji.git $ cd gitmoji ``` 2. Install the dependencies and start the development server. ```bash $ pnpm install && pnpm run dev ``` The project is built with [Next.js](http://nextjs.org) ================================================ FILE: .github/FUNDING.yml ================================================ # These are supported funding model platforms github: ['carloscuesta'] custom: ['https://paypal.me/carloscuesta'] ================================================ FILE: .github/ISSUE_TEMPLATE/bug-report.yml ================================================ name: 🐛 Bug report description: Report an issue body: - type: markdown attributes: value: | Thanks for taking the time to fill out this bug report! - type: textarea id: bug-description attributes: label: Describe the bug description: A clear description the bug. If you want to contribute to fix this issue, tell us in the description. placeholder: Description validations: required: true - type: textarea id: reproduction attributes: label: Reproduction description: A [minimal reproduction](https://stackoverflow.com/help/minimal-reproducible-example) is **required**, otherwise the issue might be closed without further notice. placeholder: Reproduction validations: required: true - type: textarea id: system-info attributes: label: System Info description: Output of `npx envinfo --system --binaries --browsers` render: Shell placeholder: Paste the output of the following command validations: required: true - type: checkboxes id: validations attributes: label: Validations description: Before submitting the issue, please make sure you do the following options: - label: Follow our [Code of Conduct](https://github.com/carloscuesta/.github/blob/master/.github/CODE_OF_CONDUCT.md) required: true - label: Read the [Contributing Guide](https://github.com/carloscuesta/gitmoji/blob/master/.github/CONTRIBUTING.md). required: true - label: Check that there isn't already an issue that reports the same bug to avoid creating duplicates. required: true - label: Check that this is a concrete bug. For Q&A, please open a GitHub Discussion instead. required: true - label: The provided reproduction is a [minimal reproducible](https://stackoverflow.com/help/minimal-reproducible-example) of the bug. required: true ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: 😍 Contribution Guide url: https://github.com/carloscuesta/gitmoji/blob/master/.github/CONTRIBUTING.md#contributing-to-gitmoji about: Please read through before making any contribution. ================================================ FILE: .github/ISSUE_TEMPLATE/discussion.yml ================================================ name: ⁉️ Discussion description: Want to discuss something? Use this template labels: [discussion] body: - type: markdown attributes: value: | Thanks for your interest in the project and taking the time to fill out this discussion report! - type: textarea id: discussion-description attributes: label: Discussion description: 'Explain the matter here!' validations: required: true - type: checkboxes id: checkboxes attributes: label: Validations description: Before submitting the issue, please make sure you do the following options: - label: Follow our [Code of Conduct](https://github.com/carloscuesta/.github/blob/master/.github/CODE_OF_CONDUCT.md) required: true - label: Read the [Contributing Guide](https://github.com/carloscuesta/gitmoji/blob/master/.github/CONTRIBUTING.md). required: true - label: Check that there isn't already an issue requesting the same feature. required: true ================================================ FILE: .github/ISSUE_TEMPLATE/feature-request.yml ================================================ name: 🚀 Feature proposal description: Propose a new feature labels: [feature] body: - type: markdown attributes: value: | Thanks for your interest in the project and taking the time to fill out this feature report! - type: textarea id: feature-description attributes: label: Description of the problem description: 'As a user I want [goal] so that [benefit]. If you want to contribute with a PR, tell us in the description. Thanks!' validations: required: true - type: textarea id: suggested-solution attributes: label: Solution description: 'In module [xy] we could provide following implementation...' validations: required: true - type: textarea id: alternative attributes: label: Alternatives description: Explain any alternative solutions or features you've considered. - type: textarea id: additional-context attributes: label: Additional context description: Any other context or screenshots about the feature. - type: checkboxes id: checkboxes attributes: label: Validations description: Before submitting the issue, please make sure you do the following options: - label: Follow our [Code of Conduct](https://github.com/carloscuesta/.github/blob/master/.github/CODE_OF_CONDUCT.md) required: true - label: Read the [Contributing Guide](https://github.com/carloscuesta/gitmoji/blob/master/.github/CONTRIBUTING.md). required: true - label: Check that there isn't already an issue requesting the same feature. required: true ================================================ FILE: .github/ISSUE_TEMPLATE/gitmoji-proposal.yml ================================================ name: 😜 Gitmoji proposal description: Suggest a new gitmoji! labels: [emoji] body: - type: markdown attributes: value: | Thanks for your interest in the project and taking the time to fill out this gitmoji suggestion! - type: input id: emoji-symbol attributes: label: Emoji symbol description: The emoji symbol you want to suggest. placeholder: "🚀" validations: required: true - type: input id: emoji-shortcode attributes: label: Emoji code description: The ":shortcode:" of the emoji on GitHub. placeholder: ":rocket:" validations: required: true - type: input id: emoji-description attributes: label: Emoji description description: A short description of the emoji. placeholder: What this emoji should be used for? validations: required: true - type: textarea id: emoji-use-case attributes: label: Describe the use case of your emoji description: Explain the creation of this emoji, what this is and when it should be used placeholder: Use case validations: required: true - type: dropdown id: emoji-use-case-covered attributes: label: Is this use case covered by an existing emoji? options: - "Yes ✅" - "No ❌" validations: required: true - type: checkboxes id: emoji-what-how attributes: label: Does this emoji fall into the "how" or the "what" category? description: | We are trying to always describe/categorize "what" has been done in a particular commit, not the "how" it was done (the exceptions being :poop: and :beers:). Notice here that, by the descriptions on the "how" category, you can't know what has been achieved in the commit. | Examples of "what" commits | Examples of "how" commits | | -------------------------- | ------------------------- | | :white_check_mark: Add, update, or pass tests | :hankey: Write bad code that needs to be improved | | :lock: Fix security or privacy issues | :beers: Write code drunkenly | | :zap: Improve performance | :robot: Write an automated commit by a script | options: - label: This proposal do **not** describe "how" a commit was made, but does in fact describe "what" is the contents of the commit about. required: true validations: required: true - type: textarea id: emoji-examples attributes: label: Examples description: Include some examples using this emoji. placeholder: Examples validations: required: true - type: checkboxes id: checkboxes attributes: label: Validations description: Before submitting the issue, please make sure you do the following options: - label: Follow our [Code of Conduct](https://github.com/carloscuesta/.github/blob/master/.github/CODE_OF_CONDUCT.md) required: true - label: Read the [Contributing Guide](https://github.com/carloscuesta/gitmoji/blob/master/.github/CONTRIBUTING.md). required: true - label: Check that there isn't already an issue requesting the emoji. required: true ================================================ FILE: .github/PULL_REQUEST_TEMPLATE.md ================================================ ## Description ## Linked issues ================================================ FILE: .github/dependabot.yml ================================================ version: 2 updates: - package-ecosystem: npm directory: "/" schedule: interval: monthly time: "04:00" open-pull-requests-limit: 10 labels: - "dependencies" versioning-strategy: increase - package-ecosystem: "github-actions" directory: "/" schedule: interval: monthly time: "04:00" labels: - "dependencies" ================================================ FILE: .github/workflows/ci.yml ================================================ name: CI on: push: branches: [master] pull_request: branches: [master] jobs: ci: runs-on: ubuntu-latest env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} steps: - uses: actions/checkout@v6 - uses: pnpm/action-setup@v4 - name: Install Node.js uses: actions/setup-node@v6 with: cache: "pnpm" node-version-file: ".node-version" - name: Install dependencies 📦 run: pnpm install - name: Lint 🎨 run: pnpm turbo lint - name: TypeScript check 🏷 run: pnpm turbo tscheck - name: Tests ✅ run: pnpm turbo test ================================================ FILE: .github/workflows/lock.yml ================================================ name: Lock Issues and PRs on: schedule: - cron: '0 0 * * *' jobs: lock: runs-on: ubuntu-latest steps: - uses: dessant/lock-threads@v6 with: github-token: ${{ github.token }} issue-inactive-days: '1' pr-inactive-days: '1' ================================================ FILE: .github/workflows/npm-publish.yml ================================================ name: NPM Publish on: push: tags: - "v*" permissions: id-token: write contents: write jobs: npm-publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v6 with: cache: "pnpm" node-version-file: ".node-version" - name: Install dependencies 📦 run: pnpm install - name: Build 👷‍♂️ run: pnpm turbo run build --filter=gitmojis - name: Publish package to NPM 🚀 run: pnpm turbo publishPackage - name: Publish GitHub Release 📝 uses: softprops/action-gh-release@v2 with: name: gitmoji ${{github.ref_name}} generate_release_notes: true ================================================ FILE: .gitignore ================================================ .DS_Store dist/ node_modules/ .publish/ .next out/ coverage/ .eslintcache *.log .pnp.* # next-pwa packages/website/public/workbox-*.js packages/website/public/workbox-*.js packages/website/public/sw.js packages/website/public/sw.js packages/website/public/*.map # next-sitemap packages/website/public/robots.txt packages/website/public/sitemap.xml packages/website/public/sitemap-*.xml # gitmojis packages/website/public/api/ # TS *.tsbuildinfo # Turbo .turbo ================================================ FILE: .husky/.gitignore ================================================ _ ================================================ FILE: .husky/pre-commit ================================================ pnpm exec lint-staged ================================================ FILE: .husky/pre-push ================================================ pnpm turbo tscheck && pnpm turbo test ================================================ FILE: .lintstagedrc.json ================================================ { "*.json": ["prettier --write"], "*.md": ["prettier --write"], "*.yml": ["prettier --write"] } ================================================ FILE: .node-version ================================================ 24 ================================================ FILE: AGENTS.md ================================================ # Gitmoji Guide for AI Assistants ## Purpose This guide helps AI assistants understand and use gitmoji convention when creating commits. Using emojis on commit messages provides an easy way of identifying the purpose or intention of a commit with only looking at the emojis used. Gitmoji use emojis to make commit messages more expressive and easier to understand at a glance. ## Official Specification A gitmoji commit message is composed using the following pieces: - **intention**: The intention you want to express with the commit, using an emoji from the gitmoji list. Either in the `:shortcode:` or unicode format. - **scope**: An optional string that adds contextual information for the scope of the change. - **message**: A brief explanation of the change. ### Format ``` [scope?][:?] [optional body] ``` ## Gitmoji reference Fetch all available gitmojis from: https://gitmoji.dev/api/gitmojis. ## Usage Guidelines for AI ### Selecting the correct emoji 1. **Identify the primary purpose** of the commit 2. **Choose the most specific emoji** that matches the change 3. **Use only one emoji** per commit for clarity 4. **Prioritize by impact**: Breaking changes (💥) > Features (✨) > Fixes (🐛) > Refactoring (♻️) ### Examples ``` ✨ feat: Add user authentication system Implement JWT-based authentication with login and registration endpoints. Closes #123 ``` ``` 🐛 Resolve null pointer exception in user service Added null check before accessing user properties to prevent crashes. ``` ``` 📝 docs: Update installation instructions Added step-by-step guide for setting up the development environment. ``` ``` ⚡️ Optimize user query with indexing Reduced query time from 500ms to 50ms by adding composite index. ``` ``` 💥 Update API response format to REST specification All API endpoints now return data in a standardized envelope format. Clients must update their response parsing logic. ``` ## Best Practices 1. **Be atomic**: One emoji, one purpose, one commit 2. **Write clear subjects**: Keep under 60 characters, imperative mood 3. **Use the body**: Explain "why" not "what" for complex changes 4. **Reference issues**: Include issue numbers when applicable 5. **Indicate breaking changes**: Use 💥 `:boom:`. ## Resources - Gitmojis list: https://gitmoji.dev/api/gitmojis - Gitmoji website: https://gitmoji.dev/ - Gitmoji specification: https://gitmoji.dev/specification ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2016-2022 Carlos Cuesta 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 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. ================================================ FILE: README.md ================================================

gitmoji

Build Status Gitmoji

## About [Gitmoji](https://gitmoji.dev) is an initiative to standardize and explain **the use of emojis on GitHub commit messages**. **Using emojis** on **commit messages** provides an **easy way** of **identifying the purpose or intention of a commit** with only looking at the emojis used. As there are a lot of different emojis I found the need of creating a guide that can help to use emojis easier. The gitmojis are published on the [following package](https://www.npmjs.com/package/gitmojis) in order to be used as a dependency 📦. ## Using [gitmoji-cli](https://github.com/carloscuesta/gitmoji-cli) To use gitmojis from your command line install [gitmoji-cli](https://github.com/carloscuesta/gitmoji-cli). A gitmoji interactive client for using emojis on commit messages. ```bash npm i -g gitmoji-cli ``` ## Example of usage In case you need some ideas to integrate gitmoji in your project, here's a practical way to use it: ``` [scope?][:?] ``` - `intention`: An emoji from the list. - `scope`: An optional string that adds contextual information for the scope of the change. - `message`: A brief explanation of the change. ## Contributing to gitmoji Contributing to gitmoji is a piece of :cake:, read the [contributing guidelines](https://github.com/carloscuesta/gitmoji/blob/master/.github/CONTRIBUTING.md). You can discuss emojis using the [issues section](https://github.com/carloscuesta/gitmoji/issues/new). To add a new emoji to the list create an issue and send a pull request, see [how to send a pull request and add a gitmoji](https://github.com/carloscuesta/gitmoji/blob/master/.github/CONTRIBUTING.md#how-to-add-a-gitmoji). ## Spread the word Are you using Gitmoji on your project? Set the Gitmoji badge on top of your readme using this code: ```html Gitmoji ``` ## License The code is available under the [MIT](https://github.com/carloscuesta/gitmoji/blob/master/LICENSE) license. ================================================ FILE: package.json ================================================ { "name": "gitmoji", "private": true, "engines": { "node": "22", "pnpm": ">=8" }, "scripts": { "prepare": "husky install", "dev": "pnpm turbo --parallel dev" }, "devDependencies": { "husky": "^9.1.7", "lint-staged": "^16.2.7", "prettier": "3.8.1", "turbo": "2.8.16" }, "packageManager": "pnpm@8.6.2" } ================================================ FILE: packages/gitmojis/.lintstagedrc.json ================================================ { "./src/*.json": ["prettier --write ./src/*.json"], "./src/*.ts": ["prettier --write ./src/*.ts"], "./src/*.js": ["prettier --write ./src/*.js"] } ================================================ FILE: packages/gitmojis/README.md ================================================

gitmoji

Build Status Gitmoji

## About The emojis from the [gitmoji](https://gitmoji.dev) convention **bundled** into a **node module**. ## Install ```bash npm i gitmojis ``` ## Usage ```js import { gitmojis } from 'gitmojis' console.log(gitmojis) /* [ { emoji: '🎨', entity: '🎨', code: ':art:', description: 'Improve structure / format of the code.', name: 'art', semver: null }, { emoji: '⚡️', entity: '⚡', code: ':zap:', description: 'Improve performance.', name: 'zap', semver: null }, ... ] */ ``` ## API Alternatively you can also consume this as through HTTP using the API: ```bash curl https://gitmoji.dev/api/gitmojis ``` ## Spread the word Are you using Gitmoji on your project? Set the Gitmoji badge on top of your readme using this code: ```html Gitmoji ``` ================================================ FILE: packages/gitmojis/package.json ================================================ { "name": "gitmojis", "type": "module", "version": "3.15.0", "description": "An emoji guide for your commit messages.", "main": "./dist/index.cjs", "types": "./dist/index.d.ts", "exports": { ".": { "import": "./dist/index.mjs", "require": "./dist/index.cjs" } }, "files": [ "dist" ], "scripts": { "dev": "nodemon --exec 'pnpm run build' --watch ./src", "build": "unbuild", "lint:json": "ajv --spec=draft2020 validate -s ./src/schema.json -d ./src/gitmojis.json", "lint": "pnpm run lint:json && prettier --check ./src/**/*.{js,json,ts}", "publishPackage": "npm publish" }, "devDependencies": { "ajv-cli": "^5.0.0", "lint-staged": "^16.2.7", "nodemon": "^3.1.14", "prettier": "3.8.1", "unbuild": "^3.6.1" }, "author": { "name": "carloscuesta", "email": "hi@carloscuesta.me", "url": "https://carloscuesta.me" }, "license": "MIT", "bugs": { "url": "https://github.com/carloscuesta/gitmoji/issues" }, "repository": { "type": "git", "url": "git+https://github.com/carloscuesta/gitmoji.git" }, "homepage": "https://gitmoji.dev", "keywords": [ "gitmoji", "emoji", "carloscuesta", "commit" ], "prettier": { "semi": false, "singleQuote": true, "arrowParens": "always" } } ================================================ FILE: packages/gitmojis/src/gitmojis.json ================================================ { "$schema": "https://gitmoji.dev/api/gitmojis/schema", "gitmojis": [ { "emoji": "🎨", "entity": "🎨", "code": ":art:", "description": "Improve structure / format of the code.", "name": "art", "semver": null }, { "emoji": "⚡️", "entity": "⚡", "code": ":zap:", "description": "Improve performance.", "name": "zap", "semver": "patch" }, { "emoji": "🔥", "entity": "🔥", "code": ":fire:", "description": "Remove code or files.", "name": "fire", "semver": null }, { "emoji": "🐛", "entity": "🐛", "code": ":bug:", "description": "Fix a bug.", "name": "bug", "semver": "patch" }, { "emoji": "🚑️", "entity": "🚑", "code": ":ambulance:", "description": "Critical hotfix.", "name": "ambulance", "semver": "patch" }, { "emoji": "✨", "entity": "✨", "code": ":sparkles:", "description": "Introduce new features.", "name": "sparkles", "semver": "minor" }, { "emoji": "📝", "entity": "📝", "code": ":memo:", "description": "Add or update documentation.", "name": "memo", "semver": null }, { "emoji": "🚀", "entity": "🚀", "code": ":rocket:", "description": "Deploy stuff.", "name": "rocket", "semver": null }, { "emoji": "💄", "entity": "&#ff99cc;", "code": ":lipstick:", "description": "Add or update the UI and style files.", "name": "lipstick", "semver": "patch" }, { "emoji": "🎉", "entity": "🎉", "code": ":tada:", "description": "Begin a project.", "name": "tada", "semver": null }, { "emoji": "✅", "entity": "✅", "code": ":white_check_mark:", "description": "Add, update, or pass tests.", "name": "white-check-mark", "semver": null }, { "emoji": "🔒️", "entity": "🔒", "code": ":lock:", "description": "Fix security or privacy issues.", "name": "lock", "semver": "patch" }, { "emoji": "🔐", "entity": "🔐", "code": ":closed_lock_with_key:", "description": "Add or update secrets.", "name": "closed-lock-with-key", "semver": null }, { "emoji": "🔖", "entity": "🔖", "code": ":bookmark:", "description": "Release / Version tags.", "name": "bookmark", "semver": null }, { "emoji": "🚨", "entity": "🚨", "code": ":rotating_light:", "description": "Fix compiler / linter warnings.", "name": "rotating-light", "semver": null }, { "emoji": "🚧", "entity": "🚧", "code": ":construction:", "description": "Work in progress.", "name": "construction", "semver": null }, { "emoji": "💚", "entity": "💚", "code": ":green_heart:", "description": "Fix CI Build.", "name": "green-heart", "semver": null }, { "emoji": "⬇️", "entity": "⬇️", "code": ":arrow_down:", "description": "Downgrade dependencies.", "name": "arrow-down", "semver": "patch" }, { "emoji": "⬆️", "entity": "⬆️", "code": ":arrow_up:", "description": "Upgrade dependencies.", "name": "arrow-up", "semver": "patch" }, { "emoji": "📌", "entity": "📌", "code": ":pushpin:", "description": "Pin dependencies to specific versions.", "name": "pushpin", "semver": "patch" }, { "emoji": "👷", "entity": "👷", "code": ":construction_worker:", "description": "Add or update CI build system.", "name": "construction-worker", "semver": null }, { "emoji": "📈", "entity": "📈", "code": ":chart_with_upwards_trend:", "description": "Add or update analytics or track code.", "name": "chart-with-upwards-trend", "semver": "patch" }, { "emoji": "♻️", "entity": "♻", "code": ":recycle:", "description": "Refactor code.", "name": "recycle", "semver": null }, { "emoji": "➕", "entity": "➕", "code": ":heavy_plus_sign:", "description": "Add a dependency.", "name": "heavy-plus-sign", "semver": "patch" }, { "emoji": "➖", "entity": "➖", "code": ":heavy_minus_sign:", "description": "Remove a dependency.", "name": "heavy-minus-sign", "semver": "patch" }, { "emoji": "🔧", "entity": "🔧", "code": ":wrench:", "description": "Add or update configuration files.", "name": "wrench", "semver": "patch" }, { "emoji": "🔨", "entity": "🔨", "code": ":hammer:", "description": "Add or update development scripts.", "name": "hammer", "semver": null }, { "emoji": "🌐", "entity": "🌐", "code": ":globe_with_meridians:", "description": "Internationalization and localization.", "name": "globe-with-meridians", "semver": "patch" }, { "emoji": "✏️", "entity": "", "code": ":pencil2:", "description": "Fix typos.", "name": "pencil2", "semver": "patch" }, { "emoji": "💩", "entity": "", "code": ":poop:", "description": "Write bad code that needs to be improved.", "name": "poop", "semver": null }, { "emoji": "⏪️", "entity": "⏪", "code": ":rewind:", "description": "Revert changes.", "name": "rewind", "semver": "patch" }, { "emoji": "🔀", "entity": "🔀", "code": ":twisted_rightwards_arrows:", "description": "Merge branches.", "name": "twisted-rightwards-arrows", "semver": null }, { "emoji": "📦️", "entity": "F4E6;", "code": ":package:", "description": "Add or update compiled files or packages.", "name": "package", "semver": "patch" }, { "emoji": "👽️", "entity": "F47D;", "code": ":alien:", "description": "Update code due to external API changes.", "name": "alien", "semver": "patch" }, { "emoji": "🚚", "entity": "F69A;", "code": ":truck:", "description": "Move or rename resources (e.g.: files, paths, routes).", "name": "truck", "semver": null }, { "emoji": "📄", "entity": "F4C4;", "code": ":page_facing_up:", "description": "Add or update license.", "name": "page-facing-up", "semver": null }, { "emoji": "💥", "entity": "💥", "code": ":boom:", "description": "Introduce breaking changes.", "name": "boom", "semver": "major" }, { "emoji": "🍱", "entity": "F371", "code": ":bento:", "description": "Add or update assets.", "name": "bento", "semver": "patch" }, { "emoji": "♿️", "entity": "♿", "code": ":wheelchair:", "description": "Improve accessibility.", "name": "wheelchair", "semver": "patch" }, { "emoji": "💡", "entity": "💡", "code": ":bulb:", "description": "Add or update comments in source code.", "name": "bulb", "semver": null }, { "emoji": "🍻", "entity": "🍻", "code": ":beers:", "description": "Write code drunkenly.", "name": "beers", "semver": null }, { "emoji": "💬", "entity": "💬", "code": ":speech_balloon:", "description": "Add or update text and literals.", "name": "speech-balloon", "semver": "patch" }, { "emoji": "🗃️", "entity": "🗃", "code": ":card_file_box:", "description": "Perform database related changes.", "name": "card-file-box", "semver": "patch" }, { "emoji": "🔊", "entity": "🔊", "code": ":loud_sound:", "description": "Add or update logs.", "name": "loud-sound", "semver": null }, { "emoji": "🔇", "entity": "🔇", "code": ":mute:", "description": "Remove logs.", "name": "mute", "semver": null }, { "emoji": "👥", "entity": "👥", "code": ":busts_in_silhouette:", "description": "Add or update contributor(s).", "name": "busts-in-silhouette", "semver": null }, { "emoji": "🚸", "entity": "🚸", "code": ":children_crossing:", "description": "Improve user experience / usability.", "name": "children-crossing", "semver": "patch" }, { "emoji": "🏗️", "entity": "f3d7;", "code": ":building_construction:", "description": "Make architectural changes.", "name": "building-construction", "semver": null }, { "emoji": "📱", "entity": "📱", "code": ":iphone:", "description": "Work on responsive design.", "name": "iphone", "semver": "patch" }, { "emoji": "🤡", "entity": "🤡", "code": ":clown_face:", "description": "Mock things.", "name": "clown-face", "semver": null }, { "emoji": "🥚", "entity": "🥚", "code": ":egg:", "description": "Add or update an easter egg.", "name": "egg", "semver": "patch" }, { "emoji": "🙈", "entity": "bdfe7;", "code": ":see_no_evil:", "description": "Add or update a .gitignore file.", "name": "see-no-evil", "semver": null }, { "emoji": "📸", "entity": "📸", "code": ":camera_flash:", "description": "Add or update snapshots.", "name": "camera-flash", "semver": null }, { "emoji": "⚗️", "entity": "⚗", "code": ":alembic:", "description": "Perform experiments.", "name": "alembic", "semver": "patch" }, { "emoji": "🔍️", "entity": "🔍", "code": ":mag:", "description": "Improve SEO.", "name": "mag", "semver": "patch" }, { "emoji": "🏷️", "entity": "🏷", "code": ":label:", "description": "Add or update types.", "name": "label", "semver": "patch" }, { "emoji": "🌱", "entity": "🌱", "code": ":seedling:", "description": "Add or update seed files.", "name": "seedling", "semver": null }, { "emoji": "🚩", "entity": "🚩", "code": ":triangular_flag_on_post:", "description": "Add, update, or remove feature flags.", "name": "triangular-flag-on-post", "semver": "patch" }, { "emoji": "🥅", "entity": "🥅", "code": ":goal_net:", "description": "Catch errors.", "name": "goal-net", "semver": "patch" }, { "emoji": "💫", "entity": "💫", "code": ":dizzy:", "description": "Add or update animations and transitions.", "name": "dizzy", "semver": "patch" }, { "emoji": "🗑️", "entity": "🗑", "code": ":wastebasket:", "description": "Deprecate code that needs to be cleaned up.", "name": "wastebasket", "semver": "patch" }, { "emoji": "🛂", "entity": "🛂", "code": ":passport_control:", "description": "Work on code related to authorization, roles and permissions.", "name": "passport-control", "semver": "patch" }, { "emoji": "🩹", "entity": "🩹", "code": ":adhesive_bandage:", "description": "Simple fix for a non-critical issue.", "name": "adhesive-bandage", "semver": "patch" }, { "emoji": "🧐", "entity": "🧐", "code": ":monocle_face:", "description": "Data exploration/inspection.", "name": "monocle-face", "semver": null }, { "emoji": "⚰️", "entity": "⚰", "code": ":coffin:", "description": "Remove dead code.", "name": "coffin", "semver": null }, { "emoji": "🧪", "entity": "🧪", "code": ":test_tube:", "description": "Add a failing test.", "name": "test-tube", "semver": null }, { "emoji": "👔", "entity": "👔", "code": ":necktie:", "description": "Add or update business logic.", "name": "necktie", "semver": "patch" }, { "emoji": "🩺", "entity": "🩺", "code": ":stethoscope:", "description": "Add or update healthcheck.", "name": "stethoscope", "semver": null }, { "emoji": "🧱", "entity": "🧱", "code": ":bricks:", "description": "Infrastructure related changes.", "name": "bricks", "semver": null }, { "emoji": "🧑‍💻", "entity": "🧑‍💻", "code": ":technologist:", "description": "Improve developer experience.", "name": "technologist", "semver": null }, { "emoji": "💸", "entity": "💸", "code": ":money_with_wings:", "description": "Add sponsorships or money related infrastructure.", "name": "money-with-wings", "semver": null }, { "emoji": "🧵", "entity": "🧵", "code": ":thread:", "description": "Add or update code related to multithreading or concurrency.", "name": "thread", "semver": null }, { "emoji": "🦺", "entity": "🦺", "code": ":safety_vest:", "description": "Add or update code related to validation.", "name": "safety-vest", "semver": null }, { "emoji": "✈️", "entity": "✈", "code": ":airplane:", "description": "Improve offline support.", "name": "airplane", "semver": null }, { "emoji": "🦖", "entity": "✈", "code": ":t-rex:", "description": "Code that adds backwards compatibility.", "name": "t-rex", "semver": null } ] } ================================================ FILE: packages/gitmojis/src/index.d.ts ================================================ declare module 'gitmojis' { type Gitmoji = { /** * Gitmoji unicode character * @example '🎨', '⚡️', '🔥', '🐛' */ readonly emoji: string /** * Gitmoji hexadecimal entity. * @example '🎨', '⚡', '🔥', '🐛' */ readonly entity: `&#${string};` /** * Gitmoji use-case description. */ readonly description: string /** * Gitmoji name. * @example 'art', 'zap', 'fire', 'bug' */ readonly name: string /** * Gitmoji semver range. Can be `null` if not specified. */ readonly semver: 'patch' | 'minor' | 'major' | null /** * Gitmoji character formatted as a shortcode. * @example ':art:', ':zap:', ':fire:', ':bug:' */ readonly code: `:${string}:` } export const gitmojis: readonly Gitmoji[] export const schema: readonly any } ================================================ FILE: packages/gitmojis/src/index.js ================================================ import gitmojisJson from './gitmojis.json' assert { type: 'json' } export { default as schema } from './schema.json' assert { type: 'json' } export const gitmojis = gitmojisJson.gitmojis ================================================ FILE: packages/gitmojis/src/schema.json ================================================ { "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": ["gitmojis"], "properties": { "gitmojis": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "object", "required": [ "emoji", "entity", "code", "description", "name", "semver" ], "properties": { "code": { "type": "string" }, "entity": { "type": "string" }, "description": { "type": "string" }, "emoji": { "type": "string" }, "name": { "type": "string" }, "semver": { "enum": ["major", "minor", "patch", null] } } } } } } ================================================ FILE: packages/website/.lintstagedrc.json ================================================ { "./src/**/*.{ts,tsx,css}": [ "eslint --cache --fix", "prettier --write ./src/**/*.{ts,tsx,css}" ] } ================================================ FILE: packages/website/__mocks__/svg.js ================================================ module.exports = 'svg-mock' ================================================ FILE: packages/website/eslint.config.mjs ================================================ import { FlatCompat } from '@eslint/eslintrc' import js from '@eslint/js' import typescriptParser from '@typescript-eslint/parser' import typescriptPlugin from '@typescript-eslint/eslint-plugin' import reactPlugin from 'eslint-plugin-react' import importPlugin from 'eslint-plugin-import' import nextPlugin from '@next/eslint-plugin-next' import prettierConfig from 'eslint-config-prettier' import path from 'path' import { fileURLToPath } from 'url' const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) const compat = new FlatCompat({ baseDirectory: __dirname, }) export default [ js.configs.recommended, ...compat.extends('plugin:@typescript-eslint/recommended'), prettierConfig, { files: ['**/*.{js,mjs,cjs,ts,tsx}'], languageOptions: { parser: typescriptParser, parserOptions: { ecmaVersion: 12, sourceType: 'module', ecmaFeatures: { jsx: true, }, }, globals: { React: 'readonly', JSX: 'readonly', window: 'readonly', document: 'readonly', navigator: 'readonly', console: 'readonly', process: 'readonly', __dirname: 'readonly', __filename: 'readonly', module: 'readonly', require: 'readonly', jest: 'readonly', describe: 'readonly', it: 'readonly', test: 'readonly', expect: 'readonly', beforeAll: 'readonly', beforeEach: 'readonly', afterAll: 'readonly', afterEach: 'readonly', }, }, plugins: { '@typescript-eslint': typescriptPlugin, react: reactPlugin, import: importPlugin, '@next/next': nextPlugin, }, settings: { react: { version: 'detect', }, 'import/resolver': { typescript: true, node: true, alias: { map: [['src', './src']], }, }, }, rules: { 'react/react-in-jsx-scope': 'off', '@next/next/no-img-element': 'off', 'react/no-unknown-property': [ 'error', { ignore: ['jsx', 'global'], }, ], 'import/order': [ 'error', { groups: [ ['builtin', 'external'], ['internal', 'parent', 'sibling', 'index'], ], 'newlines-between': 'always', }, ], }, }, ] ================================================ FILE: packages/website/jest.config.js ================================================ const nextJest = require('next/jest') const createJestConfig = nextJest({ dir: './' }) async function jestConfig() { const nextJestConfig = await createJestConfig({ "collectCoverageFrom": [ "src/**/*.{ts,tsx}", ], "testMatch": [ "**/*.(spec).(ts)", "**/*.(spec).(tsx)" ], "moduleNameMapper": { "src/(.*)$": "/src/$1", "\\.svg$": "/__mocks__/svg.js" }, "testEnvironment": "jsdom", "setupFilesAfterEnv": ["/jest.setup.js"], "reporters": [ "default", "github-actions" ] })() // Add ignores for specific ESM packages so they are transformed by Jest // See: https://github.com/vercel/next.js/issues/35634 nextJestConfig.transformIgnorePatterns[0] = '/node_modules/(!@vercel/analytics)/' return nextJestConfig } module.exports = jestConfig ================================================ FILE: packages/website/jest.d.ts ================================================ /// ================================================ FILE: packages/website/jest.setup.js ================================================ import '@testing-library/jest-dom' import React from 'react' // Mock next/dynamic to load components synchronously in tests jest.mock('next/dynamic', () => ({ __esModule: true, default: (...args) => { const dynamicModule = jest.requireActual('next/dynamic') const dynamicActualComp = dynamicModule.default const RequiredComponent = dynamicActualComp(args[0]) RequiredComponent.preload ? RequiredComponent.preload() : RequiredComponent.render.preload() return RequiredComponent }, })) // Mock matchMedia for components that use it Object.defineProperty(window, 'matchMedia', { writable: true, value: jest.fn().mockImplementation((query) => ({ matches: false, media: query, onchange: null, addListener: jest.fn(), removeListener: jest.fn(), addEventListener: jest.fn(), removeEventListener: jest.fn(), dispatchEvent: jest.fn(), })), }) // Silence known React/JSDOM warnings in tests that don't affect functionality const originalError = console.error beforeAll(() => { console.error = (...args) => { // Suppress SVG element warnings - these are JSDOM limitations, not actual errors // The SVG elements work fine in real browsers if ( typeof args[0] === 'string' && (args[0].includes('The tag <') && args[0].includes('is unrecognized in this browser')) ) { return } originalError.call(console, ...args) } }) afterAll(() => { console.error = originalError }) // Mock SVG namespace attributes for JSDOM // JSDOM doesn't fully support SVG namespaced attributes like xlink:href const originalCreateElement = document.createElement.bind(document) const originalCreateElementNS = document.createElementNS.bind(document) document.createElement = function (tagName, options) { const element = originalCreateElement(tagName, options) if (tagName.toLowerCase() === 'svg') { element.setAttribute = function (name, value) { if (name === 'xlinkHref') { this.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', value) } else { Element.prototype.setAttribute.call(this, name, value) } } } return element } document.createElementNS = function (namespaceURI, qualifiedName) { const element = originalCreateElementNS(namespaceURI, qualifiedName) if (namespaceURI === 'http://www.w3.org/2000/svg') { element.setAttribute = function (name, value) { if (name === 'xlinkHref') { this.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', value) } else { Element.prototype.setAttribute.call(this, name, value) } } } return element } ================================================ FILE: packages/website/jsconfig.json ================================================ { "compilerOptions": { "baseUrl": "." } } ================================================ FILE: packages/website/next-env.d.ts ================================================ /// /// import "./.next/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. ================================================ FILE: packages/website/next-sitemap.config.js ================================================ /** @type {import('next-sitemap').IConfig} */ module.exports = { siteUrl: 'https://gitmoji.dev', generateRobotsTxt: true, } ================================================ FILE: packages/website/next-sitemap.js ================================================ module.exports = { siteUrl: 'https://gitmoji.dev', generateRobotsTxt: true, } ================================================ FILE: packages/website/next.config.js ================================================ module.exports = { reactStrictMode: true, output: 'export', } ================================================ FILE: packages/website/package.json ================================================ { "name": "website", "private": true, "version": "1.0.0", "engines": { "node": "24" }, "scripts": { "build": "node scripts/generate-api.js && next build && next-sitemap", "tscheck": "pnpm exec tsc --noEmit", "dev": "next dev", "lint": "eslint ./src && prettier --check ./src/**/*.{ts,tsx,css}", "start": "next start", "test": "FORCE_COLOR=1 jest --coverage" }, "devDependencies": { "@eslint/eslintrc": "3.3.3", "@eslint/js": "9.39.2", "@next/eslint-plugin-next": "16.1.6", "@testing-library/jest-dom": "6.9.1", "@testing-library/react": "16.3.2", "@testing-library/user-event": "14.6.1", "@types/fetch-mock": "^7.3.8", "@types/jest": "^29.5.14", "@types/react": "^19.2.14", "@typescript-eslint/eslint-plugin": "^8.52.0", "@typescript-eslint/parser": "^8.53.0", "clipboard": "^2.0.11", "eslint": "^9.39.2", "eslint-config-next": "^16.1.6", "eslint-config-prettier": "^10.1.8", "eslint-import-resolver-alias": "^1.1.2", "eslint-import-resolver-typescript": "^4.4.4", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest": "^29.12.1", "eslint-plugin-react": "^7.37.5", "focus-trap-react": "^12.0.0", "gitmojis": "workspace:*", "jest": "^29.7.0", "jest-environment-jsdom": "^30.2.0", "jest-fetch-mock": "^3.0.3", "lint-staged": "^16.2.7", "next": "^16.1.6", "next-sitemap": "^4.2.3", "next-themes": "^0.4.6", "node-mocks-http": "^1.17.2", "prettier": "3.8.1", "prop-types": "^15.8.1", "react": "^19.2.4", "react-dom": "^19.2.4", "react-hot-toast": "^2.5.2", "typescript": "^5.9.3" }, "author": { "name": "carloscuesta", "email": "hi@carloscuesta.me", "url": "https://carloscuesta.me" }, "license": "MIT", "bugs": { "url": "https://github.com/carloscuesta/gitmoji/issues" }, "repository": { "type": "git", "url": "git+https://github.com/carloscuesta/gitmoji.git" }, "homepage": "https://gitmoji.dev", "keywords": [ "gitmoji", "emoji", "carloscuesta", "commit" ], "prettier": { "semi": false, "singleQuote": true, "arrowParens": "always" } } ================================================ FILE: packages/website/public/_redirects ================================================ /api/gitmojis /api/gitmojis/index.json 200 ================================================ FILE: packages/website/public/static/browserconfig.xml ================================================ #ffffff ================================================ FILE: packages/website/public/static/manifest.json ================================================ { "name": "Gitmoji", "display": "minimal-ui", "start_url": "/", "theme_color": "#FFDD67", "background_color": "#FFF", "icons": [ { "src": "/static/android-icon-36x36.png", "sizes": "36x36", "type": "image/png", "density": "0.75" }, { "src": "/static/android-icon-48x48.png", "sizes": "48x48", "type": "image/png", "density": "1.0" }, { "src": "/static/android-icon-72x72.png", "sizes": "72x72", "type": "image/png", "density": "1.5" }, { "src": "/static/android-icon-96x96.png", "sizes": "96x96", "type": "image/png", "density": "2.0" }, { "src": "/static/android-icon-144x144.png", "sizes": "144x144", "type": "image/png", "density": "3.0" }, { "src": "/static/android-icon-192x192.png", "sizes": "192x192", "type": "image/png", "density": "4.0" }, { "src": "/static/android-icon-512x512.png", "sizes": "512x512", "type": "image/png", "density": "4.0" }, { "src": "/static/maskable_icon.png", "sizes": "192x192", "type": "image/png", "purpose": "maskable" } ] } ================================================ FILE: packages/website/public/static/opensearchdescription.xml ================================================ Gitmoji An emoji guide for your commit messages. gitmoji emoji git https://gitmoji.dev/static/favicon-16x16.png https://gitmoji.dev/static/favicon-32x32.png https://gitmoji.dev/static/favicon-96x96.png ================================================ FILE: packages/website/scripts/generate-api.js ================================================ const { gitmojis } = require('gitmojis') const fs = require('fs') const path = require('path') const outputDir = path.join(__dirname, '../public/api/gitmojis') fs.mkdirSync(outputDir, { recursive: true }) fs.writeFileSync( path.join(outputDir, 'index.json'), JSON.stringify({ gitmojis }, null, 2) ) console.log('Generated static API at public/api/gitmojis/index.json') ================================================ FILE: packages/website/src/__tests__/pages.spec.tsx ================================================ import { render, screen } from '@testing-library/react' import RootLayout from '../app/layout' import Home from '../app/page' import About from '../app/about/page' import Specification from '../app/specification/page' import RelatedTools from '../app/related-tools/page' jest.mock('next/navigation', () => ({ useRouter: jest.fn(() => ({ push: jest.fn(), replace: jest.fn(), prefetch: jest.fn(), })), useSearchParams: jest.fn(() => new URLSearchParams()), usePathname: jest.fn(() => '/'), })) jest.mock('next-themes', () => ({ ThemeProvider: ({ children }: { children: React.ReactNode }) => (
{children}
), useTheme: jest.fn(() => ({ resolvedTheme: 'light', setTheme: jest.fn(), })), })) describe('Pages', () => { beforeAll(() => { Math.random = jest.fn().mockReturnValue(1) }) describe('RootLayout', () => { it('should include theme provider and layout wrapper', () => { expect(RootLayout).toBeDefined() expect(typeof RootLayout).toBe('function') }) }) describe('Home', () => { it('should render the page', () => { const { container } = render() expect(container.firstChild).toBeInTheDocument() }) }) describe('About', () => { it('should render the page with about content', () => { render() expect(screen.getByText(/About/i)).toBeInTheDocument() }) }) describe('Specification', () => { it('should render the page with specification content', () => { render() const heading = screen.getByRole('heading', { name: /Specification/i, level: 1, }) expect(heading).toBeInTheDocument() }) }) describe('Related tools', () => { it('should render the page', () => { render() expect(screen.getByText(/Related Tools/i)).toBeInTheDocument() }) }) }) ================================================ FILE: packages/website/src/__tests__/stubs.tsx ================================================ export const appProps = { Component: (props: object) =>
Component
, pageProps: { test: '' }, } export const contributors = [ { url: 'https://github.com/profile', avatar: 'https://github.com/avatar', id: 'contributor-id-123', }, ] export const contributorsMock = [ { html_url: 'https://github.com/profile', avatar_url: 'https://github.com/avatar', id: 'contributor-id-123', login: 'carloscuesta', }, ] ================================================ FILE: packages/website/src/app/about/page.tsx ================================================ import type { Metadata } from 'next' import Link from 'next/link' import CarbonAd from 'src/components/CarbonAd' export const metadata: Metadata = { title: 'gitmoji | About | An emoji guide for your commit messages', alternates: { canonical: '/about', }, } export default function About() { return (

About

Gitmoji is an emoji guide for GitHub commit messages. Aims to be a standarization cheatsheet - guide for using emojis on GitHub's commit messages.

Using emojis on commit messages{' '} provides an easy way of{' '} identifying the purpose or intention of a commit with only looking at the emojis used. As there are a lot of different emojis I found the need of creating a guide that can help to use emojis easier.

This project is Open Source, that means everyone can participate, suggesting, discussing and adding new emojis. Take a look at the{' '} contributing section and{' '} guidelines for contributing .

Using gitmoji with{' '} gitmoji-cli

An easy solution for using gitmoji from your command line, is to install{' '} gitmoji-cli. A gitmoji interactive client for using emojis on commit messages.

          $ npm i -g gitmoji-cli
        

Specification

To understand how to use gitmoji properly, please check the official specification here 👈.

Contributing to gitmoji

Contributing to gitmoji is a piece of 🍰! This project is a static website built with Next.js. All the gitmojis displayed are rendered from a JSON file. Before submitting any pull request, please follow these steps:

  1. Create an issue {' '} filling the template.
  2. After discussing the idea, feature or suggestion,{' '} read the contribution docs.
  3. Create a fork{' '} of gitmoji.
  4. Create a new branch with the feature name. (Eg: add-emoji-deploy, fix-website-header)
  5. Make your changes and send a{' '} pull request{' '} .
) } ================================================ FILE: packages/website/src/app/contributors/page.tsx ================================================ import type { Metadata } from 'next' import ContributorsList from 'src/components/ContributorsList' import CarbonAd from 'src/components/CarbonAd' export const metadata: Metadata = { title: 'gitmoji | Contributors | An emoji guide for your commit messages', alternates: { canonical: '/contributors', }, } type Contributor = { avatar: string id: string url: string } type GitHubContributor = { avatar_url: string id: string html_url: string login: string } async function getContributors(): Promise { const response = await fetch( 'https://api.github.com/repos/carloscuesta/gitmoji/contributors', { next: { revalidate: 3600 * 3 } }, ) const contributors: GitHubContributor[] = await response.json() return contributors .filter((contributor) => !contributor.login.includes('bot')) .map((contributor) => ({ avatar: contributor.avatar_url, id: contributor.id, url: contributor.html_url, })) } export default async function Contributors() { const contributors = await getContributors() return (

Contributors

) } ================================================ FILE: packages/website/src/app/layout.tsx ================================================ import type { Metadata } from 'next' import { ThemeProvider } from 'next-themes' import Layout from 'src/components/Layout' import 'src/utils/theme/theme.css' export const metadata: Metadata = { title: 'gitmoji | An emoji guide for your commit messages', description: "Gitmoji is an emoji guide for your commit messages. Aims to be a standarization cheatsheet for using emojis on GitHub's commit messages.", authors: [{ name: 'Carlos Cuesta', url: 'https://carloscuesta.me' }], keywords: ['gitmoji', 'emoji', 'carloscuesta', 'commit'], metadataBase: new URL('https://gitmoji.dev'), alternates: { canonical: '/', }, robots: 'index, follow', openGraph: { title: 'gitmoji', description: 'An emoji guide for your commit messages.', url: 'https://gitmoji.dev', images: [ { url: 'https://gitmoji.dev/static/gitmoji.gif', }, ], }, twitter: { card: 'summary', title: 'gitmoji', description: 'An emoji guide for your commit messages.', creator: '@crloscuesta', images: ['https://gitmoji.dev/static/gitmoji.gif'], }, icons: { icon: [ { url: '/static/favicon-16x16.png', sizes: '16x16', type: 'image/png' }, { url: '/static/favicon-32x32.png', sizes: '32x32', type: 'image/png' }, { url: '/static/favicon-96x96.png', sizes: '96x96', type: 'image/png' }, { url: '/static/android-icon-192x192.png', sizes: '192x192', type: 'image/png', }, ], apple: [ { url: '/static/apple-icon-57x57.png', sizes: '57x57' }, { url: '/static/apple-icon-60x60.png', sizes: '60x60' }, { url: '/static/apple-icon-72x72.png', sizes: '72x72' }, { url: '/static/apple-icon-76x76.png', sizes: '76x76' }, { url: '/static/apple-icon-114x114.png', sizes: '114x114' }, { url: '/static/apple-icon-120x120.png', sizes: '120x120' }, { url: '/static/apple-icon-144x144.png', sizes: '144x144' }, { url: '/static/apple-icon-152x152.png', sizes: '152x152' }, { url: '/static/apple-icon-180x180.png', sizes: '180x180' }, ], }, manifest: '/static/manifest.json', other: { 'msapplication-TileColor': '#FFDD67', 'msapplication-TileImage': '/ms-icon-144x144.png', 'google-site-verification': '78vmlhi_erc-UGybxcGwHyiUtf04wzYExTLa-4LoWio', }, } export default function RootLayout({ children, }: { children: React.ReactNode }) { return (