transforms/rename-unsafe-lifecycles.js (34 lines of code) (raw):

/** * Copyright 2015-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * */ 'use strict'; const DEPRECATED_APIS = Object.create(null); DEPRECATED_APIS.componentWillMount = 'UNSAFE_componentWillMount'; DEPRECATED_APIS.componentWillReceiveProps = 'UNSAFE_componentWillReceiveProps'; DEPRECATED_APIS.componentWillUpdate = 'UNSAFE_componentWillUpdate'; export default (file, api, options) => { const j = api.jscodeshift; const printOptions = options.printOptions || { quote: 'single', trailingComma: true }; const root = j(file.source); let hasModifications = false; const renameDeprecatedApis = path => { const name = path.node.key.name; if (DEPRECATED_APIS[name]) { path.value.key.name = DEPRECATED_APIS[name]; hasModifications = true; } }; const renameDeprecatedCallExpressions = path => { const name = path.node.property.name; if (DEPRECATED_APIS[name]) { path.node.property.name = DEPRECATED_APIS[name]; hasModifications = true; } }; // Class methods root.find(j.MethodDefinition).forEach(renameDeprecatedApis); // Class methods - typescript root.find(j.ClassMethod).forEach(renameDeprecatedApis); // Arrow functions root.find(j.ClassProperty).forEach(renameDeprecatedApis); // createReactClass and mixins root.find(j.Property).forEach(renameDeprecatedApis); // Function calls root.find(j.MemberExpression).forEach(renameDeprecatedCallExpressions); return hasModifications ? root.toSource(printOptions) : null; };