(refactor) get rid of AbstractTemplateParser

This commit is contained in:
Kim Biesbjerg 2019-06-12 11:50:23 +02:00
parent 102286a209
commit 53eb4d1202
7 changed files with 38 additions and 61 deletions

View File

@ -1,24 +0,0 @@
export abstract class AbstractTemplateParser {
/**
* Checks if file is of type javascript or typescript and
* makes the assumption that it is an Angular Component
*/
protected isAngularComponent(path: string): boolean {
return (/\.ts|js$/i).test(path);
}
/**
* Extracts inline template from components
*/
protected extractInlineTemplate(contents: string): string {
const regExp: RegExp = /template\s*:\s*(["'`])([^\1]*?)\1/;
const match = regExp.exec(contents);
if (match !== null) {
return match[2];
}
return '';
}
}

View File

@ -1,16 +1,16 @@
import { ParserInterface } from './parser.interface';
import { AbstractTemplateParser } from './abstract-template.parser';
import { TranslationCollection } from '../utils/translation.collection';
import { isPathAngularComponent, extractComponentInlineTemplate } from '../../src/utils/utils';
import * as cheerio from 'cheerio';
const $ = cheerio.load('', {xmlMode: true});
export class DirectiveParser extends AbstractTemplateParser implements ParserInterface {
export class DirectiveParser implements ParserInterface {
public extract(contents: string, path?: string): TranslationCollection {
if (path && this.isAngularComponent(path)) {
contents = this.extractInlineTemplate(contents);
if (path && isPathAngularComponent(path)) {
contents = extractComponentInlineTemplate(contents);
}
return this.parseTemplate(contents);

View File

@ -1,12 +1,12 @@
import { ParserInterface } from './parser.interface';
import { AbstractTemplateParser } from './abstract-template.parser';
import { TranslationCollection } from '../utils/translation.collection';
import { isPathAngularComponent, extractComponentInlineTemplate } from '../../src/utils/utils';
export class PipeParser extends AbstractTemplateParser implements ParserInterface {
export class PipeParser implements ParserInterface {
public extract(contents: string, path?: string): TranslationCollection {
if (path && this.isAngularComponent(path)) {
contents = this.extractInlineTemplate(contents);
if (path && isPathAngularComponent(path)) {
contents = extractComponentInlineTemplate(contents);
}
return this.parseTemplate(contents);

View File

@ -1,3 +1,22 @@
export function _(key: string | string[]): string | string[] {
return key;
}
/**
* Assumes file is an Angular component if type is javascript/typescript
*/
export function isPathAngularComponent(path: string): boolean {
return (/\.ts|js$/i).test(path);
}
/**
* Extract inline template from a component
*/
export function extractComponentInlineTemplate(contents: string): string {
const regExp: RegExp = /template\s*:\s*(["'`])([^\1]*?)\1/;
const match = regExp.exec(contents);
if (match !== null) {
return match[2];
}
return '';
}

View File

@ -37,9 +37,9 @@ describe('NamespacedJsonCompiler', () => {
it('should preserve numeric values on compile', () => {
const collection = new TranslationCollection({
"option.0": '',
"option.1": '',
"option.2": ''
'option.0': '',
'option.1': '',
'option.2': ''
});
const result: string = compiler.compile(collection);
expect(result).to.equal('{\n\t"option": {\n\t\t"0": "",\n\t\t"1": "",\n\t\t"2": ""\n\t}\n}');

View File

@ -1,39 +1,21 @@
import { expect } from 'chai';
import { AbstractTemplateParser } from '../../src/parsers/abstract-template.parser';
import { isPathAngularComponent, extractComponentInlineTemplate } from '../../src/utils/utils';
class TestTemplateParser extends AbstractTemplateParser {
public isAngularComponent(filePath: string): boolean {
return super.isAngularComponent(filePath);
}
public extractInlineTemplate(contents: string): string {
return super.extractInlineTemplate(contents);
}
}
describe('AbstractTemplateParser', () => {
let parser: TestTemplateParser;
beforeEach(() => {
parser = new TestTemplateParser();
});
describe('Utils', () => {
it('should recognize js extension as angular component', () => {
const result = parser.isAngularComponent('test.js');
const result = isPathAngularComponent('test.js');
expect(result).to.equal(true);
});
it('should recognize ts extension as angular component', () => {
const result = parser.isAngularComponent('test.ts');
const result = isPathAngularComponent('test.ts');
expect(result).to.equal(true);
});
it('should not recognize html extension as angular component', () => {
const result = parser.isAngularComponent('test.html');
const result = isPathAngularComponent('test.html');
expect(result).to.equal(false);
});
@ -45,7 +27,7 @@ describe('AbstractTemplateParser', () => {
})
export class TestComponent { }
`;
const template = parser.extractInlineTemplate(contents);
const template = extractComponentInlineTemplate(contents);
expect(template).to.equal('<p translate>Hello World</p>');
});
@ -66,7 +48,7 @@ describe('AbstractTemplateParser', () => {
})
export class TestComponent { }
`;
const template = parser.extractInlineTemplate(contents);
const template = extractComponentInlineTemplate(contents);
expect(template).to.equal('\n\t\t\t\t\t<p>\n\t\t\t\t\t\tHello World\n\t\t\t\t\t</p>\n\t\t\t\t');
});

View File

@ -4,7 +4,7 @@ import { PostProcessorInterface } from '../../src/post-processors/post-processor
import { PurgeObsoleteKeysPostProcessor } from '../../src/post-processors/purge-obsolete-keys.post-processor';
import { TranslationCollection } from '../../src/utils/translation.collection';
describe('KeyAsDefaultValuePostProcessor', () => {
describe('PurgeObsoleteKeysPostProcessor', () => {
let processor: PostProcessorInterface;