ember-codemod-v1-to-v2
Version:
Codemod to convert Ember addons to v2 addon format
84 lines (83 loc) • 2.35 kB
JavaScript
function updateEmberAddon(packageJson, data) {
const { hasPublicAssets, publicAssets } = data;
if (hasPublicAssets) {
packageJson['ember-addon'] = {
'app-js': {},
main: 'addon-main.cjs',
'public-assets': publicAssets,
type: 'addon',
version: 2,
};
return;
}
packageJson['ember-addon'] = {
'app-js': {},
main: 'addon-main.cjs',
type: 'addon',
version: 2,
};
}
function updateExports(packageJson, data) {
const { hasTypeScript } = data;
if (!hasTypeScript) {
packageJson['exports'] = {
'.': './dist/index.js',
'./*': './dist/*.js',
'./addon-main.js': './addon-main.cjs',
};
return;
}
packageJson['exports'] = {
'.': {
types: './declarations/index.d.ts',
default: './dist/index.js',
},
'./*': {
/*
This object has an order dependency. The `default` key must appear last.
*/
types: './declarations/*.d.ts',
default: './dist/*.js',
},
'./addon-main.js': './addon-main.cjs',
};
}
function updateFiles(packageJson, data) {
const { hasBlueprints, hasPublicAssets, hasTypeScript } = data;
const files = new Set(['addon-main.cjs', 'dist']);
if (hasBlueprints) {
files.add('blueprints');
}
if (hasPublicAssets) {
files.add('public');
}
if (hasTypeScript) {
files.add('declarations');
}
packageJson['files'] = Array.from(files).sort();
}
function updateTypesVersions(packageJson, data) {
const { hasTypeScript } = data;
if (!hasTypeScript) {
return;
}
packageJson['typesVersions'] = {
'*': {
'*': ['declarations/*'],
},
};
}
export function updateOtherFields(packageJson, context, options) {
const { hasBlueprints, hasPublicAssets, publicAssets } = context.addon;
const { hasTypeScript } = options.packages.addon;
const data = {
hasBlueprints,
hasPublicAssets,
hasTypeScript,
publicAssets,
};
updateEmberAddon(packageJson, data);
updateExports(packageJson, data);
updateFiles(packageJson, data);
updateTypesVersions(packageJson, data);
}