18d3f3824SCedric van Puttenimport { vol } from 'memfs'; 28d3f3824SCedric van Puttenimport path from 'path'; 38d3f3824SCedric van Putten 46a725f6fSColin McDonnellimport { BunPackageManager } from '../../node/BunPackageManager'; 58d3f3824SCedric van Puttenimport { NpmPackageManager } from '../../node/NpmPackageManager'; 68d3f3824SCedric van Puttenimport { PnpmPackageManager } from '../../node/PnpmPackageManager'; 78d3f3824SCedric van Puttenimport { YarnPackageManager } from '../../node/YarnPackageManager'; 88d3f3824SCedric van Puttenimport { createForProject, resolvePackageManager } from '../nodeManagers'; 98d3f3824SCedric van Puttenimport { 106a725f6fSColin McDonnell BUN_LOCK_FILE, 118d3f3824SCedric van Putten NPM_LOCK_FILE, 128d3f3824SCedric van Putten PNPM_LOCK_FILE, 138d3f3824SCedric van Putten PNPM_WORKSPACE_FILE, 148d3f3824SCedric van Putten YARN_LOCK_FILE, 158d3f3824SCedric van Putten} from '../nodeWorkspaces'; 168d3f3824SCedric van Putten 178d3f3824SCedric van Puttenjest.mock('fs'); 188d3f3824SCedric van Putten 198d3f3824SCedric van Puttendescribe(createForProject, () => { 208d3f3824SCedric van Putten const projectRoot = '/foo'; 218d3f3824SCedric van Putten 228d3f3824SCedric van Putten afterEach(() => vol.reset()); 238d3f3824SCedric van Putten 248d3f3824SCedric van Putten it(`creates npm package manager from options`, () => { 258d3f3824SCedric van Putten expect(createForProject(projectRoot, { npm: true })).toBeInstanceOf(NpmPackageManager); 268d3f3824SCedric van Putten }); 278d3f3824SCedric van Putten 288d3f3824SCedric van Putten it(`creates yarn package manager from options`, () => { 298d3f3824SCedric van Putten expect(createForProject(projectRoot, { yarn: true })).toBeInstanceOf(YarnPackageManager); 308d3f3824SCedric van Putten }); 318d3f3824SCedric van Putten 328d3f3824SCedric van Putten it(`creates pnpm package manager from options`, () => { 338d3f3824SCedric van Putten expect(createForProject(projectRoot, { pnpm: true })).toBeInstanceOf(PnpmPackageManager); 348d3f3824SCedric van Putten }); 358d3f3824SCedric van Putten 366a725f6fSColin McDonnell it(`creates bun package manager from options`, () => { 376a725f6fSColin McDonnell expect(createForProject(projectRoot, { bun: true })).toBeInstanceOf(BunPackageManager); 386a725f6fSColin McDonnell }); 396a725f6fSColin McDonnell 408d3f3824SCedric van Putten it(`defaults to npm package manager`, () => { 418d3f3824SCedric van Putten expect(createForProject(projectRoot)).toBeInstanceOf(NpmPackageManager); 428d3f3824SCedric van Putten }); 438d3f3824SCedric van Putten 448d3f3824SCedric van Putten it(`creates npm package manager from project`, () => { 458d3f3824SCedric van Putten vol.fromJSON( 468d3f3824SCedric van Putten { 478d3f3824SCedric van Putten 'package.json': JSON.stringify({ name: 'project' }), 488d3f3824SCedric van Putten [NPM_LOCK_FILE]: '', 498d3f3824SCedric van Putten }, 508d3f3824SCedric van Putten projectRoot 518d3f3824SCedric van Putten ); 528d3f3824SCedric van Putten 538d3f3824SCedric van Putten expect(createForProject(projectRoot)).toBeInstanceOf(NpmPackageManager); 548d3f3824SCedric van Putten }); 558d3f3824SCedric van Putten 568d3f3824SCedric van Putten it(`creates yarn package manager from project`, () => { 578d3f3824SCedric van Putten vol.fromJSON( 588d3f3824SCedric van Putten { 598d3f3824SCedric van Putten 'package.json': JSON.stringify({ name: 'project' }), 608d3f3824SCedric van Putten [YARN_LOCK_FILE]: '', 618d3f3824SCedric van Putten }, 628d3f3824SCedric van Putten projectRoot 638d3f3824SCedric van Putten ); 648d3f3824SCedric van Putten 658d3f3824SCedric van Putten expect(createForProject(projectRoot)).toBeInstanceOf(YarnPackageManager); 668d3f3824SCedric van Putten }); 678d3f3824SCedric van Putten 688d3f3824SCedric van Putten it(`creates pnpm package manager from project`, () => { 698d3f3824SCedric van Putten vol.fromJSON( 708d3f3824SCedric van Putten { 718d3f3824SCedric van Putten 'package.json': JSON.stringify({ name: 'project' }), 728d3f3824SCedric van Putten [PNPM_LOCK_FILE]: '', 738d3f3824SCedric van Putten }, 748d3f3824SCedric van Putten projectRoot 758d3f3824SCedric van Putten ); 768d3f3824SCedric van Putten 778d3f3824SCedric van Putten expect(createForProject(projectRoot)).toBeInstanceOf(PnpmPackageManager); 788d3f3824SCedric van Putten }); 798d3f3824SCedric van Putten 806a725f6fSColin McDonnell it(`creates bun package manager from project`, () => { 816a725f6fSColin McDonnell vol.fromJSON( 826a725f6fSColin McDonnell { 836a725f6fSColin McDonnell 'package.json': JSON.stringify({ name: 'project' }), 846a725f6fSColin McDonnell [BUN_LOCK_FILE]: '', 856a725f6fSColin McDonnell }, 866a725f6fSColin McDonnell projectRoot 876a725f6fSColin McDonnell ); 886a725f6fSColin McDonnell 896a725f6fSColin McDonnell expect(createForProject(projectRoot)).toBeInstanceOf(BunPackageManager); 906a725f6fSColin McDonnell }); 916a725f6fSColin McDonnell 92*82c7d456SCedric van Putten it(`creates bun package manager from project using "yarn.lock" and "bun.lockb"`, () => { 93*82c7d456SCedric van Putten vol.fromJSON( 94*82c7d456SCedric van Putten { 95*82c7d456SCedric van Putten 'package.json': JSON.stringify({ name: 'project' }), 96*82c7d456SCedric van Putten [BUN_LOCK_FILE]: '', 97*82c7d456SCedric van Putten [YARN_LOCK_FILE]: '', 98*82c7d456SCedric van Putten }, 99*82c7d456SCedric van Putten projectRoot 100*82c7d456SCedric van Putten ); 101*82c7d456SCedric van Putten 102*82c7d456SCedric van Putten expect(createForProject(projectRoot)).toBeInstanceOf(BunPackageManager); 103*82c7d456SCedric van Putten }); 104*82c7d456SCedric van Putten 1058d3f3824SCedric van Putten it(`defaults to npm package manager`, () => { 1068d3f3824SCedric van Putten vol.fromJSON( 1078d3f3824SCedric van Putten { 1088d3f3824SCedric van Putten 'package.json': JSON.stringify({ name: 'project' }), 1098d3f3824SCedric van Putten }, 1108d3f3824SCedric van Putten projectRoot 1118d3f3824SCedric van Putten ); 1128d3f3824SCedric van Putten 1138d3f3824SCedric van Putten expect(createForProject(projectRoot)).toBeInstanceOf(NpmPackageManager); 1148d3f3824SCedric van Putten }); 1158d3f3824SCedric van Putten}); 1168d3f3824SCedric van Putten 1178d3f3824SCedric van Puttendescribe(resolvePackageManager, () => { 1188d3f3824SCedric van Putten const workspaceRoot = path.resolve('/monorepo/'); 1198d3f3824SCedric van Putten const projectRoot = path.resolve('/monorepo/packages/test/'); 1208d3f3824SCedric van Putten 1218d3f3824SCedric van Putten afterEach(() => vol.reset()); 1228d3f3824SCedric van Putten 1238d3f3824SCedric van Putten it(`resolves npm from monorepo workspace`, () => { 1248d3f3824SCedric van Putten vol.fromJSON( 1258d3f3824SCedric van Putten { 1268d3f3824SCedric van Putten 'packages/test/package.json': JSON.stringify({ name: 'project' }), 1278d3f3824SCedric van Putten 'package.json': JSON.stringify({ 1288d3f3824SCedric van Putten private: true, 1298d3f3824SCedric van Putten name: 'monorepo', 1308d3f3824SCedric van Putten workspaces: ['packages/*'], 1318d3f3824SCedric van Putten }), 1328d3f3824SCedric van Putten [NPM_LOCK_FILE]: '', 1338d3f3824SCedric van Putten }, 1348d3f3824SCedric van Putten workspaceRoot 1358d3f3824SCedric van Putten ); 1368d3f3824SCedric van Putten 1378d3f3824SCedric van Putten expect(resolvePackageManager(projectRoot)).toBe('npm'); 1388d3f3824SCedric van Putten expect(resolvePackageManager(projectRoot, 'npm')).toBe('npm'); 1398d3f3824SCedric van Putten expect(resolvePackageManager(projectRoot, 'pnpm')).toBeNull(); 1408d3f3824SCedric van Putten expect(resolvePackageManager(projectRoot, 'yarn')).toBeNull(); 1416a725f6fSColin McDonnell expect(resolvePackageManager(projectRoot, 'bun')).toBeNull(); 1428d3f3824SCedric van Putten }); 1438d3f3824SCedric van Putten 1448d3f3824SCedric van Putten it(`resolves pnpm from monorepo workspace`, () => { 1458d3f3824SCedric van Putten vol.fromJSON( 1468d3f3824SCedric van Putten { 1478d3f3824SCedric van Putten 'packages/test/package.json': JSON.stringify({ name: 'project' }), 1488d3f3824SCedric van Putten 'package.json': JSON.stringify({ 1498d3f3824SCedric van Putten private: true, 1508d3f3824SCedric van Putten name: 'monorepo', 1518d3f3824SCedric van Putten }), 1528d3f3824SCedric van Putten [PNPM_LOCK_FILE]: '', 1538d3f3824SCedric van Putten [PNPM_WORKSPACE_FILE]: 'packages:\n - packages/*', 1548d3f3824SCedric van Putten }, 1558d3f3824SCedric van Putten workspaceRoot 1568d3f3824SCedric van Putten ); 1578d3f3824SCedric van Putten 1588d3f3824SCedric van Putten expect(resolvePackageManager(projectRoot)).toBe('pnpm'); 1598d3f3824SCedric van Putten expect(resolvePackageManager(projectRoot, 'pnpm')).toBe('pnpm'); 1608d3f3824SCedric van Putten expect(resolvePackageManager(projectRoot, 'npm')).toBeNull(); 1618d3f3824SCedric van Putten expect(resolvePackageManager(projectRoot, 'yarn')).toBeNull(); 1626a725f6fSColin McDonnell expect(resolvePackageManager(projectRoot, 'bun')).toBeNull(); 1638d3f3824SCedric van Putten }); 1648d3f3824SCedric van Putten 1658d3f3824SCedric van Putten it(`resolves yarn from monorepo workspace`, () => { 1668d3f3824SCedric van Putten vol.fromJSON( 1678d3f3824SCedric van Putten { 1688d3f3824SCedric van Putten 'packages/test/package.json': JSON.stringify({ name: 'project' }), 1698d3f3824SCedric van Putten 'package.json': JSON.stringify({ 1708d3f3824SCedric van Putten private: true, 1718d3f3824SCedric van Putten name: 'monorepo', 1728d3f3824SCedric van Putten workspaces: ['packages/*'], 1738d3f3824SCedric van Putten }), 1748d3f3824SCedric van Putten [YARN_LOCK_FILE]: '', 1758d3f3824SCedric van Putten }, 1768d3f3824SCedric van Putten workspaceRoot 1778d3f3824SCedric van Putten ); 1788d3f3824SCedric van Putten 1798d3f3824SCedric van Putten expect(resolvePackageManager(projectRoot)).toBe('yarn'); 1808d3f3824SCedric van Putten expect(resolvePackageManager(projectRoot, 'yarn')).toBe('yarn'); 1818d3f3824SCedric van Putten expect(resolvePackageManager(projectRoot, 'npm')).toBeNull(); 1828d3f3824SCedric van Putten expect(resolvePackageManager(projectRoot, 'pnpm')).toBeNull(); 1836a725f6fSColin McDonnell expect(resolvePackageManager(projectRoot, 'bun')).toBeNull(); 1846a725f6fSColin McDonnell }); 1856a725f6fSColin McDonnell 1866a725f6fSColin McDonnell it(`resolves bun from monorepo workspace`, () => { 1876a725f6fSColin McDonnell vol.fromJSON( 1886a725f6fSColin McDonnell { 1896a725f6fSColin McDonnell 'packages/test/package.json': JSON.stringify({ name: 'project' }), 1906a725f6fSColin McDonnell 'package.json': JSON.stringify({ 1916a725f6fSColin McDonnell private: true, 1926a725f6fSColin McDonnell name: 'monorepo', 1936a725f6fSColin McDonnell workspaces: ['packages/*'], 1946a725f6fSColin McDonnell }), 1956a725f6fSColin McDonnell [BUN_LOCK_FILE]: '', 1966a725f6fSColin McDonnell }, 1976a725f6fSColin McDonnell workspaceRoot 1986a725f6fSColin McDonnell ); 1996a725f6fSColin McDonnell 2006a725f6fSColin McDonnell expect(resolvePackageManager(projectRoot)).toBe('bun'); 2016a725f6fSColin McDonnell expect(resolvePackageManager(projectRoot, 'bun')).toBe('bun'); 2026a725f6fSColin McDonnell expect(resolvePackageManager(projectRoot, 'npm')).toBeNull(); 2036a725f6fSColin McDonnell expect(resolvePackageManager(projectRoot, 'pnpm')).toBeNull(); 2046a725f6fSColin McDonnell expect(resolvePackageManager(projectRoot, 'yarn')).toBeNull(); 2058d3f3824SCedric van Putten }); 206*82c7d456SCedric van Putten 207*82c7d456SCedric van Putten it(`resolves bun from monorepo workspace using "yarn.lock" and "bun.lockb"`, () => { 208*82c7d456SCedric van Putten vol.fromJSON( 209*82c7d456SCedric van Putten { 210*82c7d456SCedric van Putten 'packages/test/package.json': JSON.stringify({ name: 'project' }), 211*82c7d456SCedric van Putten 'package.json': JSON.stringify({ 212*82c7d456SCedric van Putten private: true, 213*82c7d456SCedric van Putten name: 'monorepo', 214*82c7d456SCedric van Putten workspaces: ['packages/*'], 215*82c7d456SCedric van Putten }), 216*82c7d456SCedric van Putten [BUN_LOCK_FILE]: '', 217*82c7d456SCedric van Putten [YARN_LOCK_FILE]: '', 218*82c7d456SCedric van Putten }, 219*82c7d456SCedric van Putten workspaceRoot 220*82c7d456SCedric van Putten ); 221*82c7d456SCedric van Putten 222*82c7d456SCedric van Putten expect(resolvePackageManager(projectRoot)).toBe('bun'); 223*82c7d456SCedric van Putten expect(resolvePackageManager(projectRoot, 'bun')).toBe('bun'); 224*82c7d456SCedric van Putten expect(resolvePackageManager(projectRoot, 'npm')).toBeNull(); 225*82c7d456SCedric van Putten expect(resolvePackageManager(projectRoot, 'pnpm')).toBeNull(); 226*82c7d456SCedric van Putten 227*82c7d456SCedric van Putten // Due to the `yarn.lock` file being present when running `bun install --yarn`, 228*82c7d456SCedric van Putten // yarn can be returned as package manager when prefering `yarn`. 229*82c7d456SCedric van Putten expect(resolvePackageManager(projectRoot, 'yarn')).toBe('yarn'); 230*82c7d456SCedric van Putten }); 2318d3f3824SCedric van Putten}); 232