apisurf
Version:
Analyze API surface changes between npm package versions to catch breaking changes
49 lines (48 loc) • 1.82 kB
JavaScript
import { formatInspectConsoleOutput } from './formatInspectConsoleOutput.js';
import { formatInspectMarkdownOutput } from './formatInspectMarkdownOutput.js';
import { formatInspectHtmlOutput } from './formatInspectHtmlOutput.js';
import { formatInspectReportOutput } from './formatInspectReportOutput.js';
/**
* Formats inspect results according to the specified output format.
*/
export function formatInspectOutput(result, format, verbose = false) {
switch (format) {
case 'json':
return formatInspectJsonOutput(result);
case 'markdown':
return formatInspectMarkdownOutput(result, verbose);
case 'html':
return formatInspectHtmlOutput(result);
case 'report':
return formatInspectReportOutput(result);
case 'console':
default:
return formatInspectConsoleOutput(result, verbose);
}
}
/**
* Formats inspect results as JSON.
*/
function formatInspectJsonOutput(result) {
// Convert Map to object for JSON serialization
const apiSurfacesObj = {};
for (const [key, surface] of result.apiSurfaces) {
apiSurfacesObj[key] = {
...surface,
namedExports: Array.from(surface.namedExports),
typeOnlyExports: Array.from(surface.typeOnlyExports),
typeDefinitions: surface.typeDefinitions ?
Object.fromEntries(Array.from(surface.typeDefinitions.entries()).map(([name, def]) => [
name,
{
...def,
properties: def.properties ? Object.fromEntries(def.properties) : undefined
}
])) : undefined
};
}
return JSON.stringify({
...result,
apiSurfaces: apiSurfacesObj
}, null, 2);
}