diff --git a/package.json b/package.json index ce99136b1..bef5528d2 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "ng": "ng", "start": "ng serve", "build": "ng build", + "lint": "ng lint --fix", "build:client-and-server-bundles": "ng build --prod && ng build --prod --app 1 --output-hashing=false", "build:prerender": "npm run build:client-and-server-bundles && npm run webpack:server && npm run generate:prerender", "build:ssr": "npm run build:client-and-server-bundles && npm run webpack:server", @@ -27,6 +28,9 @@ "serve:prerender": "cd dist/browser && http-server", "serve:ssr": "node dist/server" }, + "pre-commit": [ + "lint" + ], "private": true, "dependencies": { "@angular/animations": "^5.0.0", @@ -51,11 +55,14 @@ "@angular/compiler-cli": "^5.0.0", "@angular/language-service": "^5.0.0", "@types/node": "^8.0.30", + "codelyzer": "^4.0.2", "cpy-cli": "^1.0.1", "express": "^4.15.2", "http-server": "^0.10.0", + "pre-commit": "^1.2.2", "reflect-metadata": "^0.1.10", "ts-loader": "^2.3.7", + "tslint": "^5.7.0", "typescript": "~2.4.2" } } diff --git a/prerender.ts b/prerender.ts index 5ddb8cd4f..a80b2c108 100644 --- a/prerender.ts +++ b/prerender.ts @@ -1,22 +1,20 @@ // Load zone.js for the server. import 'zone.js/dist/zone-node'; import 'reflect-metadata'; -import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs'; -import { join } from 'path'; +import {readFileSync, writeFileSync, existsSync, mkdirSync} from 'fs'; +import {join} from 'path'; -import { enableProdMode } from '@angular/core'; +import {enableProdMode} from '@angular/core'; // Faster server renders w/ Prod mode (dev mode never needed) enableProdMode(); -// Express Engine -import { ngExpressEngine } from '@nguniversal/express-engine'; // Import module map for lazy loading -import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader'; -import { renderModuleFactory } from '@angular/platform-server'; -import { ROUTES } from './static.paths'; +import {provideModuleMap} from '@nguniversal/module-map-ngfactory-loader'; +import {renderModuleFactory} from '@angular/platform-server'; +import {ROUTES} from './static.paths'; // * NOTE :: leave this as require() since this file is built Dynamically from webpack -const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main.bundle'); +const {AppServerModuleNgFactory, LAZY_MODULE_MAP} = require('./dist/server/main.bundle'); const BROWSER_FOLDER = join(process.cwd(), 'browser'); diff --git a/server.ts b/server.ts index 6aeb0faaf..e185cea76 100644 --- a/server.ts +++ b/server.ts @@ -1,11 +1,10 @@ import 'zone.js/dist/zone-node'; import 'reflect-metadata'; -import { renderModuleFactory } from '@angular/platform-server'; -import { enableProdMode } from '@angular/core'; +import {enableProdMode} from '@angular/core'; import * as express from 'express'; -import { join } from 'path'; -import { readFileSync } from 'fs'; +import {join} from 'path'; +import {readFileSync} from 'fs'; // Faster server renders w/ Prod mode (dev mode never needed) enableProdMode(); @@ -20,12 +19,12 @@ const DIST_FOLDER = join(process.cwd(), 'dist'); const template = readFileSync(join(DIST_FOLDER, 'browser', 'index.html')).toString(); // * NOTE :: leave this as require() since this file is built Dynamically from webpack -const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main.bundle'); +const {AppServerModuleNgFactory, LAZY_MODULE_MAP} = require('./dist/server/main.bundle'); // Express Engine -import { ngExpressEngine } from '@nguniversal/express-engine'; +import {ngExpressEngine} from '@nguniversal/express-engine'; // Import module map for lazy loading -import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader'; +import {provideModuleMap} from '@nguniversal/module-map-ngfactory-loader'; // Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine) app.engine('html', ngExpressEngine({ diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 68cc7e619..164d1ed9f 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,5 +1,4 @@ -import { Component } from '@angular/core'; -import { Meta, Title } from '@angular/platform-browser'; +import {Component} from '@angular/core'; @Component({ selector: 'app-root', diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 7153d3581..d55d084f6 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,6 +1,6 @@ -import { BrowserModule } from '@angular/platform-browser'; -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; +import {BrowserModule} from '@angular/platform-browser'; +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; import { AppComponent } from './app.component'; import { HomeComponent } from './home/home.component'; diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index 824db0058..7075356cc 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -1,8 +1,7 @@ -import { Component, OnInit } from '@angular/core'; -import { Observable } from 'rxjs/Observable'; +import {Component, OnInit} from '@angular/core'; @Component({ - selector: 'home', + selector: 'app-home', template: `

