import { describe, it, expect } from 'vitest';
import { parsePackageJson, parsePackageLock, parseYarnLock, parsePnpmLock } from '../src/parsers';
describe('Parsers', () => {
it('should parse package.json', () => {
const content = JSON.stringify({
dependencies: { react: '^18.0.0' },
devDependencies: { typescript: '5.0.0' }
});
const deps = parsePackageJson(content);
expect(deps).toContainEqual({ name: 'react', version: '18.0.0' });
expect(deps).toContainEqual({ name: 'typescript', version: '5.0.0' });
});
it('should parse package-lock.json (v2/v3)', () => {
const content = JSON.stringify({
packages: {
'': { name: 'root' },
'node_modules/axios': { version: '1.0.0' },
'node_modules/lodash': { version: '4.17.21' }
}
});
const deps = parsePackageLock(content);
expect(deps).toHaveLength(2);
expect(deps).toContainEqual({ name: 'axios', version: '1.0.0' });
});
it('should parse yarn.lock', () => {
const content = `
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"axios@^1.0.0":
version "1.6.0"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.0.tgz#fba..."
integrity sha512-...
`;
const deps = parseYarnLock(content);
expect(deps).toContainEqual({ name: 'axios', version: '1.6.0' });
});
it('should parse pnpm-lock.yaml', () => {
const content = `
lockfileVersion: 5.4
packages:
/axios/1.6.0:
resolution: {integrity: sha512-...}
dev: false
/@scope/pkg/2.0.0:
resolution: {integrity: sha512-...}
`;
const deps = parsePnpmLock(content);
expect(deps).toContainEqual({ name: 'axios', version: '1.6.0' });
expect(deps).toContainEqual({ name: '@scope/pkg', version: '2.0.0' });
});
});