Skip to content

Commit 045eb21

Browse files
author
Timofei Iatsenko
authored
fix(vue-extractor): fix default export burden with /api/extractors/babel (#1626)
1 parent 9e6ea70 commit 045eb21

6 files changed

Lines changed: 20 additions & 15 deletions

File tree

packages/cli/src/api/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ export { getCatalogForFile, getCatalogs } from "./catalog/getCatalogs"
33

44
export { createCompiledCatalog } from "./compile"
55

6+
export { default as extractor } from "./extractors/babel"
7+
68
export * from "./types"

packages/extractor-vue/README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@ npm install --save-dev @lingui/extractor-vue
1616

1717
## Usage
1818

19-
This custom extractor requires that you use JavaScript for your Lingui configuration.
19+
This custom extractor requires that you use JavaScript or TypeScript for your Lingui configuration.
2020

2121
```js
2222
import { vueExtractor } from "@lingui/extractor-vue"
23-
import babel from "@lingui/cli/api/extractors/babel"
23+
import { extractor as defaultExtractor } from "@lingui/cli/api"
2424

25+
/** @type {import('@lingui/conf').LinguiConfig} */
2526
const linguiConfig = {
2627
locales: ["en", "nb"],
2728
sourceLocale: "en",
@@ -31,7 +32,7 @@ const linguiConfig = {
3132
include: ["<rootDir>/src"],
3233
},
3334
],
34-
extractors: [babel, vueExtractor],
35+
extractors: [defaultExtractor, vueExtractor],
3536
}
3637

3738
export default linguiConfig

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { parse, compileTemplate, SFCBlock } from "@vue/compiler-sfc"
2-
import babel from "@lingui/cli/api/extractors/babel"
2+
import { extractor } from "@lingui/cli/api"
33
import type { ExtractorCtx, ExtractorType } from "@lingui/conf"
44

55
export const vueExtractor: ExtractorType = {
@@ -18,17 +18,21 @@ export const vueExtractor: ExtractorType = {
1818
ignoreEmpty: true,
1919
})
2020

21+
const isTsBlock = (block: SFCBlock) => block?.lang === "ts"
22+
2123
const compiledTemplate =
2224
descriptor.template &&
2325
compileTemplate({
2426
source: descriptor.template.content,
2527
filename,
2628
inMap: descriptor.template.map,
2729
id: filename,
30+
compilerOptions: {
31+
isTS:
32+
isTsBlock(descriptor.script) || isTsBlock(descriptor.scriptSetup),
33+
},
2834
})
2935

30-
const isTsBlock = (block: SFCBlock) => block?.lang === "ts"
31-
3236
const targets = [
3337
[
3438
descriptor.script?.content,
@@ -51,7 +55,7 @@ export const vueExtractor: ExtractorType = {
5155
targets
5256
.filter(([source]) => Boolean(source))
5357
.map(([source, map, isTs]) =>
54-
babel.extract(
58+
extractor.extract(
5559
filename + (isTs ? ".ts" : ""),
5660
source,
5761
onMessageExtracted,

tsconfig.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,7 @@
2424
"@lingui/macro": ["./packages/macro/src"],
2525
"@lingui/format-po": ["./packages/format-po/src/po.ts"],
2626
"@lingui/format-json": ["./packages/format-json/src/json.ts"],
27-
"@lingui/extractor-vue": ["./packages/extractor-vue/src"],
28-
"@lingui/cli/api/extractors/babel": [
29-
"./packages/cli/src/api/extractors/babel"
30-
]
27+
"@lingui/extractor-vue": ["./packages/extractor-vue/src"]
3128
}
3229
},
3330
"exclude": [

website/docs/guides/custom-extractor.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ If your project is not working well with Lingui's Extractor, you can write your
55
That might be the case if you use some experimental features (stage0 - stage2) or frameworks with custom syntax such as Vue.js or Svelte.
66

77
```ts title="./my-custom-extractor.ts"
8-
import babel from "@lingui/cli/api/extractors/babel"
8+
import { extractor as defaultExtractor } from "@lingui/cli/api"
99

1010
export const extractor: ExtractorType = {
1111
match(filename: string) {
@@ -17,7 +17,7 @@ export const extractor: ExtractorType = {
1717

1818
// you can acess lingui config from using `ctx.linguiConfig`
1919
// reuse extractor from cli
20-
return babel.extract(filename, code, onMessageExtracted, {sourcemaps, ...ctx})
20+
return defaultExtractor.extract(filename, code, onMessageExtracted, {sourcemaps, ...ctx})
2121
}
2222
}
2323
```

website/docs/tutorials/extractor-vue.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ npm install --save-dev @lingui/extractor-vue
1010

1111
## Usage
1212

13-
It is required that you use JavaScript for your Lingui configuration.
13+
It is required that you use JavaScript or TypeScript for your Lingui configuration.
1414

1515
```js title="lingui.config.{js,ts}"
1616
import { vueExtractor } from "@lingui/extractor-vue"
17-
import babel from "@lingui/cli/api/extractors/babel"
17+
import { extractor as defaultExtractor } from "@lingui/cli/api"
1818

19+
/** @type {import('@lingui/conf').LinguiConfig} */
1920
const linguiConfig = {
2021
locales: ["en", "nb"],
2122
sourceLocale: "en",

0 commit comments

Comments
 (0)