types-react-codemod
Version:
Collection of transforms for [jscodeshift](https://github.com/facebook/jscodeshift) related to `@types/react`.
51 lines (46 loc) • 1.23 kB
JavaScript
const parseSync = require("./utils/parseSync");
const { replaceReactType } = require("./utils/replaceType");
/**
* @param {import('jscodeshift').FileInfo} file
* @param {import('jscodeshift').API} api
*/
const deprecatedReactNodeArrayTransform = (file, api) => {
const j = api.jscodeshift;
const ast = parseSync(file);
const hasChanges = replaceReactType(
j,
ast,
"ReactNodeArray",
(typeReference) => {
if (typeReference.typeName.type === "TSQualifiedName") {
// `ReadonlyArray<*.ReactNode>`
return j.tsTypeReference(
j.identifier("ReadonlyArray"),
j.tsTypeParameterInstantiation([
j.tsTypeReference(
j.tsQualifiedName(
typeReference.typeName.left,
j.identifier("ReactNode"),
),
),
]),
);
} else {
// `ReadonlyArray<ReactNode>`
return j.tsTypeReference(
j.identifier("ReadonlyArray"),
j.tsTypeParameterInstantiation([
j.tsTypeReference(j.identifier("ReactNode")),
]),
);
}
},
"ReactNode",
);
// Otherwise some files will be marked as "modified" because formatting changed
if (hasChanges) {
return ast.toSource();
}
return file.source;
};
module.exports = deprecatedReactNodeArrayTransform;