UNPKG

ember-codemod-v1-to-v2

Version:

Codemod to convert Ember addons to v2 addon format

65 lines (64 loc) 2.25 kB
import { findFiles } from '@codemod-utils/files'; import { getPackageType, readPackageJson, validatePackageJson, } from '@codemod-utils/package-json'; function analyzePackageJson(codemodOptions) { const { projectRoot } = codemodOptions; const packageJson = readPackageJson({ projectRoot }); validatePackageJson(packageJson); const { dependencies, devDependencies, name, version } = packageJson; const projectDependencies = new Map([ ...Object.entries(dependencies ?? {}), ...Object.entries(devDependencies ?? {}), ]); return { dependencies: projectDependencies, hasGlint: projectDependencies.has('@glint/core'), hasTypeScript: projectDependencies.has('typescript'), isV1Addon: getPackageType(packageJson) === 'v1-addon', name, version, }; } function analyzePackageManager(codemodOptions) { const { projectRoot } = codemodOptions; const mapping = { 'package-lock.json': 'npm', 'pnpm-lock.yaml': 'pnpm', 'yarn.lock': 'yarn', }; const lockFiles = Object.keys(mapping); const filePaths = findFiles(lockFiles, { projectRoot, }); if (filePaths.length !== 1) { console.warn('WARNING: Package manager is unknown. pnpm will be assumed.'); return 'pnpm'; } const lockfile = filePaths[0]; return mapping[lockfile]; } function deriveAddonLocation(addonPackage) { const hasScope = addonPackage.name.includes('/'); if (!hasScope) { return addonPackage.name; } const packageName = addonPackage.name.split('/')[1]; return packageName; } export function createOptions(codemodOptions) { const addonPackage = analyzePackageJson(codemodOptions); const packageManager = analyzePackageManager(codemodOptions); return { locations: { addon: codemodOptions.addonLocation ?? deriveAddonLocation(addonPackage), testApp: codemodOptions.testAppLocation ?? 'test-app', }, packageManager, packages: { addon: addonPackage, testApp: { name: codemodOptions.testAppName ?? 'test-app', }, }, projectRoot: codemodOptions.projectRoot, }; }