Files
anki/package.json
Fernando Lins f9a5b36c82 feat: add TS test coverage (#4843)
## Linked issue

Closes #4840

## Summary / motivation

Adds Vitest V8 coverage for TypeScript/Svelte tests via
`@vitest/coverage-v8`.
Introduces `just test-ts --coverage` and `just test-ts --coverage
--html`,
and wires TypeScript into the `just test --coverage` umbrella —
completing
coverage support across all three stacks (Python, Rust, TypeScript).

The threshold is set to 5% — intentionally low because the Vitest test
count is small relative to the TypeScript/Svelte source surface. It is
meant to be raised as more tests are added.

## How to test

```sh
# Existing behavior unchanged
just test-ts

# Terminal summary + enforces 5% line coverage threshold
just test-ts --coverage

# Terminal summary + HTML report under out/coverage/typescript/
just test-ts --coverage --html

# Full umbrella — all three stacks
just test --coverage
just test --coverage --html
```

### Checklist

- [x] I ran `./ninja check` or an equivalent relevant check locally.

### Details

- `@vitest/coverage-v8` pinned at `3.2.4` in `package.json`.
- Reports are written to `out/coverage/typescript/` via
`--coverage.reportsDirectory=../out/coverage/typescript` (relative to
the `ts/` working directory where vitest runs).
- V8 provider is preferred over Istanbul: faster and requires no Babel
transform for TypeScript projects.
- Coverage measures only code reachable through Vitest's module graph —
Svelte component rendering is not covered.
- The `yarn` justfile variable is added for platform-aware yarn
invocation (Windows vs Unix).

## Before / after behavior

Before: no `just test-ts`, no TypeScript coverage.
After: `just test-ts` runs Vitest via ninja; `just test-ts --coverage`
runs with V8 instrumentation.
`just test --coverage` now spans all three stacks.

---------

Co-authored-by: Abdo <abdo@abdnh.net>
2026-05-18 11:54:16 -03:00

102 lines
3.3 KiB
JSON

{
"name": "anki",
"version": "0.1.0",
"private": true,
"author": "Ankitects Pty Ltd and contributors",
"license": "AGPL-3.0-or-later",
"description": "Anki JS support files",
"scripts": {
"dev": "cd ts && vite dev",
"build": "cd ts && vite build",
"preview": "cd ts && vite preview",
"svelte-check:once": "cd ts && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --fail-on-warnings --threshold warning",
"svelte-check": "cd ts && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"vitest:once": "cd ts && vitest run",
"vitest": "cd ts && vitest"
},
"devDependencies": {
"@bufbuild/protoc-gen-es": "^1.8.0",
"@poppanator/sveltekit-svg": "^5.0.0",
"@sqltools/formatter": "^1.2.2",
"@sveltejs/adapter-static": "^3.0.0",
"@sveltejs/kit": "^2.53.3",
"@sveltejs/vite-plugin-svelte": "5.1",
"@types/bootstrap": "^5.0.12",
"@types/codemirror": "^5.60.0",
"@types/d3": "^7.0.0",
"@types/diff": "^5.0.0",
"@types/fabric": "^5.3.7",
"@types/jquery": "^3.5.0",
"@types/jqueryui": "^1.12.13",
"@types/lodash-es": "^4.17.4",
"@types/marked": "^5.0.0",
"@types/node": "^22",
"@typescript-eslint/eslint-plugin": "^5.60.1",
"@typescript-eslint/parser": "^5.60.1",
"@vitest/coverage-v8": "3.2.4",
"caniuse-lite": "^1.0.30001431",
"cross-env": "^7.0.2",
"diff": "^5.0.0",
"dprint": "^0.47.2",
"esbuild": "^0.25.3",
"esbuild-sass-plugin": "^3.3.1",
"esbuild-svelte": "^0.9.2",
"eslint": "^8.44.0",
"eslint-plugin-compat": "^4.1.4",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-svelte": "^2",
"license-checker-rseidelsohn": "=4.3.0",
"prettier": "^3.4.2",
"prettier-plugin-svelte": "^3.3.2",
"sass": "<1.77",
"svelte": "^5.53.5",
"svelte-check": "^4.2.2",
"svelte-preprocess": "^6.0.3",
"svelte-preprocess-esbuild": "^3.0.1",
"svgo": "^3.3.3",
"tslib": "^2.0.3",
"tsx": "^4.8.1",
"typescript": "^5.0.4",
"vite": "6",
"vitest": "^3"
},
"dependencies": {
"@bufbuild/protobuf": "^1.2.1",
"@floating-ui/dom": "^1.4.3",
"@fluent/bundle": "^0.18.0",
"@mdi/svg": "^7.0.96",
"@popperjs/core": "^2.11.8",
"bootstrap": "^5.3.0",
"bootstrap-icons": "^1.10.5",
"codemirror": "^5.63.1",
"d3": "^7.0.0",
"fabric": "^5.3.0",
"hammerjs": "^2.0.8",
"intl-pluralrules": "^2.0.0",
"jquery": "^3.5.1",
"jquery-ui-dist": "^1.12.1",
"lodash-es": "^4.17.23",
"lru-cache": "^10.2.0",
"marked": "^5.1.0",
"mathjax": "^3.1.2"
},
"resolutions": {
"canvas": "npm:empty-npm-package@1.0.0",
"cookie": "0.7.0",
"devalue": "^5.6.2",
"tar": "^7.5.7",
"vite": "6",
"js-yaml": "^4.1.1",
"glob": "^10.5.0"
},
"browserslist": [
"defaults",
"not op_mini all",
"not < 1%",
"Chrome 77",
"iOS 14.5"
],
"type": "module",
"packageManager": "yarn@4.11.0"
}