Skip to content

v3.1.0

Compare
Choose a tag to compare
@github-actions github-actions released this 15 Mar 22:07
· 23 commits to main since this release
b466f46

Minor Changes

  • Add codemod to replace deprecated ReactFragment by inlining its actual type (#326 ed97a70 by @eps1lon)

    import * as React from 'react';
    
    -const node: React.ReactFragment
    +const node: Iterable<React.ReactNode>
  • Add codemod to replace deprecated React types related to propTypes with their counterpart from the prop-types package (#357 1751318 by @eps1lon)

    +import * as PropTypes from "prop-types";
     import * as React from "react";
    -declare const requireable: React.Requireable<React.ReactNode>;
    +declare const requireable: PropTypes.Requireable<React.ReactNode>;
    -declare const validator: React.Validator<React.ReactNode>;
    +declare const requireable: PropTypes.Validator<React.ReactNode>;
    -declare const validationMap: React.ValidationMap<{}>;
    +declare const requireable: PropTypes.ValidationMap<React.ReactNode>;
    -declare const weakValidationMap: React.WeakValidationMap<{}>;
    +declare const requireable: PropTypes.WeakValidationMap<React.ReactNode>;
  • Add codemod for required initial value in useRef (#217 0047404 by @eps1lon)

    Added as useRef-required-initial.
    Can be used on 18.x types but only intended for once DefinitelyTyped/DefinitelyTyped#64920 lands.

  • Unflag codemods for new refs (#319 80fe29c by @eps1lon)

    Just removing their experimental prefix since we have increased confidence in these changes after seeing their impact internally.

    -experimental-refobject-defaults
    +refobject-defaults
  • Add codemod to replace LegacyRef with Ref (#347 e928761 by @eps1lon)

  • Add codemod to replace deprecated ReactNodeArray by inlining its actual type. (#325 b7f757c by @eps1lon)

    import * as React from 'react';
    
    -const node: React.ReactNodeArray
    +const node: ReadonlyArray<React.ReactNode>

Patch Changes

  • Added missing transforms as choices to preset-19 (#341 dc10a3d by @eps1lon)

  • Ensure added imports of types use the type modifier (#343 f05624f by @eps1lon)

    If we'd previously add an import to JSX (e.g. in scoped-jsx),
    the codemod would import it as a value.
    This breaks TypeScript projects using verbatimModuleSyntax as well as projects enforcing type imports for types.

    Now we ensure new imports of types use the type modifier:

    -import { JSX } from 'react'
    +import { type JSX } from 'react'

    This also changes how we transform the deprecated global JSX namespace.
    Instead of rewriting each usage, we opt for adding another import.
    The guiding principle being that we keep the changes minimal in a codemod.

    Before:

    import * as React from 'react'
    
    -const element: JSX.Element
    +const element: React.JSX.Element

    After:

    import * as React from 'react'
    +import { type JSX } from 'react'
    
    const element: JSX.Element

    Note that rewriting of imports does not change the modifier.
    For example, the deprecated-vfc-codemod rewrites VFC identifiers to FC.
    If the import of VFC had no type modifier, the codemod will not add one.

    type modifiers for import specifiers require [TypeScript 4.5 which has reached EOL](https://github.com/DefinitelyTyped/DefinitelyTyped#support-window in DefinitelyTyped) which is a strong signal that you should upgrade to at least TypeScript 4.6 by now.

  • Ensure replace and rename codemods have consistent behavior (#348 a62832e by @eps1lon)

    Fixes multiple incorrect transform patterns that were supported by some transforms but not others.
    We no longer switch to type imports if the original type wasn't imported with that modifier.
    Type parameters are now consistently preserved.
    We don't add a reference to the React namespace anymore if we can just add a type import.

    This affects the following codemods:

    • deprecated-legacy-ref
    • deprecated-react-child
    • deprecated-react-text
    • deprecated-react-type
    • deprecated-sfc-element
    • deprecated-sfc
    • deprecated-stateless-component
    • deprecated-void-function-component
  • Find and replace type usage in type parameters of call expressions (#344 8c27551 by @eps1lon)

    Now we properly detect that e.g. JSX is used in someFunctionWithTypeParameters<JSX>().

    Affected codemods:

    • deprecated-react-child
    • deprecated-react-text
    • scoped-jsx