Skip to content

Commit 9e6ea70

Browse files
authored
fix(vue-extractor): don't crash when there is no <template> in an SFC (#1623)
1 parent 284255b commit 9e6ea70

File tree

4 files changed

+58
-6
lines changed

4 files changed

+58
-6
lines changed

packages/extractor-vue/src/__snapshots__/extractor.test.ts.snap

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3+
exports[`vue extractor should extract message from functional component 1`] = `
4+
[
5+
{
6+
comment: undefined,
7+
context: undefined,
8+
id: Render function message,
9+
message: undefined,
10+
origin: [
11+
functional.vue,
12+
10,
13+
33,
14+
],
15+
},
16+
]
17+
`;
18+
319
exports[`vue extractor should extract message from vue file 1`] = `
420
[
521
{

packages/extractor-vue/src/extractor.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,26 @@ describe("vue extractor", () => {
6161

6262
expect(messages).toMatchSnapshot()
6363
})
64+
65+
it("should extract message from functional component", async () => {
66+
const filePath = path.resolve(__dirname, "fixtures/functional.vue")
67+
const code = fs.readFileSync(filePath, "utf-8")
68+
69+
let messages: ExtractedMessage[] = []
70+
71+
await vueExtractor.extract(
72+
"functional.vue",
73+
code,
74+
(res) => {
75+
messages.push(res)
76+
},
77+
{
78+
linguiConfig,
79+
}
80+
)
81+
82+
messages = normalizePath(messages)
83+
84+
expect(messages).toMatchSnapshot()
85+
})
6486
})
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<script lang="ts">
2+
import { defineComponent } from "vue"
3+
import { i18n } from "@lingui/core"
4+
5+
// @ts-ignore only used to check if extractor doesn't crash with Typescript
6+
const foo: number = 5
7+
8+
export default defineComponent({
9+
render(createElement) {
10+
return createElement('div', [i18n._("Render function message")])
11+
}})
12+
</script>

packages/extractor-vue/src/vue-extractor.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ export const vueExtractor: ExtractorType = {
1818
ignoreEmpty: true,
1919
})
2020

21-
const compiledTemplate = compileTemplate({
22-
source: descriptor.template.content,
23-
filename,
24-
inMap: descriptor.template.map,
25-
id: filename,
26-
})
21+
const compiledTemplate =
22+
descriptor.template &&
23+
compileTemplate({
24+
source: descriptor.template.content,
25+
filename,
26+
inMap: descriptor.template.map,
27+
id: filename,
28+
})
2729

2830
const isTsBlock = (block: SFCBlock) => block?.lang === "ts"
2931

0 commit comments

Comments
 (0)