Skip to content

Commit

Permalink
add vuejs component lexer (#194)
Browse files Browse the repository at this point in the history
* add vuejs component lexer
  • Loading branch information
newbie78 authored and karellm committed Jan 16, 2020
1 parent 0766447 commit 230da21
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 1 deletion.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"typescript": "^3.6.4",
"vinyl": "~2.0.1",
"vinyl-fs": "^3.0.2",
"vue-template-compiler": "^2.6.11",
"yamljs": "^0.3.0"
},
"optionalDependencies": {},
Expand Down
25 changes: 25 additions & 0 deletions src/lexers/vue-lexer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import BaseLexer from './base-lexer'
import JavascriptLexer from './javascript-lexer.js'

export default class VueLexer extends BaseLexer {
constructor(options = {}) {
super(options)

this.functions = options.functions || ['$t']
}

extract(content, filename) {
let keys = []

const Lexer = new JavascriptLexer()
Lexer.on('warning', warning => this.emit('warning', warning))
keys = keys.concat(Lexer.extract(content))

const compiledTemplate = require('vue-template-compiler').compile(content).render
const Lexer2 = new JavascriptLexer({ functions: this.functions })
Lexer2.on('warning', warning => this.emit('warning', warning))
keys = keys.concat(Lexer2.extract(compiledTemplate))

return keys
}
}
6 changes: 5 additions & 1 deletion src/parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import HandlebarsLexer from './lexers/handlebars-lexer'
import HTMLLexer from './lexers/html-lexer'
import JavascriptLexer from './lexers/javascript-lexer'
import JsxLexer from './lexers/jsx-lexer'
import VueLexer from './lexers/vue-lexer'

const lexers = {
hbs: ['HandlebarsLexer'],
Expand All @@ -18,14 +19,17 @@ const lexers = {
jsx: ['JsxLexer'],
tsx: ['JsxLexer'],

vue: ['VueLexer'],

default: ['JavascriptLexer']
}

const lexersMap = {
HandlebarsLexer,
HTMLLexer,
JavascriptLexer,
JsxLexer
JsxLexer,
VueLexer
}

export default class Parser extends EventEmitter {
Expand Down
44 changes: 44 additions & 0 deletions test/lexers/vue-lexer.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { assert } from 'chai'
import VueLexer from '../../src/lexers/vue-lexer'

describe('VueLexer', () => {
it('extracts keys from template & js', (done) => {
const Lexer = new VueLexer()
const content =
"<template><p>{{ $t('first') }}</p><template><script>export default " +
"{ mounted() { this.$i18n.t('second'); } }</script>"
assert.deepEqual(Lexer.extract(content), [{ key: 'second' },{ key: 'first' }])
done()
})

it('extracts keys with interpolation from template & js', (done) => {
const Lexer = new VueLexer()
const content =
"<template><p>{{ $t('first {test}', {test: 'station'}) }}</p><template>" +
"<script>export default { mounted() { this.$i18n.t('second {test}', " +
"{test: 'interpol'}); } }</script>"
assert.deepEqual(Lexer.extract(content), [{
key: 'second {test}',
test: 'interpol'
}, {
key: 'first {test}',
test: 'station'
}])
done()
})

it('extracts keys with plural from template & js', (done) => {
const Lexer = new VueLexer()
const content =
"<template><p>{{ $t('first', {count: 5}) }}</p><template><script>export default " +
"{ mounted() { this.$i18n.t('second', {count: 2}); } }</script>"
assert.deepEqual(Lexer.extract(content), [{
key: 'second',
count: '2'
}, {
key: 'first',
count: '5'
}])
done()
})
})
18 changes: 18 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1293,6 +1293,11 @@ d@1, d@^1.0.1:
es5-ext "^0.10.50"
type "^1.0.1"

de-indent@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=

debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
Expand Down Expand Up @@ -2173,6 +2178,11 @@ he@1.1.1:
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=

he@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==

heimdalljs-logger@^0.1.7:
version "0.1.10"
resolved "https://registry.yarnpkg.com/heimdalljs-logger/-/heimdalljs-logger-0.1.10.tgz#90cad58aabb1590a3c7e640ddc6a4cd3a43faaf7"
Expand Down Expand Up @@ -4245,6 +4255,14 @@ vinyl@~2.0.1:
remove-trailing-separator "^1.0.1"
replace-ext "^1.0.0"

vue-template-compiler@^2.6.11:
version "2.6.11"
resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080"
integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==
dependencies:
de-indent "^1.0.2"
he "^1.1.0"

walk-sync@^0.3.1:
version "0.3.4"
resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.3.4.tgz#cf78486cc567d3a96b5b2237c6108017a5ffb9a4"
Expand Down

0 comments on commit 230da21

Please sign in to comment.