criticizer
Version:
Linting for Angular applications, following angular.io/styleguide.
89 lines (72 loc) • 2.53 kB
text/typescript
import * as ts from 'typescript';
import {CodeWithSourceMap} from './metadata';
export interface UrlResolver {
(url: string, d: ts.Decorator): string;
}
export interface TemplateTransformer {
(template: string, url: string, d: ts.Decorator): CodeWithSourceMap;
}
export interface StyleTransformer {
(style: string, url: string, d: ts.Decorator): CodeWithSourceMap;
}
export const LogLevel = {
None: 0,
Error: 0b001,
Info: 0b011,
Debug: 0b111
};
export interface Config {
interpolation: [string, string];
resolveUrl: UrlResolver;
transformTemplate: TemplateTransformer;
transformStyle: StyleTransformer;
predefinedDirectives: DirectiveDeclaration[];
logLevel: number;
}
export interface DirectiveDeclaration {
selector: string;
exportAs?: string;
inputs?: string[];
outputs?: string[];
hostProperties?: string[];
hostAttributes?: string[];
hostListeners?: string[];
}
let BUILD_TYPE = '<%= BUILD_TYPE %>';
export const Config: Config = {
interpolation: ['{{', '}}'],
resolveUrl(url: string, d: ts.Decorator) {
return url;
},
transformTemplate(code: string, url: string, d: ts.Decorator) {
if (!url || url.endsWith('.html')) {
return { code, url };
}
return { code: '', url };
},
transformStyle(code: string, url: string, d: ts.Decorator) {
if (!url || url.endsWith('.css')) {
return { code, url };
}
return { code: '', url };
},
predefinedDirectives: [
{ selector: 'form', exportAs: 'ngForm' },
{ selector: '[routerLinkActive]', exportAs: 'routerLinkActive' },
{ selector: '[ngModel]:not([formControlName]):not([formControl])', exportAs: 'ngModel' },
{ selector: '[md-menu-item], [mat-menu-item]', exportAs: 'mdMenuItem' },
{ selector: 'md-menu, mat-menu', exportAs: 'mdMenu' },
{ selector: 'md-button-toggle-group:not([multiple])', exportAs: 'mdButtonToggleGroup' },
{ selector: '[md-menu-trigger-for], [mat-menu-trigger-for], [mdMenuTriggerFor]', exportAs: 'mdMenuTrigger' },
{ selector: '[md-tooltip], [mat-tooltip], [mdTooltip]', exportAs: 'mdTooltip' },
{ selector: 'md-select, mat-select', exportAs: 'mdSelect' },
{ selector: '[ngIf]', exportAs: 'ngIf', inputs: ['ngIf'] },
{ selector: '[ngSwitch]', exportAs: 'ngSwitch', inputs: ['ngSwitch'] }
],
logLevel: BUILD_TYPE === 'dev' ? LogLevel.Debug : LogLevel.None
};
try {
const root = require('app-root-path');
const newConfig = require(root.path + '/.codelyzer');
Object.assign(Config, newConfig);
} catch (e) {}