-
Notifications
You must be signed in to change notification settings - Fork 232
/
Copy pathpure.ts
40 lines (32 loc) · 1.04 KB
/
pure.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import { ReactHooksRenderer } from './types/react'
const renderers = [
{ required: 'react-test-renderer', renderer: './native/pure' },
{ required: 'react-dom', renderer: './dom/pure' }
]
function hasDependency(name: string) {
try {
require(name)
return true
} catch {
return false
}
}
function getRenderer() {
const validRenderer = renderers.find(({ required }) => hasDependency(required))
if (validRenderer) {
// eslint-disable-next-line @typescript-eslint/no-var-requires
return require(validRenderer.renderer) as ReactHooksRenderer
} else {
const options = renderers
.map(({ required }) => ` - ${required}`)
.sort((a, b) => a.localeCompare(b))
.join('\n')
throw new Error(
`Could not auto-detect a React renderer. Are you sure you've installed one of the following\n${options}`
)
}
}
const { renderHook, act, cleanup, addCleanup, removeCleanup } = getRenderer()
export { renderHook, act, cleanup, addCleanup, removeCleanup }
export * from './types'
export * from './types/react'