| @@ -0,0 +1,61 @@ | |||
| { | |||
| "$schema": "./node_modules/@angular/cli/lib/config/schema.json", | |||
| "project": { | |||
| "name": "angular5-course" | |||
| }, | |||
| "apps": [ | |||
| { | |||
| "root": "src", | |||
| "outDir": "dist", | |||
| "assets": [ | |||
| "assets", | |||
| "favicon.ico" | |||
| ], | |||
| "index": "index.html", | |||
| "main": "main.ts", | |||
| "polyfills": "polyfills.ts", | |||
| "test": "test.ts", | |||
| "tsconfig": "tsconfig.app.json", | |||
| "testTsconfig": "tsconfig.spec.json", | |||
| "prefix": "app", | |||
| "styles": [ | |||
| "../node_modules/bootstrap/dist/css/bootstrap.min.css", | |||
| "styles.css" | |||
| ], | |||
| "scripts": [], | |||
| "environmentSource": "environments/environment.ts", | |||
| "environments": { | |||
| "dev": "environments/environment.ts", | |||
| "prod": "environments/environment.prod.ts" | |||
| } | |||
| } | |||
| ], | |||
| "e2e": { | |||
| "protractor": { | |||
| "config": "./protractor.conf.js" | |||
| } | |||
| }, | |||
| "lint": [ | |||
| { | |||
| "project": "src/tsconfig.app.json", | |||
| "exclude": "**/node_modules/**" | |||
| }, | |||
| { | |||
| "project": "src/tsconfig.spec.json", | |||
| "exclude": "**/node_modules/**" | |||
| }, | |||
| { | |||
| "project": "e2e/tsconfig.e2e.json", | |||
| "exclude": "**/node_modules/**" | |||
| } | |||
| ], | |||
| "test": { | |||
| "karma": { | |||
| "config": "./karma.conf.js" | |||
| } | |||
| }, | |||
| "defaults": { | |||
| "styleExt": "css", | |||
| "component": {} | |||
| } | |||
| } | |||
| @@ -0,0 +1,13 @@ | |||
| # Editor configuration, see http://editorconfig.org | |||
| root = true | |||
| [*] | |||
| charset = utf-8 | |||
| indent_style = space | |||
| indent_size = 2 | |||
| insert_final_newline = true | |||
| trim_trailing_whitespace = true | |||
| [*.md] | |||
| max_line_length = off | |||
| trim_trailing_whitespace = false | |||
| @@ -0,0 +1,42 @@ | |||
| # See http://help.github.com/ignore-files/ for more about ignoring files. | |||
| # compiled output | |||
| /dist | |||
| /tmp | |||
| /out-tsc | |||
| # dependencies | |||
| /node_modules | |||
| # IDEs and editors | |||
| /.idea | |||
| .project | |||
| .classpath | |||
| .c9/ | |||
| *.launch | |||
| .settings/ | |||
| *.sublime-workspace | |||
| # IDE - VSCode | |||
| .vscode/* | |||
| !.vscode/settings.json | |||
| !.vscode/tasks.json | |||
| !.vscode/launch.json | |||
| !.vscode/extensions.json | |||
| # misc | |||
| /.sass-cache | |||
| /connect.lock | |||
| /coverage | |||
| /libpeerconnection.log | |||
| npm-debug.log | |||
| testem.log | |||
| /typings | |||
| # e2e | |||
| /e2e/*.js | |||
| /e2e/*.map | |||
| # System Files | |||
| .DS_Store | |||
| Thumbs.db | |||
| @@ -0,0 +1,27 @@ | |||
| # Angular5Course | |||
| This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.5.2. | |||
| ## Development server | |||
| Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. | |||
| ## Code scaffolding | |||
| Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. | |||
| ## Build | |||
| Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build. | |||
| ## Running unit tests | |||
| Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). | |||
| ## Running end-to-end tests | |||
| Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). | |||
| ## Further help | |||
| To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). | |||
| @@ -0,0 +1,14 @@ | |||
| import { AppPage } from './app.po'; | |||
| describe('angular5-course App', () => { | |||
| let page: AppPage; | |||
| beforeEach(() => { | |||
| page = new AppPage(); | |||
| }); | |||
| it('should display welcome message', () => { | |||
| page.navigateTo(); | |||
| expect(page.getParagraphText()).toEqual('Welcome to app!'); | |||
| }); | |||
| }); | |||
| @@ -0,0 +1,11 @@ | |||
| import { browser, by, element } from 'protractor'; | |||
| export class AppPage { | |||
| navigateTo() { | |||
| return browser.get('/'); | |||
| } | |||
| getParagraphText() { | |||
| return element(by.css('app-root h1')).getText(); | |||
| } | |||
| } | |||
| @@ -0,0 +1,14 @@ | |||
| { | |||
| "extends": "../tsconfig.json", | |||
| "compilerOptions": { | |||
| "outDir": "../out-tsc/e2e", | |||
| "baseUrl": "./", | |||
| "module": "commonjs", | |||
| "target": "es5", | |||
| "types": [ | |||
| "jasmine", | |||
| "jasminewd2", | |||
| "node" | |||
| ] | |||
| } | |||
| } | |||
| @@ -0,0 +1,33 @@ | |||
| // Karma configuration file, see link for more information | |||
| // https://karma-runner.github.io/1.0/config/configuration-file.html | |||
| module.exports = function (config) { | |||
| config.set({ | |||
| basePath: '', | |||
| frameworks: ['jasmine', '@angular/cli'], | |||
| plugins: [ | |||
| require('karma-jasmine'), | |||
| require('karma-chrome-launcher'), | |||
| require('karma-jasmine-html-reporter'), | |||
| require('karma-coverage-istanbul-reporter'), | |||
| require('@angular/cli/plugins/karma') | |||
| ], | |||
| client:{ | |||
| clearContext: false // leave Jasmine Spec Runner output visible in browser | |||
| }, | |||
| coverageIstanbulReporter: { | |||
| reports: [ 'html', 'lcovonly' ], | |||
| fixWebpackSourcePaths: true | |||
| }, | |||
| angularCli: { | |||
| environment: 'dev' | |||
| }, | |||
| reporters: ['progress', 'kjhtml'], | |||
| port: 9876, | |||
| colors: true, | |||
| logLevel: config.LOG_INFO, | |||
| autoWatch: true, | |||
| browsers: ['Chrome'], | |||
| singleRun: false | |||
| }); | |||
| }; | |||
| @@ -0,0 +1,50 @@ | |||
| { | |||
| "name": "angular5-course", | |||
| "version": "0.0.0", | |||
| "license": "MIT", | |||
| "scripts": { | |||
| "ng": "ng", | |||
| "start": "ng serve", | |||
| "build": "ng build", | |||
| "test": "ng test", | |||
| "lint": "ng lint", | |||
| "e2e": "ng e2e" | |||
| }, | |||
| "private": true, | |||
| "dependencies": { | |||
| "@angular/animations": "^5.0.0", | |||
| "@angular/common": "^5.0.0", | |||
| "@angular/compiler": "^5.0.0", | |||
| "@angular/core": "^5.0.0", | |||
| "@angular/forms": "^5.0.0", | |||
| "@angular/http": "^5.0.0", | |||
| "@angular/platform-browser": "^5.0.0", | |||
| "@angular/platform-browser-dynamic": "^5.0.0", | |||
| "@angular/router": "^5.0.0", | |||
| "bootstrap": "^3.3.7", | |||
| "core-js": "^2.4.1", | |||
| "rxjs": "^5.5.2", | |||
| "zone.js": "^0.8.14" | |||
| }, | |||
| "devDependencies": { | |||
| "@angular/cli": "1.5.2", | |||
| "@angular/compiler-cli": "^5.0.0", | |||
| "@angular/language-service": "^5.0.0", | |||
| "@types/jasmine": "~2.5.53", | |||
| "@types/jasminewd2": "~2.0.2", | |||
| "@types/node": "~6.0.60", | |||
| "codelyzer": "~3.2.0", | |||
| "jasmine-core": "~2.6.2", | |||
| "jasmine-spec-reporter": "~4.1.0", | |||
| "karma": "~1.7.0", | |||
| "karma-chrome-launcher": "~2.1.1", | |||
| "karma-cli": "~1.0.1", | |||
| "karma-coverage-istanbul-reporter": "^1.2.1", | |||
| "karma-jasmine": "~1.1.0", | |||
| "karma-jasmine-html-reporter": "^0.2.2", | |||
| "protractor": "~5.1.2", | |||
| "ts-node": "~3.2.0", | |||
| "tslint": "~5.7.0", | |||
| "typescript": "~2.4.2" | |||
| } | |||
| } | |||
| @@ -0,0 +1,28 @@ | |||
| // Protractor configuration file, see link for more information | |||
| // https://github.com/angular/protractor/blob/master/lib/config.ts | |||
| const { SpecReporter } = require('jasmine-spec-reporter'); | |||
| exports.config = { | |||
| allScriptsTimeout: 11000, | |||
| specs: [ | |||
| './e2e/**/*.e2e-spec.ts' | |||
| ], | |||
| capabilities: { | |||
| 'browserName': 'chrome' | |||
| }, | |||
| directConnect: true, | |||
| baseUrl: 'http://localhost:4200/', | |||
| framework: 'jasmine', | |||
| jasmineNodeOpts: { | |||
| showColors: true, | |||
| defaultTimeoutInterval: 30000, | |||
| print: function() {} | |||
| }, | |||
| onPrepare() { | |||
| require('ts-node').register({ | |||
| project: 'e2e/tsconfig.e2e.json' | |||
| }); | |||
| jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); | |||
| } | |||
| }; | |||
| @@ -0,0 +1,7 @@ | |||
| <div class="container"> | |||
| <div class="row"> | |||
| <div class="col-md-12"> | |||
| <h2>It's working!</h2> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -0,0 +1,27 @@ | |||
| import { TestBed, async } from '@angular/core/testing'; | |||
| import { AppComponent } from './app.component'; | |||
| describe('AppComponent', () => { | |||
| beforeEach(async(() => { | |||
| TestBed.configureTestingModule({ | |||
| declarations: [ | |||
| AppComponent | |||
| ], | |||
| }).compileComponents(); | |||
| })); | |||
| it('should create the app', async(() => { | |||
| const fixture = TestBed.createComponent(AppComponent); | |||
| const app = fixture.debugElement.componentInstance; | |||
| expect(app).toBeTruthy(); | |||
| })); | |||
| it(`should have as title 'app'`, async(() => { | |||
| const fixture = TestBed.createComponent(AppComponent); | |||
| const app = fixture.debugElement.componentInstance; | |||
| expect(app.title).toEqual('app'); | |||
| })); | |||
| it('should render title in a h1 tag', async(() => { | |||
| const fixture = TestBed.createComponent(AppComponent); | |||
| fixture.detectChanges(); | |||
| const compiled = fixture.debugElement.nativeElement; | |||
| expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!'); | |||
| })); | |||
| }); | |||
| @@ -0,0 +1,9 @@ | |||
| import { Component } from '@angular/core'; | |||
| @Component({ | |||
| selector: 'app-root', | |||
| templateUrl: './app.component.html', | |||
| styleUrls: ['./app.component.css'] | |||
| }) | |||
| export class AppComponent { | |||
| } | |||
| @@ -0,0 +1,22 @@ | |||
| import { BrowserModule } from '@angular/platform-browser'; | |||
| import { NgModule } from '@angular/core'; | |||
| import { FormsModule } from '@angular/forms'; | |||
| import { HttpModule } from '@angular/http'; | |||
| import { AppComponent } from './app.component'; | |||
| @NgModule({ | |||
| declarations: [ | |||
| AppComponent | |||
| ], | |||
| imports: [ | |||
| BrowserModule, | |||
| FormsModule, | |||
| HttpModule | |||
| ], | |||
| providers: [], | |||
| bootstrap: [AppComponent] | |||
| }) | |||
| export class AppModule { } | |||
| @@ -0,0 +1,3 @@ | |||
| export const environment = { | |||
| production: true | |||
| }; | |||
| @@ -0,0 +1,8 @@ | |||
| // The file contents for the current environment will overwrite these during build. | |||
| // The build system defaults to the dev environment which uses `environment.ts`, but if you do | |||
| // `ng build --env=prod` then `environment.prod.ts` will be used instead. | |||
| // The list of which env maps to which file can be found in `.angular-cli.json`. | |||
| export const environment = { | |||
| production: false | |||
| }; | |||
| @@ -0,0 +1,14 @@ | |||
| <!doctype html> | |||
| <html lang="en"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <title>Angular5Course</title> | |||
| <base href="/"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||
| <link rel="icon" type="image/x-icon" href="favicon.ico"> | |||
| </head> | |||
| <body> | |||
| <app-root></app-root> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,12 @@ | |||
| import { enableProdMode } from '@angular/core'; | |||
| import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; | |||
| import { AppModule } from './app/app.module'; | |||
| import { environment } from './environments/environment'; | |||
| if (environment.production) { | |||
| enableProdMode(); | |||
| } | |||
| platformBrowserDynamic().bootstrapModule(AppModule) | |||
| .catch(err => console.log(err)); | |||
| @@ -0,0 +1,76 @@ | |||
| /** | |||
| * This file includes polyfills needed by Angular and is loaded before the app. | |||
| * You can add your own extra polyfills to this file. | |||
| * | |||
| * This file is divided into 2 sections: | |||
| * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. | |||
| * 2. Application imports. Files imported after ZoneJS that should be loaded before your main | |||
| * file. | |||
| * | |||
| * The current setup is for so-called "evergreen" browsers; the last versions of browsers that | |||
| * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), | |||
| * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. | |||
| * | |||
| * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html | |||
| */ | |||
| /*************************************************************************************************** | |||
| * BROWSER POLYFILLS | |||
| */ | |||
| /** IE9, IE10 and IE11 requires all of the following polyfills. **/ | |||
| // import 'core-js/es6/symbol'; | |||
| // import 'core-js/es6/object'; | |||
| // import 'core-js/es6/function'; | |||
| // import 'core-js/es6/parse-int'; | |||
| // import 'core-js/es6/parse-float'; | |||
| // import 'core-js/es6/number'; | |||
| // import 'core-js/es6/math'; | |||
| // import 'core-js/es6/string'; | |||
| // import 'core-js/es6/date'; | |||
| // import 'core-js/es6/array'; | |||
| // import 'core-js/es6/regexp'; | |||
| // import 'core-js/es6/map'; | |||
| // import 'core-js/es6/weak-map'; | |||
| // import 'core-js/es6/set'; | |||
| /** IE10 and IE11 requires the following for NgClass support on SVG elements */ | |||
| // import 'classlist.js'; // Run `npm install --save classlist.js`. | |||
| /** IE10 and IE11 requires the following for the Reflect API. */ | |||
| // import 'core-js/es6/reflect'; | |||
| /** Evergreen browsers require these. **/ | |||
| // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. | |||
| import 'core-js/es7/reflect'; | |||
| /** | |||
| * Required to support Web Animations `@angular/platform-browser/animations`. | |||
| * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation | |||
| **/ | |||
| // import 'web-animations-js'; // Run `npm install --save web-animations-js`. | |||
| /*************************************************************************************************** | |||
| * Zone JS is required by Angular itself. | |||
| */ | |||
| import 'zone.js/dist/zone'; // Included with Angular CLI. | |||
| /*************************************************************************************************** | |||
| * APPLICATION IMPORTS | |||
| */ | |||
| /** | |||
| * Date, currency, decimal and percent pipes. | |||
| * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 | |||
| */ | |||
| // import 'intl'; // Run `npm install --save intl`. | |||
| /** | |||
| * Need to import at least one locale-data with intl. | |||
| */ | |||
| // import 'intl/locale-data/jsonp/en'; | |||
| @@ -0,0 +1 @@ | |||
| /* You can add global styles to this file, and also import other style files */ | |||
| @@ -0,0 +1,32 @@ | |||
| // This file is required by karma.conf.js and loads recursively all the .spec and framework files | |||
| import 'zone.js/dist/long-stack-trace-zone'; | |||
| import 'zone.js/dist/proxy.js'; | |||
| import 'zone.js/dist/sync-test'; | |||
| import 'zone.js/dist/jasmine-patch'; | |||
| import 'zone.js/dist/async-test'; | |||
| import 'zone.js/dist/fake-async-test'; | |||
| import { getTestBed } from '@angular/core/testing'; | |||
| import { | |||
| BrowserDynamicTestingModule, | |||
| platformBrowserDynamicTesting | |||
| } from '@angular/platform-browser-dynamic/testing'; | |||
| // Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. | |||
| declare const __karma__: any; | |||
| declare const require: any; | |||
| // Prevent Karma from running prematurely. | |||
| __karma__.loaded = function () {}; | |||
| // First, initialize the Angular testing environment. | |||
| getTestBed().initTestEnvironment( | |||
| BrowserDynamicTestingModule, | |||
| platformBrowserDynamicTesting() | |||
| ); | |||
| // Then we find all the tests. | |||
| const context = require.context('./', true, /\.spec\.ts$/); | |||
| // And load the modules. | |||
| context.keys().map(context); | |||
| // Finally, start Karma to run the tests. | |||
| __karma__.start(); | |||
| @@ -0,0 +1,13 @@ | |||
| { | |||
| "extends": "../tsconfig.json", | |||
| "compilerOptions": { | |||
| "outDir": "../out-tsc/app", | |||
| "baseUrl": "./", | |||
| "module": "es2015", | |||
| "types": [] | |||
| }, | |||
| "exclude": [ | |||
| "test.ts", | |||
| "**/*.spec.ts" | |||
| ] | |||
| } | |||
| @@ -0,0 +1,20 @@ | |||
| { | |||
| "extends": "../tsconfig.json", | |||
| "compilerOptions": { | |||
| "outDir": "../out-tsc/spec", | |||
| "baseUrl": "./", | |||
| "module": "commonjs", | |||
| "target": "es5", | |||
| "types": [ | |||
| "jasmine", | |||
| "node" | |||
| ] | |||
| }, | |||
| "files": [ | |||
| "test.ts" | |||
| ], | |||
| "include": [ | |||
| "**/*.spec.ts", | |||
| "**/*.d.ts" | |||
| ] | |||
| } | |||
| @@ -0,0 +1,5 @@ | |||
| /* SystemJS module definition */ | |||
| declare var module: NodeModule; | |||
| interface NodeModule { | |||
| id: string; | |||
| } | |||
| @@ -0,0 +1,19 @@ | |||
| { | |||
| "compileOnSave": false, | |||
| "compilerOptions": { | |||
| "outDir": "./dist/out-tsc", | |||
| "sourceMap": true, | |||
| "declaration": false, | |||
| "moduleResolution": "node", | |||
| "emitDecoratorMetadata": true, | |||
| "experimentalDecorators": true, | |||
| "target": "es5", | |||
| "typeRoots": [ | |||
| "node_modules/@types" | |||
| ], | |||
| "lib": [ | |||
| "es2017", | |||
| "dom" | |||
| ] | |||
| } | |||
| } | |||
| @@ -0,0 +1,141 @@ | |||
| { | |||
| "rulesDirectory": [ | |||
| "node_modules/codelyzer" | |||
| ], | |||
| "rules": { | |||
| "arrow-return-shorthand": true, | |||
| "callable-types": true, | |||
| "class-name": true, | |||
| "comment-format": [ | |||
| true, | |||
| "check-space" | |||
| ], | |||
| "curly": true, | |||
| "eofline": true, | |||
| "forin": true, | |||
| "import-blacklist": [ | |||
| true, | |||
| "rxjs", | |||
| "rxjs/Rx" | |||
| ], | |||
| "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" | |||
| ], | |||
| "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, | |||
| "invoke-injectable": true | |||
| } | |||
| } | |||