pax_global_header 0000666 0000000 0000000 00000000064 15257337474 0014533 g ustar 00root root 0000000 0000000 52 comment=51a0cc5530d8e29272406384723e8871245821f1
mochajs-mocha-51a0cc5/ 0000775 0000000 0000000 00000000000 15257337474 0014647 5 ustar 00root root 0000000 0000000 mochajs-mocha-51a0cc5/.browserslistrc 0000664 0000000 0000000 00000000401 15257337474 0017732 0 ustar 00root root 0000000 0000000 node >= 14
last 2 Chrome versions
last 2 Edge versions
last 2 Firefox versions
last 2 Safari versions
last 2 Opera versions
unreleased Chrome versions
unreleased Edge versions
unreleased Firefox versions
unreleased Safari versions
unreleased Opera versions
mochajs-mocha-51a0cc5/.gitattributes 0000664 0000000 0000000 00000000023 15257337474 0017535 0 ustar 00root root 0000000 0000000 * text=auto eol=lf
mochajs-mocha-51a0cc5/.github/ 0000775 0000000 0000000 00000000000 15257337474 0016207 5 ustar 00root root 0000000 0000000 mochajs-mocha-51a0cc5/.github/CODE_OF_CONDUCT.md 0000664 0000000 0000000 00000000240 15257337474 0021002 0 ustar 00root root 0000000 0000000 # Code of Conduct
This project follows the OpenJS Foundation Code of Conduct available at [code-of-conduct.openjsf.org](https://code-of-conduct.openjsf.org/).
mochajs-mocha-51a0cc5/.github/CONTRIBUTING.md 0000664 0000000 0000000 00000036222 15257337474 0020445 0 ustar 00root root 0000000 0000000 # Contributing to Mocha
> Please read these guidelines before submitting an issue, filing a feature request, or contributing code.
## β Got a Question?
If you have a question about using Mocha, please use [StackOverflow](https://stackoverflow.com) or ask the friendly people in [our Discord](https://discord.gg/KeDn2uXhER).
## βοΈ Filing Issues
Before adding anything to the issue tracker, **please [search issues](https://github.com/mochajs/mocha/issues) to see if it's already been reported**.
Make sure to check closed and/or older issues as well.
With the exception of minor documentation typos, all changes to Mocha should be discussed in the issue tracker first.
This includes bugs, feature requests, and improvements to documentation.
### π I Found a Bug
Sorry!
It happens to the best of us.
First, please confirm the bug by reproducing it in a minimal project.
You can use the [repro folder](../repro/README.md) for this,
or you can describe the minimal reproduction in the bug description.
Then, [file an issue using the bug report template](https://github.com/mochajs/mocha/issues/new?template=01-bug.yml).
If we need more information from you, we'll let you know.
### βοΈ Propose a Change
Please [file an issue using the feature request template](https://github.com/mochajs/mocha/issues/new?assignees=&labels=type%3A+feature&projects=&template=03-feature-request.yml).
Most importantly:
- Let us know _what_ the proposed change is, in as much detail as you can
- Explain _why_ you want the change
- Include your test code or file(s).
If large, please provide a link to a repository or [gist](https://gist.github.com).
We'll discuss your proposed changes and how they relate to the overarching goals of Mocha, detailed below in [β½οΈ About Project Goals](#%EF%B8%8F-about-project-goals).
## β½οΈ About Project Goals
Mocha is a test framework.
Developers use it against anything from legacy spaghetti in barely-supported browsers to stage-0 TC39 features in Electron.
Mocha is committed to providing support for maintained (LTS) versions of Node.js and popular browsers.
Mocha adheres strictly to [semantic versioning](https://semver.org).
We are _extremely cautious_ with changes that have the potential to break; given the size of Mocha's user base, it's _highly unlikely_ a breaking change will slide by.
Mocha's usage far outweighs its resources.
If a proposed feature would incur a maintenance penalty, it could be a hard sell.
We ask you please keep these goals in mind when making or proposing changes.
## π I Just Want To Help
_Excellent._ Here's how:
- **Handy with JavaScript?** Please check out the issues labeled [`status: accepting prs`](https://github.com/mochajs/mocha/issues?q=is%3Aissue+is%3Aopen+label%3A%22status%3A+accepting+prs%22) or [`good first issue`](https://github.com/mochajs/mocha/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22+).
Try `npx good-first-issue mocha`!
- **Can you write ~~good~~ well?** The [documentation](https://mochajs.org) almost always needs some love.
See the [doc-related issues](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3A%22area%3A+documentation%22).
- **Design your thing?** [Our site](https://mochajs.org) needs your magic touch.
- **Familiar with Mocha's codebase?** We could use your help triaging issues and/or reviewing pull requests.
Please contact an [org member](https://github.com/orgs/mochajs/people), and we'll chat.
- **Want to build our community?** Mocha has a _lot_ of users.
We could use your help bringing everyone together in peace and harmony.
Please contact an [org member](https://github.com/orgs/mochajs/people).
- **Do you write unit tests for _fun_?** A PR which increases coverage is unlikely to be turned down.
- **Are you experienced?** πΈ If you're a seasoned Mocha user, why not help answer some questions in [our Discord's `#help` channel](https://discord.gg/KeDn2uXhER)?
## π Frequently Asked Questions
### Can I work on this issue?
Anyone can work on any issue marked `status: accepting prs` π Please check if there is already a PR for this issue, and if it's still being worked on. If it hasn't been updated for over a week, you're welcome to open your own PR and we'll review it when we can!
## π Contributing Code: Step-by-Step
First follow the steps in [DEVELOPMENT.md](./DEVELOPMENT.md) to get Mocha's repository installed locally.
Then:
### π€ Trivial Changes
A trivial change is a typo fix, comment update, or similar very small change. These changes do not require backing issues and can be opened in a PR directly.
Trivial changes are still important! Nobody likes typos or stale comments, and we appreciate the time you take to propose updates to any and all parts of Mocha.
Feel free to open PRs for changes you think are trivial. If a maintainer believes the change needs a backing issue and discussion first, they'll ask kindly.
### π Initial Creation
1. Make sure the issue is labeled with [`status: accepting prs`](https://github.com/mochajs/mocha/issues?q=is%3Aissue+is%3Aopen+label%3A%22status%3A+accepting+prs%22) (or your change is [trivial](#trivial-changes))
1. Create a new branch in your working copy.
1. Make your changes and add them via `git add`.
- Your changes will likely be somewhere in `lib/`, `bin/`, or (if your changes are browser-specific) `browser-entry.js`.
- Unit and/or integration **tests are required** for any code change.
These live in `test/`.
- **Do not modify** the root `mocha.js` file directly; it is automatically generated.
- Keep your PR focused.
Don't fix two things at once; don't upgrade dependencies unless necessary.
1. Before committing, run `npm test`.
- This will run both Node.js-based and browser-based tests.
- Ultimately, your pull request will be built on our continuous integration servers ([GitHub Actions](https://github.com/mochajs/mocha/actions?query=workflow%3A%22Tests%22)).
The first step to ensuring these checks pass is to test on your own machine.
- When tests are run in CI, a coverage check is sent to [Codecov](https://app.codecov.io/gh/mochajs/mocha). You'll need to [add the Codecov GitHub app](https://app.codecov.io/login) to upload these results from your fork. This is recommended but not necessary to open a PR.
**A drop in code coverage % is considered a failed check**.
1. Commit your changes.
- Use a brief message on the first line, referencing a relevant issue (e.g. `closes #12345`).
- Add detail in subsequent lines.
- A pre-commit hook will run which automatically formats your staged changes (and fixes any problems it can) with ESLint and Prettier.
If ESLint fails to fix an issue, your commit will fail and you will need to manually correct the problem.
1. (Optional) Ensure you are up-to-date with Mocha's `main` branch:
- You can add an "upstream" remote repo using `git remote add upstream https://github.com/mochajs/mocha.git && git fetch upstream`.
- Navigate to your `main` branch using `git checkout main`.
- Pull changes from `upstream` using `git pull upstream main`.
- If any changes were pulled in, update your branch from `main` by switching back to your branch (`git checkout `) then merging using `git merge main`.
1. Push your changes to your fork; `git push origin`.
1. In your browser, navigate to [mochajs/mocha](https://github.com/mochajs/mocha).
You should see a notification about your recent changes in your fork's branch, with a (green?) button to create a pull request.
Click it.
1. Describe your changes in detail here, following the template.
Once you're satisfied, submit the form.
At that point, hooray! π
You should see a pull request on github.com/mochajs/mocha/pulls.
### π€ AI-Generated Code
We recognize that AI tools like GitHub Copilot, Claude, and others can be valuable aids in software development.
However, **all code contributions, whether written by humans or generated by AI, must meet the same quality standards**.
If you use AI to help generate code for a pull request:
- **All automated tests must pass**: Your code must pass linting, unit tests, integration tests, and any other automated checks.
- **Manual review is required**: AI-generated code must undergo the same thorough manual inspection as any other contribution. This includes checking for correctness, security vulnerabilities, adherence to project conventions, and overall code quality.
- **Ensure quality descriptions**: When submitting a PR or issue, summarize it succinctly. AI-generated PR and issue descriptions tend to be verbose and low-quality, making it harder for maintainers to review your request.
- **You are responsible**: As the submitter of the pull request, you are fully responsible for understanding and maintaining the code, regardless of how it was generated.
These requirements apply to all contributions and are not unique to AI-generated codeβthey simply reinforce our existing standards.
### π PR Process
Now that the pull request exists, some tasks will be run on it:
1. If you have not signed our [Contributor License Agreement](docs.linuxfoundation.org/lfx/easycla/v2-current/contributors), a friendly robot will prompt you to do so.
A [CLA](https://openjsf.org/cla) (electronic) signature is **required** for all contributions of code to Mocha.
1. Continuous integration checks will run against your changes.
The result of these checks will be displayed on your PR.
- If the checks fail, you must address those before the PR is accepted.
1. Be patient while your PR is reviewed.
This can take a while.
We may request changes, but don't be afraid to question them.
1. Your PR might become conflicted with the code in `main`.
If this is the case, you will need to [update your PR](#up-to-date) and resolve your conflicts.
1. You don't need to make a new PR to any needed changes.
Instead, commit on top of your changes, and push these to your fork's branch.
The PR will be updated, and CI will re-run.
1. Once you've addressed all the feedback you can, [re-request review on GitHub](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews#re-requesting-a-review).
Join us in [our Discord](https://discord.gg/KeDn2uXhER)!
## π External Services
Mocha uses several external services for project infrastructure:
- **[Codecov](https://app.codecov.io/gh/mochajs/mocha)**: Code coverage tracking. PRs must not decrease coverage. Contributors should add the Codecov GitHub app to upload coverage from forks.
- **[Discord](https://discord.gg/KeDn2uXhER)**: Official community chat for support, discussions, and connecting with maintainers and users.
- **[EasyCLA](https://openjsf.org/cla)**: Contributor License Agreement system via Linux Foundation. All code contributions require a signed CLA. A bot prompts contributors on their first PR.
- **Netlify**: Hosts the documentation website at mochajs.org. Provides automatic deploy previews for documentation PRs and nightly scheduled deploys to update supporter information.
- **[npm registry](https://www.npmjs.com/package/mocha)**: Package distribution. Mocha is also available via GitHub Releases.
- **[OctoGuide](https://octo.guide/)**: Basic PR guidance, helping contributors know what they can do to get their items reviewed quicker.
- **[Open Collective](https://opencollective.com/mochajs)**: Transparent donations to Mocha and expenses from maintainers. See also Tidelift.
- **[OpenJS Foundation](https://openjsf.org)**: Mocha is part of the OpenJS Foundation which provides governance and infrastructure support. See [PROJECT_CHARTER.md](../PROJECT_CHARTER.md) for governance details.
- **[Renovate](https://developer.mend.io/github/mochajs/mocha)**: Automatic dependency updates.
- **[Tidelift](https://tidelift.com/lifter/package/npm/mocha/overview)**: Minor additional funding, see also Open Collective.
## π€ Working Together
### Be friendly and patient
We understand that everyone has different levels of experience or knowledge in many diverse fields, be it technical or
non-technical in nature.
We also have areas of knowledge we are eager to expand; we want to be a community where people can not only contribute, but feel comfortable to ask questions as well and learn along the way.
If someone says something wrong, or says something accidentally offensive, respond with patience and try to keep it polite and civil.
Remember that we all were newbies at one point.
### Be welcoming
We strive to be a community that welcomes and supports people of all backgrounds and identities.
This includes, but is not limited to, members of any race, ethnicity, culture, national origin, color, immigration status, social and economic class, educational level, sex, sexual orientation, gender identity and expression, age, size, family status, political belief, religion, and mental and physical ability.
### Be considerate
Your work will be used by other people, and you in turn will depend on the work of others.
Any decision you make will affect users and colleagues, and you should take those consequences into account when making decisions.
Remember that we're a world-wide community, so you might not be communicating in someone else's primary language.
### Be respectful
Not all of us will agree all the time, but disagreement is no excuse for poor behavior and poor manners.
We might all experience some frustration now and then, but we cannot allow that frustration to turn into a personal attack.
It's important to remember that a community where people feel uncomfortable or threatened is not a productive one.
Members of the OpenJS Foundation community should be respectful when dealing with other members as well as with people outside the OpenJS Foundation community.
### Be careful in the words that you choose
We are a community of professionals, and we conduct ourselves professionally.
Be kind to others.
Do not insult or put down other participants.
Harassment and other exclusionary behavior aren't acceptable.
This includes, but is not limited to:
- Violent threats or language directed against another person.
- Discriminatory jokes and language.
- Posting sexually explicit or violent material.
- Posting (or threatening to post) other people's personally identifying information ("doxing").
- Personal insults, especially those using racist or sexist terms.
- Unwelcome sexual attention.
- Advocating for, or encouraging, any of the above behavior.
- Repeated harassment of others.
In general, if someone asks you to stop, then stop.
### When we disagree, try to understand why
Disagreements, both social and technical, happen all the time and OpenJS Foundation projects are no exception.
It is important that we resolve disagreements and differing views constructively.
Remember that we're different.
The strength of the OpenJS Foundation comes from its varied community, people from a wide range of backgrounds.
Different people have different perspectives on issues.
Being unable to understand why someone holds a viewpoint doesn't mean that they're wrong.
Don't forget that it is human to err and blaming each other doesn't get us anywhere.
Instead, focus on helping to resolve issues and learning from mistakes.
Original text courtesy of the Speak Up! project and Django Project.
mochajs-mocha-51a0cc5/.github/DEVELOPMENT.md 0000664 0000000 0000000 00000006143 15257337474 0020317 0 ustar 00root root 0000000 0000000 # Development
Follow these steps to get going in local development.
If you are having trouble, don't be afraid to [ask for help](./CONTRIBUTING.md#β-got-a-question).
## Prerequisites
- [Node.js](https://nodejs.org/en/download) `^20.19.0 || >=22.12.0` (Node >=22 LTS recommended).
- If you're new to installing Node, a tool like [nvm](https://github.com/nvm-sh/nvm#install-script) can help you manage multiple version installations.
- npm (do not use yarn or pnpm for this repository).
- [Google Chrome](https://www.google.com/chrome) is required to run browser tests locally.
## Setup
1. Follow [GitHub's documentation](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) on setting up Git, forking, and cloning.
1. Run `npm install` from the repository root to install dependencies.
- Some optional dependencies may fail; you can safely ignore these unless you are trying to build the documentation.
- If you're sick of seeing the failures, run `npm install --ignore-scripts`.
## Running Tests
You can (and should) run the test suite of Mocha itself before committing, and ideally confirm that your changes give the expected result on another project's test suite too.
To run all code validations (linting, testing in both Node.js and browsers), run:
```sh
npm test
```
For faster feedback during development, you can directly use targeted commands:
| Command | What it runs |
| ------------------------------- | --------------------------------------------- |
| `npm run test-smoke` | Quick smoke test to confirm Mocha boots |
| `npm run test-node:unit` | Unit tests |
| `npm run test-node:integration` | Integration tests (includes build) |
| `npm run test-node:interfaces` | Interface tests (BDD, TDD, QUnit, exports) |
| `npm run test-node:reporters` | Reporter tests |
| `npm run test-browser` | Browser tests via Playwright (includes build) |
| `npm run tsc` | TypeScript type checking |
| `npm run lint` | Linting and formatting checks |
A typical edit-test cycle uses `--watch` to re-run tests automatically as you change files:
```sh
npx mocha --watch test/unit/
```
If your change touches browser code or reporters, also run:
```sh
npm run test-browser
```
## Building
Mocha's browser bundle (`mocha.js`) is generated by Rollup. You normally don't need to build manually β `npm run test-browser` handles it. If you do need to build:
```sh
npm run clean
npm run build
```
> **Note:** Do not edit `mocha.js` or `mocha.js.map` directly β they are generated files.
## Troubleshooting
- **`npm test` fails right away with lint errors:** Run `npm run format:fix` to auto-fix formatting, then re-run.
- **Playwright tests fail with `Test timeout of ___ms exceeded`:** Run `npm run build` first. Browser tests require the generated bundle. We recommend running `npm run test-browser` to automatically clean and build before each run.
mochajs-mocha-51a0cc5/.github/FUNDING.yml 0000664 0000000 0000000 00000000031 15257337474 0020016 0 ustar 00root root 0000000 0000000 open_collective: mochajs
mochajs-mocha-51a0cc5/.github/ISSUE_TEMPLATE/ 0000775 0000000 0000000 00000000000 15257337474 0020372 5 ustar 00root root 0000000 0000000 mochajs-mocha-51a0cc5/.github/ISSUE_TEMPLATE/01-bug.yml 0000664 0000000 0000000 00000004567 15257337474 0022124 0 ustar 00root root 0000000 0000000 body:
- attributes:
description: If any of these required steps are not taken, we may not be able to review your issue. Help us to help you!
label: Bug Report Checklist
options:
- label: This is NOT a [security, `npm audit`, or GitHub Advisory issue](https://mochajs.org/explainers/security-vulnerability-reports).
required: true
- label: I have read and agree to Mocha's [Code of Conduct](https://github.com/mochajs/mocha/blob/main/.github/CODE_OF_CONDUCT.md) and [Contributing Guidelines](https://github.com/mochajs/mocha/blob/main/.github/CONTRIBUTING.md)
required: true
- label: I have searched for [related issues](https://github.com/mochajs/mocha/issues?q=is%3Aissue) and [issues with the `faq` label](https://github.com/mochajs/mocha/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Afaq%20), but none matched my issue.
required: true
- label: I have 'smoke tested' the code to be tested by running it outside the real test suite to get a better sense of whether the problem is in the code under test, my usage of Mocha, or Mocha itself.
required: true
- label: I want to provide a PR to resolve this
type: checkboxes
- attributes:
description: What did you expect to happen?
label: Expected
type: textarea
validations:
required: true
- attributes:
description: What happened instead?
label: Actual
type: textarea
validations:
required: true
- attributes:
description: Detail the steps necessary to reproduce the problem. To get the fastest support, create an [MCVE](https://stackoverflow.com/help/mcve) and upload it to GitHub.
label: Minimal, Complete and Verifiable Example
type: textarea
validations:
required: true
- attributes:
description: What do `mocha --version`, `node_modules/.bin/mocha.js --version`, and `node --version` output? What name and version of browser/environment, shell, and any other related modules such as transpilers are you using?
label: Versions
type: textarea
validations:
required: true
- attributes:
description: Any additional info you'd like to provide.
label: Additional Info
type: textarea
description: Report a bug trying to use Mocha
labels:
- "status: in triage"
- "type: bug"
name: π Bug
title: "π Bug: "
mochajs-mocha-51a0cc5/.github/ISSUE_TEMPLATE/02-documentation.yml 0000664 0000000 0000000 00000002411 15257337474 0024203 0 ustar 00root root 0000000 0000000 body:
- attributes:
description: If any of these required steps are not taken, we may not be able to review your issue. Help us to help you!
label: Documentation Request Checklist
options:
- label: I have read and agree to Mocha's [Code of Conduct](https://github.com/mochajs/mocha/blob/main/.github/CODE_OF_CONDUCT.md) and [Contributing Guidelines](https://github.com/mochajs/mocha/blob/main/.github/CONTRIBUTING.md)
required: true
- label: I have searched for [related issues](https://github.com/mochajs/mocha/issues?q=is%3Aissue) and [issues with the `faq` label](https://github.com/mochajs/mocha/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Afaq%20), but none matched my issue.
required: true
- label: I want to provide a PR to resolve this
type: checkboxes
- attributes:
description: What would you like to report?
label: Overview
type: textarea
validations:
required: true
- attributes:
description: Any additional info you'd like to provide.
label: Additional Info
type: textarea
description: Report a typo or missing area of documentation
labels:
- "area: documentation"
- "status: in triage"
name: π Docs
title: "π Docs: "
mochajs-mocha-51a0cc5/.github/ISSUE_TEMPLATE/03-feature-request.yml 0000664 0000000 0000000 00000003207 15257337474 0024460 0 ustar 00root root 0000000 0000000 body:
- attributes:
description: If any of these required steps are not taken, we may not be able to review your issue. Help us to help you!
label: Feature Request Checklist
options:
- label: I have read and agree to Mocha's [Code of Conduct](https://github.com/mochajs/mocha/blob/main/.github/CODE_OF_CONDUCT.md) and [Contributing Guidelines](https://github.com/mochajs/mocha/blob/main/.github/CONTRIBUTING.md)
required: true
- label: I have searched for [related issues](https://github.com/mochajs/mocha/issues?q=is%3Aissue) and [issues with the `faq` label](https://github.com/mochajs/mocha/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Afaq%20), but none matched my issue.
required: true
- label: I want to provide a PR to resolve this
type: checkboxes
- attributes:
description: What is the feature gap or problem you'd like to address?
label: Overview
type: textarea
validations:
required: true
- attributes:
description: How would you like to solve this need?
label: Suggested Solution
type: textarea
validations:
required: true
- attributes:
description: What other features or solutions have you also considered?
label: Alternatives
type: textarea
validations:
required: true
- attributes:
description: Any additional info you'd like to provide.
label: Additional Info
type: textarea
description: Request that a new feature be added or an existing feature improved
labels:
- "status: in triage"
- "type: feature"
name: π Feature
title: "π Feature: "
mochajs-mocha-51a0cc5/.github/ISSUE_TEMPLATE/04-performance.yml 0000664 0000000 0000000 00000006162 15257337474 0023644 0 ustar 00root root 0000000 0000000 body:
- type: markdown
attributes:
value: |
Thanks for taking the time to suggest a performance improvement to Mocha! Please note that Mocha is a widely used library with many millions of weekly downloads, many thousands of dependents, and many years of longstanding behavior. Every change to it is inherently risky and may break user edge cases that we have no way to learn of otherwise.
So, to accept a performance improvement, we'd need to see _measurable, non-negligible improvement_ in Mocha's real-world usage. That requires providing at least:
- Exhaustive comparison with other alternatives that proves this is the winning approach
- Disclosure of any personal affiliation with the proposed solution and alternatives
- For runtime performance: some kind of reproducible benchmark to demonstrate exactly what's different
- For dependency cleanups:
- The specific change to the dependency tree of a project with Mocha and no other dependencies
- The specific change to the dependency tree of a project with Mocha and other common dependencies, such as `chai`, `express`, and `sinon`
You can always suggest a performance improvement without those validations, but we are unlikely to accept it without them.
For more information, see [mochajs/mocha#5377 π οΈ Repo: Add issue template for performance improvements](https://github.com/mochajs/mocha/issues/5377).
- attributes:
description: If any of these required steps are not taken, we may not be able to review your issue. Help us to help you!
label: Performance Suggestion Checklist
options:
- label: I am using the latest version of Mocha.
required: true
- label: I have read and understood the nuances around performance reports.
required: true
- label: I have read and agree to Mocha's [Code of Conduct](https://github.com/mochajs/mocha/blob/main/.github/CODE_OF_CONDUCT.md) and [Contributing Guidelines](https://github.com/mochajs/mocha/blob/main/.github/CONTRIBUTING.md)
required: true
- label: I have searched for [related issues](https://github.com/mochajs/mocha/issues?q=is%3Aissue) and [issues with the `faq` label](https://github.com/mochajs/mocha/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Afaq%20), but none matched my issue.
required: true
- label: I want to provide a PR to resolve this
type: checkboxes
- attributes:
description: What is your suggestion?
label: Overview
type: textarea
validations:
required: true
- attributes:
description: If you have a suggested implementation, please explain why you believe it's the best one here.
label: Validations
type: textarea
- attributes:
description: Any additional info you'd like to provide.
label: Additional Info
type: textarea
description: Suggest a way to make Mocha faster, more memory- and/or space-efficient, or otherwise improve performance
labels:
- "area: performance"
- "status: in triage"
name: β‘οΈ Performance
title: "β‘οΈ Performance: "
mochajs-mocha-51a0cc5/.github/ISSUE_TEMPLATE/05-repository-tooling.yml 0000664 0000000 0000000 00000003047 15257337474 0025233 0 ustar 00root root 0000000 0000000 body:
- attributes:
description: If any of these required steps are not taken, we may not be able to review your issue. Help us to help you!
label: Tooling Suggestion Checklist
options:
- label: I have tried restarting my IDE and the issue persists.
required: true
- label: I have pulled the latest `main` branch of the repository.
required: true
- label: I have read and agree to Mocha's [Code of Conduct](https://github.com/mochajs/mocha/blob/main/.github/CODE_OF_CONDUCT.md) and [Contributing Guidelines](https://github.com/mochajs/mocha/blob/main/.github/CONTRIBUTING.md)
required: true
- label: I have searched for [related issues](https://github.com/mochajs/mocha/issues?q=is%3Aissue) and [issues with the `faq` label](https://github.com/mochajs/mocha/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Afaq%20), but none matched my issue.
required: true
- label: I want to provide a PR to resolve this
type: checkboxes
- attributes:
description: What changes would you like, and how do they help contributors?
label: Overview
type: textarea
validations:
required: true
- attributes:
description: Any additional info you'd like to provide.
label: Additional Info
type: textarea
description: Report a bug or request an enhancement in the Mocha repository's internal tooling
labels:
- "area: repository tooling"
- "status: in triage"
name: π οΈ Repository Tooling
title: "π οΈ Repo: "
mochajs-mocha-51a0cc5/.github/ISSUE_TEMPLATE/config.yml 0000664 0000000 0000000 00000001133 15257337474 0022360 0 ustar 00root root 0000000 0000000 blank_issues_enabled: true
contact_links:
- name: Documentation Website
about: Please read our documentation website before filing new issues.
url: https://mochajs.org
- name: Documentation Website > APIs
about: If you're using Mocha's API, see also the website's API docs.
url: https://mochajs.org/api
- name: Discord
about: Our Discord is the right place for quick informal questions.
url: https://discord.gg/KeDn2uXhER
- name: StackOverflow
about: For more questions, see the `mocha` tag on StackOverflow.
url: https://stackoverflow.com/questions/tagged/mocha
mochajs-mocha-51a0cc5/.github/PULL_REQUEST_TEMPLATE.md 0000664 0000000 0000000 00000001330 15257337474 0022005 0 ustar 00root root 0000000 0000000
## PR Checklist
- [ ] Addresses an existing open issue: fixes #000 (or is a [trivial change](https://github.com/mochajs/mocha/blob/main/.github/CONTRIBUTING.md#trivial-changes))
- [ ] That issue was marked as [`status: accepting prs`](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3A%22status%3A+accepting+prs%22)
- [ ] Steps in [CONTRIBUTING.md](https://github.com/mochajs/mocha/blob/main/.github/CONTRIBUTING.md) were taken
## Overview
mochajs-mocha-51a0cc5/.github/copilot-instructions.md 0000664 0000000 0000000 00000002243 15257337474 0022745 0 ustar 00root root 0000000 0000000 # Copilot Instructions (Mocha)
For this repository, follow `AGENTS.md` in the repo root as the primary onboarding source.
## Priority rules
1. Trust `AGENTS.md` command ordering and runbooks first.
2. Keep edits minimal and semver-safe.
3. Never edit generated bundle artifacts (`mocha.js`, `mocha.js.map`) directly.
4. Validate with targeted tests first, then broader checks as needed.
5. Prefer repository `npm` scripts and workflow-defined commands over ad hoc shell pipelines.
6. If the current tool environment cannot edit files or run commands, provide copy-ready patch/command text and clearly mark validation as not run.
## Minimum validation checklist
- Build if browser path is involved: `npm run build`
- Typecheck when signatures/types may be impacted: `npm run tsc`
- Run at least one relevant test suite under `test/`
- Include browser test coverage when browser code/reporters are touched
- Only report checks you actually ran; if blocked, say so and include the exact blocker.
If your local results conflict with expectations, capture exact command output and reconcile with workflow scripts in `.github/workflows/mocha.yml` and `.github/workflows/npm-script.yml`.
mochajs-mocha-51a0cc5/.github/dependabot.yml 0000664 0000000 0000000 00000000272 15257337474 0021040 0 ustar 00root root 0000000 0000000 version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
groups:
github-actions:
patterns:
- "*"
mochajs-mocha-51a0cc5/.github/release-please/ 0000775 0000000 0000000 00000000000 15257337474 0021076 5 ustar 00root root 0000000 0000000 mochajs-mocha-51a0cc5/.github/release-please/config.json 0000664 0000000 0000000 00000001601 15257337474 0023234 0 ustar 00root root 0000000 0000000 {
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/v17.1.3/schemas/config.json",
"release-type": "node",
"include-component-in-tag": false,
"changelog-sections": [
{ "type": "feat", "section": "π Features", "hidden": false },
{ "type": "fix", "section": "π©Ή Fixes", "hidden": false },
{ "type": "docs", "section": "π Documentation", "hidden": false },
{ "type": "chore", "section": "π§Ή Chores", "hidden": false },
{ "type": "perf", "section": "π§Ή Chores", "hidden": false },
{ "type": "refactor", "section": "π§Ή Chores", "hidden": false },
{ "type": "test", "section": "π§Ή Chores", "hidden": false },
{ "type": "build", "section": "π€ Automation", "hidden": false },
{ "type": "ci", "section": "π€ Automation", "hidden": true }
],
"packages": {
".": {
"extra-files": ["README.md"]
}
}
}
mochajs-mocha-51a0cc5/.github/release-please/manifest.json 0000664 0000000 0000000 00000000017 15257337474 0023575 0 ustar 00root root 0000000 0000000 {".":"12.0.3"}
mochajs-mocha-51a0cc5/.github/workflows/ 0000775 0000000 0000000 00000000000 15257337474 0020244 5 ustar 00root root 0000000 0000000 mochajs-mocha-51a0cc5/.github/workflows/add-to-project.yml 0000664 0000000 0000000 00000001677 15257337474 0023616 0 ustar 00root root 0000000 0000000 name: Auto-add issue to Mocha project
# Automatically adds issues to our GitHub project.
# We silence "add" failures to reduce noise.
# (This often happens when issues are created from project GUI.)
# https://markwiemer.com/software/github/apps#auto-add
on:
issues:
types: [opened]
jobs:
add-to-project:
runs-on: ubuntu-latest
steps:
# https://github.com/actions/create-github-app-token
- uses: actions/create-github-app-token@v3
id: app-token
with:
# https://github.com/mochajs/mocha/settings/secrets/actions
client-id: ${{ secrets.APP_CLIENT_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
owner: mochajs
# https://github.com/actions/add-to-project
- uses: actions/add-to-project@v2
with:
project-url: https://github.com/orgs/mochajs/projects/6
github-token: ${{ steps.app-token.outputs.token }}
continue-on-error: true
mochajs-mocha-51a0cc5/.github/workflows/auto-label.yml 0000664 0000000 0000000 00000001060 15257337474 0023011 0 ustar 00root root 0000000 0000000 name: Auto Label Issues
# Labels issues as "needs: triage" when first opened
on:
issues:
types: [opened]
permissions:
issues: write
pull-requests: write
contents: read
jobs:
add-needs-triage:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v9
with:
script: |
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
labels: ['status: in triage']
});
mochajs-mocha-51a0cc5/.github/workflows/blocked-pr.yml 0000664 0000000 0000000 00000002426 15257337474 0023015 0 ustar 00root root 0000000 0000000 name: Blocked PR Check
on:
pull_request:
branches:
- main
types: [opened, reopened, synchronize, labeled, unlabeled]
workflow_dispatch:
inputs:
pr:
description: "PR ID"
required: true
type: string
permissions:
contents: read
pull-requests: read
jobs:
not-blocked:
name: not-blocked
runs-on: ubuntu-latest
steps:
- name: 'Verify "status: blocked" label is not applied'
if: "github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'status: blocked')"
run: |
echo "::error::This PR has the 'status: blocked' label and cannot be merged until that label is removed."
exit 1
- name: 'Verify "status: blocked" label is not applied (manual runs)'
if: "github.event_name == 'workflow_dispatch'"
env:
GH_TOKEN: ${{ github.token }}
PR: ${{ inputs.pr }}
run: |
labels=$(gh pr view "$PR" --repo "$GITHUB_REPOSITORY" --json labels --jq '.labels[].name')
if echo "$labels" | grep -qx 'status: blocked'; then
echo "::error::PR #$PR has the 'status: blocked' label and cannot be merged until that label is removed."
exit 1
fi
echo "PR #$PR is not blocked."
mochajs-mocha-51a0cc5/.github/workflows/format.yml 0000664 0000000 0000000 00000000600 15257337474 0022253 0 ustar 00root root 0000000 0000000 name: Format
on:
push:
branches:
- main
pull_request:
branches:
- main
types: [opened, synchronize, reopened, edited]
workflow_dispatch:
permissions:
contents: read
id-token: write # for Codecov OIDC (required by npm-script.yml)
issues: write
jobs:
format:
uses: ./.github/workflows/npm-script.yml
with:
npm-script: format:check
mochajs-mocha-51a0cc5/.github/workflows/mocha.yml 0000664 0000000 0000000 00000005372 15257337474 0022065 0 ustar 00root root 0000000 0000000 name: Tests
on:
push:
branches:
- main
paths-ignore:
["*.md", "docs/**", ".github/**", ".prettierignore", "AUTHORS", "LICENSE"]
pull_request:
branches:
- main
paths-ignore:
["*.md", "docs/**", ".github/**", ".prettierignore", "AUTHORS", "LICENSE"]
types: [opened, synchronize, reopened, edited]
workflow_dispatch:
permissions:
contents: read
id-token: write # for Codecov OIDC
issues: write
jobs:
lint:
uses: ./.github/workflows/npm-script.yml
with:
npm-script: lint
smoke:
uses: ./.github/workflows/npm-script.yml
with:
node-versions: "20.19.0,20,22.12.0,22,24,26"
npm-script: test-smoke
test-node-lts:
# TODO: Restore "mocha-github-actions-reporter" style reporting without relying on third party module
# https://github.com/mochajs/mocha/issues/5183
uses: ./.github/workflows/npm-script.yml
needs: smoke
strategy:
fail-fast: false
matrix:
test-part:
- interfaces
- unit
- integration
- jsapi
- requires
- reporters
- only
with:
npm-script: test-node:${{ matrix.test-part }}
test-node-all:
name: Test ${{ matrix.test-part }} in all environments
permissions:
id-token: write # for Codecov OIDC
contents: read # for Codecov OIDC
issues: write
# TODO: Restore "mocha-github-actions-reporter" style reporting without relying on third party module
# https://github.com/mochajs/mocha/issues/5183
uses: ./.github/workflows/npm-script.yml
needs: test-node-lts
strategy:
fail-fast: false
matrix:
coverage: [true]
test-part:
- interfaces
- unit
- integration
- requires
- reporters
- only
include:
- test-part: jsapi
coverage: false
with:
os: "ubuntu-latest,windows-latest"
# We pin exact versions here per https://github.com/mochajs/mocha/issues/5052
# Ref https://nodejs.org/en/about/previous-releases
node-versions: "20.19.4,22.18.0,24.6.0,26.8.2"
npm-script: test-node:${{ matrix.test-part }}
coverage: ${{ matrix.coverage }}
test-browser:
name: Browser tests
runs-on: ubuntu-latest
timeout-minutes: 20
permissions:
contents: read
issues: write
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false
- uses: actions/setup-node@v7
with:
node-version: "22"
cache: "npm"
- run: npm ci --ignore-scripts
- run: npm run test-browser
env:
NODE_OPTIONS: "--trace-warnings"
tsc:
uses: ./.github/workflows/npm-script.yml
with:
npm-script: tsc
mochajs-mocha-51a0cc5/.github/workflows/nightly-site-deploy.yml 0000664 0000000 0000000 00000001045 15257337474 0024701 0 ustar 00root root 0000000 0000000 # Deploy `mochajs.org` branch nightly by hitting a netlify build URL.
# This updates the list of supporters
# It uses commands from netlify.toml at root of repo
name: Nightly mochajs.org Deploy
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
permissions:
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Webhook Action
uses: joelwmale/webhook-action@e90574c974be32d5107947fc75f007a415de4758
env:
data: ""
WEBHOOK_URL: ${{ secrets.NETLIFY_NIGHTLY_DEPLOY_URL }}
mochajs-mocha-51a0cc5/.github/workflows/npm-script.yml 0000664 0000000 0000000 00000012430 15257337474 0023063 0 ustar 00root root 0000000 0000000 name: Reusable npm script runner
on:
workflow_call:
inputs:
npm-script:
description: "npm script"
required: true
type: string
browsers:
description: "A comma separated list of browser names to test with."
required: false
type: string
node-versions:
description: "A comma separated list of Node versions to test with."
required: false
type: string
os:
description: "A comma separated list of operating systems to test on."
required: false
type: string
coverage:
description: "Whether to set up coverage reporting or not"
required: false
type: boolean
permissions:
contents: read
id-token: write
issues: write
jobs:
resolve-inputs:
runs-on: ubuntu-latest
outputs:
browsers: ${{ steps.split-browsers.outputs.splitted }}
nodeVersions: ${{ steps.split-node-versions.outputs.splitted }}
os: ${{ steps.split-os.outputs.splitted }}
steps:
- id: split-browsers
if: inputs.browsers
run: echo "splitted=$(echo '${{ inputs.browsers }}' | jq -R -c 'split(",")')" >> $GITHUB_OUTPUT
- id: split-node-versions
if: inputs.node-versions
run: echo "splitted=$(echo '${{ inputs.node-versions }}' | jq -R -c 'split(",")')" >> $GITHUB_OUTPUT
- id: split-os
if: inputs.os
run: echo "splitted=$(echo '${{ inputs.os }}' | jq -R -c 'split(",")')" >> $GITHUB_OUTPUT
script:
name: ${{ inputs.npm-script }}${{ needs.resolve-inputs.outputs.browsers && format('[{0}]', matrix.browser) }}${{ needs.resolve-inputs.outputs.nodeVersions && format(' with node.js {0}', matrix.node_version) }}${{ needs.resolve-inputs.outputs.os && format(' on {0}', matrix.os) }}
runs-on: ${{ matrix.os }}
timeout-minutes: 20
needs:
- resolve-inputs
strategy:
fail-fast: false
matrix:
node_version: ${{ fromJson(needs.resolve-inputs.outputs.nodeVersions || '["22"]') }}
os: ${{ fromJson(needs.resolve-inputs.outputs.os || '["ubuntu-latest"]') }}
browser: ${{ fromJson(needs.resolve-inputs.outputs.browsers || '[""]') }}
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false
- uses: actions/setup-node@v7
with:
node-version: ${{ matrix.node_version }}
cache: "npm"
- run: npm ci --ignore-scripts
- id: npm-script
run: npm run ${{ inputs.npm-script }}
env:
BROWSER: ${{ matrix.browser }}
COVERAGE: ${{ inputs.coverage && '1'}}
NODE_OPTIONS: "--trace-warnings"
- name: Generate coverage report
if: ${{ !cancelled() && inputs.coverage && (steps.npm-script.conclusion == 'success' || steps.npm-script.conclusion == 'failure') }}
run: npm run test-coverage-generate
# https://github.com/marketplace/actions/codecov
# https://app.codecov.io/gh/mochajs/mocha
- id: upload-coverage
name: Upload coverage reports
if: ${{ !cancelled() && inputs.coverage && (steps.npm-script.conclusion == 'success' || steps.npm-script.conclusion == 'failure') }}
continue-on-error: true
uses: codecov/codecov-action@v7
with:
fail_ci_if_error: true
use_oidc: true
- name: Track Codecov failures
if: ${{ !cancelled() && inputs.coverage && (steps.npm-script.conclusion == 'success' || steps.npm-script.conclusion == 'failure') && steps.upload-coverage.outcome == 'failure' }}
uses: actions/github-script@v9
with:
script: |
const owner = context.repo.owner;
const repo = context.repo.repo;
const issueTitle = 'Codecov upload failed';
const runUrl = `${context.serverUrl}/${owner}/${repo}/actions/runs/${context.runId}`;
const issueBody = [
'Codecov failed to upload coverage reports for this repository.',
'',
`- Workflow run: ${runUrl}`,
`- Commit: ${context.sha}`,
`- Ref: ${context.ref}`,
'',
'This issue is automatically updated when the upload fails again in CI.',
].join('\n');
const { data: issues } = await github.rest.issues.listForRepo({
owner,
repo,
state: 'all',
per_page: 100,
});
const existingIssue = issues.find(issue => issue.title === issueTitle && !issue.pull_request);
if (existingIssue) {
if (existingIssue.state === 'closed') {
await github.rest.issues.update({
owner,
repo,
issue_number: existingIssue.number,
state: 'open',
});
}
await github.rest.issues.createComment({
owner,
repo,
issue_number: existingIssue.number,
body: `Codecov upload failed again.\n\n${issueBody}`,
});
return;
}
await github.rest.issues.create({
owner,
repo,
title: issueTitle,
body: issueBody,
labels: ['status: in triage', 'area: repository tooling'],
});
mochajs-mocha-51a0cc5/.github/workflows/octoguide.yml 0000664 0000000 0000000 00000001152 15257337474 0022750 0 ustar 00root root 0000000 0000000 jobs:
octoguide:
if: ${{ !endsWith(github.actor, '[bot]') }}
runs-on: ubuntu-latest
steps:
- uses: OctoGuide/bot@0.23.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
name: OctoGuide
on:
discussion:
types: [created, edited]
discussion_comment:
types: [created, deleted, edited]
issue_comment:
types: [created, deleted, edited]
issues:
types: [edited, opened]
pull_request_review_comment:
types: [created, deleted, edited]
pull_request_target:
types: [edited, opened]
permissions:
discussions: write
issues: write
pull-requests: write
mochajs-mocha-51a0cc5/.github/workflows/protect-manifest.yml 0000664 0000000 0000000 00000001305 15257337474 0024252 0 ustar 00root root 0000000 0000000 name: Protect Release Please Manifest
on:
pull_request:
paths:
- .github/release-please/manifest.json
permissions:
contents: read
pull-requests: read
jobs:
check-manifest-author:
name: Verify manifest not manually edited
runs-on: ubuntu-latest
steps:
- name: Block manual manifest edits
if: github.event.pull_request.user.login != 'github-actions[bot]'
run: |
echo ".github/release-please/manifest.json should only be updated by Release Please (github-actions[bot])"
echo "See [MAINTAINERS.md#mochas-release-process](https://github.com/mochajs/mocha/blob/main/MAINTAINERS.md#mochas-release-process) for more details"
exit 1
mochajs-mocha-51a0cc5/.github/workflows/release-comment.yml 0000664 0000000 0000000 00000000711 15257337474 0024046 0 ustar 00root root 0000000 0000000 name: Release Comment
on:
release:
types: [published]
permissions:
contents: read
issues: write
pull-requests: write
jobs:
comment:
name: Comment on released issues and PRs
runs-on: ubuntu-latest
steps:
- uses: apexskier/github-release-commenter@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
comment-template: |
:brown_heart: This was released in {release_link}. :brown_heart:
mochajs-mocha-51a0cc5/.github/workflows/release-please.yml 0000664 0000000 0000000 00000004066 15257337474 0023664 0 ustar 00root root 0000000 0000000 name: Release Please
on:
push:
branches:
- main
workflow_dispatch:
inputs:
target_branch:
description: "Branch to run Release Please against"
default: "main"
required: false
permissions:
contents: read
id-token: write
jobs:
release_please:
name: release-please
runs-on: ubuntu-latest
outputs:
releaseCreated: ${{ steps.release.outputs.release_created }}
version: ${{ steps.release.outputs.version }}
permissions:
contents: write
pull-requests: write
steps:
- uses: googleapis/release-please-action@v5
id: release
with:
config-file: .github/release-please/config.json
manifest-file: .github/release-please/manifest.json
target-branch: ${{ inputs.target_branch || 'main' }}
npm_publish:
name: Publish to npm
runs-on: ubuntu-latest
environment: npm
needs: release_please
if: needs.release_please.outputs.releaseCreated
steps:
- uses: actions/checkout@v7
with:
show-progress: false
- uses: actions/setup-node@v7
with:
node-version: "24"
registry-url: "https://registry.npmjs.org"
# If this step fails, it may be a transient issue, just run again
# https://github.com/mochajs/mocha/issues/5611
- name: Upgrade npm for OIDC support
run: npm install -g npm@latest
- name: Install dependencies
run: npm ci --ignore-scripts --force --no-fund --no-audit
- name: Determine npm dist-tag
id: dist_tag
env:
VERSION: ${{ needs.release_please.outputs.version }}
run: |
if [[ "$VERSION" == *-alpha* ]]; then
echo "tag=alpha" >> "$GITHUB_OUTPUT"
elif [[ "$VERSION" == *-* ]]; then
echo "tag=next" >> "$GITHUB_OUTPUT"
else
echo "tag=latest" >> "$GITHUB_OUTPUT"
fi
- run: npm publish --provenance --access public --tag=${{ steps.dist_tag.outputs.tag }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
mochajs-mocha-51a0cc5/.github/workflows/remove-waiting-label.yml 0000664 0000000 0000000 00000003416 15257337474 0025005 0 ustar 00root root 0000000 0000000 name: Adjust labels on author activity
on:
issue_comment:
pull_request_review_comment:
pull_request_target:
types: [review_requested, synchronize]
permissions:
issues: write
pull-requests: write
jobs:
remove-label:
if: >-
${{ (github.event_name == 'pull_request_target' && github.event.action == 'review_requested' && !github.event.pull_request.draft) ||
(github.event_name == 'pull_request_target' && github.event.action == 'synchronize') ||
(github.event_name == 'issue_comment' && github.actor == github.event.issue.user.login) ||
(github.event_name == 'pull_request_review_comment' && github.actor == github.event.pull_request.user.login) }}
runs-on: ubuntu-latest
steps:
- name: 'Remove "waiting" and "stale" labels'
uses: actions/github-script@v9
with:
# REST gives 404 if label isn't present
script: |
const labelNames = ['status: waiting for author', 'status: stale'];
let issueNumber;
if (context.eventName === 'issue_comment') {
issueNumber = context.payload.issue.number;
} else if (context.eventName === 'pull_request_review_comment') {
issueNumber = context.payload.pull_request.number;
} else {
issueNumber = context.payload.pull_request.number;
}
for (const labelName of labelNames) {
try {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
name: labelName,
});
} catch (e) {
if (e.status !== 404) throw e;
}
}
mochajs-mocha-51a0cc5/.github/workflows/slop-detection.yml 0000664 0000000 0000000 00000004036 15257337474 0023723 0 ustar 00root root 0000000 0000000 name: Slop Detection
on:
# WARNING: pull_request_target is needed to label/comment/close PRs from forks.
# DO NOT CHECK OUT THE REPO IN THIS WORKFLOW.
pull_request_target:
types: [opened, reopened]
issues:
types: [opened]
permissions: {}
jobs:
agentscan:
name: AgentScan
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
pull-requests: write
steps:
- name: Cache AgentScan analysis
uses: actions/cache@v6
with:
path: .agentscan-cache
key: agentscan-cache-${{ github.actor }}
restore-keys: agentscan-cache-
- name: AgentScan
uses: MatteoGabriele/agentscan-action@v2.5.0
with:
auto-close: true
auto-close-classifications: automation
cache-path: .agentscan-cache
github-token: ${{ secrets.GITHUB_TOKEN }}
label-automation: "spam: automated account"
label-community-flagged: "spam: community flagged"
label-mixed: "spam: mixed signals"
scan-issues: true
trusted-author-associations: collaborator, member, owner
anti-slop:
name: Anti Slop
if: github.event_name == 'pull_request_target'
runs-on: ubuntu-latest
permissions:
contents: read
issues: read
pull-requests: write
steps:
- name: Anti Slop
uses: peakoss/anti-slop@v0.3.0
with:
close-pr: true
exempt-label: "spam: exempt"
failure-add-pr-labels: "spam: likely slop"
failure-pr-message: >
Thanks for the contribution. This PR matched multiple low-quality/spam
signals and does not appear to conform to Mocha's AI contribution
guidelines. Please review the [AI-Generated Code section of our
contributing guidelines](https://github.com/mochajs/mocha/blob/main/.github/CONTRIBUTING.md#-ai-generated-code).
If this was a mistake, please comment with more context and ask a
maintainer to reconsider.
lock-pr: false
mochajs-mocha-51a0cc5/.github/workflows/stale-branches.yml 0000664 0000000 0000000 00000007037 15257337474 0023671 0 ustar 00root root 0000000 0000000 name: Manage stale branches
on:
schedule:
- cron: "0 0 * * *" # Run daily at midnight UTC
workflow_dispatch:
permissions:
contents: read
issues: write
pull-requests: read
jobs:
stale-branches:
runs-on: ubuntu-latest
steps:
- name: Open issues for stale branches that need maintainer review
uses: actions/github-script@v9
with:
script: |
const protectedBranches = new Set(['main', 'v11.x']);
const staleAfterMs = 1000 * 60 * 60 * 24 * 7;
const now = Date.now();
const repoUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}`;
const openPullRequests = await github.paginate(github.rest.pulls.list, {
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
per_page: 100,
});
const openBranchRefs = new Set(
openPullRequests
.filter(pr => pr.head && pr.head.repo && pr.head.repo.full_name === `${context.repo.owner}/${context.repo.repo}`)
.map(pr => pr.head.ref)
);
const openIssues = await github.paginate(github.rest.issues.listForRepo, {
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
per_page: 100,
});
const branches = await github.paginate(github.rest.repos.listBranches, {
owner: context.repo.owner,
repo: context.repo.repo,
per_page: 100,
});
for (const branch of branches) {
if (protectedBranches.has(branch.name) || openBranchRefs.has(branch.name)) {
continue;
}
const { data: branchDetails } = await github.rest.repos.getBranch({
owner: context.repo.owner,
repo: context.repo.repo,
branch: branch.name,
});
const lastUpdated = Date.parse(branchDetails.commit.commit.committer.date);
if (Number.isNaN(lastUpdated) || now - lastUpdated < staleAfterMs) {
continue;
}
const issueTitle = `Review stale branch: ${branch.name}`;
const existingIssue = openIssues.find(issue => issue.title === issueTitle);
if (existingIssue) {
continue;
}
const issueBody = [
`This branch has been inactive for more than 7 days and is not associated with an open PR.`,
'',
`- Branch: \`${branch.name}\``,
`- Last updated: ${new Date(lastUpdated).toISOString()}`,
`- Branch URL: ${repoUrl}/tree/${encodeURIComponent(branch.name)}`,
'',
'@mochajs/maintenance-crew, could someone please review whether this branch should be kept, merged, or removed?',
].join('\n');
try {
const issue = await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: issueTitle,
body: issueBody,
labels: ['status: in triage', 'area: repository tooling'],
});
core.info(`Created stale-branch review issue: #${issue.data.number}`);
} catch (error) {
core.warning(`Unable to create review issue for stale branch ${branch.name}: ${error.message}`);
}
}
mochajs-mocha-51a0cc5/.github/workflows/stale.yml 0000664 0000000 0000000 00000010342 15257337474 0022077 0 ustar 00root root 0000000 0000000 name: Manage stale items
on:
schedule:
- cron: "0 0 * * *" # Run daily at midnight UTC
workflow_dispatch:
permissions:
issues: write
pull-requests: write
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v11
with:
close-issue-message: >
This issue has been automatically closed after waiting 2 weeks with no response from the author.
If you have more information to provide, please feel free to reopen this issue or open a new one.
close-pr-message: >
This pull request has been automatically closed after waiting 2 weeks with no response from the author.
If you have more information to provide, please feel free to reopen this pull request or open a new one.
days-before-close: 7
days-before-stale: 7
only-labels: "status: waiting for author"
operations-per-run: 100
remove-stale-when-updated: true
stale-issue-label: "status: stale"
stale-issue-message: >
This issue has been waiting for a response from the author for 1 week with no activity.
If there is no further activity in the next 1 week, this issue will be automatically closed.
Maintainers: to keep this issue open indefinitely, remove the "status: waiting for author" label.
stale-pr-label: "status: stale"
stale-pr-message: >
This pull request has been waiting for a response from the author for 1 week with no activity.
If there is no further activity in the next 1 week, this pull request will be automatically closed.
Maintainers: to keep this pull request open indefinitely, remove the "status: waiting for author" label.
triage-reminder:
runs-on: ubuntu-latest
steps:
- name: "Ping maintainers on stale triage issues"
uses: actions/github-script@v9
with:
script: |
const owner = context.repo.owner;
const repo = context.repo.repo;
const staleAfter = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();
const issues = await github.paginate(github.rest.issues.listForRepo, {
owner,
repo,
state: 'open',
labels: 'status: in triage',
sort: 'created',
direction: 'asc',
per_page: 100,
});
for (const issue of issues) {
if (new Date(issue.created_at) > new Date(staleAfter)) {
continue;
}
const timeline = await github.paginate(github.rest.issues.listEventsForTimeline, {
owner,
repo,
issue_number: issue.number,
per_page: 100,
});
const hasMaintainerUpdate = timeline.some(event => {
if (!['labeled', 'unlabeled'].includes(event.event)) {
return false;
}
if (!event.actor || !event.created_at) {
return false;
}
return !event.actor.login.includes('github-actions') &&
new Date(event.created_at) > new Date(issue.created_at);
});
if (hasMaintainerUpdate) {
continue;
}
const comments = await github.paginate(github.rest.issues.listComments, {
owner,
repo,
issue_number: issue.number,
per_page: 100,
});
const alreadyPinged = comments.some(comment => {
return comment.body && comment.body.includes('@mochajs/maintenance-crew') &&
comment.body.includes('This issue has been waiting in triage for more than a week');
});
if (alreadyPinged) {
continue;
}
await github.rest.issues.createComment({
owner,
repo,
issue_number: issue.number,
body: 'This issue has been waiting in triage for more than a week without a maintainer update. @mochajs/maintenance-crew, could someone please take a look?',
});
}
mochajs-mocha-51a0cc5/.gitignore 0000664 0000000 0000000 00000003611 15257337474 0016640 0 ustar 00root root 0000000 0000000 # Mocha-specific
docs/images/supporters
mocha.js
mocha.js.map
!bin/mocha.mjs
!lib/mocha.js
# Playwright browser tests
test/browser/.generated/
test-results/
playwright-report/
blob-report/
# Bundle debugging
stats.html
#########################################
# NON-MOCHA STUFF GOES BELOW THIS THING #
#########################################
# Git mergetool
# Use `git config mergetool.keepBackup false` to stop generating these files
*.orig
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# nyc/istanbul
coverage
.nyc_output
# Dependencies
node_modules/
# npm
.npm
*.tgz
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# dotenv environment variables file
.env
.env.test
# Yarn
yarn.lock
.yarn-integrity
# Various temporary files
*~
# Emacs
\#*\#
/.emacs.desktop
/.emacs.desktop.lock
*.elc
auto-save-list
tramp
.\#*
# Vim
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]
Session.vim
[._]*.un~
# Diff
*.patch
*.diff
# VSCode
.vscode/
# JetBrains' IDEs
.idea/
*.iws
out/
.idea_modules/
atlassian-ide-plugin.xml
# SourceTree
*_BACKUP_*
*_BASE_*
*_LOCAL_*
*_REMOTE_*
# SublimeText
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache
*.sublime-workspace
*.sublime-project
sftp-config.json
Package Control.last-run
Package Control.ca-list
Package Control.ca-bundle
Package Control.system-ca-bundle
Package Control.cache/
Package Control.ca-certs/
Package Control.merged-ca-bundle
Package Control.user-ca-bundle
oscrypto-ca-bundle.crt
bh_unicode_properties.cache
GitHub.sublime-settings
# direnv
.envrc
# Linux
.fuse_hidden*
.directory
.Trash-*
.nfs*
# Windows
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
*.stackdump
[Dd]esktop.ini
$RECYCLE.BIN/
*.cab
*.msi
*.msix
*.msm
*.msp
*.lnk
# macOS
.DS_Store
.AppleDouble
.LSOverride
._*
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Local Netlify folder
.netlify
mochajs-mocha-51a0cc5/.knip.jsonc 0000664 0000000 0000000 00000001327 15257337474 0016727 0 ustar 00root root 0000000 0000000 {
"$schema": "https://unpkg.com/knip@6/schema-jsonc.json",
"entry": ["docs/_data/supporters.cjs", "index.js!", "lib/cli/index.cjs!"],
"project": ["{bin,lib,scripts,test}/**/*.{js,ts,mjs,cjs}"],
"ignore": [
"test/integration/fixtures/esm/type-module/test-that-imports-non-existing-module.fixture.js",
"test/integration/fixtures/options/watch/test-with-dependency.fixture.cjs",
],
"ignoreDependencies": [
"@test/esm-only-loader",
"coffeescript",
"fake",
"non-existent-package",
"tsx",
],
"mocha": {
"entry": ["test/**/*.{js,ts,mjs,cjs}"],
},
"webpack": {
"config": "test/browser-specific/fixtures/webpack/webpack.config.cjs",
},
"rules": {
"exports": "off",
},
}
mochajs-mocha-51a0cc5/.mailmap 0000664 0000000 0000000 00000003774 15257337474 0016303 0 ustar 00root root 0000000 0000000 # see https://www.git-scm.com/docs/git-check-mailmap for formatting info
TJ Holowaychuk
Travis Jeffery
Travis Jeffery Dr. Travis Jeffery
Christopher Hiller
David da Silva ContΓn David da Silva
David da Silva ContΓn David da Silva
David da Silva ContΓn
Ariel Mashraki
Ariel Mashraki
Forbes Lindesay
Ben Bradley <[ben.bradley@cigna.com|mailto:ben.bradley@cigna.com]>
Glen Mailer
38elements <38elements@users.noreply.github.com>
Andreas Lind Petersen Andreas Lind
Ben Harris
Can Oztokmak
Will Langstroth
Sulabh Bista
Rustem Mustafin
Rico Sta. Cruz
Pete Hawkins
Raynos <=>
Raynos Raynos (Jake Verbaten)
Markus Tacker
Long Ho
LΓ‘szlΓ³ BΓ‘csi Laszlo Bacsi
Eli Skeggs
Domenic Denicola domenic
Michael Schoonmaker
mochajs-mocha-51a0cc5/.mocharc.yml 0000664 0000000 0000000 00000000317 15257337474 0017065 0 ustar 00root root 0000000 0000000 require: "./test/setup.cjs"
ui: "bdd"
global:
- "okGlobalA,okGlobalB"
- "okGlobalC"
- "callback*"
timeout: 1000
watch-ignore:
- ".*"
- "docs/_site/**"
- "node_modules"
- "coverage"
- "cache"
mochajs-mocha-51a0cc5/.npmrc 0000664 0000000 0000000 00000000025 15257337474 0015764 0 ustar 00root root 0000000 0000000 message=Release v%s mochajs-mocha-51a0cc5/.nycrc 0000664 0000000 0000000 00000001105 15257337474 0015763 0 ustar 00root root 0000000 0000000 {
"reporter": ["json", "text-summary"],
"all": true,
"exclude": [
"coverage/**",
"docs/**",
"packages/*/test{,s}/**",
"repro/**",
"**/*.d.ts",
"test{,s}/**",
"test{,-*}.{js,cjs,mjs,ts}",
"**/*{.,-}test.{js,cjs,mjs,ts}",
"**/__tests__/**",
"**/{rollup,webpack}.config.js",
"**/playwright.config.js",
"**/{babel.config,.eslintrc,.mocharc}.{js,cjs}",
"lib/browser/**",
"package-lock.json",
"**/package-lock.json",
"node_modules/**",
"scripts/**",
"!test/integration/fixtures/stack-trace.fixture.cjs"
]
}
mochajs-mocha-51a0cc5/.prettierignore 0000664 0000000 0000000 00000000255 15257337474 0017714 0 ustar 00root root 0000000 0000000 /.nyc_output
/CHANGELOG.md
/coverage
/pnpm-lock.yaml
/test/*/fixtures/**
# release-please generate a compact manifest.json by default
/.github/release-please/manifest.json
mochajs-mocha-51a0cc5/.wallaby.cjs 0000664 0000000 0000000 00000002731 15257337474 0017064 0 ustar 00root root 0000000 0000000 "use strict";
module.exports = () => {
return {
files: [
"index.js",
"lib/**/*.{js,json}",
"test/setup.cjs",
"test/assertions.cjs",
{
pattern: "test/node-unit/**/*.fixture.js",
instrument: false,
},
{
pattern: "test/unit/**/*.fixture.js",
instrument: false,
},
"package.json",
"mocharc.yml",
"!lib/browser/growl.js",
],
filesWithNoCoverageCalculated: [
"test/**/*.fixture.js",
"test/setup.cjs",
"test/assertions.cjs",
"lib/browser/**/*.js",
],
tests: ["test/unit/**/*.spec.js", "test/node-unit/**/*.spec.js"],
env: {
type: "node",
runner: "node",
},
workers: { recycle: true },
testFramework: { type: "mocha", path: __dirname },
setup(wallaby) {
// running mocha instance is not the same as mocha under test,
// running mocha is the project's source code mocha, mocha under test is instrumented version of the source code
const runningMocha = wallaby.testFramework;
runningMocha.timeout(1000);
// to expose it/describe etc. on the mocha under test
const MochaUnderTest = require("./");
const mochaUnderTest = new MochaUnderTest();
mochaUnderTest.suite.emit(
MochaUnderTest.Suite.constants.EVENT_FILE_PRE_REQUIRE,
global,
"",
mochaUnderTest,
);
require("./test/setup.cjs");
},
debug: true,
runMode: "onsave",
};
};
mochajs-mocha-51a0cc5/AGENTS.md 0000664 0000000 0000000 00000015364 15257337474 0016163 0 ustar 00root root 0000000 0000000 # AGENTS.md
Agent onboarding for the `mochajs/mocha` repository.
> **Trust this file first.** If you are unsure about command order, use the sequences below before trying alternatives.
## Instruction precedence and execution defaults
- Use `AGENTS.md` as the primary repository playbook for agent work.
- Use `.github/copilot-instructions.md` as the short compatibility layer for tools that prefer it.
- If prose and executable configuration disagree on command details, trust `package.json` scripts and `.github/workflows/*.yml`.
- Prefer repository `npm` scripts over ad hoc shell pipelines.
- If the current tool environment cannot edit files or run commands, provide copy-ready patch/command text and clearly mark validation as not run.
## Mission and scope
- Keep changes minimal and targeted.
- Preserve compatibility (Mocha is highly depended-upon and semver-sensitive).
- Never edit generated artifacts directly.
- Validate locally with the smallest command set that matches your change.
## Environment prerequisites
- Node.js: `^20.19.0 || >=22.12.0` (prefer Node 22 locally)
- npm (do not use pnpm/yarn for this repo)
- Google Chrome (required for browser tests)
## Repository map (quick)
- `lib/` β core runtime (runner, suite, hooks, reporters, CLI internals)
- `bin/` β CLI entrypoints (`mocha`)
- `test/` β unit, integration, node-only, browser-specific, smoke
- `docs/` β Astro/Starlight docs app with separate lockfile/scripts
- `mocha.js` / `mocha.js.map` β browser bundle outputs (generated)
- `.github/workflows/` β CI job matrix and script partitioning
## Generated files and do-not-edit rules
- **Do not edit** `mocha.js` or `mocha.js.map` by hand.
- These are generated via `npm run build` (Rollup).
- `npm run clean` removes generated bundle artifacts.
## Verified command runbooks
Run from repository root unless noted.
### Bootstrap
1. `npm install`
2. (Docs work only) `cd docs && npm install`
For clean CI reproduction on a fresh checkout, prefer `npm ci --ignore-scripts`; use `npm install` for normal local bootstrap.
### Fast sanity (recommended before/after focused edits)
1. `npm run clean`
2. `npm run build`
3. `npm run tsc`
4. `npm run test-smoke`
5. Targeted tests relevant to changed area (see below)
### Targeted tests
- Unit/core: `npm run test-node:unit`
- Integration: `npm run test-node:integration`
- Interfaces: `npm run test-node:interfaces`
- Reporters: `npm run test-node:reporters`
- Browser subset: `npm run test-browser -- --grep bdd`
- Full browser path: `npm run test-browser` (includes clean + build)
### Validation routing
- Instruction/docs-only edits: no runtime checks required unless behavior claims changed.
- Browser or reporter changes: `npm run clean` β `npm run build` β browser validation.
- CLI or node runtime changes: `npm run test-smoke` plus the closest `test-node:*` suite.
- Type/signature changes: `npm run tsc`.
- Workflow or script changes: mirror the affected `package.json` script or workflow job locally when practical.
### Full local gate (closest to CI intent)
1. `npm run format:check`
2. `npm run lint`
3. `npm run test-node`
4. `npm run test-browser`
5. `npm run tsc`
## Critical command-order gotchas
- Browser tests depend on built bundle artifacts.
- If you run `clean`, you **must** run `build` before invoking `playwright test` directly, or the page will 404 on `/mocha.js`.
- `test-browser` script is safer than calling `playwright test` directly because it includes `clean build`.
## CI parity notes
Main workflow: `.github/workflows/mocha.yml`
CI partitions checks into separate jobs:
- `format:check`
- `lint`
- `test-smoke` (Node 20/22/24)
- `test-node:*` matrix (interfaces/unit/integration/jsapi/requires/reporters/only)
- browser tests (`test-browser` with ChromeHeadless)
- `tsc`
Reusable execution details in `.github/workflows/npm-script.yml`:
- Uses `npm ci --ignore-scripts`
- Default Node 22 unless overridden
- `NODE_OPTIONS=--trace-warnings`
- Optional coverage upload via Codecov
## Transient validation issues and environment drift
During onboarding or after dependency refresh, you may encounter validation failures that reflect local environment or ecosystem drift rather than a persistent repository bug.
Common patterns include:
- Lint commands (for example, `npm run lint:code`) failing because new or stricter rules turn warnings into errors (such as via `--max-warnings 0`). Inspect the reported rule and location before changing lint configuration or adding suppressions.
- Docs-related workflows where documentation generation succeeds but a subsequent static site or bundler step (for example, `astro build`) fails with runtime errors originating in third-party dependencies.
Treat these as potential environment/version drift signals. Do not resolve them by broadly weakening checks (for example, relaxing lint strictness or skipping build steps) unless explicitly requested in the task.
## Change strategy for agents
- Prefer smallest reproducible command to validate your specific edit first.
- Add/adjust tests with behavior changes; do not change unrelated tests.
- Avoid broad dependency upgrades unless task explicitly requests it.
- If touching browser behavior, always include at least one browser test run.
- If touching CLI or node runtime behavior, include smoke + targeted node suite.
### CJS to ESM migration conventions (runtime code)
- Scope: prioritize runtime modules under `lib/`; do not include test fixtures unless explicitly requested.
- For ESM modules, prefer **named exports** over `export default`.
- When consuming ESM from CJS via `require()`, import named bindings from the namespace object:
- Use `const { SomeName } = require("./file.mjs");`
- Avoid `require("./file.mjs").default` for runtime modules.
- Keep PRs small and reviewable (roughly <=100 changed lines when practical).
- After each migration slice, update all direct runtime call sites in the same PR to avoid mixed import patterns.
## Docs subsystem notes (`docs/`)
- Separate package and lockfile.
- Script chain in `docs/package.json`:
- `generate` fetches supporter metadata/assets
- `build` runs `astro check && astro build`
- `docs` script reinstalls root+docs deps, then generate+build
- Docs output can be very noisy (many supporter image fetch logs).
## High-signal troubleshooting
- Never claim a check passed unless you actually ran it.
- If blocked, report the exact command, working directory, and first meaningful error.
- Missing Chrome / browser launch failures: ensure local Chrome installed and available.
- Browser path errors after cleanup: rerun `npm run build`.
- Strange lint failures after dependency changes: rerun on clean install (`npm ci`), inspect warning-as-error output first.
- Unexpected CI mismatch: mirror exact script from workflow rather than invoking custom command combinations.
mochajs-mocha-51a0cc5/AUTHORS 0000664 0000000 0000000 00000053706 15257337474 0015732 0 ustar 00root root 0000000 0000000 # Authors ordered by first contribution.
TJ Holowaychuk
James Carr
Fredrik Lindin
Konstantin KaΜfer
David Henderson
Harry Brundage
Quang Van
hokaccha
Guillermo Rauch
FARKAS MΓ‘tΓ©
Ben Lindsey
Steve Mason
Ryunosuke SATO
Nathan Rajlich
Raynos
Yuest Wang
Maciej MaΕecki
Joshua Krall
Fedor Indutny
Will Langstroth
Attila Domokos
Jussi Virtanen
Phil Sung
vlad
Paul Miller
Bjørge Næss
Jeff Kunkle
Fabio M. Costa
Michael Riley
Ian Young
Jakub NesΜetrΜil
Tyson Tate
Jo Liss
Arian Stolwijk
Brendan Nee
Xavier Antoviaque
Domenic Denicola
Brian Beck
Dave McKenna
Richard Dingwall
Cory Thomas
R56
Ian Storm Taylor
Andreas Brekken
abrkn
Nathan Bowser
LΓ‘szlΓ³ BΓ‘csi
Atsuya Takagi
Gavin Mogan
fengmk2
Seiya Konno
Jan Lehnardt
Matt Robenolt
Jonas Westerlund
Koen Punt
Jason Barry
Austin Birch
Adam Crabtree
Casey Foster
Jonathan Creamer
Brian Moore
traleig1
John Firebaugh
airportyh
Aaron Heckmann
Russ Bradberry
Ivan
Corey Butler
Paul Armstrong
Herman Junge
Michael Schoonmaker
Wil Moore III
Pete Hawkins
tgautier@yahoo.com
yuitest
Matt Smith
Katie Gengler
Bryan Donovan
Nathan Alderson
Shawn Krisman
Merrick Christensen
Timo Tijhof
Simon Gaeremynck
Jaakko Salonen
Jonathan Rajavuori
Forbes Lindesay
Standa Opichal
Matthew Shanley
James Lal
Greg Perkins
Gareth Murphy
Juzer Ali
Sasha Koss
Justin DuJardin
Frederico Silva
Jesse Dailey
Yanis Wang
fcrisci
Javier Aranda
Florian Margaine
fool2fish
James Bowes
Valentin Agachi
Mathieu DesvΓ©
Glen Huang
Simon Goumaz
Alexander Early
Jimmy Cuadra
Russell Munson
lodr
Liam Newman
Dmitry Shirokov
Fredrik Enestad
Kirill Korolyov
grasGendarme
Mike Pennisi
Victor Costan
Tim Ehat
Jeremy Martin
Mal Graty
Di Wu
badunk
Marc Kuo
Sindre Sorhus
Salehen Shovon Rahman
eiji.ienaga
Oscar Godson
Daniel Stockman
Stephen Mathieson
Travis Jeffery
Andreas Lind Petersen
Romain Prieto
JP Bochi
Teddy Zeenny
Roman Neuhauser
XhmikosR
Brian Lalor
Refael Ackermann
ChrisWren
Andrew Nesbitt
berni
Andrey Popp <8mayday@gmail.com>
Brian M. Carlson
Michael Olson
Arnaud Brousseau
Peter Rust
Vadim Nikitin
Roman Shtylman
Tapiwa Kelvin
Rustem Mustafin
Glen Mailer
Nathan Black
sebv
andy matthews
Benjie Gillam
Noshir Patel
Ben Noordhuis
Jacob Wejendorp
claudyus
Denis Bardadym
Connor Dunn
Jonathan Ong
Harish
Michal Charemza
startswithaj
Gareth Aye
Nick Fitzgerald
Jan Kopriva
kavun
Christoffer Hallas
Jonathan Park
Devin Weaver
John Doty
Shaine Hatch
Ben Bradley
qiuzuhui
Jean Ponchon
Linus UnnebΓ€ck
Mattias Tidlund
Matija MarohniΔ
Michael Jackson
Joel Kemp
Zsolt TakΓ‘cs
jsdevel
lakmeer
Joshua Appelman
Christopher Hiller
Michael Demmer
Giovanni Bassi
Panu Horsmalahti
nishigori
Nicolo Taddei
Diogo Monteiro
mrShturman
PoppinL
samuel goldszmidt