ember-codemod-v1-to-v2
Version:
Codemod to convert Ember addons to v2 addon format
45 lines (44 loc) • 1.62 kB
JavaScript
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') ||
projectDependencies.has('@glint/ember-tsc'),
hasTypeScript: projectDependencies.has('typescript'),
isV1Addon: getPackageType(packageJson) === 'v1-addon',
name,
version,
};
}
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);
return {
locations: {
addon: codemodOptions.addonLocation ?? deriveAddonLocation(addonPackage),
testApp: codemodOptions.testAppLocation ?? 'test-app',
},
packages: {
addon: addonPackage,
testApp: {
name: codemodOptions.testAppName ?? 'test-app',
},
},
projectRoot: codemodOptions.projectRoot,
};
}