mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-11 11:06:16 -08:00
* chore(lint): hold tests to their own max-lines ceiling The flat 400-line cap treated a spec like a component. A spec is a flat list of independent cases, so hitting the cap there produces arbitrary `-2.spec.ts` splits and hides coverage instead of surfacing design debt — 65 of the 138 files over the limit were tests. Production code keeps 400. Tests (`**/*.spec.ts`, `**/*.e2e.ts`, and everything under `apps/*-e2e/**`) get 1200. Blank lines and comments no longer count, so a docblock can't be the reason a file must be split. Both limits now live in tools/eslint/max-lines-config.mjs, imported by eslint.config.mjs and the baseline generator alike. The generator decides who belongs on the list by running ESLint's own max-lines rule instead of counting lines itself — a private reimplementation would disagree with the rule the moment either side changed (a `//` inside a template literal is enough) and yield a baseline that turns CI red while looking correct. The baseline drops 126 -> 68 entries with nothing added, and six now-dead `eslint-disable max-lines` directives are removed. A new eslint-tools test asserts the committed baseline still matches what the generator produces, so a stale entry or a forgotten regeneration fails CI. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * chore(lint): classify eslint-tools in the coverage policy A project with a `test` target must be assigned a coverage tier, so adding eslint-tools broke `coverage:policy:check` before the unit suite even ran. Tier B alongside packaging and release-tools: these are Node tests over lint tooling, and a coverage percentage across a generated list would not mean anything. CI runs Tier B/C through its own `--run-non-tier-a` step, so the baseline-consistency test executes there rather than being skipped. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
78 lines
5.6 KiB
JavaScript
78 lines
5.6 KiB
JavaScript
// Generated by tools/eslint/generate-max-lines-baseline.mjs — do not edit by hand.
|
|
// TypeScript files that predate the max-lines ESLint rule (400 for
|
|
// production code, 1200 for tests; blank lines and comments are not counted).
|
|
// This list should only shrink: split a file below the limit, rerun the
|
|
// generator, and commit the result. Never add new files here.
|
|
// A new file that genuinely cannot be split takes a file-wide
|
|
// `/* eslint-disable max-lines -- <why> */` instead; the generator skips those.
|
|
export const maxLinesBaseline = [
|
|
'apps/electron-backend-e2e/src/electron-test-fixtures.ts',
|
|
'apps/electron-backend-e2e/src/search.e2e.ts',
|
|
'apps/electron-backend/src/app/api/main.preload.spec-data.ts',
|
|
'apps/electron-backend/src/app/api/main.preload.ts',
|
|
'apps/electron-backend/src/app/app.ts',
|
|
'apps/electron-backend/src/app/database/operations/content.operations.ts',
|
|
'apps/electron-backend/src/app/database/operations/playlist.operations.ts',
|
|
'apps/electron-backend/src/app/events/epg-query.service.ts',
|
|
'apps/electron-backend/src/app/events/epg-worker.service.ts',
|
|
'apps/electron-backend/src/app/events/mpv-session.service.ts',
|
|
'apps/electron-backend/src/app/events/vlc-session.service.ts',
|
|
'apps/electron-backend/src/app/services/app-update.service.ts',
|
|
'apps/electron-backend/src/app/services/embedded-mpv-native.service.ts',
|
|
'apps/electron-backend/src/app/workers/database.worker.ts',
|
|
'apps/stalker-mock-server/src/app/data-generator.ts',
|
|
'apps/web-backend/src/app/web-backend-app.ts',
|
|
'apps/web/src/app/services/electron.service.ts',
|
|
'apps/web/src/app/services/pwa.service.ts',
|
|
'apps/xtream-mock-server/src/app/generators/marketing.generator.ts',
|
|
'libs/epg/data-access/src/lib/epg.service.ts',
|
|
'libs/m3u-state/src/lib/effects.ts',
|
|
'libs/playlist/m3u/feature-player/src/lib/video-player/video-player.component.ts',
|
|
'libs/playlist/shared/ui/src/lib/playlist-switcher/playlist-switcher.component.ts',
|
|
'libs/playlist/shared/ui/src/lib/recent-playlists/playlist-info/playlist-info.component.ts',
|
|
'libs/playlist/shared/ui/src/lib/recent-playlists/recent-playlists.component.ts',
|
|
'libs/playlist/shared/util/src/lib/playlist-context.facade.ts',
|
|
'libs/portal/downloads/feature/src/lib/downloads.component.ts',
|
|
'libs/portal/shared/data-access/src/lib/collection/stream-resolver.service.ts',
|
|
'libs/portal/shared/data-access/src/lib/collection/unified-favorites-data.service.ts',
|
|
'libs/portal/shared/data-access/src/lib/collection/unified-recent-data.service.ts',
|
|
'libs/portal/shared/ui/src/lib/components/unified-collection/unified-collection-page.component.ts',
|
|
'libs/portal/shared/ui/src/lib/components/unified-collection/unified-live-tab.component.ts',
|
|
'libs/portal/shared/util/src/lib/navigation/workspace-portal-navigation.ts',
|
|
'libs/portal/stalker/data-access/src/lib/stalker-session.service.ts',
|
|
'libs/portal/stalker/data-access/src/lib/stores/features/with-stalker-content.feature.ts',
|
|
'libs/portal/stalker/data-access/src/lib/stores/features/with-stalker-epg.feature.ts',
|
|
'libs/portal/stalker/data-access/src/lib/stores/features/with-stalker-player.feature.ts',
|
|
'libs/portal/stalker/feature/src/lib/stalker-collection-detail.component.ts',
|
|
'libs/portal/stalker/feature/src/lib/stalker-live-stream-layout/stalker-live-stream-layout.component.ts',
|
|
'libs/portal/stalker/feature/src/lib/stalker-search/stalker-search.component.ts',
|
|
'libs/portal/stalker/feature/src/lib/stalker-series-view/stalker-series-view.component.ts',
|
|
'libs/portal/xtream/data-access/src/lib/data-sources/electron-xtream-data-source.ts',
|
|
'libs/portal/xtream/data-access/src/lib/data-sources/pwa-xtream-data-source.ts',
|
|
'libs/portal/xtream/data-access/src/lib/services/xtream-api.service.ts',
|
|
'libs/portal/xtream/data-access/src/lib/services/xtream-url.service.ts',
|
|
'libs/portal/xtream/data-access/src/lib/stores/features/with-content.feature.ts',
|
|
'libs/portal/xtream/data-access/src/lib/stores/features/with-selection.feature.ts',
|
|
'libs/portal/xtream/feature/src/lib/live-stream-layout/live-stream-layout.component.ts',
|
|
'libs/portal/xtream/feature/src/lib/portal-channels-list/portal-channels-list.component.ts',
|
|
'libs/portal/xtream/feature/src/lib/search-results/search-results.component.ts',
|
|
'libs/portal/xtream/feature/src/lib/vod-details/vod-details-route.component.ts',
|
|
'libs/services/src/lib/database-electron.service.ts',
|
|
'libs/services/src/lib/playlist-backup.service.ts',
|
|
'libs/services/src/lib/playlists.service.spec.ts',
|
|
'libs/services/src/lib/playlists.service.ts',
|
|
'libs/shared/database/src/lib/connection.ts',
|
|
'libs/shared/interfaces/src/lib/electron-api.interface.ts',
|
|
'libs/ui/components/src/lib/channel-list-container/channel-list-container.component.ts',
|
|
'libs/ui/components/src/lib/channel-list-container/groups-view/groups-view.component.ts',
|
|
'libs/ui/components/src/lib/season-container/season-container.component.ts',
|
|
'libs/ui/epg/src/lib/multi-epg/multi-epg-container.component.ts',
|
|
'libs/ui/playback/src/lib/embedded-mpv-player/embedded-mpv-player.component.ts',
|
|
'libs/workspace/dashboard/data-access/src/lib/dashboard-data.service.spec.ts',
|
|
'libs/workspace/dashboard/data-access/src/lib/dashboard-data.service.ts',
|
|
'libs/workspace/dashboard/feature/src/lib/rails/workspace-dashboard-rails.component.ts',
|
|
'libs/workspace/shell/feature/src/lib/workspace-context-panel/workspace-context-panel.component.ts',
|
|
'libs/workspace/shell/feature/src/lib/workspace-shell/services/helpers/workspace-shell-command-builders.ts',
|
|
'tools/release/generate-marketing-artwork.ts',
|
|
];
|