Skip to content

Commit ca1d13a

Browse files
authored
feat: custom error handling (#30)
1 parent bbb1155 commit ca1d13a

File tree

4 files changed

+54
-6
lines changed

4 files changed

+54
-6
lines changed

README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,27 @@ export default {
173173
</script>
174174
```
175175

176+
## Error handling
177+
178+
Mermaid has its own default error handling behavior, outputting a little graphical error message if a parsing error occurs. If you want to have custom error handling, you can react to the `@parse-error` event. Here is a simple example that outputs the error message as a plain string:
179+
180+
```html
181+
<template>
182+
<div v-if="error">{{ error }}</div>
183+
<self v-else value="foo" @parse-error="error = $event" />
184+
</template>
185+
```
186+
187+
```js
188+
<script>
189+
export default {
190+
data: () => ({
191+
error: undefined,
192+
}),
193+
}
194+
</script>
195+
```
196+
176197
<!-- LICENSE/ -->
177198
## Contribute
178199

Lines changed: 3 additions & 0 deletions
Loading

src/index.spec.js

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,34 @@ import testerPluginPuppeteer from '@dword-design/tester-plugin-puppeteer'
55

66
export default tester(
77
{
8+
'error handling': {
9+
page: endent`
10+
<template>
11+
<div v-if="error" class="foo">{{ error }}</div>
12+
<self v-else class="foo" value="foo" @parse-error="error = $event" />
13+
</template>
14+
15+
<script>
16+
export default {
17+
data: () => ({
18+
error: undefined,
19+
}),
20+
}
21+
</script>
22+
23+
`,
24+
async test() {
25+
await this.page.goto('http://localhost:3000')
26+
await this.page.waitForSelector('.foo')
27+
expect(
28+
await this.page.screenshot({ fullPage: true })
29+
).toMatchImageSnapshot(this)
30+
},
31+
},
832
works: {
933
page: endent`
1034
<template>
11-
<client-only>
12-
<self class="foo" :value="diagram" />
13-
</client-only>
35+
<self class="foo" :value="diagram" />
1436
</template>
1537
1638
<script>

src/index.vue

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
<script>
22
import mermaid from 'mermaid'
33
4-
mermaid.parseError = error => console.error(error)
5-
64
export default {
75
mounted() {
6+
mermaid.parseError = error => {
7+
console.log('this is a parse error')
8+
this.$emit('parse-error', error)
9+
}
810
mermaid.initialize({
911
securityLevel: 'loose',
1012
startOnLoad: false,
@@ -17,7 +19,7 @@ export default {
1719
value: { type: String },
1820
},
1921
render() {
20-
return <div class="foo">{this.value}</div>
22+
return <div>{this.value}</div>
2123
},
2224
}
2325
</script>

0 commit comments

Comments
 (0)