apisurf
Version:
Analyze API surface changes between npm package versions to catch breaking changes
41 lines (40 loc) • 2.26 kB
JavaScript
import { describe, it, expect } from '@jest/globals';
import { parseApiSurface } from './parseApiSurface.js';
describe('parseApiSurface - function signatures', () => {
it('should capture arrow function signatures', () => {
const source = `
export const greet = (name: string) => \`Hello \${name}!\`;
export const greetWithPrefix = (name: string, prefix?: string) => \`\${prefix || 'Hello'} \${name}!\`;
`;
const result = parseApiSurface(source, 'test-pkg', '1.0.0');
// Check that functions are parsed
expect(result.namedExports.has('greet')).toBe(true);
expect(result.namedExports.has('greetWithPrefix')).toBe(true);
// Check that signatures are captured
const greetDef = result.typeDefinitions?.get('greet');
expect(greetDef).toBeDefined();
expect(greetDef?.kind).toBe('function');
expect(greetDef?.signature).toBe('export const greet = (name: string) => ...');
const greetWithPrefixDef = result.typeDefinitions?.get('greetWithPrefix');
expect(greetWithPrefixDef).toBeDefined();
expect(greetWithPrefixDef?.signature).toBe('export const greetWithPrefix = (name: string, prefix?: string) => ...');
});
it('should capture function type alias signatures', () => {
const source = `
export type EventHandler<T = any> = (event: T) => void;
export type AsyncEventHandler<T = any> = (event: T, context?: any) => Promise<void>;
`;
const result = parseApiSurface(source, 'test-pkg', '1.0.0');
// Check that type aliases are parsed
expect(result.typeOnlyExports.has('EventHandler')).toBe(true);
expect(result.typeOnlyExports.has('AsyncEventHandler')).toBe(true);
// Check that signatures are captured
const eventHandlerDef = result.typeDefinitions?.get('EventHandler');
expect(eventHandlerDef).toBeDefined();
expect(eventHandlerDef?.kind).toBe('type');
expect(eventHandlerDef?.signature).toContain('(event: T) => void');
const asyncEventHandlerDef = result.typeDefinitions?.get('AsyncEventHandler');
expect(asyncEventHandlerDef).toBeDefined();
expect(asyncEventHandlerDef?.signature).toContain('(event: T, context?: any) => Promise<void>');
});
});