Skip to content

Commit e4787a5

Browse files
authored
Merge pull request #805 from beerose/feat/prism-ts
feat(@theme-ui/prism): convert to typescript
2 parents 93b9cfe + e3c5b38 commit e4787a5

File tree

8 files changed

+40
-11
lines changed

8 files changed

+40
-11
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"@babel/runtime": "^7.7.7",
2828
"@testing-library/react": "^9.1.3",
2929
"@types/jest": "^25.1.2",
30+
"@types/react-test-renderer": "^16.9.2",
3031
"babel-jest": "^25.3.0",
3132
"husky": ">=4.0.7",
3233
"jest": "^24.8.0",

packages/prism/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
"version": "0.4.0-alpha.0",
44
"main": "dist/prism.js",
55
"module": "dist/prism.esm.js",
6+
"types": "dist/index.d.ts",
7+
"source": "src/index.tsx",
68
"author": "John Otander",
79
"license": "MIT",
810
"scripts": {

packages/prism/presets/theme-ui.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// @ts-check
12
export default {
23
'.comment,.prolog,.doctype,.cdata,.punctuation,.operator,.entity,.url': {
34
color: 'gray',

packages/prism/src/index.js renamed to packages/prism/src/index.tsx

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,29 @@
11
/** @jsx jsx */
22
/* eslint react/jsx-key: 0 */
3-
4-
import Highlight, { defaultProps } from 'prism-react-renderer'
3+
import { ComponentProps } from 'react'
4+
import Highlight, { defaultProps, Language } from 'prism-react-renderer'
55
import { jsx, Styled } from 'theme-ui'
66

7-
const aliases = {
7+
const aliases: Record<string, Language | undefined> = {
88
js: 'javascript',
99
sh: 'bash',
1010
}
1111

12-
export default ({ children, className: outerClassName, title, ...props }) => {
12+
type HighlightProps = ComponentProps<typeof Highlight>
13+
export interface ThemeUIPrismProps
14+
extends Omit<
15+
HighlightProps,
16+
'children' | 'code' | 'language' | 'theme' | 'Prism'
17+
> {
18+
className: string
19+
children: string
20+
Prism?: HighlightProps['Prism']
21+
}
22+
export default ({
23+
children,
24+
className: outerClassName,
25+
...props
26+
}: ThemeUIPrismProps) => {
1327
const [language] = outerClassName.replace(/language-/, '').split(' ')
1428
const lang = aliases[language] || language
1529

@@ -18,7 +32,7 @@ export default ({ children, className: outerClassName, title, ...props }) => {
1832
{...defaultProps}
1933
{...props}
2034
code={children.trim()}
21-
language={lang}
35+
language={lang as Language}
2236
theme={undefined}>
2337
{({ className, style, tokens, getLineProps, getTokenProps }) => (
2438
<Styled.pre className={`${outerClassName} ${className}`} style={style}>
Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import React from 'react'
1+
import React, { ReactElement } from 'react'
22
import renderer from 'react-test-renderer'
33
import Prism from '../src'
44

55
const CODE = `
66
console.log('hello, world!')
77
`
88

9-
const render = el => renderer.create(el).toJSON()
9+
const render = (el: ReactElement) => renderer.create(el).toJSON()
1010

1111
test('renders a code block', () => {
1212
const result = render(<Prism className="language-js">{CODE}</Prism>)
@@ -16,10 +16,7 @@ test('renders a code block', () => {
1616

1717
test('renders with other languages', () => {
1818
const json = render(
19-
<Prism
20-
className='language-php'
21-
children='<h1>Hello</h1>'
22-
/>
19+
<Prism className="language-php" children="<h1>Hello</h1>" />
2320
)
2421
expect(json).toMatchSnapshot()
2522
})

packages/prism/tsconfig.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"extends": "../../tsconfig.json",
3+
"compilerOptions": {
4+
"jsx": "react"
5+
},
6+
"include": ["src"]
7+
}

yarn.lock

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4087,6 +4087,13 @@
40874087
dependencies:
40884088
"@types/react" "*"
40894089

4090+
"@types/react-test-renderer@^16.9.2":
4091+
version "16.9.2"
4092+
resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.9.2.tgz#e1c408831e8183e5ad748fdece02214a7c2ab6c5"
4093+
integrity sha512-4eJr1JFLIAlWhzDkBCkhrOIWOvOxcCAfQh+jiKg7l/nNZcCIL2MHl2dZhogIFKyHzedVWHaVP1Yydq/Ruu4agw==
4094+
dependencies:
4095+
"@types/react" "*"
4096+
40904097
"@types/react@*", "@types/react@^16.9.19":
40914098
version "16.9.25"
40924099
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.25.tgz#6ae2159b40138c792058a23c3c04fd3db49e929e"

0 commit comments

Comments
 (0)