diff --git a/README.md b/README.md index 7e836140..7be7498c 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,8 @@ Finally, if you want to make this process even less painful, I invite you to che ## Features - Choose your weapon: A CLI, a standalone parser or a stream transform -- 6 built in lexers: Javascript, JSX, HTML, Handlebars, TypeScript+tsx and Vue +- 5 built in lexers: Javascript, JSX, HTML, Handlebars, and TypeScript+tsx +- Handles VueJS 3.0 (.vue) files - Creates one catalog file per locale and per namespace - Backs up the old keys your code doesn't use anymore in `namespace_old.json` catalog - Restores keys from the `_old` file if the one in the translation file is empty diff --git a/docs/migration.md b/docs/migration.md index 1aa5e399..51421397 100644 --- a/docs/migration.md +++ b/docs/migration.md @@ -1,3 +1,8 @@ +# Migrating from `8.x` to `9.x` + +## Breaking changes +- Support for the `VueLexer` has been dropped as it creates compatibility problems when trying to parse Vue3 code bases. You must remove any references to `VueLexer` in your configuration files. For Vue3, you can simply use `JavascriptLexer` instead. + # Migrating from `7.x` to `8.x` ## Breaking changes diff --git a/index.d.ts b/index.d.ts index 230e492f..ef9f92c9 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,6 +1,6 @@ import EventEmitter from "events"; -export type SupportedLexer = "HandlebarsLexer" | "HTMLLexer" | "JavascriptLexer" | "JsxLexer" | "VueLexer"; +export type SupportedLexer = "HandlebarsLexer" | "HTMLLexer" | "JavascriptLexer" | "JsxLexer"; // BaseLexer is not importable therefore this is the best if done simple export class CustomLexerClass extends EventEmitter {} @@ -75,11 +75,6 @@ export interface JsxWithTypesLexerConfig { transIdentityFunctionsToIgnore?: string[]; } -export interface VueLexerConfig { - lexer: "VueLexer"; - functions?: string[]; -} - export type LexerConfig = | HandlebarsLexerConfig | HTMLLexerConfig @@ -87,7 +82,6 @@ export type LexerConfig = | JavascriptWithTypesLexerConfig | JsxLexerConfig | JsxWithTypesLexerConfig - | VueLexerConfig | CustomLexerConfig; export interface UserConfig { diff --git a/package.json b/package.json index 6015b775..f9c410dd 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "i18next-parser", "description": "Command Line tool for i18next", - "version": "8.13.0", + "version": "9.0.0", "type": "module", "license": "MIT", "author": "Karel Ledru", @@ -43,8 +43,7 @@ "sort-keys": "^5.0.0", "typescript": "^5.0.4", "vinyl": "~3.0.0", - "vinyl-fs": "^4.0.0", - "vue-template-compiler": "^2.6.11" + "vinyl-fs": "^4.0.0" }, "devDependencies": { "@babel/cli": "^7.0.0", diff --git a/src/index.js b/src/index.js index c0471085..1e3c5bcd 100644 --- a/src/index.js +++ b/src/index.js @@ -9,4 +9,3 @@ export { default as HandlebarsLexer } from './lexers/handlebars-lexer.js' export { default as HTMLLexer } from './lexers/html-lexer.js' export { default as JavascriptLexer } from './lexers/javascript-lexer.js' export { default as JsxLexer } from './lexers/jsx-lexer.js' -export { default as VueLexer } from './lexers/vue-lexer.js' diff --git a/src/lexers/vue-lexer.js b/src/lexers/vue-lexer.js deleted file mode 100644 index 44accce9..00000000 --- a/src/lexers/vue-lexer.js +++ /dev/null @@ -1,26 +0,0 @@ -import VueTemplateCompiler from 'vue-template-compiler' -import BaseLexer from './base-lexer.js' -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 = VueTemplateCompiler.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 - } -} diff --git a/src/parser.js b/src/parser.js index eabbd607..e8d46cb4 100644 --- a/src/parser.js +++ b/src/parser.js @@ -4,7 +4,6 @@ import HandlebarsLexer from './lexers/handlebars-lexer.js' import HTMLLexer from './lexers/html-lexer.js' import JavascriptLexer from './lexers/javascript-lexer.js' import JsxLexer from './lexers/jsx-lexer.js' -import VueLexer from './lexers/vue-lexer.js' const lexers = { hbs: ['HandlebarsLexer'], @@ -19,7 +18,7 @@ const lexers = { jsx: ['JsxLexer'], tsx: ['JsxLexer'], - vue: ['VueLexer'], + vue: ['JavascriptLexer'], default: ['JavascriptLexer'], } @@ -29,7 +28,6 @@ const lexersMap = { HTMLLexer, JavascriptLexer, JsxLexer, - VueLexer, } export default class Parser extends EventEmitter { diff --git a/test/lexers/vue-lexer.test.js b/test/lexers/vue-lexer.test.js deleted file mode 100644 index 1d8f2f20..00000000 --- a/test/lexers/vue-lexer.test.js +++ /dev/null @@ -1,77 +0,0 @@ -import { assert } from 'chai' -import VueLexer from '../../src/lexers/vue-lexer.js' - -describe('VueLexer', () => { - it('extracts keys from template & js', (done) => { - const Lexer = new VueLexer() - const content = - "