Move glob patterns to extractor

This commit is contained in:
Kim Biesbjerg
2016-12-04 22:53:59 +01:00
parent eac24905de
commit 74fd853097
3 changed files with 25 additions and 17 deletions

View File

@@ -4,9 +4,9 @@ import { TypescriptParser } from './parsers/typescript.parser';
import { SerializerInterface } from './serializers/serializer.interface'; import { SerializerInterface } from './serializers/serializer.interface';
import { PotSerializer } from './serializers/pot.serializer'; import { PotSerializer } from './serializers/pot.serializer';
import { uniq as arrayUnique } from 'lodash'; import * as lodash from 'lodash';
import { sync as readDir } from 'glob'; import * as glob from 'glob';
import { readFileSync as readFile, writeFileSync as writeFile } from 'fs'; import * as fs from 'fs';
export interface TypeParserMap { export interface TypeParserMap {
[ext: string]: ParserInterface [ext: string]: ParserInterface
@@ -14,29 +14,36 @@ export interface TypeParserMap {
export class Extractor { export class Extractor {
public messages: string[] = [];
public parsers: TypeParserMap = { public parsers: TypeParserMap = {
html: new HtmlParser(), html: new HtmlParser(),
ts: new TypescriptParser() ts: new TypescriptParser()
}; };
public globPatterns: string[] = [
'/**/*.ts',
'/**/*.html'
];
public messages: string[] = [];
public constructor(public serializer: SerializerInterface) { } public constructor(public serializer: SerializerInterface) { }
/** /**
* Extracts messages from paths * Extracts messages from paths
*/ */
public extract(paths: string[]): string[] { public extract(dir: string): string[] {
let messages = []; let messages = [];
paths.forEach(path => { this.globPatterns.forEach(globPattern => {
const filePaths = readDir(path); const filePaths = glob.sync(dir + globPattern);
filePaths.forEach(filePath => { filePaths
const result = this._extractMessages(filePath); .filter(filePath => fs.statSync(filePath).isFile())
messages = [...messages, ...result]; .forEach(filePath => {
}); const result = this._extractMessages(filePath);
messages = [...messages, ...result];
});
}); });
return this.messages = arrayUnique(messages); return this.messages = lodash.uniq(messages);
} }
/** /**
@@ -51,7 +58,7 @@ export class Extractor {
*/ */
public save(destination: string): string { public save(destination: string): string {
const data = this.serialize(); const data = this.serialize();
writeFile(destination, data); fs.writeFileSync(destination, data);
return data; return data;
} }
@@ -65,7 +72,7 @@ export class Extractor {
return []; return [];
} }
const contents: string = readFile(filePath).toString(); const contents: string = fs.readFileSync(filePath, 'utf-8');
const parser: ParserInterface = this.parsers[ext]; const parser: ParserInterface = this.parsers[ext];
return parser.process(contents); return parser.process(contents);

View File

@@ -17,7 +17,7 @@ export class TypescriptParser implements ParserInterface {
for (let patternName in this.patterns) { for (let patternName in this.patterns) {
const regExp = this._createRegExp(patternName, { const regExp = this._createRegExp(patternName, {
TRANSLATE_SERVICE: translateServiceVar 'TRANSLATE_SERVICE': translateServiceVar
}); });
let matches; let matches;
@@ -42,7 +42,7 @@ export class TypescriptParser implements ParserInterface {
pattern = pattern.replace('{{' + key + '}}', replaceVars[key]); pattern = pattern.replace('{{' + key + '}}', replaceVars[key]);
}); });
return new RegExp(pattern, 'gi'); return new RegExp(pattern, 'g');
} }
/** /**

View File

@@ -13,6 +13,7 @@ export class PotSerializer implements SerializerInterface {
this._reset(); this._reset();
this._addHeader(this._headers); this._addHeader(this._headers);
this._addMessages(messages); this._addMessages(messages);
return this._buffer.join('\n'); return this._buffer.join('\n');
} }