Utilities for handling JSON
@codemod-utils/json
helps you update files like package.json
and tsconfig.json
.
convertToMap()
converts an object to a Map, while convertToObject()
converts the Map back to an object. Use these two utilities to update JSONs.
Note
convertToObject()
creates an object with keys in alphabetical order.
Example
Remove dependencies (if they exist) from package.json
.
const dependencies = convertToMap(packageJson['dependencies']);
const packagesToDelete = [
'@embroider/macros',
'ember-auto-import',
'ember-cli-babel',
'ember-cli-htmlbars',
];
packagesToDelete.forEach((packageName) => {
dependencies.delete(packageName);
});
packageJson['dependencies'] = convertToObject(dependencies);
Example
Configure tsconfig.json
in an Ember app.
const compilerOptions = convertToMap(tsConfigJson['compilerOptions']);
compilerOptions.set('paths', {
[`${appName}/tests/*`]: ['tests/*'],
[`${appName}/*`]: ['app/*'],
'*': ['types/*'],
});
tsConfigJson['compilerOptions'] = convertToObject(compilerOptions);
Reads package.json
and returns the parsed JSON.
Note
readPackageJson()
checks that package.json
exists and is a valid JSON.
Example
Check if the project, against which the codemod is run, has typescript
as a dependency.
import { readPackageJson } from '@codemod-utils/json';
const { dependencies, devDependencies } = readPackageJson({
projectRoot,
});
const projectDependencies = new Map([
...Object.entries(dependencies ?? {}),
...Object.entries(devDependencies ?? {}),
]);
const hasTypeScript = projectDependencies.has('typescript');
Check if the fields name
and version
exist, in the sense that their values are a non-empty string.
Note
You may still need the non-null assertion operator !
, to tell TypeScript that name
and version
are not undefined
.
Example
import { readPackageJson, validatePackageJson } from '@codemod-utils/json';
const packageJson = readPackageJson({
projectRoot,
});
validatePackageJson(packageJson);
const { name, version } = packageJson;
- Node.js v18 or above
See the Contributing guide for details.
This project is licensed under the MIT License.