Skip to content

Commit 2dfb918

Browse files
gwansikkmanudeli
andauthored
refactor: display tanstack apis in status cli table (#1198)
# Overview closed: #1119 / related: #1113 - I have modified the logic for displaying the APIs that re-export tanstack/react-query v5. | @tanstack/react-query@4 | @tanstack/react-query@5 | | --- | --- | |<img width="543" alt="image" src="https://github.com/user-attachments/assets/04ff703f-fe3b-4d74-9494-0ad6ffaa0da3">|<img width="548" alt="image" src="https://github.com/user-attachments/assets/b34cd121-9536-4335-94eb-f5e435001300">| ## PR Checklist - [x] I did below actions if need 1. I read the [Contributing Guide](https://github.com/toss/suspensive/blob/main/CONTRIBUTING.md) 2. I added documents and tests. --------- Co-authored-by: Jonghyeon Ko <[email protected]>
1 parent 4252927 commit 2dfb918

File tree

5 files changed

+33
-38
lines changed

5 files changed

+33
-38
lines changed

.changeset/tasty-dolphins-retire.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@suspensive/react-query": patch
3+
---
4+
5+
fix: display tanstack apis in status cli table

packages/react-query/src/scripts/utils/commands.spec.ts

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import fs from 'fs'
2+
import { noop } from '@suspensive/utils'
23
import type { Mock, MockInstance } from 'vitest'
34
import packageJson from '../../../package.json'
45
import { fixAction, statusAction, switchAction } from './commands'
56
import {
6-
getExportAPIsWithoutSuspensive,
77
getIndexFileContent,
88
getPackageJson,
99
getSuspensiveReactQueryPackageJson,
10+
getTanStackReactQueryAPIs,
1011
getTanStackReactQueryPackageJson,
1112
getTargetSuspensiveReactQueryAPIs,
1213
getTargetSuspensiveReactQueryVersion,
@@ -24,8 +25,8 @@ describe('commands', () => {
2425
let consoleWarnSpy: MockInstance
2526

2627
beforeEach(() => {
27-
consoleLogSpy = vi.spyOn(console, 'log').mockImplementation((): void => {})
28-
consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
28+
consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(noop)
29+
consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(noop)
2930

3031
const getPackageJsonMock = getPackageJson as Mock
3132
getPackageJsonMock.mockReturnValue(packageJson)
@@ -39,10 +40,10 @@ describe('commands', () => {
3940
getTargetSuspensiveReactQueryVersionMock.mockReturnValue('5')
4041
const getTargetSuspensiveReactQueryAPIsMock = getTargetSuspensiveReactQueryAPIs as Mock
4142
getTargetSuspensiveReactQueryAPIsMock.mockReturnValue([])
42-
const getExportAPIsWithoutSuspensiveMock = vi.mocked(getExportAPIsWithoutSuspensive)
43-
getExportAPIsWithoutSuspensiveMock.mockReturnValue([])
43+
const getTanStackReactQueryAPIsMock = getTanStackReactQueryAPIs as Mock
44+
getTanStackReactQueryAPIsMock.mockReturnValue([])
4445

45-
vi.mocked(switchVersion).mockImplementation(() => {})
46+
vi.mocked(switchVersion).mockImplementation(noop)
4647
})
4748

4849
afterEach(() => {

packages/react-query/src/scripts/utils/package.spec.ts

-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import tanStackReactQueryPackageJson from '@tanstack/react-query/package.json'
22
import packageJson from '../../../package.json'
33
import {
4-
getExportAPIsWithoutSuspensive,
54
getPackageJson,
65
getSuspensiveReactQueryPackageJson,
76
getTanStackReactQueryPackageJson,
@@ -59,10 +58,4 @@ describe('package', () => {
5958
expect(result).toBeDefined()
6059
expect(result.name).toBe('@suspensive/react-query-4')
6160
})
62-
63-
it('should get exported APIs without @suspensive/react-query', () => {
64-
const apis = getExportAPIsWithoutSuspensive()
65-
66-
expect(apis).toEqual(expect.arrayContaining([]))
67-
})
6861
})

packages/react-query/src/scripts/utils/package.ts

+14-18
Original file line numberDiff line numberDiff line change
@@ -84,24 +84,20 @@ export function getTargetSuspensiveReactQueryAPIs(): string[] {
8484
return results
8585
}
8686

87-
export function getExportAPIsWithoutSuspensive(): string[] {
88-
const indexFileContent = getIndexFileContent(__dirname, '../../')
89-
90-
const modules = indexFileContent.matchAll(/export \* from ['"]([^'"]+)['"]/g)
91-
const results: string[] = []
92-
93-
for (const [, moduleName] of modules) {
94-
if (!moduleName.includes('@suspensive/react-query')) {
95-
const module = loadModule<Record<string, unknown>>(moduleName)
96-
97-
if (!module.isSuccess) {
98-
console.warn('[@suspensive/react-query]', 'Module not found:', moduleName)
99-
exit(1)
100-
}
101-
102-
results.push(...Object.keys(module.exports).reverse())
87+
export function getTanStackReactQueryAPIs(majorVersionOfTanStackQuery: string): string[] {
88+
switch (majorVersionOfTanStackQuery) {
89+
case '5':
90+
return [
91+
'useSuspenseQuery',
92+
'useSuspenseQueries',
93+
'useSuspenseInfiniteQuery',
94+
'queryOptions',
95+
'infiniteQueryOptions',
96+
]
97+
case '4':
98+
return ['-']
99+
default: {
100+
throw new Error('@tanstack/react-query version is required')
103101
}
104102
}
105-
106-
return results
107103
}

packages/react-query/src/scripts/utils/table.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import Table from 'cli-table3'
22
import {
3-
getExportAPIsWithoutSuspensive,
43
getPackageJson,
54
getSuspensiveReactQueryPackageJson,
5+
getTanStackReactQueryAPIs,
66
getTanStackReactQueryPackageJson,
77
getTargetSuspensiveReactQueryAPIs,
88
} from './package'
@@ -13,30 +13,30 @@ export function getStatusTable(currentTargetVersion: string) {
1313
const tanStackReactQueryMajorVersion = tanStackReactQueryPackageJson.version.split('.')[0]
1414
const targetSuspensiveReactQueryPackageJson = getSuspensiveReactQueryPackageJson(tanStackReactQueryMajorVersion)
1515
const isCompatible = currentTargetVersion === tanStackReactQueryMajorVersion
16-
const suspensiveAPIs = getTargetSuspensiveReactQueryAPIs()
17-
const exportAPIs = getExportAPIsWithoutSuspensive()
16+
const suspensiveReactQueryAPIs = getTargetSuspensiveReactQueryAPIs()
17+
const tanStackReactQueryAPIs = getTanStackReactQueryAPIs(tanStackReactQueryMajorVersion)
1818

1919
const table = new Table({
2020
head: [
21-
// @ts-expect-error Type '{ content: string; colSpan: number; hAlign: string; }' is not assignable to type 'string'
21+
// @ts-expect-error Type
2222
{ content: `${packageJson.name}@${packageJson.version}`, colSpan: 2 },
2323
'status',
2424
'available interfaces',
2525
],
2626
style: { head: ['cyan'] },
27-
colWidths: [10, 30, 10, 36],
27+
colWidths: [10, 30, 8, 36],
2828
wordWrap: true,
2929
})
3030
table.push([
3131
{ content: 'exports from', rowSpan: 2 },
3232
`@suspensive/react-query-${currentTargetVersion}\n@${targetSuspensiveReactQueryPackageJson.version}`,
3333
isCompatible ? '🟢' : '❌',
34-
suspensiveAPIs.join(' '),
34+
suspensiveReactQueryAPIs.filter((api) => !tanStackReactQueryAPIs.includes(api)).join(' '),
3535
])
3636
table.push([
3737
`@tanstack/react-query\n@${tanStackReactQueryPackageJson.version}`,
3838
isCompatible ? '🟢' : '❌',
39-
exportAPIs.length > 0 ? exportAPIs.join(' ') : '-',
39+
tanStackReactQueryAPIs.join(' '),
4040
])
4141
if (!isCompatible) {
4242
table.push([{ content: `You should \`npx srq switch ${tanStackReactQueryMajorVersion}\` to fix this`, colSpan: 4 }])

0 commit comments

Comments
 (0)