diff --git a/packages/react-query/codemods/v4/__testfixtures__/replace-import-specifier.input.tsx b/packages/react-query/codemods/v4/__testfixtures__/replace-import-specifier.input.tsx new file mode 100644 index 0000000000..7f7b209d69 --- /dev/null +++ b/packages/react-query/codemods/v4/__testfixtures__/replace-import-specifier.input.tsx @@ -0,0 +1,10 @@ +// React Query +import { useQuery, useQueryClient } from 'react-query' +import { useQuery as RenamedUseQuery, useQueryClient as RenamedUseQueryClient } from 'react-query' +import DefaultReactQuery from 'react-query' +import * as NamespacedReactQuery from 'react-query' +// Devtools +import { ReactQueryDevtools } from 'react-query/devtools' +import { ReactQueryDevtools as RenamedReactQueryDevtools } from 'react-query/devtools' +import DefaultReactQueryDevtools from 'react-query/devtools' +import * as NamespacedReactQueryDevtools from 'react-query/devtools' diff --git a/packages/react-query/codemods/v4/__testfixtures__/replace-import-specifier.output.tsx b/packages/react-query/codemods/v4/__testfixtures__/replace-import-specifier.output.tsx new file mode 100644 index 0000000000..083e645be4 --- /dev/null +++ b/packages/react-query/codemods/v4/__testfixtures__/replace-import-specifier.output.tsx @@ -0,0 +1,10 @@ +// React Query +import { useQuery, useQueryClient } from '@tanstack/react-query' +import { useQuery as RenamedUseQuery, useQueryClient as RenamedUseQueryClient } from '@tanstack/react-query' +import DefaultReactQuery from '@tanstack/react-query' +import * as NamespacedReactQuery from '@tanstack/react-query' +// Devtools +import { ReactQueryDevtools } from '@tanstack/react-query-devtools' +import { ReactQueryDevtools as RenamedReactQueryDevtools } from '@tanstack/react-query-devtools' +import DefaultReactQueryDevtools from '@tanstack/react-query-devtools' +import * as NamespacedReactQueryDevtools from '@tanstack/react-query-devtools' diff --git a/packages/react-query/codemods/v4/__tests__/replace-import-specifier.test.js b/packages/react-query/codemods/v4/__tests__/replace-import-specifier.test.js new file mode 100644 index 0000000000..b56cd04fe3 --- /dev/null +++ b/packages/react-query/codemods/v4/__tests__/replace-import-specifier.test.js @@ -0,0 +1,14 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const defineTest = require('jscodeshift/dist/testUtils').defineTest + +jest.autoMockOff() + +defineTest( + __dirname, + 'replace-import-specifier', + null, + 'replace-import-specifier', + { + parser: 'tsx', + }, +) diff --git a/packages/react-query/codemods/v4/replace-import-specifier.js b/packages/react-query/codemods/v4/replace-import-specifier.js new file mode 100644 index 0000000000..e35ec3a44b --- /dev/null +++ b/packages/react-query/codemods/v4/replace-import-specifier.js @@ -0,0 +1,25 @@ +module.exports = (file, api) => { + const jscodeshift = api.jscodeshift + const root = jscodeshift(file.source) + + const replacements = [ + { from: 'react-query', to: '@tanstack/react-query' }, + { from: 'react-query/devtools', to: '@tanstack/react-query-devtools' }, + ] + + replacements.forEach(({ from, to }) => { + root + .find(jscodeshift.ImportDeclaration, { + source: { + value: from, + }, + }) + .replaceWith(({ node }) => { + node.source.value = to + + return node + }) + }) + + return root.toSource({ quote: 'single' }) +}