Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,20 @@

All notable changes to this project will be documented in this file.

## [0.11.2] - 2024-12-26

### Changed

- **Reduced public API surface for smaller bundle size** - Minimized main entry point exports
- Removed 60+ internal exports from `src/index.ts` that users should never import directly
- Removed default value exports (`DEFAULT_NEXTCOV_CONFIG`, `DEFAULT_INCLUDE_PATTERNS`, etc.) - only needed internally
- Removed utility function exports (`normalizePath`) - only needed internally
- Kept only 5 essential runtime exports: `loadNextcovConfig`, `resolveNextcovConfig`, `mergeCoverage`, `printCoverageSummary`, `printCoverageComparison`
- Type definitions (`NextcovConfig`, etc.) remain available for TypeScript users
- Most users import from `nextcov/playwright` instead of main entry point
- Bundle size reduced from 143 KB to 27.28 KB (~81% reduction)
- Updated [README.md](README.md#L742-L803) API documentation to reflect minimal public API

## [0.11.1] - 2024-12-26

### Changed
Expand Down
73 changes: 28 additions & 45 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -741,41 +741,39 @@ Finalizes coverage collection and generates reports. Call in globalTeardown.

### Main API (`nextcov`)

#### `loadNextcovConfig(configPath?)`
The main `nextcov` entry point exports a minimal public API. Most users should import from `nextcov/playwright` instead (see above).

#### Configuration Types

Loads nextcov configuration from playwright.config.ts.
Used primarily for TypeScript definitions in `playwright.config.ts`:

```typescript
import { loadNextcovConfig } from 'nextcov'
import type { NextcovConfig } from 'nextcov'

const config = await loadNextcovConfig('./e2e/playwright.config.ts')
export const nextcov: NextcovConfig = {
outputDir: 'coverage/e2e',
sourceRoot: './src',
// ... other options
}
```

#### `V8ServerCoverageCollector`
#### `loadNextcovConfig(configPath?)`

Collector for server-side V8 coverage using `NODE_V8_COVERAGE` + CDP trigger.
Loads nextcov configuration from playwright.config.ts. Typically used in global-setup/teardown files.

```typescript
import { V8ServerCoverageCollector } from 'nextcov'

const collector = new V8ServerCoverageCollector({
cdpPort: 9230,
buildDir: '.next',
sourceRoot: './src',
})
import { loadNextcovConfig } from 'nextcov'

const connected = await collector.connect()
if (connected) {
const coverage = await collector.collect()
console.log(`Collected ${coverage.length} entries`)
}
const config = await loadNextcovConfig('./e2e/playwright.config.ts')
```

#### `mergeCoverage(options)`

Merges unit and E2E coverage reports.
Programmatically merge coverage reports. For most use cases, prefer the CLI: `npx nextcov merge`.

```typescript
import { mergeCoverage } from 'nextcov'

const result = await mergeCoverage({
unitCoveragePath: './coverage/unit/coverage-final.json',
e2eCoveragePath: './coverage/e2e/coverage-final.json',
Expand All @@ -786,37 +784,22 @@ const result = await mergeCoverage({
})
```

#### `CoverageProcessor`

Low-level class for processing V8 coverage.

```typescript
import { CoverageProcessor } from 'nextcov'

const processor = new CoverageProcessor(projectRoot, {
outputDir: './coverage',
sourceRoot: './src',
include: ['src/**/*.{ts,tsx}'],
exclude: ['**/*.test.*'],
reporters: ['html', 'json'],
})

const result = await processor.processAllCoverage(v8CoverageEntries)
```

#### `CoverageMerger`
#### Helper Functions

Class for merging coverage maps with different strategies.
For custom merge scripts:

```typescript
import { CoverageMerger } from 'nextcov'
import {
printCoverageSummary,
printCoverageComparison,
type MergeCoverageResult,
} from 'nextcov'

const merger = new CoverageMerger({
strategy: 'max', // 'max' | 'add' | 'prefer-first' | 'prefer-last'
applyFixes: true, // Apply coverage fixes
})
// Print formatted coverage summary
printCoverageSummary(result.summary, 'Merged Coverage')

const merged = await merger.merge(map1, map2, map3)
// Print comparison between unit and E2E coverage
printCoverageComparison(result.unitSummary, result.e2eSummary, result.summary)
```

## How It Works
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "nextcov",
"version": "0.11.1",
"version": "0.11.2",
"description": "Collect test coverage for Playwright E2E tests in Next.js applications",
"author": "Steve Zhang",
"license": "MIT",
Expand Down
90 changes: 19 additions & 71 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,104 +1,52 @@
/**
* nextcov - V8 to Istanbul Coverage Converter
*
* A library for converting V8 coverage data to Istanbul format.
* Supports Next.js, Playwright, and CDP-based coverage collection.
* Public API for nextcov. Most users should import from 'nextcov/playwright' instead.
* This module exports configuration utilities and advanced merging functions.
*
* For Playwright integration, use:
* import { initCoverage, finalizeCoverage } from 'nextcov/playwright'
*
* For merging coverage, use the CLI:
* npx nextcov merge coverage/unit coverage/e2e -o coverage/merged
*/

// ============================================================================
// Configuration
// ============================================================================
// These are primarily used for type definitions in playwright.config.ts
export {
// Types
type NextcovConfig,
type ResolvedNextcovConfig,
type DevModeOptions,
type ResolvedDevModeOptions,
// Functions
// Configuration utilities
resolveNextcovConfig,
loadNextcovConfig,
clearConfigCache,
normalizePath,
// Defaults
DEFAULT_NEXTCOV_CONFIG,
DEFAULT_DEV_MODE_OPTIONS,
DEFAULT_INCLUDE_PATTERNS,
DEFAULT_EXCLUDE_PATTERNS,
DEFAULT_REPORTERS,
DEFAULT_WATERMARKS,
COVERAGE_FINAL_JSON,
} from './utils/config.js'

// Core processing modules
export {
CoverageProcessor,
V8CoverageReader,
SourceMapLoader,
CoverageConverter,
IstanbulReporter,
} from './core/index.js'

// Merger
// ============================================================================
// Advanced Coverage Merging API
// ============================================================================
// For users who need programmatic control over merging (most should use CLI)
export {
CoverageMerger,
createMerger,
mergeCoverageMaps,
mergeWithBaseCoverage,
mergeCoverage,
printCoverageSummary,
printCoverageComparison,
type MergeCoverageOptions,
type MergeCoverageResult,
} from './merger/index.js'

// Collectors
export {
// Client collector
ClientCoverageCollector,
createClientCollector,
setDefaultCollectorConfig,
initCoverageDir,
saveClientCoverage,
readAllClientCoverage,
cleanCoverageDir,
filterAppCoverage,
type PlaywrightCoverageEntry,
type ClientCollectorConfig,
// Dev mode server collector
DevModeServerCollector,
createDevModeServerCollector,
type DevServerCollectorConfig,
type DevServerCoverageEntry,
// V8 server collector (uses NODE_V8_COVERAGE + CDP trigger)
V8ServerCoverageCollector,
createV8ServerCollector,
startV8ServerCoverage,
stopV8ServerCoverage,
type V8ServerCoverageEntry,
type V8ServerCollectorConfig,
} from './collector/index.js'

// Dev mode utilities
export {
DevModeSourceMapExtractor,
createDevModeExtractor,
type ExtractedSourceMap,
type DevModeConfig,
} from './utils/dev-mode-extractor.js'

// Types
// ============================================================================
// Common Types
// ============================================================================
export type {
V8Coverage,
V8ScriptCoverage,
SourceMapData,
SourceFile,
CoverageOptions,
CoverageResult,
CoverageSummary,
CoverageMetric,
ReporterType,
Watermarks,
EntryFilter,
SourceFilter,
MergerConfig,
MergeOptions,
MergeResult,
} from './types.js'