{{ message }}

` }) export class HomeComponent implements OnInit { @@ -13,4 +12,4 @@ export class HomeComponent implements OnInit { ngOnInit() { this.message = 'Hello'; } -} \ No newline at end of file +} diff --git a/src/app/lazy/lazy.module.ts b/src/app/lazy/lazy.module.ts index d54acd466..517e1deb4 100644 --- a/src/app/lazy/lazy.module.ts +++ b/src/app/lazy/lazy.module.ts @@ -1,8 +1,8 @@ -import {NgModule, Component} from '@angular/core' -import {RouterModule} from '@angular/router' +import {NgModule, Component} from '@angular/core'; +import {RouterModule} from '@angular/router'; @Component({ - selector: 'lazy-view', + selector: 'app-lazy-view', template: `

i'm lazy

` }) export class LazyComponent {} @@ -17,4 +17,4 @@ export class LazyComponent {} }) export class LazyModule { -} \ No newline at end of file +} diff --git a/src/main.server.ts b/src/main.server.ts index d7c01cde7..ac4cea71c 100644 --- a/src/main.server.ts +++ b/src/main.server.ts @@ -1 +1 @@ -export { AppServerModule } from './app/app.server.module'; +export {AppServerModule} from './app/app.server.module'; diff --git a/src/main.ts b/src/main.ts index 9e8c381d8..29c38dba2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,8 +1,8 @@ -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import {enableProdMode} from '@angular/core'; +import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; -import { AppModule } from './app/app.module'; -import { environment } from './environments/environment'; +import {AppModule} from './app/app.module'; +import {environment} from './environments/environment'; if (environment.production) { enableProdMode(); diff --git a/tslint.json b/tslint.json new file mode 100644 index 000000000..d6a7cb1f3 --- /dev/null +++ b/tslint.json @@ -0,0 +1,145 @@ +{ + "rulesDirectory": [ + "node_modules/codelyzer" + ], + "rules": { + "arrow-return-shorthand": true, + "callable-types": true, + "class-name": true, + "comment-format": [ + true, + "check-space" + ], + "curly": true, + "deprecation": { + "severity": "warn" + }, + "eofline": true, + "forin": true, + "import-blacklist": [ + true, + "rxjs", + "rxjs/Rx", + "rxjs/operators" + ], + "import-spacing": true, + "indent": [ + true, + "spaces" + ], + "interface-over-type-literal": true, + "label-position": true, + "max-line-length": [ + true, + 140 + ], + "member-access": false, + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-arg": true, + "no-bitwise": true, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-construct": true, + "no-debugger": true, + "no-duplicate-super": true, + "no-empty": false, + "no-empty-interface": true, + "no-eval": true, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-misused-new": true, + "no-non-null-assertion": true, + "no-shadowed-variable": true, + "no-string-literal": false, + "no-string-throw": true, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": true, + "no-unnecessary-initializer": true, + "no-unused-expression": true, + "no-use-before-declare": true, + "no-var-keyword": true, + "object-literal-sort-keys": false, + "one-line": [ + true, + "check-open-brace", + "check-catch", + "check-else", + "check-whitespace" + ], + "prefer-const": true, + "quotemark": [ + true, + "single" + ], + "radix": true, + "semicolon": [ + true, + "always" + ], + "triple-equals": [ + true, + "allow-null-check" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "typeof-compare": true, + "unified-signatures": true, + "variable-name": false, + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ], + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ], + "no-output-on-prefix": true, + "use-input-property-decorator": true, + "use-output-property-decorator": true, + "use-host-property-decorator": true, + "no-input-rename": true, + "no-output-rename": true, + "use-life-cycle-interface": true, + "use-pipe-transform-interface": true, + "component-class-suffix": true, + "directive-class-suffix": true + } +} \ No newline at end of file