The large output from the dot reporter (caused by `RUN_LAZY_TESTS`, `RUN_RAW_TESTS`, `RUN_RAW_RANGE_TESTS` and `RUN_RAW_TOKENS_TESTS`) sometimes causes CI to fail.
This PR switches to the [`minimal` reporter ](https://vitest.dev/guide/reporters.html#minimal-reporter) which should only log on failed test cases.
Implement the beginnings of support for tokens in `napi/parser`.
This PR only adds support for tokens via raw transfer, and behind an undocumented `experimentalTokens` option.
Add tests checking that tokens received on JS side via raw transfer match snapshots for all Test262, AcornJSX, and TypeScript test cases. They do!
The tests are the main purpose of this PR, making sure it works before we switch over to tokens via raw transfer in Oxlint.
We can add full tokens support to `napi/parser` (including via JSON transfer) later on.
## Summary
- Use `dot` reporter in CI to avoid logging ~58,000 test names from
`parse-raw.test.ts`
- `parse-raw.test.ts` runs test cases via `it.each()` from Test262
(~46k), TypeScript (~11k), and JSX (~40) fixtures
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Fix a bug in Vitest config for `napi/parser` package. When providing `exclude` property, should extend the default to prevent Vitest searching `node_modules` for test files ([docs](https://vitest.dev/config/)).
Also refactor to clarify the logic of which tests are skipped depending on different `env` vars.
Add an option to `oxc-parser` to add `parent` to all AST nodes. This option is only available with raw transfer (not really feasible with JSON transfer, as JSON doesn't support circular references).
This is really for the purposes of JS plugins in Oxlint, so have not included the new deserializers which add `parent` in the `oxc-parser` NPM package, to avoid bloating download size. But it's ideal home is in `napi/parser` so can add it to the conformance tests.
`parent` is correct for all nodes in all Test262 and TypeScript test cases.
Now that `apps/oxlint` and `napi/parser` are both ESM packages (#13723 and #14042), we can use `.js` file extensions for all ESM files, rather than the mix of `.js` and `.mjs` file we had previously.
It's less confusing having to remember what's `.js` and what's `.mjs`, and avoids ugly workarounds like #14038 (`.d.mts`??).