diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..f4bcc56
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,48 @@
+name: 'test'
+
+on:
+ pull_request:
+ paths:
+ - '**/*.ts'
+ - '**/*.js'
+ - '**/*.po'
+ - '**/*.snap'
+ - '.github/workflows/test.yml'
+ - 'package.json'
+ - 'package-lock.json'
+ push:
+ paths:
+ - '**/*.ts'
+ - '**/*.js'
+ - '**/*.po'
+ - '**/*.snap'
+ - '.github/workflows/test.yml'
+ - 'package.json'
+ - 'package-lock.json'
+
+jobs:
+ install-build-test:
+ name: 'Check install, build, test'
+ runs-on: 'ubuntu-latest'
+
+ strategy:
+ matrix:
+ node-version: [14.x, 16.x, 18.x]
+
+ steps:
+ - name: 'Checkout current revision'
+ uses: 'actions/checkout@v3'
+
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: 'Install'
+ run: 'npm install'
+
+ - name: 'Build'
+ run: 'npm run build'
+
+ - name: 'Test'
+ run: 'npm run test'
diff --git a/src/lib/extract.ts b/src/lib/extract.ts
index 3c72676..9a3f5e0 100644
--- a/src/lib/extract.ts
+++ b/src/lib/extract.ts
@@ -38,18 +38,33 @@ export async function extractAll(
switch (extname(filepath)) {
case ".vue": {
const source = fs.readFileSync(filepath).toString();
+ const template = parseComponent(source).template;
+ let tr = "";
+ let jsCodes: string[] = [];
const script = parseComponent(source).script;
if (script) {
const lineCount =
source.slice(0, script.start).split(/\r\n|\r|\n/)
.length - 1;
- babel.transformSync(
- "\n".repeat(lineCount) + script.content,
- {
- filename: filepath,
- ...babelOptions
- }
- );
+ tr += "\n".repeat(lineCount) + script.content;
+ }
+ // FIXME: Because we need to put imports first,
+ // the extracted line numbers will be messed up.
+ if (template) {
+ const regex = /(?:{{\s*t\s*`(.*?)`\s*}}|{{\s*t\s*\(\s*'(.*?)'\s*\)\s*}})/g;
+ let tmparr;
+ while (
+ (tmparr = regex.exec(template.content)) !== null
+ ) {
+ tr += `\n${tmparr[0]}`;
+ }
+ }
+ if (tr) {
+ jsCodes.push(tr);
+ babel.transformSync(jsCodes.join("\n"), {
+ filename: filepath,
+ ...babelOptions
+ });
}
break;
}
diff --git a/tests/commands/__snapshots__/test_extract.ts.snap b/tests/commands/__snapshots__/test_extract.ts.snap
index 02c1cba..c01ffbe 100644
--- a/tests/commands/__snapshots__/test_extract.ts.snap
+++ b/tests/commands/__snapshots__/test_extract.ts.snap
@@ -164,6 +164,10 @@ msgstr \\"\\"
#: tests/fixtures/vueTest/testVueParse.vue:10
msgid \\"test from vue file\\"
msgstr \\"\\"
+
+#: tests/fixtures/vueTest/testVueParse.vue:15
+msgid \\"Hello World!\\"
+msgstr \\"\\"
"
`;
diff --git a/tests/fixtures/vueTest/testVueParse.vue b/tests/fixtures/vueTest/testVueParse.vue
index 5593cfc..6614276 100644
--- a/tests/fixtures/vueTest/testVueParse.vue
+++ b/tests/fixtures/vueTest/testVueParse.vue
@@ -1,5 +1,5 @@
- Hello World
+ {{ t`Hello World!` }}