Skip to content

Releases: eps1lon/types-react-codemod

v3.5.0

02 Dec 21:17
c1d5400
Compare
Choose a tag to compare

Minor Changes

  • Add support for Node.js 22.x (#448 702012e by @eps1lon)

  • Run no-implicit-ref-callback-return and react-element-default-any by default in preset-19 (#433 10085c8 by @eps1lon)

    The transformed code is not meant to be used as a pattern for new code.
    It really is about migrating existing code with as little friction.
    Changes can always be reverted and a subset chosen.

v3.4.1

14 Oct 13:10
c4304e0
Compare
Choose a tag to compare

Patch Changes

  • Declare dependency on @babel/types (#435 a7cc3ce by @huozhi)

    Fixes types-react-codemod tried to access @babel/types, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound

v3.4.0

10 Oct 14:50
8463103
Compare
Choose a tag to compare

Minor Changes

  • Add --yes option to skip prompts (#432 f0b075f by @eps1lon)

    Useful when applying presets when no user input is available or desired.

v3.3.0

21 Mar 23:33
b09abaa
Compare
Choose a tag to compare

Minor Changes

  • Add react-element-default-any-props codemod (#371 4191845 by @eps1lon)

    Opt-in codemod in preset-19.

     // implies `React.ReactElement<unknown>` in React 19 as opposed to `React.ReactElement<any>` in prior versions.
    -declare const element: React.ReactElement
    +declare const element: React.ReactElement<any>

    Only meant to migrate old code not a recommendation for how to type React elements.

v3.2.0

20 Mar 22:42
36ad54e
Compare
Choose a tag to compare

Minor Changes

  • Add no-implicit-ref-callback-return transform (#369 7535bfc by @eps1lon)

    Ensures you don't accidentally return anything from ref callbacks since the return value was always ignored.
    With ref cleanups, this is no longer the case and flagged in types to avoid mistakes.

    -<div ref={current => (instance = current)} />
    +<div ref={current => {instance = current}} />

    The transform is opt-in in the preset-19 in case you already used ref cleanups in Canary releases.

v3.1.1

18 Mar 19:13
9610dc4
Compare
Choose a tag to compare

Patch Changes

v3.1.0

15 Mar 22:07
b466f46
Compare
Choose a tag to compare

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

v3.0.0

03 Dec 17:06
1b73ece
Compare
Choose a tag to compare

Major Changes

Minor Changes

v2.1.0

07 Jun 20:40
17de41e
Compare
Choose a tag to compare

Minor Changes

Patch Changes

v2.0.1

26 Mar 18:32
3ba7a94
Compare
Choose a tag to compare

Patch Changes

  • #210 a47bd09 Thanks @eps1lon! - Ensure jscodeshift can be executed

    Fixes /usr/bin/env: ‘node\r’: No such file or directory