Skip to content

Commit fb0c40d

Browse files
committed
fix: handle container used before defined error
1 parent 0e810b9 commit fb0c40d

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

packages/shiki-magic-move/src/solid/ShikiMagicMoveRenderer.tsx

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,32 +21,38 @@ export interface ShikiMagicMoveRendererProps {
2121
* A wrapper component to `MagicMoveRenderer`
2222
*/
2323
export function ShikiMagicMoveRenderer(props: ShikiMagicMoveRendererProps) {
24-
let container: HTMLPreElement
25-
let renderer: Renderer
24+
// eslint-disable-next-line no-undef-init, prefer-const
25+
let container: HTMLPreElement | undefined = undefined
26+
// eslint-disable-next-line no-undef-init
27+
let renderer: Renderer | undefined = undefined
2628
const [isMounted, setIsMounted] = createSignal(false)
2729

2830
createEffect(() => {
29-
if (!container) return
30-
if (!isMounted()) {
31+
if (container !== undefined && !isMounted()) {
3132
// Remove previous content
32-
container.innerHTML = ''
33+
;(container as HTMLPreElement).innerHTML = ''
3334
setIsMounted(true)
3435
renderer = new Renderer(container)
3536
}
3637
})
3738

3839
createEffect(() => {
3940
async function render() {
40-
if (!renderer) return
41+
if (!renderer) {
42+
return
43+
}
4144

4245
Object.assign(renderer.options, props.options)
4346

4447
if (props.animate === undefined || props.animate === true) {
45-
if (props.previous) renderer.replace(props.previous)
48+
if (props.previous) {
49+
renderer.replace(props.previous)
50+
}
4651

4752
props.onStart?.()
4853
await renderer.render(props.tokens)
4954
props.onEnd?.()
55+
// eslint-disable-next-line style/brace-style
5056
} else {
5157
renderer.replace(props.tokens)
5258
}
@@ -57,7 +63,6 @@ export function ShikiMagicMoveRenderer(props: ShikiMagicMoveRendererProps) {
5763

5864
return (
5965
<pre
60-
// @ts-expect-error - TS doesn't know that `container` is a ref
6166
ref={container}
6267
class={`shiki-magic-move-container ${props.class || ''}`.trim()}
6368
style={props.style}
@@ -68,7 +73,7 @@ export function ShikiMagicMoveRenderer(props: ShikiMagicMoveRendererProps) {
6873
<div>
6974
{isMounted()
7075
? undefined
71-
: props.tokens?.tokens.map(token => {
76+
: props.tokens?.tokens.map((token) => {
7277
if (token.content === '\n') return <br />
7378

7479
return (
@@ -77,7 +82,9 @@ export function ShikiMagicMoveRenderer(props: ShikiMagicMoveRendererProps) {
7782
...normalizeCSSProperties(token.htmlStyle),
7883
color: token.color,
7984
}}
80-
class={['shiki-magic-move-item', token.htmlClass].filter(Boolean).join(' ')}
85+
class={['shiki-magic-move-item', token.htmlClass]
86+
.filter(Boolean)
87+
.join(' ')}
8188
>
8289
{token.content}
8390
</span>

0 commit comments

Comments
 (0)