├── README.md ├── api ├── Dockerfile-dev ├── package-lock.json ├── package.json └── server.js ├── app-ui ├── Dockerfile-dev ├── README.md ├── angular.json ├── browserslist ├── dist │ └── angular-nodejs-example │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── main-es2015.js │ │ ├── main-es2015.js.map │ │ ├── main-es5.js │ │ ├── main-es5.js.map │ │ ├── polyfills-es2015.js │ │ ├── polyfills-es2015.js.map │ │ ├── polyfills-es5.js │ │ ├── polyfills-es5.js.map │ │ ├── runtime-es2015.js │ │ ├── runtime-es2015.js.map │ │ ├── runtime-es5.js │ │ ├── runtime-es5.js.map │ │ ├── styles-es2015.js │ │ ├── styles-es2015.js.map │ │ ├── styles-es5.js │ │ ├── styles-es5.js.map │ │ ├── vendor-es2015.js │ │ ├── vendor-es2015.js.map │ │ ├── vendor-es5.js │ │ └── vendor-es5.js.map ├── e2e │ ├── protractor.conf.js │ ├── src │ │ ├── app.e2e-spec.ts │ │ └── app.po.ts │ └── tsconfig.json ├── karma.conf.js ├── package-lock.json ├── package.json ├── proxy.conf.json ├── src │ ├── app │ │ ├── app-routing.module.ts │ │ ├── app-state │ │ │ ├── actions │ │ │ │ └── createUser.ts │ │ │ ├── effects │ │ │ │ └── index.ts │ │ │ ├── models │ │ │ │ ├── index.ts │ │ │ │ └── user.model.ts │ │ │ ├── reducers │ │ │ │ ├── createuser.ts │ │ │ │ └── index.ts │ │ │ └── shared │ │ │ │ └── utils.ts │ │ ├── app.component.css │ │ ├── app.component.html │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── app.service.spec.ts │ │ ├── app.service.ts │ │ ├── display-board.component.css │ │ ├── display-board.component.html │ │ ├── display-board.component.spec.ts │ │ ├── display-board.component.ts │ │ ├── header │ │ │ ├── header.component.css │ │ │ ├── header.component.html │ │ │ ├── header.component.spec.ts │ │ │ └── header.component.ts │ │ ├── users.component.css │ │ ├── users.component.html │ │ ├── users.component.spec.ts │ │ └── users.component.ts │ ├── assets │ │ └── .gitkeep │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── styles.css │ └── test.ts ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.spec.json └── tslint.json └── docker-compose.yml /README.md: -------------------------------------------------------------------------------- 1 | # angular-nodejs-docker-compose 2 | Angular Nodejs Local development with Docker compose 3 | -------------------------------------------------------------------------------- /api/Dockerfile-dev: -------------------------------------------------------------------------------- 1 | FROM node:10 2 | 3 | WORKDIR /usr/src/app/api 4 | 5 | COPY package*.json ./ 6 | 7 | RUN npm install 8 | 9 | EXPOSE 3080 10 | 11 | CMD ["npm", "run", "dev"] 12 | 13 | -------------------------------------------------------------------------------- /api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-nodejs-example", 3 | "version": "1.0.0", 4 | "description": "node server", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node server.bundle.js", 8 | "build": "webpack", 9 | "dev": "nodemon ./server.js localhost 3080", 10 | "test": "echo \"Error: no test specified\" && exit 1" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "git+https://github.com/bbachi/angular-nodejs-example.git" 15 | }, 16 | "author": "Bhargav Bachina", 17 | "license": "ISC", 18 | "bugs": { 19 | "url": "https://github.com/bbachi/angular-nodejs-example/issues" 20 | }, 21 | "homepage": "https://github.com/bbachi/angular-nodejs-example#readme", 22 | "dependencies": { 23 | "express": "^4.17.1" 24 | }, 25 | "devDependencies": { 26 | "del": "^5.1.0", 27 | "fancy-log": "^1.3.3", 28 | "gulp": "^4.0.2", 29 | "gulp-zip": "^5.0.1", 30 | "nodemon": "^2.0.2", 31 | "webpack": "^4.42.1", 32 | "webpack-stream": "^5.2.1" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /api/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const app = express(), 3 | bodyParser = require("body-parser"); 4 | port = 3080; 5 | 6 | const users = []; 7 | 8 | app.use(bodyParser.json()); 9 | app.use(express.static(process.cwd()+"/my-app/dist/angular-nodejs-docker-compose/")); 10 | 11 | app.get('/api/users', (req, res) => { 12 | console.log('dfsdfsd') 13 | res.json(users); 14 | }); 15 | 16 | app.post('/api/user', (req, res) => { 17 | const user = req.body.user; 18 | users.push(user); 19 | res.json("user addedd"); 20 | }); 21 | 22 | app.get('/', (req,res) => { 23 | res.sendFile(process.cwd()+"/app-ui/dist/angular-nodejs-docker-compose/index.html") 24 | }); 25 | 26 | app.listen(port, () => { 27 | console.log(`Server listening on the port::${port}`); 28 | }); 29 | -------------------------------------------------------------------------------- /app-ui/Dockerfile-dev: -------------------------------------------------------------------------------- 1 | FROM node:10 2 | 3 | WORKDIR /usr/src/app/app-ui 4 | 5 | COPY package*.json ./ 6 | 7 | RUN npm install -g @angular/cli @angular-devkit/build-angular && npm install 8 | 9 | EXPOSE 4201 10 | 11 | CMD ["npm", "start"] -------------------------------------------------------------------------------- /app-ui/README.md: -------------------------------------------------------------------------------- 1 | # AngularNodejsExample 2 | 3 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.0.4. 4 | 5 | ## Development server 6 | 7 | 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. 8 | 9 | ## Code scaffolding 10 | 11 | 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`. 12 | 13 | ## Build 14 | 15 | 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. 16 | 17 | ## Running unit tests 18 | 19 | Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). 20 | 21 | ## Running end-to-end tests 22 | 23 | Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). 24 | 25 | ## Further help 26 | 27 | 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). 28 | -------------------------------------------------------------------------------- /app-ui/angular.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json", 3 | "version": 1, 4 | "newProjectRoot": "projects", 5 | "projects": { 6 | "angular-nodejs-example": { 7 | "projectType": "application", 8 | "schematics": {}, 9 | "root": "", 10 | "sourceRoot": "src", 11 | "prefix": "app", 12 | "architect": { 13 | "build": { 14 | "builder": "@angular-devkit/build-angular:browser", 15 | "options": { 16 | "outputPath": "dist/angular-nodejs-example", 17 | "index": "src/index.html", 18 | "main": "src/main.ts", 19 | "polyfills": "src/polyfills.ts", 20 | "tsConfig": "tsconfig.app.json", 21 | "aot": true, 22 | "assets": [ 23 | "src/favicon.ico", 24 | "src/assets" 25 | ], 26 | "styles": [ 27 | "./node_modules/bootstrap/dist/css/bootstrap.min.css", 28 | "./node_modules/ngx-bootstrap/datepicker/bs-datepicker.css", 29 | "src/styles.css" 30 | ], 31 | "scripts": [] 32 | }, 33 | "configurations": { 34 | "production": { 35 | "fileReplacements": [ 36 | { 37 | "replace": "src/environments/environment.ts", 38 | "with": "src/environments/environment.prod.ts" 39 | } 40 | ], 41 | "optimization": true, 42 | "outputHashing": "all", 43 | "sourceMap": false, 44 | "extractCss": true, 45 | "namedChunks": false, 46 | "extractLicenses": true, 47 | "vendorChunk": false, 48 | "buildOptimizer": true, 49 | "budgets": [ 50 | { 51 | "type": "initial", 52 | "maximumWarning": "2mb", 53 | "maximumError": "5mb" 54 | }, 55 | { 56 | "type": "anyComponentStyle", 57 | "maximumWarning": "6kb", 58 | "maximumError": "10kb" 59 | } 60 | ] 61 | } 62 | } 63 | }, 64 | "serve": { 65 | "builder": "@angular-devkit/build-angular:dev-server", 66 | "options": { 67 | "browserTarget": "angular-nodejs-example:build", 68 | "proxyConfig": "proxy.conf.json" 69 | }, 70 | "configurations": { 71 | "production": { 72 | "browserTarget": "angular-nodejs-example:build:production" 73 | } 74 | } 75 | }, 76 | "extract-i18n": { 77 | "builder": "@angular-devkit/build-angular:extract-i18n", 78 | "options": { 79 | "browserTarget": "angular-nodejs-example:build" 80 | } 81 | }, 82 | "test": { 83 | "builder": "@angular-devkit/build-angular:karma", 84 | "options": { 85 | "main": "src/test.ts", 86 | "polyfills": "src/polyfills.ts", 87 | "tsConfig": "tsconfig.spec.json", 88 | "karmaConfig": "karma.conf.js", 89 | "assets": [ 90 | "src/favicon.ico", 91 | "src/assets" 92 | ], 93 | "styles": [ 94 | "./node_modules/bootstrap/dist/css/bootstrap.min.css", 95 | "./node_modules/ngx-bootstrap/datepicker/bs-datepicker.css", 96 | "src/styles.css" 97 | ], 98 | "scripts": [] 99 | } 100 | }, 101 | "lint": { 102 | "builder": "@angular-devkit/build-angular:tslint", 103 | "options": { 104 | "tsConfig": [ 105 | "tsconfig.app.json", 106 | "tsconfig.spec.json", 107 | "e2e/tsconfig.json" 108 | ], 109 | "exclude": [ 110 | "**/node_modules/**" 111 | ] 112 | } 113 | }, 114 | "e2e": { 115 | "builder": "@angular-devkit/build-angular:protractor", 116 | "options": { 117 | "protractorConfig": "e2e/protractor.conf.js", 118 | "devServerTarget": "angular-nodejs-example:serve" 119 | }, 120 | "configurations": { 121 | "production": { 122 | "devServerTarget": "angular-nodejs-example:serve:production" 123 | } 124 | } 125 | } 126 | } 127 | } 128 | }, 129 | "defaultProject": "angular-nodejs-example", 130 | "cli": { 131 | "analytics": "538ab48f-d51e-4edf-a47d-cedcd8047144" 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /app-ui/browserslist: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # You can see what browsers were selected by your queries by running: 6 | # npx browserslist 7 | 8 | > 0.5% 9 | last 2 versions 10 | Firefox ESR 11 | not dead 12 | not IE 9-11 # For IE 9-11 support, remove 'not'. -------------------------------------------------------------------------------- /app-ui/dist/angular-nodejs-example/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bbachi/angular-nodejs-docker-compose/bc6dafa1810c41fdb4dd8d1e1f36e451c84638ac/app-ui/dist/angular-nodejs-example/favicon.ico -------------------------------------------------------------------------------- /app-ui/dist/angular-nodejs-example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AngularNodejsExample 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app-ui/dist/angular-nodejs-example/main-es2015.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"] = window["webpackJsonp"] || []).push([["main"],{ 2 | 3 | /***/ "./$$_lazy_route_resource lazy recursive": 4 | /*!******************************************************!*\ 5 | !*** ./$$_lazy_route_resource lazy namespace object ***! 6 | \******************************************************/ 7 | /*! no static exports found */ 8 | /***/ (function(module, exports) { 9 | 10 | function webpackEmptyAsyncContext(req) { 11 | // Here Promise.resolve().then() is used instead of new Promise() to prevent 12 | // uncaught exception popping up in devtools 13 | return Promise.resolve().then(function() { 14 | var e = new Error("Cannot find module '" + req + "'"); 15 | e.code = 'MODULE_NOT_FOUND'; 16 | throw e; 17 | }); 18 | } 19 | webpackEmptyAsyncContext.keys = function() { return []; }; 20 | webpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext; 21 | module.exports = webpackEmptyAsyncContext; 22 | webpackEmptyAsyncContext.id = "./$$_lazy_route_resource lazy recursive"; 23 | 24 | /***/ }), 25 | 26 | /***/ "./src/app/app-routing.module.ts": 27 | /*!***************************************!*\ 28 | !*** ./src/app/app-routing.module.ts ***! 29 | \***************************************/ 30 | /*! exports provided: AppRoutingModule */ 31 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 32 | 33 | "use strict"; 34 | __webpack_require__.r(__webpack_exports__); 35 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppRoutingModule", function() { return AppRoutingModule; }); 36 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 37 | /* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); 38 | 39 | 40 | 41 | 42 | const routes = []; 43 | class AppRoutingModule { 44 | } 45 | AppRoutingModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: AppRoutingModule }); 46 | AppRoutingModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function AppRoutingModule_Factory(t) { return new (t || AppRoutingModule)(); }, imports: [[_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"].forRoot(routes)], 47 | _angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]] }); 48 | (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](AppRoutingModule, { imports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]], exports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]] }); })(); 49 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AppRoutingModule, [{ 50 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"], 51 | args: [{ 52 | imports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"].forRoot(routes)], 53 | exports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]] 54 | }] 55 | }], null, null); })(); 56 | 57 | 58 | /***/ }), 59 | 60 | /***/ "./src/app/app.component.ts": 61 | /*!**********************************!*\ 62 | !*** ./src/app/app.component.ts ***! 63 | \**********************************/ 64 | /*! exports provided: AppComponent */ 65 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 66 | 67 | "use strict"; 68 | __webpack_require__.r(__webpack_exports__); 69 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppComponent", function() { return AppComponent; }); 70 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 71 | /* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); 72 | /* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm2015/operators/index.js"); 73 | /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm2015/index.js"); 74 | /* harmony import */ var _app_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./app.service */ "./src/app/app.service.ts"); 75 | /* harmony import */ var _header_header_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./header/header.component */ "./src/app/header/header.component.ts"); 76 | /* harmony import */ var _display_board_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./display-board.component */ "./src/app/display-board.component.ts"); 77 | /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); 78 | /* harmony import */ var _users_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./users.component */ "./src/app/users.component.ts"); 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | function AppComponent_app_users_26_Template(rf, ctx) { if (rf & 1) { 91 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "app-users", 16); 92 | } if (rf & 2) { 93 | const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); 94 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("users", ctx_r0.users); 95 | } } 96 | class AppComponent { 97 | constructor(appService) { 98 | this.appService = appService; 99 | this.title = 'angular-nodejs-example'; 100 | this.userForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]({ 101 | firstName: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].nullValidator && _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required), 102 | lastName: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].nullValidator && _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required), 103 | email: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].nullValidator && _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required) 104 | }); 105 | this.users = []; 106 | this.userCount = 0; 107 | this.destroy$ = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"](); 108 | } 109 | onSubmit() { 110 | this.appService.addUser(this.userForm.value).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["takeUntil"])(this.destroy$)).subscribe(data => { 111 | console.log('message::::', data); 112 | this.userCount = this.userCount + 1; 113 | console.log(this.userCount); 114 | this.userForm.reset(); 115 | }); 116 | } 117 | getAllUsers() { 118 | this.appService.getUsers().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["takeUntil"])(this.destroy$)).subscribe((users) => { 119 | this.users = users; 120 | }); 121 | } 122 | ngOnDestroy() { 123 | this.destroy$.next(true); 124 | this.destroy$.unsubscribe(); 125 | } 126 | } 127 | AppComponent.ɵfac = function AppComponent_Factory(t) { return new (t || AppComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_app_service__WEBPACK_IMPORTED_MODULE_4__["AppService"])); }; 128 | AppComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: AppComponent, selectors: [["app-root"]], decls: 27, vars: 4, consts: [[1, "container"], [1, "row"], [1, "col-md-7", "mrgnbtm"], [3, "formGroup", "ngSubmit"], [1, "form-group", "col-md-6"], ["for", "exampleInputEmail1"], ["type", "text", "formControlName", "firstName", "id", "exampleInputEmail1", "aria-describedby", "emailHelp", "placeholder", "First Name", 1, "form-control"], ["for", "exampleInputPassword1"], ["type", "text", "formControlName", "lastName", "id", "exampleInputPassword1", "placeholder", "Last Name", 1, "form-control"], [1, "form-group", "col-md-12"], ["type", "text", "formControlName", "email", "id", "exampleInputEmail1", "aria-describedby", "emailHelp", "placeholder", "Email", 1, "form-control"], ["type", "submit", 1, "btn", "btn-danger", 3, "disabled"], [1, "col-md-4", "mrgnbtm"], [3, "userCount", "getUsersEvent"], [1, "mrgnbtm"], [3, "users", 4, "ngIf"], [3, "users"]], template: function AppComponent_Template(rf, ctx) { if (rf & 1) { 129 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "app-header"); 130 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 0); 131 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "div", 1); 132 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "div", 2); 133 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "h2"); 134 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](5, "Create User"); 135 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 136 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "form", 3); 137 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("ngSubmit", function AppComponent_Template_form_ngSubmit_6_listener() { return ctx.onSubmit(); }); 138 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](7, "div", 1); 139 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](8, "div", 4); 140 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](9, "label", 5); 141 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](10, "First Name"); 142 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 143 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](11, "input", 6); 144 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 145 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](12, "div", 4); 146 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](13, "label", 7); 147 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](14, "Last Name"); 148 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 149 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](15, "input", 8); 150 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 151 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 152 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](16, "div", 1); 153 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](17, "div", 9); 154 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](18, "label", 5); 155 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](19, "Email"); 156 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 157 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](20, "input", 10); 158 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 159 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 160 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](21, "button", 11); 161 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](22, "Create"); 162 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 163 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 164 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 165 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](23, "div", 12); 166 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](24, "app-display-board", 13); 167 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("getUsersEvent", function AppComponent_Template_app_display_board_getUsersEvent_24_listener() { return ctx.getAllUsers(); }); 168 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 169 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 170 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 171 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 172 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](25, "div", 14); 173 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](26, AppComponent_app_users_26_Template, 1, 1, "app-users", 15); 174 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 175 | } if (rf & 2) { 176 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](6); 177 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("formGroup", ctx.userForm); 178 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](15); 179 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", !ctx.userForm.valid); 180 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3); 181 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("userCount", ctx.userCount); 182 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 183 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.users.length !== 0); 184 | } }, directives: [_header_header_component__WEBPACK_IMPORTED_MODULE_5__["HeaderComponent"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["ɵangular_packages_forms_forms_y"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["NgControlStatusGroup"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroupDirective"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["DefaultValueAccessor"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["NgControlStatus"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControlName"], _display_board_component__WEBPACK_IMPORTED_MODULE_6__["DisplayBoardComponent"], _angular_common__WEBPACK_IMPORTED_MODULE_7__["NgIf"], _users_component__WEBPACK_IMPORTED_MODULE_8__["UsersComponent"]], styles: [".mrgnbtm[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvYXBwLmNvbXBvbmVudC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxnQkFBZ0I7QUFDbEIiLCJmaWxlIjoic3JjL2FwcC9hcHAuY29tcG9uZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5tcmduYnRtIHtcbiAgbWFyZ2luLXRvcDogMjBweDtcbn1cbiJdfQ== */"] }); 185 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AppComponent, [{ 186 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 187 | args: [{ 188 | selector: 'app-root', 189 | templateUrl: './app.component.html', 190 | styleUrls: ['./app.component.css'] 191 | }] 192 | }], function () { return [{ type: _app_service__WEBPACK_IMPORTED_MODULE_4__["AppService"] }]; }, null); })(); 193 | 194 | 195 | /***/ }), 196 | 197 | /***/ "./src/app/app.module.ts": 198 | /*!*******************************!*\ 199 | !*** ./src/app/app.module.ts ***! 200 | \*******************************/ 201 | /*! exports provided: AppModule */ 202 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 203 | 204 | "use strict"; 205 | __webpack_require__.r(__webpack_exports__); 206 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppModule", function() { return AppModule; }); 207 | /* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/platform-browser */ "./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/platform-browser.js"); 208 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 209 | /* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); 210 | /* harmony import */ var _app_routing_module__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./app-routing.module */ "./src/app/app-routing.module.ts"); 211 | /* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common/http */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js"); 212 | /* harmony import */ var _app_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./app.component */ "./src/app/app.component.ts"); 213 | /* harmony import */ var _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/platform-browser/animations */ "./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/animations.js"); 214 | /* harmony import */ var _header_header_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./header/header.component */ "./src/app/header/header.component.ts"); 215 | /* harmony import */ var _display_board_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./display-board.component */ "./src/app/display-board.component.ts"); 216 | /* harmony import */ var _users_component__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./users.component */ "./src/app/users.component.ts"); 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | // state related imports 229 | // import { StoreModule } from '@ngrx/store'; 230 | // import { StoreDevtoolsModule } from '@ngrx/store-devtools'; 231 | // import { reducers, metaReducers } from './app-state/reducers'; 232 | // import { CustomRouterStateSerializer } from './app-state/shared/utils'; 233 | // import { StoreRouterConnectingModule, RouterStateSerializer } from '@ngrx/router-store'; 234 | class AppModule { 235 | } 236 | AppModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({ type: AppModule, bootstrap: [_app_component__WEBPACK_IMPORTED_MODULE_5__["AppComponent"]] }); 237 | AppModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({ factory: function AppModule_Factory(t) { return new (t || AppModule)(); }, providers: [], imports: [[ 238 | _angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__["BrowserModule"], 239 | _app_routing_module__WEBPACK_IMPORTED_MODULE_3__["AppRoutingModule"], 240 | _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_6__["BrowserAnimationsModule"], 241 | _angular_forms__WEBPACK_IMPORTED_MODULE_2__["ReactiveFormsModule"], 242 | _angular_common_http__WEBPACK_IMPORTED_MODULE_4__["HttpClientModule"], 243 | ]] }); 244 | (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](AppModule, { declarations: [_app_component__WEBPACK_IMPORTED_MODULE_5__["AppComponent"], 245 | _header_header_component__WEBPACK_IMPORTED_MODULE_7__["HeaderComponent"], 246 | _display_board_component__WEBPACK_IMPORTED_MODULE_8__["DisplayBoardComponent"], 247 | _users_component__WEBPACK_IMPORTED_MODULE_9__["UsersComponent"]], imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__["BrowserModule"], 248 | _app_routing_module__WEBPACK_IMPORTED_MODULE_3__["AppRoutingModule"], 249 | _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_6__["BrowserAnimationsModule"], 250 | _angular_forms__WEBPACK_IMPORTED_MODULE_2__["ReactiveFormsModule"], 251 | _angular_common_http__WEBPACK_IMPORTED_MODULE_4__["HttpClientModule"]] }); })(); 252 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](AppModule, [{ 253 | type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"], 254 | args: [{ 255 | declarations: [ 256 | _app_component__WEBPACK_IMPORTED_MODULE_5__["AppComponent"], 257 | _header_header_component__WEBPACK_IMPORTED_MODULE_7__["HeaderComponent"], 258 | _display_board_component__WEBPACK_IMPORTED_MODULE_8__["DisplayBoardComponent"], 259 | _users_component__WEBPACK_IMPORTED_MODULE_9__["UsersComponent"] 260 | ], 261 | imports: [ 262 | _angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__["BrowserModule"], 263 | _app_routing_module__WEBPACK_IMPORTED_MODULE_3__["AppRoutingModule"], 264 | _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_6__["BrowserAnimationsModule"], 265 | _angular_forms__WEBPACK_IMPORTED_MODULE_2__["ReactiveFormsModule"], 266 | _angular_common_http__WEBPACK_IMPORTED_MODULE_4__["HttpClientModule"], 267 | ], 268 | providers: [], 269 | bootstrap: [_app_component__WEBPACK_IMPORTED_MODULE_5__["AppComponent"]] 270 | }] 271 | }], null, null); })(); 272 | 273 | 274 | /***/ }), 275 | 276 | /***/ "./src/app/app.service.ts": 277 | /*!********************************!*\ 278 | !*** ./src/app/app.service.ts ***! 279 | \********************************/ 280 | /*! exports provided: AppService */ 281 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 282 | 283 | "use strict"; 284 | __webpack_require__.r(__webpack_exports__); 285 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppService", function() { return AppService; }); 286 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 287 | /* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common/http */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js"); 288 | 289 | 290 | 291 | class AppService { 292 | constructor(http) { 293 | this.http = http; 294 | this.rootURL = '/api'; 295 | } 296 | getUsers() { 297 | return this.http.get(this.rootURL + '/users'); 298 | } 299 | addUser(user) { 300 | return this.http.post(this.rootURL + '/user', { user }); 301 | } 302 | } 303 | AppService.ɵfac = function AppService_Factory(t) { return new (t || AppService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common_http__WEBPACK_IMPORTED_MODULE_1__["HttpClient"])); }; 304 | AppService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: AppService, factory: AppService.ɵfac, providedIn: 'root' }); 305 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AppService, [{ 306 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"], 307 | args: [{ 308 | providedIn: 'root' 309 | }] 310 | }], function () { return [{ type: _angular_common_http__WEBPACK_IMPORTED_MODULE_1__["HttpClient"] }]; }, null); })(); 311 | 312 | 313 | /***/ }), 314 | 315 | /***/ "./src/app/display-board.component.ts": 316 | /*!********************************************!*\ 317 | !*** ./src/app/display-board.component.ts ***! 318 | \********************************************/ 319 | /*! exports provided: DisplayBoardComponent */ 320 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 321 | 322 | "use strict"; 323 | __webpack_require__.r(__webpack_exports__); 324 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DisplayBoardComponent", function() { return DisplayBoardComponent; }); 325 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 326 | 327 | 328 | class DisplayBoardComponent { 329 | constructor() { 330 | this.userCount = 0; 331 | this.getUsersEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](); 332 | } 333 | ngOnInit() { 334 | } 335 | getAllUsers() { 336 | this.getUsersEvent.emit('get all users'); 337 | } 338 | } 339 | DisplayBoardComponent.ɵfac = function DisplayBoardComponent_Factory(t) { return new (t || DisplayBoardComponent)(); }; 340 | DisplayBoardComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: DisplayBoardComponent, selectors: [["app-display-board"]], inputs: { userCount: "userCount" }, outputs: { getUsersEvent: "getUsersEvent" }, decls: 8, vars: 1, consts: [[1, "display-board"], [1, "number"], [1, "btn"], [1, "btn", "btn-warning", 3, "click"]], template: function DisplayBoardComponent_Template(rf, ctx) { if (rf & 1) { 341 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0); 342 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "h4"); 343 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "Users Created"); 344 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 345 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "div", 1); 346 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4); 347 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 348 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "div", 2); 349 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "button", 3); 350 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function DisplayBoardComponent_Template_button_click_6_listener() { return ctx.getAllUsers(); }); 351 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](7, "Get All Users"); 352 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 353 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 354 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 355 | } if (rf & 2) { 356 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4); 357 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", ctx.userCount, " "); 358 | } }, styles: [".display-board[_ngcontent-%COMP%] {\n width: 100%;\n background-color: rgb(193, 236, 112);\n padding: 5%;\n}\n\n.number[_ngcontent-%COMP%] {\n color: red;\n font-size: 75px;\n text-align: center;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvZGlzcGxheS1ib2FyZC5jb21wb25lbnQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVztFQUNYLG9DQUFvQztFQUNwQyxXQUFXO0FBQ2I7O0FBRUE7RUFDRSxVQUFVO0VBQ1YsZUFBZTtFQUNmLGtCQUFrQjtBQUNwQiIsImZpbGUiOiJzcmMvYXBwL2Rpc3BsYXktYm9hcmQuY29tcG9uZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5kaXNwbGF5LWJvYXJkIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigxOTMsIDIzNiwgMTEyKTtcbiAgcGFkZGluZzogNSU7XG59XG5cbi5udW1iZXIge1xuICBjb2xvcjogcmVkO1xuICBmb250LXNpemU6IDc1cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiJdfQ== */"] }); 359 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DisplayBoardComponent, [{ 360 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 361 | args: [{ 362 | selector: 'app-display-board', 363 | templateUrl: './display-board.component.html', 364 | styleUrls: ['./display-board.component.css'] 365 | }] 366 | }], function () { return []; }, { userCount: [{ 367 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] 368 | }], getUsersEvent: [{ 369 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] 370 | }] }); })(); 371 | 372 | 373 | /***/ }), 374 | 375 | /***/ "./src/app/header/header.component.ts": 376 | /*!********************************************!*\ 377 | !*** ./src/app/header/header.component.ts ***! 378 | \********************************************/ 379 | /*! exports provided: HeaderComponent */ 380 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 381 | 382 | "use strict"; 383 | __webpack_require__.r(__webpack_exports__); 384 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HeaderComponent", function() { return HeaderComponent; }); 385 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 386 | 387 | 388 | class HeaderComponent { 389 | constructor() { 390 | } 391 | ngOnInit() { 392 | } 393 | } 394 | HeaderComponent.ɵfac = function HeaderComponent_Factory(t) { return new (t || HeaderComponent)(); }; 395 | HeaderComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: HeaderComponent, selectors: [["app-header"]], decls: 3, vars: 0, consts: [[1, "header"]], template: function HeaderComponent_Template(rf, ctx) { if (rf & 1) { 396 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0); 397 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "h1"); 398 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "Angular With NodeJS"); 399 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 400 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 401 | } }, styles: [".header[_ngcontent-%COMP%] {\n width: 100%;\n padding: 2%;\n background-color: blueviolet;\n color: white;\n text-align: center;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVztFQUNYLFdBQVc7RUFDWCw0QkFBNEI7RUFDNUIsWUFBWTtFQUNaLGtCQUFrQjtBQUNwQiIsImZpbGUiOiJzcmMvYXBwL2hlYWRlci9oZWFkZXIuY29tcG9uZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5oZWFkZXIge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMiU7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsdWV2aW9sZXQ7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuIl19 */"] }); 402 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HeaderComponent, [{ 403 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 404 | args: [{ 405 | selector: 'app-header', 406 | templateUrl: './header.component.html', 407 | styleUrls: ['./header.component.css'] 408 | }] 409 | }], function () { return []; }, null); })(); 410 | 411 | 412 | /***/ }), 413 | 414 | /***/ "./src/app/users.component.ts": 415 | /*!************************************!*\ 416 | !*** ./src/app/users.component.ts ***! 417 | \************************************/ 418 | /*! exports provided: UsersComponent */ 419 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 420 | 421 | "use strict"; 422 | __webpack_require__.r(__webpack_exports__); 423 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UsersComponent", function() { return UsersComponent; }); 424 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 425 | /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); 426 | 427 | 428 | 429 | function UsersComponent_tr_15_Template(rf, ctx) { if (rf & 1) { 430 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "tr"); 431 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "td"); 432 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2); 433 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 434 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "td"); 435 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4); 436 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 437 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "td"); 438 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](6); 439 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 440 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](7, "td"); 441 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](8); 442 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 443 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 444 | } if (rf & 2) { 445 | const user_r2 = ctx.$implicit; 446 | const i_r3 = ctx.index; 447 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 448 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](i_r3 + 1); 449 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 450 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](user_r2.firstName); 451 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 452 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](user_r2.lastName); 453 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 454 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](user_r2.email); 455 | } } 456 | class UsersComponent { 457 | constructor() { 458 | } 459 | ngOnInit() { 460 | } 461 | } 462 | UsersComponent.ɵfac = function UsersComponent_Factory(t) { return new (t || UsersComponent)(); }; 463 | UsersComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: UsersComponent, selectors: [["app-users"]], inputs: { users: "users" }, decls: 16, vars: 1, consts: [[1, "container"], [1, "table", "table-bordered"], [4, "ngFor", "ngForOf"]], template: function UsersComponent_Template(rf, ctx) { if (rf & 1) { 464 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0); 465 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "h2"); 466 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "Users"); 467 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 468 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "table", 1); 469 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "thead"); 470 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "tr"); 471 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "th"); 472 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](7, "User Id"); 473 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 474 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](8, "th"); 475 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](9, "Firstname"); 476 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 477 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](10, "th"); 478 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](11, "Lastname"); 479 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 480 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](12, "th"); 481 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](13, "Email"); 482 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 483 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 484 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 485 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](14, "tbody"); 486 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](15, UsersComponent_tr_15_Template, 9, 4, "tr", 2); 487 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 488 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 489 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 490 | } if (rf & 2) { 491 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](15); 492 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.users); 493 | } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"]], styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3VzZXJzLmNvbXBvbmVudC5jc3MifQ== */"] }); 494 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](UsersComponent, [{ 495 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 496 | args: [{ 497 | selector: 'app-users', 498 | templateUrl: './users.component.html', 499 | styleUrls: ['./users.component.css'] 500 | }] 501 | }], function () { return []; }, { users: [{ 502 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] 503 | }] }); })(); 504 | 505 | 506 | /***/ }), 507 | 508 | /***/ "./src/environments/environment.ts": 509 | /*!*****************************************!*\ 510 | !*** ./src/environments/environment.ts ***! 511 | \*****************************************/ 512 | /*! exports provided: environment */ 513 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 514 | 515 | "use strict"; 516 | __webpack_require__.r(__webpack_exports__); 517 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "environment", function() { return environment; }); 518 | // This file can be replaced during build by using the `fileReplacements` array. 519 | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. 520 | // The list of file replacements can be found in `angular.json`. 521 | const environment = { 522 | production: false 523 | }; 524 | /* 525 | * For easier debugging in development mode, you can import the following file 526 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 527 | * 528 | * This import should be commented out in production mode because it will have a negative impact 529 | * on performance if an error is thrown. 530 | */ 531 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI. 532 | 533 | 534 | /***/ }), 535 | 536 | /***/ "./src/main.ts": 537 | /*!*********************!*\ 538 | !*** ./src/main.ts ***! 539 | \*********************/ 540 | /*! no exports provided */ 541 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 542 | 543 | "use strict"; 544 | __webpack_require__.r(__webpack_exports__); 545 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 546 | /* harmony import */ var _environments_environment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./environments/environment */ "./src/environments/environment.ts"); 547 | /* harmony import */ var _app_app_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app/app.module */ "./src/app/app.module.ts"); 548 | /* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/platform-browser */ "./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/platform-browser.js"); 549 | 550 | 551 | 552 | 553 | if (_environments_environment__WEBPACK_IMPORTED_MODULE_1__["environment"].production) { 554 | Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["enableProdMode"])(); 555 | } 556 | _angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__["platformBrowser"]().bootstrapModule(_app_app_module__WEBPACK_IMPORTED_MODULE_2__["AppModule"]) 557 | .catch(err => console.error(err)); 558 | 559 | 560 | /***/ }), 561 | 562 | /***/ 0: 563 | /*!***************************!*\ 564 | !*** multi ./src/main.ts ***! 565 | \***************************/ 566 | /*! no static exports found */ 567 | /***/ (function(module, exports, __webpack_require__) { 568 | 569 | module.exports = __webpack_require__(/*! /Users/bhargavbachina/Projects/angular-nodejs-example/my-app/src/main.ts */"./src/main.ts"); 570 | 571 | 572 | /***/ }) 573 | 574 | },[[0,"runtime","vendor"]]]); 575 | //# sourceMappingURL=main-es2015.js.map -------------------------------------------------------------------------------- /app-ui/dist/angular-nodejs-example/main-es2015.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["./$_lazy_route_resource lazy namespace object","./src/app/app-routing.module.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/app/app.service.ts","./src/app/display-board.component.ts","./src/app/display-board.component.html","./src/app/header/header.component.ts","./src/app/header/header.component.html","./src/app/users.component.ts","./src/app/users.component.html","./src/environments/environment.ts","./src/main.ts"],"names":[],"mappings":"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","file":"main-es2015.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./$$_lazy_route_resource lazy recursive\";","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Component, OnDestroy } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { AppService } from './app.service';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.css']\n})\nexport class AppComponent implements OnDestroy {\n\n constructor(private appService: AppService) {}\n\n title = 'angular-nodejs-example';\n\n userForm = new FormGroup({\n firstName: new FormControl('', Validators.nullValidator && Validators.required),\n lastName: new FormControl('', Validators.nullValidator && Validators.required),\n email: new FormControl('', Validators.nullValidator && Validators.required)\n });\n\n users: any[] = [];\n userCount = 0;\n\n destroy$: Subject = new Subject();\n\n onSubmit() {\n\n this.appService.addUser(this.userForm.value).pipe(takeUntil(this.destroy$)).subscribe(data => {\n console.log('message::::', data);\n this.userCount = this.userCount + 1;\n console.log(this.userCount);\n this.userForm.reset();\n });\n }\n\n getAllUsers() {\n this.appService.getUsers().pipe(takeUntil(this.destroy$)).subscribe((users: any[]) => {\n this.users = users;\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n}\n","\n
\n
\n
\n

Create User

\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n \n
\n","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { AppRoutingModule } from './app-routing.module';\nimport { HttpClientModule } from '@angular/common/http';\nimport { AppComponent } from './app.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { HeaderComponent } from './header/header.component';\nimport { DisplayBoardComponent } from './display-board.component';\nimport { UsersComponent } from './users.component';\nimport { environment } from '../environments/environment';\n\n// state related imports\n// import { StoreModule } from '@ngrx/store';\n// import { StoreDevtoolsModule } from '@ngrx/store-devtools';\n// import { reducers, metaReducers } from './app-state/reducers';\n// import { CustomRouterStateSerializer } from './app-state/shared/utils';\n// import { StoreRouterConnectingModule, RouterStateSerializer } from '@ngrx/router-store';\n\n@NgModule({\n declarations: [\n AppComponent,\n HeaderComponent,\n DisplayBoardComponent,\n UsersComponent\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n BrowserAnimationsModule,\n ReactiveFormsModule,\n HttpClientModule,\n /**\n * StoreModule.forRoot is imported once in the root module, accepting a reducer\n * function or object map of reducer functions. If passed an object of\n * reducers, combineReducers will be run creating your application\n * meta-reducer. This returns all providers for an @ngrx/store\n * based application.\n\n StoreModule.forRoot(reducers, { metaReducers }),\n\n /**\n * @ngrx/router-store keeps router state up-to-date in the store.\n\n StoreRouterConnectingModule,\n\n /**\n * Store devtools instrument the store retaining past versions of state\n * and recalculating new states. This enables powerful time-travel\n * debugging.\n *\n * To use the debugger, install the Redux Devtools extension for either\n * Chrome or Firefox\n *\n * See: https://github.com/zalmoxisus/redux-devtools-extension\n\n !environment.production ? StoreDevtoolsModule.instrument() : [],\n\n /**\n * EffectsModule.forRoot() is imported once in the root module and\n * sets up the effects class to be initialized immediately when the\n * application starts.\n *\n * See: https://github.com/ngrx/platform/blob/master/docs/effects/api.md#forroot\n */\n ],\n providers: [],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppService {\n\n constructor(private http: HttpClient) { }\n\n rootURL = '/api';\n\n getUsers() {\n return this.http.get(this.rootURL + '/users');\n }\n\n addUser(user: any) {\n return this.http.post(this.rootURL + '/user', {user});\n }\n\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'app-display-board',\n templateUrl: './display-board.component.html',\n styleUrls: ['./display-board.component.css']\n})\nexport class DisplayBoardComponent implements OnInit {\n\n constructor() { }\n\n @Input() userCount = 0;\n @Output() getUsersEvent = new EventEmitter();\n\n ngOnInit(): void {\n }\n\n getAllUsers() {\n this.getUsersEvent.emit('get all users');\n }\n\n}\n","
\n

Users Created

\n
\n {{userCount}}\n
\n
\n \n
\n
\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-header',\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.css']\n})\nexport class HeaderComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
\n

Angular With NodeJS

\n
\n","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'app-users',\n templateUrl: './users.component.html',\n styleUrls: ['./users.component.css']\n})\nexport class UsersComponent implements OnInit {\n\n constructor() { }\n\n @Input() users: any[];\n\n ngOnInit(): void {\n }\n\n}\n","
\n

Users

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
User IdFirstnameLastnameEmail
{{i + 1}}{{user.firstName}}{{user.lastName}}{{user.email}}
\n
\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n"],"sourceRoot":"webpack:///"} -------------------------------------------------------------------------------- /app-ui/dist/angular-nodejs-example/main-es5.js: -------------------------------------------------------------------------------- 1 | function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 2 | 3 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 4 | 5 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 6 | 7 | (window["webpackJsonp"] = window["webpackJsonp"] || []).push([["main"], { 8 | /***/ 9 | "./$$_lazy_route_resource lazy recursive": 10 | /*!******************************************************!*\ 11 | !*** ./$$_lazy_route_resource lazy namespace object ***! 12 | \******************************************************/ 13 | 14 | /*! no static exports found */ 15 | 16 | /***/ 17 | function $$_lazy_route_resourceLazyRecursive(module, exports) { 18 | function webpackEmptyAsyncContext(req) { 19 | // Here Promise.resolve().then() is used instead of new Promise() to prevent 20 | // uncaught exception popping up in devtools 21 | return Promise.resolve().then(function () { 22 | var e = new Error("Cannot find module '" + req + "'"); 23 | e.code = 'MODULE_NOT_FOUND'; 24 | throw e; 25 | }); 26 | } 27 | 28 | webpackEmptyAsyncContext.keys = function () { 29 | return []; 30 | }; 31 | 32 | webpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext; 33 | module.exports = webpackEmptyAsyncContext; 34 | webpackEmptyAsyncContext.id = "./$$_lazy_route_resource lazy recursive"; 35 | /***/ 36 | }, 37 | 38 | /***/ 39 | "./src/app/app-routing.module.ts": 40 | /*!***************************************!*\ 41 | !*** ./src/app/app-routing.module.ts ***! 42 | \***************************************/ 43 | 44 | /*! exports provided: AppRoutingModule */ 45 | 46 | /***/ 47 | function srcAppAppRoutingModuleTs(module, __webpack_exports__, __webpack_require__) { 48 | "use strict"; 49 | 50 | __webpack_require__.r(__webpack_exports__); 51 | /* harmony export (binding) */ 52 | 53 | 54 | __webpack_require__.d(__webpack_exports__, "AppRoutingModule", function () { 55 | return AppRoutingModule; 56 | }); 57 | /* harmony import */ 58 | 59 | 60 | var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__( 61 | /*! @angular/core */ 62 | "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 63 | /* harmony import */ 64 | 65 | 66 | var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__( 67 | /*! @angular/router */ 68 | "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); 69 | 70 | var routes = []; 71 | 72 | var AppRoutingModule = function AppRoutingModule() { 73 | _classCallCheck(this, AppRoutingModule); 74 | }; 75 | 76 | AppRoutingModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ 77 | type: AppRoutingModule 78 | }); 79 | AppRoutingModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ 80 | factory: function AppRoutingModule_Factory(t) { 81 | return new (t || AppRoutingModule)(); 82 | }, 83 | imports: [[_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"].forRoot(routes)], _angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]] 84 | }); 85 | 86 | (function () { 87 | (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](AppRoutingModule, { 88 | imports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]], 89 | exports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]] 90 | }); 91 | })(); 92 | /*@__PURE__*/ 93 | 94 | 95 | (function () { 96 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AppRoutingModule, [{ 97 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"], 98 | args: [{ 99 | imports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"].forRoot(routes)], 100 | exports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]] 101 | }] 102 | }], null, null); 103 | })(); 104 | /***/ 105 | 106 | }, 107 | 108 | /***/ 109 | "./src/app/app.component.ts": 110 | /*!**********************************!*\ 111 | !*** ./src/app/app.component.ts ***! 112 | \**********************************/ 113 | 114 | /*! exports provided: AppComponent */ 115 | 116 | /***/ 117 | function srcAppAppComponentTs(module, __webpack_exports__, __webpack_require__) { 118 | "use strict"; 119 | 120 | __webpack_require__.r(__webpack_exports__); 121 | /* harmony export (binding) */ 122 | 123 | 124 | __webpack_require__.d(__webpack_exports__, "AppComponent", function () { 125 | return AppComponent; 126 | }); 127 | /* harmony import */ 128 | 129 | 130 | var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__( 131 | /*! @angular/core */ 132 | "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 133 | /* harmony import */ 134 | 135 | 136 | var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__( 137 | /*! @angular/forms */ 138 | "./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); 139 | /* harmony import */ 140 | 141 | 142 | var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__( 143 | /*! rxjs/operators */ 144 | "./node_modules/rxjs/_esm2015/operators/index.js"); 145 | /* harmony import */ 146 | 147 | 148 | var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__( 149 | /*! rxjs */ 150 | "./node_modules/rxjs/_esm2015/index.js"); 151 | /* harmony import */ 152 | 153 | 154 | var _app_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__( 155 | /*! ./app.service */ 156 | "./src/app/app.service.ts"); 157 | /* harmony import */ 158 | 159 | 160 | var _header_header_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__( 161 | /*! ./header/header.component */ 162 | "./src/app/header/header.component.ts"); 163 | /* harmony import */ 164 | 165 | 166 | var _display_board_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__( 167 | /*! ./display-board.component */ 168 | "./src/app/display-board.component.ts"); 169 | /* harmony import */ 170 | 171 | 172 | var _angular_common__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__( 173 | /*! @angular/common */ 174 | "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); 175 | /* harmony import */ 176 | 177 | 178 | var _users_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__( 179 | /*! ./users.component */ 180 | "./src/app/users.component.ts"); 181 | 182 | function AppComponent_app_users_26_Template(rf, ctx) { 183 | if (rf & 1) { 184 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "app-users", 16); 185 | } 186 | 187 | if (rf & 2) { 188 | var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); 189 | 190 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("users", ctx_r0.users); 191 | } 192 | } 193 | 194 | var AppComponent = 195 | /*#__PURE__*/ 196 | function () { 197 | function AppComponent(appService) { 198 | _classCallCheck(this, AppComponent); 199 | 200 | this.appService = appService; 201 | this.title = 'angular-nodejs-example'; 202 | this.userForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]({ 203 | firstName: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].nullValidator && _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required), 204 | lastName: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].nullValidator && _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required), 205 | email: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].nullValidator && _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required) 206 | }); 207 | this.users = []; 208 | this.userCount = 0; 209 | this.destroy$ = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"](); 210 | } 211 | 212 | _createClass(AppComponent, [{ 213 | key: "onSubmit", 214 | value: function onSubmit() { 215 | var _this = this; 216 | 217 | this.appService.addUser(this.userForm.value).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["takeUntil"])(this.destroy$)).subscribe(function (data) { 218 | console.log('message::::', data); 219 | _this.userCount = _this.userCount + 1; 220 | console.log(_this.userCount); 221 | 222 | _this.userForm.reset(); 223 | }); 224 | } 225 | }, { 226 | key: "getAllUsers", 227 | value: function getAllUsers() { 228 | var _this2 = this; 229 | 230 | this.appService.getUsers().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["takeUntil"])(this.destroy$)).subscribe(function (users) { 231 | _this2.users = users; 232 | }); 233 | } 234 | }, { 235 | key: "ngOnDestroy", 236 | value: function ngOnDestroy() { 237 | this.destroy$.next(true); 238 | this.destroy$.unsubscribe(); 239 | } 240 | }]); 241 | 242 | return AppComponent; 243 | }(); 244 | 245 | AppComponent.ɵfac = function AppComponent_Factory(t) { 246 | return new (t || AppComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_app_service__WEBPACK_IMPORTED_MODULE_4__["AppService"])); 247 | }; 248 | 249 | AppComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ 250 | type: AppComponent, 251 | selectors: [["app-root"]], 252 | decls: 27, 253 | vars: 4, 254 | consts: [[1, "container"], [1, "row"], [1, "col-md-7", "mrgnbtm"], [3, "formGroup", "ngSubmit"], [1, "form-group", "col-md-6"], ["for", "exampleInputEmail1"], ["type", "text", "formControlName", "firstName", "id", "exampleInputEmail1", "aria-describedby", "emailHelp", "placeholder", "First Name", 1, "form-control"], ["for", "exampleInputPassword1"], ["type", "text", "formControlName", "lastName", "id", "exampleInputPassword1", "placeholder", "Last Name", 1, "form-control"], [1, "form-group", "col-md-12"], ["type", "text", "formControlName", "email", "id", "exampleInputEmail1", "aria-describedby", "emailHelp", "placeholder", "Email", 1, "form-control"], ["type", "submit", 1, "btn", "btn-danger", 3, "disabled"], [1, "col-md-4", "mrgnbtm"], [3, "userCount", "getUsersEvent"], [1, "mrgnbtm"], [3, "users", 4, "ngIf"], [3, "users"]], 255 | template: function AppComponent_Template(rf, ctx) { 256 | if (rf & 1) { 257 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "app-header"); 258 | 259 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 0); 260 | 261 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "div", 1); 262 | 263 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "div", 2); 264 | 265 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "h2"); 266 | 267 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](5, "Create User"); 268 | 269 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 270 | 271 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "form", 3); 272 | 273 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("ngSubmit", function AppComponent_Template_form_ngSubmit_6_listener() { 274 | return ctx.onSubmit(); 275 | }); 276 | 277 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](7, "div", 1); 278 | 279 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](8, "div", 4); 280 | 281 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](9, "label", 5); 282 | 283 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](10, "First Name"); 284 | 285 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 286 | 287 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](11, "input", 6); 288 | 289 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 290 | 291 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](12, "div", 4); 292 | 293 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](13, "label", 7); 294 | 295 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](14, "Last Name"); 296 | 297 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 298 | 299 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](15, "input", 8); 300 | 301 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 302 | 303 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 304 | 305 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](16, "div", 1); 306 | 307 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](17, "div", 9); 308 | 309 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](18, "label", 5); 310 | 311 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](19, "Email"); 312 | 313 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 314 | 315 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](20, "input", 10); 316 | 317 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 318 | 319 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 320 | 321 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](21, "button", 11); 322 | 323 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](22, "Create"); 324 | 325 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 326 | 327 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 328 | 329 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 330 | 331 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](23, "div", 12); 332 | 333 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](24, "app-display-board", 13); 334 | 335 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("getUsersEvent", function AppComponent_Template_app_display_board_getUsersEvent_24_listener() { 336 | return ctx.getAllUsers(); 337 | }); 338 | 339 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 340 | 341 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 342 | 343 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 344 | 345 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 346 | 347 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](25, "div", 14); 348 | 349 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](26, AppComponent_app_users_26_Template, 1, 1, "app-users", 15); 350 | 351 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 352 | } 353 | 354 | if (rf & 2) { 355 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](6); 356 | 357 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("formGroup", ctx.userForm); 358 | 359 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](15); 360 | 361 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", !ctx.userForm.valid); 362 | 363 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3); 364 | 365 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("userCount", ctx.userCount); 366 | 367 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 368 | 369 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.users.length !== 0); 370 | } 371 | }, 372 | directives: [_header_header_component__WEBPACK_IMPORTED_MODULE_5__["HeaderComponent"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["ɵangular_packages_forms_forms_y"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["NgControlStatusGroup"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroupDirective"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["DefaultValueAccessor"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["NgControlStatus"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControlName"], _display_board_component__WEBPACK_IMPORTED_MODULE_6__["DisplayBoardComponent"], _angular_common__WEBPACK_IMPORTED_MODULE_7__["NgIf"], _users_component__WEBPACK_IMPORTED_MODULE_8__["UsersComponent"]], 373 | styles: [".mrgnbtm[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvYXBwLmNvbXBvbmVudC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxnQkFBZ0I7QUFDbEIiLCJmaWxlIjoic3JjL2FwcC9hcHAuY29tcG9uZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5tcmduYnRtIHtcbiAgbWFyZ2luLXRvcDogMjBweDtcbn1cbiJdfQ== */"] 374 | }); 375 | /*@__PURE__*/ 376 | 377 | (function () { 378 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AppComponent, [{ 379 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 380 | args: [{ 381 | selector: 'app-root', 382 | templateUrl: './app.component.html', 383 | styleUrls: ['./app.component.css'] 384 | }] 385 | }], function () { 386 | return [{ 387 | type: _app_service__WEBPACK_IMPORTED_MODULE_4__["AppService"] 388 | }]; 389 | }, null); 390 | })(); 391 | /***/ 392 | 393 | }, 394 | 395 | /***/ 396 | "./src/app/app.module.ts": 397 | /*!*******************************!*\ 398 | !*** ./src/app/app.module.ts ***! 399 | \*******************************/ 400 | 401 | /*! exports provided: AppModule */ 402 | 403 | /***/ 404 | function srcAppAppModuleTs(module, __webpack_exports__, __webpack_require__) { 405 | "use strict"; 406 | 407 | __webpack_require__.r(__webpack_exports__); 408 | /* harmony export (binding) */ 409 | 410 | 411 | __webpack_require__.d(__webpack_exports__, "AppModule", function () { 412 | return AppModule; 413 | }); 414 | /* harmony import */ 415 | 416 | 417 | var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__( 418 | /*! @angular/platform-browser */ 419 | "./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/platform-browser.js"); 420 | /* harmony import */ 421 | 422 | 423 | var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__( 424 | /*! @angular/core */ 425 | "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 426 | /* harmony import */ 427 | 428 | 429 | var _angular_forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__( 430 | /*! @angular/forms */ 431 | "./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); 432 | /* harmony import */ 433 | 434 | 435 | var _app_routing_module__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__( 436 | /*! ./app-routing.module */ 437 | "./src/app/app-routing.module.ts"); 438 | /* harmony import */ 439 | 440 | 441 | var _angular_common_http__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__( 442 | /*! @angular/common/http */ 443 | "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js"); 444 | /* harmony import */ 445 | 446 | 447 | var _app_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__( 448 | /*! ./app.component */ 449 | "./src/app/app.component.ts"); 450 | /* harmony import */ 451 | 452 | 453 | var _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__( 454 | /*! @angular/platform-browser/animations */ 455 | "./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/animations.js"); 456 | /* harmony import */ 457 | 458 | 459 | var _header_header_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__( 460 | /*! ./header/header.component */ 461 | "./src/app/header/header.component.ts"); 462 | /* harmony import */ 463 | 464 | 465 | var _display_board_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__( 466 | /*! ./display-board.component */ 467 | "./src/app/display-board.component.ts"); 468 | /* harmony import */ 469 | 470 | 471 | var _users_component__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__( 472 | /*! ./users.component */ 473 | "./src/app/users.component.ts"); // state related imports 474 | // import { StoreModule } from '@ngrx/store'; 475 | // import { StoreDevtoolsModule } from '@ngrx/store-devtools'; 476 | // import { reducers, metaReducers } from './app-state/reducers'; 477 | // import { CustomRouterStateSerializer } from './app-state/shared/utils'; 478 | // import { StoreRouterConnectingModule, RouterStateSerializer } from '@ngrx/router-store'; 479 | 480 | 481 | var AppModule = function AppModule() { 482 | _classCallCheck(this, AppModule); 483 | }; 484 | 485 | AppModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({ 486 | type: AppModule, 487 | bootstrap: [_app_component__WEBPACK_IMPORTED_MODULE_5__["AppComponent"]] 488 | }); 489 | AppModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({ 490 | factory: function AppModule_Factory(t) { 491 | return new (t || AppModule)(); 492 | }, 493 | providers: [], 494 | imports: [[_angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__["BrowserModule"], _app_routing_module__WEBPACK_IMPORTED_MODULE_3__["AppRoutingModule"], _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_6__["BrowserAnimationsModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_2__["ReactiveFormsModule"], _angular_common_http__WEBPACK_IMPORTED_MODULE_4__["HttpClientModule"]]] 495 | }); 496 | 497 | (function () { 498 | (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](AppModule, { 499 | declarations: [_app_component__WEBPACK_IMPORTED_MODULE_5__["AppComponent"], _header_header_component__WEBPACK_IMPORTED_MODULE_7__["HeaderComponent"], _display_board_component__WEBPACK_IMPORTED_MODULE_8__["DisplayBoardComponent"], _users_component__WEBPACK_IMPORTED_MODULE_9__["UsersComponent"]], 500 | imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__["BrowserModule"], _app_routing_module__WEBPACK_IMPORTED_MODULE_3__["AppRoutingModule"], _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_6__["BrowserAnimationsModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_2__["ReactiveFormsModule"], _angular_common_http__WEBPACK_IMPORTED_MODULE_4__["HttpClientModule"]] 501 | }); 502 | })(); 503 | /*@__PURE__*/ 504 | 505 | 506 | (function () { 507 | _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](AppModule, [{ 508 | type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"], 509 | args: [{ 510 | declarations: [_app_component__WEBPACK_IMPORTED_MODULE_5__["AppComponent"], _header_header_component__WEBPACK_IMPORTED_MODULE_7__["HeaderComponent"], _display_board_component__WEBPACK_IMPORTED_MODULE_8__["DisplayBoardComponent"], _users_component__WEBPACK_IMPORTED_MODULE_9__["UsersComponent"]], 511 | imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__["BrowserModule"], _app_routing_module__WEBPACK_IMPORTED_MODULE_3__["AppRoutingModule"], _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_6__["BrowserAnimationsModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_2__["ReactiveFormsModule"], _angular_common_http__WEBPACK_IMPORTED_MODULE_4__["HttpClientModule"]], 512 | providers: [], 513 | bootstrap: [_app_component__WEBPACK_IMPORTED_MODULE_5__["AppComponent"]] 514 | }] 515 | }], null, null); 516 | })(); 517 | /***/ 518 | 519 | }, 520 | 521 | /***/ 522 | "./src/app/app.service.ts": 523 | /*!********************************!*\ 524 | !*** ./src/app/app.service.ts ***! 525 | \********************************/ 526 | 527 | /*! exports provided: AppService */ 528 | 529 | /***/ 530 | function srcAppAppServiceTs(module, __webpack_exports__, __webpack_require__) { 531 | "use strict"; 532 | 533 | __webpack_require__.r(__webpack_exports__); 534 | /* harmony export (binding) */ 535 | 536 | 537 | __webpack_require__.d(__webpack_exports__, "AppService", function () { 538 | return AppService; 539 | }); 540 | /* harmony import */ 541 | 542 | 543 | var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__( 544 | /*! @angular/core */ 545 | "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 546 | /* harmony import */ 547 | 548 | 549 | var _angular_common_http__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__( 550 | /*! @angular/common/http */ 551 | "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js"); 552 | 553 | var AppService = 554 | /*#__PURE__*/ 555 | function () { 556 | function AppService(http) { 557 | _classCallCheck(this, AppService); 558 | 559 | this.http = http; 560 | this.rootURL = '/api'; 561 | } 562 | 563 | _createClass(AppService, [{ 564 | key: "getUsers", 565 | value: function getUsers() { 566 | return this.http.get(this.rootURL + '/users'); 567 | } 568 | }, { 569 | key: "addUser", 570 | value: function addUser(user) { 571 | return this.http.post(this.rootURL + '/user', { 572 | user: user 573 | }); 574 | } 575 | }]); 576 | 577 | return AppService; 578 | }(); 579 | 580 | AppService.ɵfac = function AppService_Factory(t) { 581 | return new (t || AppService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common_http__WEBPACK_IMPORTED_MODULE_1__["HttpClient"])); 582 | }; 583 | 584 | AppService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ 585 | token: AppService, 586 | factory: AppService.ɵfac, 587 | providedIn: 'root' 588 | }); 589 | /*@__PURE__*/ 590 | 591 | (function () { 592 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AppService, [{ 593 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"], 594 | args: [{ 595 | providedIn: 'root' 596 | }] 597 | }], function () { 598 | return [{ 599 | type: _angular_common_http__WEBPACK_IMPORTED_MODULE_1__["HttpClient"] 600 | }]; 601 | }, null); 602 | })(); 603 | /***/ 604 | 605 | }, 606 | 607 | /***/ 608 | "./src/app/display-board.component.ts": 609 | /*!********************************************!*\ 610 | !*** ./src/app/display-board.component.ts ***! 611 | \********************************************/ 612 | 613 | /*! exports provided: DisplayBoardComponent */ 614 | 615 | /***/ 616 | function srcAppDisplayBoardComponentTs(module, __webpack_exports__, __webpack_require__) { 617 | "use strict"; 618 | 619 | __webpack_require__.r(__webpack_exports__); 620 | /* harmony export (binding) */ 621 | 622 | 623 | __webpack_require__.d(__webpack_exports__, "DisplayBoardComponent", function () { 624 | return DisplayBoardComponent; 625 | }); 626 | /* harmony import */ 627 | 628 | 629 | var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__( 630 | /*! @angular/core */ 631 | "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 632 | 633 | var DisplayBoardComponent = 634 | /*#__PURE__*/ 635 | function () { 636 | function DisplayBoardComponent() { 637 | _classCallCheck(this, DisplayBoardComponent); 638 | 639 | this.userCount = 0; 640 | this.getUsersEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](); 641 | } 642 | 643 | _createClass(DisplayBoardComponent, [{ 644 | key: "ngOnInit", 645 | value: function ngOnInit() {} 646 | }, { 647 | key: "getAllUsers", 648 | value: function getAllUsers() { 649 | this.getUsersEvent.emit('get all users'); 650 | } 651 | }]); 652 | 653 | return DisplayBoardComponent; 654 | }(); 655 | 656 | DisplayBoardComponent.ɵfac = function DisplayBoardComponent_Factory(t) { 657 | return new (t || DisplayBoardComponent)(); 658 | }; 659 | 660 | DisplayBoardComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ 661 | type: DisplayBoardComponent, 662 | selectors: [["app-display-board"]], 663 | inputs: { 664 | userCount: "userCount" 665 | }, 666 | outputs: { 667 | getUsersEvent: "getUsersEvent" 668 | }, 669 | decls: 8, 670 | vars: 1, 671 | consts: [[1, "display-board"], [1, "number"], [1, "btn"], [1, "btn", "btn-warning", 3, "click"]], 672 | template: function DisplayBoardComponent_Template(rf, ctx) { 673 | if (rf & 1) { 674 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0); 675 | 676 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "h4"); 677 | 678 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "Users Created"); 679 | 680 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 681 | 682 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "div", 1); 683 | 684 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4); 685 | 686 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 687 | 688 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "div", 2); 689 | 690 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "button", 3); 691 | 692 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function DisplayBoardComponent_Template_button_click_6_listener() { 693 | return ctx.getAllUsers(); 694 | }); 695 | 696 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](7, "Get All Users"); 697 | 698 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 699 | 700 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 701 | 702 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 703 | } 704 | 705 | if (rf & 2) { 706 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4); 707 | 708 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", ctx.userCount, " "); 709 | } 710 | }, 711 | styles: [".display-board[_ngcontent-%COMP%] {\n width: 100%;\n background-color: rgb(193, 236, 112);\n padding: 5%;\n}\n\n.number[_ngcontent-%COMP%] {\n color: red;\n font-size: 75px;\n text-align: center;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvZGlzcGxheS1ib2FyZC5jb21wb25lbnQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVztFQUNYLG9DQUFvQztFQUNwQyxXQUFXO0FBQ2I7O0FBRUE7RUFDRSxVQUFVO0VBQ1YsZUFBZTtFQUNmLGtCQUFrQjtBQUNwQiIsImZpbGUiOiJzcmMvYXBwL2Rpc3BsYXktYm9hcmQuY29tcG9uZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5kaXNwbGF5LWJvYXJkIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigxOTMsIDIzNiwgMTEyKTtcbiAgcGFkZGluZzogNSU7XG59XG5cbi5udW1iZXIge1xuICBjb2xvcjogcmVkO1xuICBmb250LXNpemU6IDc1cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiJdfQ== */"] 712 | }); 713 | /*@__PURE__*/ 714 | 715 | (function () { 716 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DisplayBoardComponent, [{ 717 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 718 | args: [{ 719 | selector: 'app-display-board', 720 | templateUrl: './display-board.component.html', 721 | styleUrls: ['./display-board.component.css'] 722 | }] 723 | }], function () { 724 | return []; 725 | }, { 726 | userCount: [{ 727 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] 728 | }], 729 | getUsersEvent: [{ 730 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] 731 | }] 732 | }); 733 | })(); 734 | /***/ 735 | 736 | }, 737 | 738 | /***/ 739 | "./src/app/header/header.component.ts": 740 | /*!********************************************!*\ 741 | !*** ./src/app/header/header.component.ts ***! 742 | \********************************************/ 743 | 744 | /*! exports provided: HeaderComponent */ 745 | 746 | /***/ 747 | function srcAppHeaderHeaderComponentTs(module, __webpack_exports__, __webpack_require__) { 748 | "use strict"; 749 | 750 | __webpack_require__.r(__webpack_exports__); 751 | /* harmony export (binding) */ 752 | 753 | 754 | __webpack_require__.d(__webpack_exports__, "HeaderComponent", function () { 755 | return HeaderComponent; 756 | }); 757 | /* harmony import */ 758 | 759 | 760 | var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__( 761 | /*! @angular/core */ 762 | "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 763 | 764 | var HeaderComponent = 765 | /*#__PURE__*/ 766 | function () { 767 | function HeaderComponent() { 768 | _classCallCheck(this, HeaderComponent); 769 | } 770 | 771 | _createClass(HeaderComponent, [{ 772 | key: "ngOnInit", 773 | value: function ngOnInit() {} 774 | }]); 775 | 776 | return HeaderComponent; 777 | }(); 778 | 779 | HeaderComponent.ɵfac = function HeaderComponent_Factory(t) { 780 | return new (t || HeaderComponent)(); 781 | }; 782 | 783 | HeaderComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ 784 | type: HeaderComponent, 785 | selectors: [["app-header"]], 786 | decls: 3, 787 | vars: 0, 788 | consts: [[1, "header"]], 789 | template: function HeaderComponent_Template(rf, ctx) { 790 | if (rf & 1) { 791 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0); 792 | 793 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "h1"); 794 | 795 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "Angular With NodeJS"); 796 | 797 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 798 | 799 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 800 | } 801 | }, 802 | styles: [".header[_ngcontent-%COMP%] {\n width: 100%;\n padding: 2%;\n background-color: blueviolet;\n color: white;\n text-align: center;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVztFQUNYLFdBQVc7RUFDWCw0QkFBNEI7RUFDNUIsWUFBWTtFQUNaLGtCQUFrQjtBQUNwQiIsImZpbGUiOiJzcmMvYXBwL2hlYWRlci9oZWFkZXIuY29tcG9uZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5oZWFkZXIge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMiU7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsdWV2aW9sZXQ7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuIl19 */"] 803 | }); 804 | /*@__PURE__*/ 805 | 806 | (function () { 807 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HeaderComponent, [{ 808 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 809 | args: [{ 810 | selector: 'app-header', 811 | templateUrl: './header.component.html', 812 | styleUrls: ['./header.component.css'] 813 | }] 814 | }], function () { 815 | return []; 816 | }, null); 817 | })(); 818 | /***/ 819 | 820 | }, 821 | 822 | /***/ 823 | "./src/app/users.component.ts": 824 | /*!************************************!*\ 825 | !*** ./src/app/users.component.ts ***! 826 | \************************************/ 827 | 828 | /*! exports provided: UsersComponent */ 829 | 830 | /***/ 831 | function srcAppUsersComponentTs(module, __webpack_exports__, __webpack_require__) { 832 | "use strict"; 833 | 834 | __webpack_require__.r(__webpack_exports__); 835 | /* harmony export (binding) */ 836 | 837 | 838 | __webpack_require__.d(__webpack_exports__, "UsersComponent", function () { 839 | return UsersComponent; 840 | }); 841 | /* harmony import */ 842 | 843 | 844 | var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__( 845 | /*! @angular/core */ 846 | "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 847 | /* harmony import */ 848 | 849 | 850 | var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__( 851 | /*! @angular/common */ 852 | "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); 853 | 854 | function UsersComponent_tr_15_Template(rf, ctx) { 855 | if (rf & 1) { 856 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "tr"); 857 | 858 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "td"); 859 | 860 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2); 861 | 862 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 863 | 864 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "td"); 865 | 866 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4); 867 | 868 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 869 | 870 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "td"); 871 | 872 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](6); 873 | 874 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 875 | 876 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](7, "td"); 877 | 878 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](8); 879 | 880 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 881 | 882 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 883 | } 884 | 885 | if (rf & 2) { 886 | var user_r2 = ctx.$implicit; 887 | var i_r3 = ctx.index; 888 | 889 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 890 | 891 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](i_r3 + 1); 892 | 893 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 894 | 895 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](user_r2.firstName); 896 | 897 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 898 | 899 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](user_r2.lastName); 900 | 901 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 902 | 903 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](user_r2.email); 904 | } 905 | } 906 | 907 | var UsersComponent = 908 | /*#__PURE__*/ 909 | function () { 910 | function UsersComponent() { 911 | _classCallCheck(this, UsersComponent); 912 | } 913 | 914 | _createClass(UsersComponent, [{ 915 | key: "ngOnInit", 916 | value: function ngOnInit() {} 917 | }]); 918 | 919 | return UsersComponent; 920 | }(); 921 | 922 | UsersComponent.ɵfac = function UsersComponent_Factory(t) { 923 | return new (t || UsersComponent)(); 924 | }; 925 | 926 | UsersComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ 927 | type: UsersComponent, 928 | selectors: [["app-users"]], 929 | inputs: { 930 | users: "users" 931 | }, 932 | decls: 16, 933 | vars: 1, 934 | consts: [[1, "container"], [1, "table", "table-bordered"], [4, "ngFor", "ngForOf"]], 935 | template: function UsersComponent_Template(rf, ctx) { 936 | if (rf & 1) { 937 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0); 938 | 939 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "h2"); 940 | 941 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "Users"); 942 | 943 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 944 | 945 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "table", 1); 946 | 947 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "thead"); 948 | 949 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "tr"); 950 | 951 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "th"); 952 | 953 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](7, "User Id"); 954 | 955 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 956 | 957 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](8, "th"); 958 | 959 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](9, "Firstname"); 960 | 961 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 962 | 963 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](10, "th"); 964 | 965 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](11, "Lastname"); 966 | 967 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 968 | 969 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](12, "th"); 970 | 971 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](13, "Email"); 972 | 973 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 974 | 975 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 976 | 977 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 978 | 979 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](14, "tbody"); 980 | 981 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](15, UsersComponent_tr_15_Template, 9, 4, "tr", 2); 982 | 983 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 984 | 985 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 986 | 987 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 988 | } 989 | 990 | if (rf & 2) { 991 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](15); 992 | 993 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.users); 994 | } 995 | }, 996 | directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"]], 997 | styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3VzZXJzLmNvbXBvbmVudC5jc3MifQ== */"] 998 | }); 999 | /*@__PURE__*/ 1000 | 1001 | (function () { 1002 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](UsersComponent, [{ 1003 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 1004 | args: [{ 1005 | selector: 'app-users', 1006 | templateUrl: './users.component.html', 1007 | styleUrls: ['./users.component.css'] 1008 | }] 1009 | }], function () { 1010 | return []; 1011 | }, { 1012 | users: [{ 1013 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] 1014 | }] 1015 | }); 1016 | })(); 1017 | /***/ 1018 | 1019 | }, 1020 | 1021 | /***/ 1022 | "./src/environments/environment.ts": 1023 | /*!*****************************************!*\ 1024 | !*** ./src/environments/environment.ts ***! 1025 | \*****************************************/ 1026 | 1027 | /*! exports provided: environment */ 1028 | 1029 | /***/ 1030 | function srcEnvironmentsEnvironmentTs(module, __webpack_exports__, __webpack_require__) { 1031 | "use strict"; 1032 | 1033 | __webpack_require__.r(__webpack_exports__); 1034 | /* harmony export (binding) */ 1035 | 1036 | 1037 | __webpack_require__.d(__webpack_exports__, "environment", function () { 1038 | return environment; 1039 | }); // This file can be replaced during build by using the `fileReplacements` array. 1040 | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. 1041 | // The list of file replacements can be found in `angular.json`. 1042 | 1043 | 1044 | var environment = { 1045 | production: false 1046 | }; 1047 | /* 1048 | * For easier debugging in development mode, you can import the following file 1049 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 1050 | * 1051 | * This import should be commented out in production mode because it will have a negative impact 1052 | * on performance if an error is thrown. 1053 | */ 1054 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI. 1055 | 1056 | /***/ 1057 | }, 1058 | 1059 | /***/ 1060 | "./src/main.ts": 1061 | /*!*********************!*\ 1062 | !*** ./src/main.ts ***! 1063 | \*********************/ 1064 | 1065 | /*! no exports provided */ 1066 | 1067 | /***/ 1068 | function srcMainTs(module, __webpack_exports__, __webpack_require__) { 1069 | "use strict"; 1070 | 1071 | __webpack_require__.r(__webpack_exports__); 1072 | /* harmony import */ 1073 | 1074 | 1075 | var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__( 1076 | /*! @angular/core */ 1077 | "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 1078 | /* harmony import */ 1079 | 1080 | 1081 | var _environments_environment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__( 1082 | /*! ./environments/environment */ 1083 | "./src/environments/environment.ts"); 1084 | /* harmony import */ 1085 | 1086 | 1087 | var _app_app_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__( 1088 | /*! ./app/app.module */ 1089 | "./src/app/app.module.ts"); 1090 | /* harmony import */ 1091 | 1092 | 1093 | var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__( 1094 | /*! @angular/platform-browser */ 1095 | "./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/platform-browser.js"); 1096 | 1097 | if (_environments_environment__WEBPACK_IMPORTED_MODULE_1__["environment"].production) { 1098 | Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["enableProdMode"])(); 1099 | } 1100 | 1101 | _angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__["platformBrowser"]().bootstrapModule(_app_app_module__WEBPACK_IMPORTED_MODULE_2__["AppModule"]).catch(function (err) { 1102 | return console.error(err); 1103 | }); 1104 | /***/ 1105 | 1106 | }, 1107 | 1108 | /***/ 1109 | 0: 1110 | /*!***************************!*\ 1111 | !*** multi ./src/main.ts ***! 1112 | \***************************/ 1113 | 1114 | /*! no static exports found */ 1115 | 1116 | /***/ 1117 | function _(module, exports, __webpack_require__) { 1118 | module.exports = __webpack_require__( 1119 | /*! /Users/bhargavbachina/Projects/angular-nodejs-example/my-app/src/main.ts */ 1120 | "./src/main.ts"); 1121 | /***/ 1122 | } 1123 | }, [[0, "runtime", "vendor"]]]); 1124 | //# sourceMappingURL=main-es5.js.map -------------------------------------------------------------------------------- /app-ui/dist/angular-nodejs-example/main-es5.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///$_lazy_route_resource lazy namespace object","webpack:///src/app/app-routing.module.ts","webpack:///src/app/app.component.ts","webpack:///src/app/app.component.html","webpack:///src/app/app.module.ts","webpack:///src/app/app.service.ts","webpack:///src/app/display-board.component.ts","webpack:///src/app/display-board.component.html","webpack:///src/app/header/header.component.ts","webpack:///src/app/header/header.component.html","webpack:///src/app/users.component.ts","webpack:///src/app/users.component.html","webpack:///src/environments/environment.ts","webpack:///src/main.ts"],"names":["webpackEmptyAsyncContext","req","Promise","resolve","then","e","Error","code","keys","module","exports","id","routes","AppRoutingModule","forRoot","imports","AppComponent","appService","title","userForm","firstName","nullValidator","required","lastName","email","users","userCount","destroy$","addUser","value","pipe","subscribe","data","console","log","reset","getUsers","next","unsubscribe","onSubmit","getAllUsers","selector","templateUrl","styleUrls","AppModule","declarations","providers","bootstrap","AppService","http","rootURL","get","user","post","providedIn","DisplayBoardComponent","getUsersEvent","emit","HeaderComponent","UsersComponent","environment","production","bootstrapModule","catch","err","error"],"mappings":";;;;;;;;;;;;;;;;;AAAA,aAASA,wBAAT,CAAkCC,GAAlC,EAAuC;AACtC;AACA;AACA,aAAOC,OAAO,CAACC,OAAR,GAAkBC,IAAlB,CAAuB,YAAW;AACxC,YAAIC,CAAC,GAAG,IAAIC,KAAJ,CAAU,yBAAyBL,GAAzB,GAA+B,GAAzC,CAAR;AACAI,SAAC,CAACE,IAAF,GAAS,kBAAT;AACA,cAAMF,CAAN;AACA,OAJM,CAAP;AAKA;;AACDL,4BAAwB,CAACQ,IAAzB,GAAgC,YAAW;AAAE,aAAO,EAAP;AAAY,KAAzD;;AACAR,4BAAwB,CAACG,OAAzB,GAAmCH,wBAAnC;AACAS,UAAM,CAACC,OAAP,GAAiBV,wBAAjB;AACAA,4BAAwB,CAACW,EAAzB,GAA8B,yCAA9B;;;;;;;;;;;;;;;;ACZA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAIA,QAAMC,MAAM,GAAW,EAAvB;;QAMaC,gB;;;;;YAAAA;;;;yBAAAA,gB;AAAgB,O;AAAA,gBAHlB,CAAC,6DAAaC,OAAb,CAAqBF,MAArB,CAAD,CAGkB,EAFjB,4DAEiB;;;;0HAAhBC,gB,EAAgB;AAAA;AAAA,kBAFjB,4DAEiB;AAAA,O;AAFL,K;;;;;sEAEXA,gB,EAAgB;cAJ5B,sDAI4B;eAJnB;AACRE,iBAAO,EAAE,CAAC,6DAAaD,OAAb,CAAqBF,MAArB,CAAD,CADD;AAERF,iBAAO,EAAE,CAAC,4DAAD;AAFD,S;AAImB,Q;;;;;;;;;;;;;;;;;;ACV7B;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;;;ACmCE;;;;;;AAAsC;;;;QDxB3BM,Y;;;AAEX,4BAAoBC,UAApB,EAA4C;AAAA;;AAAxB,aAAAA,UAAA,GAAAA,UAAA;AAEpB,aAAAC,KAAA,GAAQ,wBAAR;AAEA,aAAAC,QAAA,GAAW,IAAI,wDAAJ,CAAc;AACvBC,mBAAS,EAAE,IAAI,0DAAJ,CAAgB,EAAhB,EAAoB,0DAAWC,aAAX,IAA4B,0DAAWC,QAA3D,CADY;AAEvBC,kBAAQ,EAAE,IAAI,0DAAJ,CAAgB,EAAhB,EAAoB,0DAAWF,aAAX,IAA4B,0DAAWC,QAA3D,CAFa;AAGvBE,eAAK,EAAE,IAAI,0DAAJ,CAAgB,EAAhB,EAAoB,0DAAWH,aAAX,IAA4B,0DAAWC,QAA3D;AAHgB,SAAd,CAAX;AAMA,aAAAG,KAAA,GAAe,EAAf;AACA,aAAAC,SAAA,GAAY,CAAZ;AAEA,aAAAC,QAAA,GAA6B,IAAI,4CAAJ,EAA7B;AAb8C;;;;mCAenC;AAAA;;AAET,eAAKV,UAAL,CAAgBW,OAAhB,CAAwB,KAAKT,QAAL,CAAcU,KAAtC,EAA6CC,IAA7C,CAAkD,iEAAU,KAAKH,QAAf,CAAlD,EAA4EI,SAA5E,CAAsF,UAAAC,IAAI,EAAI;AAC5FC,mBAAO,CAACC,GAAR,CAAY,aAAZ,EAA2BF,IAA3B;AACA,iBAAI,CAACN,SAAL,GAAiB,KAAI,CAACA,SAAL,GAAiB,CAAlC;AACAO,mBAAO,CAACC,GAAR,CAAY,KAAI,CAACR,SAAjB;;AACA,iBAAI,CAACP,QAAL,CAAcgB,KAAd;AACD,WALD;AAMD;;;sCAEa;AAAA;;AACZ,eAAKlB,UAAL,CAAgBmB,QAAhB,GAA2BN,IAA3B,CAAgC,iEAAU,KAAKH,QAAf,CAAhC,EAA0DI,SAA1D,CAAoE,UAACN,KAAD,EAAkB;AAClF,kBAAI,CAACA,KAAL,GAAaA,KAAb;AACH,WAFD;AAGD;;;sCAEa;AACZ,eAAKE,QAAL,CAAcU,IAAd,CAAmB,IAAnB;AACA,eAAKV,QAAL,CAAcW,WAAd;AACD;;;;;;;uBApCUtB,Y,EAAY,wH;AAAA,K;;;YAAZA,Y;AAAY,+B;AAAA,e;AAAA,a;AAAA,20B;AAAA;AAAA;ACXzB;;AACA;;AACE;;AACE;;AACE;;AAAI;;AAAW;;AACf;;AAA6B;AAAA,mBAAY,IAAAuB,QAAA,EAAZ;AAAsB,WAAtB;;AAC3B;;AACE;;AACE;;AAAgC;;AAAU;;AAC1C;;AACF;;AACA;;AACE;;AAAmC;;AAAS;;AAC5C;;AACF;;AACF;;AACA;;AACE;;AACE;;AAAgC;;AAAK;;AACrC;;AACF;;AACF;;AACA;;AAA0E;;AAAM;;AAClF;;AACF;;AACA;;AACE;;AAEC;AAAA,mBAAiB,IAAAC,WAAA,EAAjB;AAA8B,WAA9B;;AAED;;AACF;;AACF;;AACF;;AACA;;AACE;;AACF;;;;AA/BY;;AAAA;;AAiBkB;;AAAA;;AAKvB;;AAAA;;AAQM;;AAAA;;;;;;;;;sEDxBAxB,Y,EAAY;cALxB,uDAKwB;eALd;AACTyB,kBAAQ,EAAE,UADD;AAETC,qBAAW,EAAE,sBAFJ;AAGTC,mBAAS,EAAE,CAAC,qBAAD;AAHF,S;AAKc,Q;;;;;;;;;;;;;;;;;;;;;;AEXzB;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA,oC,CAaA;AACA;AACA;AACA;AACA;AACA;;;QAoDaC,S;;;;;YAAAA,S;AAAS,kBAFR,2DAEQ;;;;yBAATA,S;AAAS,O;AAAA,iBAHT,E;AAAE,gBAxCJ,CACP,uEADO,EAEP,oEAFO,EAGP,4FAHO,EAIP,kEAJO,EAKP,qEALO,CAwCI;;;;0HAGFA,S,EAAS;AAAA,uBAhDlB,2DAgDkB,EA/ClB,wEA+CkB,EA9ClB,8EA8CkB,EA7ClB,+DA6CkB;AA7CJ,kBAGd,uEAHc,EAId,oEAJc,EAKd,4FALc,EAMd,kEANc,EAOd,qEAPc;AA6CI,O;AAtCF,K;;;;;sEAsCPA,S,EAAS;cAlDrB,sDAkDqB;eAlDZ;AACRC,sBAAY,EAAE,CACZ,2DADY,EAEZ,wEAFY,EAGZ,8EAHY,EAIZ,+DAJY,CADN;AAOR9B,iBAAO,EAAE,CACP,uEADO,EAEP,oEAFO,EAGP,4FAHO,EAIP,kEAJO,EAKP,qEALO,CAPD;AA+CR+B,mBAAS,EAAE,EA/CH;AAgDRC,mBAAS,EAAE,CAAC,2DAAD;AAhDH,S;AAkDY,Q;;;;;;;;;;;;;;;;;;ACtEtB;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;QAMaC,U;;;AAEX,0BAAoBC,IAApB,EAAsC;AAAA;;AAAlB,aAAAA,IAAA,GAAAA,IAAA;AAEpB,aAAAC,OAAA,GAAU,MAAV;AAFyC;;;;mCAI9B;AACT,iBAAO,KAAKD,IAAL,CAAUE,GAAV,CAAc,KAAKD,OAAL,GAAe,QAA7B,CAAP;AACD;;;gCAEOE,I,EAAW;AACjB,iBAAO,KAAKH,IAAL,CAAUI,IAAV,CAAe,KAAKH,OAAL,GAAe,OAA9B,EAAuC;AAACE,gBAAI,EAAJA;AAAD,WAAvC,CAAP;AACD;;;;;;;uBAZUJ,U,EAAU,uH;AAAA,K;;;aAAVA,U;AAAU,eAAVA,UAAU,K;AAAA,kBAFT;;;;;sEAEDA,U,EAAU;cAHtB,wDAGsB;eAHX;AACVM,oBAAU,EAAE;AADF,S;AAGW,Q;;;;;;;;;;;;;;;;;;;;;;ACNvB;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;QAOaC,qB;;;AAEX,uCAAc;AAAA;;AAEL,aAAA7B,SAAA,GAAY,CAAZ;AACC,aAAA8B,aAAA,GAAgB,IAAI,0DAAJ,EAAhB;AAHO;;;;mCAKT,CACP;;;sCAEa;AACZ,eAAKA,aAAL,CAAmBC,IAAnB,CAAwB,eAAxB;AACD;;;;;;;uBAZUF,qB;AAAqB,K;;;YAArBA,qB;AAAqB,wC;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,c;AAAA,a;AAAA,sG;AAAA;AAAA;ACPlC;;AACE;;AAAI;;AAAa;;AACjB;;AACE;;AACF;;AACA;;AACE;;AAAgC;AAAA,mBAAS,IAAAf,WAAA,EAAT;AAAsB,WAAtB;;AAAwB;;AAAa;;AACvE;;AACF;;;;AALI;;AAAA;;;;;;;;sEDISe,qB,EAAqB;cALjC,uDAKiC;eALvB;AACTd,kBAAQ,EAAE,mBADD;AAETC,qBAAW,EAAE,gCAFJ;AAGTC,mBAAS,EAAE,CAAC,+BAAD;AAHF,S;AAKuB,Q;;;;gBAI/B;;;gBACA;;;;;;;;;;;;;;;;;;;;AEZH;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;QAOae,e;;;AAEX,iCAAc;AAAA;AAAG;;;;mCAET,CACP;;;;;;;uBALUA,e;AAAe,K;;;YAAfA,e;AAAe,iC;AAAA,c;AAAA,a;AAAA,6B;AAAA;AAAA;ACP5B;;AACE;;AAAI;;AAAmB;;AACzB;;;;;;;;sEDKaA,e,EAAe;cAL3B,uDAK2B;eALjB;AACTjB,kBAAQ,EAAE,YADD;AAETC,qBAAW,EAAE,yBAFJ;AAGTC,mBAAS,EAAE,CAAC,wBAAD;AAHF,S;AAKiB,Q;;;;;;;;;;;;;;;;;;;;AEP5B;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;;;ACYM;;AACE;;AAAI;;AAAS;;AACb;;AAAI;;AAAkB;;AACtB;;AAAI;;AAAiB;;AACrB;;AAAI;;AAAc;;AACpB;;;;;;;AAJM;;AAAA;;AACA;;AAAA;;AACA;;AAAA;;AACA;;AAAA;;;;QDTCgB,c;;;AAEX,gCAAc;AAAA;AAAG;;;;mCAIT,CACP;;;;;;;uBAPUA,c;AAAc,K;;;YAAdA,c;AAAc,gC;AAAA;AAAA;AAAA,O;AAAA,e;AAAA,a;AAAA,yF;AAAA;AAAA;ACP3B;;AACE;;AAAI;;AAAK;;AACT;;AACE;;AACE;;AACE;;AAAI;;AAAO;;AACX;;AAAI;;AAAS;;AACb;;AAAI;;AAAQ;;AACZ;;AAAI;;AAAK;;AACX;;AACF;;AACA;;AACE;;AAMF;;AACF;;AACF;;;;AARU;;AAAA;;;;;;;;;sEDLGA,c,EAAc;cAL1B,uDAK0B;eALhB;AACTlB,kBAAQ,EAAE,WADD;AAETC,qBAAW,EAAE,wBAFJ;AAGTC,mBAAS,EAAE,CAAC,uBAAD;AAHF,S;AAKgB,Q;;;;gBAIxB;;;;;;;;;;;;;;;;;;;;AEXH;AAAA;;;AAAA;AAAA;AAAA,O,CAAA;AACA;AACA;;;AAEO,QAAMiB,WAAW,GAAG;AACzBC,gBAAU,EAAE;AADa,KAApB;AAIP;;;;;;;AAOA;;;;;;;;;;;;;;;;;ACfA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAMA,QAAI,sEAAYA,UAAhB,EAA4B;AAC1B;AACD;;AAED,gFAAyBC,eAAzB,CAAyC,yDAAzC,EACGC,KADH,CACS,UAAAC,GAAG;AAAA,aAAI/B,OAAO,CAACgC,KAAR,CAAcD,GAAd,CAAJ;AAAA,KADZ","file":"main-es5.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./$$_lazy_route_resource lazy recursive\";","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Component, OnDestroy } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { AppService } from './app.service';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.css']\n})\nexport class AppComponent implements OnDestroy {\n\n constructor(private appService: AppService) {}\n\n title = 'angular-nodejs-example';\n\n userForm = new FormGroup({\n firstName: new FormControl('', Validators.nullValidator && Validators.required),\n lastName: new FormControl('', Validators.nullValidator && Validators.required),\n email: new FormControl('', Validators.nullValidator && Validators.required)\n });\n\n users: any[] = [];\n userCount = 0;\n\n destroy$: Subject = new Subject();\n\n onSubmit() {\n\n this.appService.addUser(this.userForm.value).pipe(takeUntil(this.destroy$)).subscribe(data => {\n console.log('message::::', data);\n this.userCount = this.userCount + 1;\n console.log(this.userCount);\n this.userForm.reset();\n });\n }\n\n getAllUsers() {\n this.appService.getUsers().pipe(takeUntil(this.destroy$)).subscribe((users: any[]) => {\n this.users = users;\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n}\n","\n
\n
\n
\n

Create User

\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n \n
\n","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { AppRoutingModule } from './app-routing.module';\nimport { HttpClientModule } from '@angular/common/http';\nimport { AppComponent } from './app.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { HeaderComponent } from './header/header.component';\nimport { DisplayBoardComponent } from './display-board.component';\nimport { UsersComponent } from './users.component';\nimport { environment } from '../environments/environment';\n\n// state related imports\n// import { StoreModule } from '@ngrx/store';\n// import { StoreDevtoolsModule } from '@ngrx/store-devtools';\n// import { reducers, metaReducers } from './app-state/reducers';\n// import { CustomRouterStateSerializer } from './app-state/shared/utils';\n// import { StoreRouterConnectingModule, RouterStateSerializer } from '@ngrx/router-store';\n\n@NgModule({\n declarations: [\n AppComponent,\n HeaderComponent,\n DisplayBoardComponent,\n UsersComponent\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n BrowserAnimationsModule,\n ReactiveFormsModule,\n HttpClientModule,\n /**\n * StoreModule.forRoot is imported once in the root module, accepting a reducer\n * function or object map of reducer functions. If passed an object of\n * reducers, combineReducers will be run creating your application\n * meta-reducer. This returns all providers for an @ngrx/store\n * based application.\n\n StoreModule.forRoot(reducers, { metaReducers }),\n\n /**\n * @ngrx/router-store keeps router state up-to-date in the store.\n\n StoreRouterConnectingModule,\n\n /**\n * Store devtools instrument the store retaining past versions of state\n * and recalculating new states. This enables powerful time-travel\n * debugging.\n *\n * To use the debugger, install the Redux Devtools extension for either\n * Chrome or Firefox\n *\n * See: https://github.com/zalmoxisus/redux-devtools-extension\n\n !environment.production ? StoreDevtoolsModule.instrument() : [],\n\n /**\n * EffectsModule.forRoot() is imported once in the root module and\n * sets up the effects class to be initialized immediately when the\n * application starts.\n *\n * See: https://github.com/ngrx/platform/blob/master/docs/effects/api.md#forroot\n */\n ],\n providers: [],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppService {\n\n constructor(private http: HttpClient) { }\n\n rootURL = '/api';\n\n getUsers() {\n return this.http.get(this.rootURL + '/users');\n }\n\n addUser(user: any) {\n return this.http.post(this.rootURL + '/user', {user});\n }\n\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'app-display-board',\n templateUrl: './display-board.component.html',\n styleUrls: ['./display-board.component.css']\n})\nexport class DisplayBoardComponent implements OnInit {\n\n constructor() { }\n\n @Input() userCount = 0;\n @Output() getUsersEvent = new EventEmitter();\n\n ngOnInit(): void {\n }\n\n getAllUsers() {\n this.getUsersEvent.emit('get all users');\n }\n\n}\n","
\n

Users Created

\n
\n {{userCount}}\n
\n
\n \n
\n
\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-header',\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.css']\n})\nexport class HeaderComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
\n

Angular With NodeJS

\n
\n","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'app-users',\n templateUrl: './users.component.html',\n styleUrls: ['./users.component.css']\n})\nexport class UsersComponent implements OnInit {\n\n constructor() { }\n\n @Input() users: any[];\n\n ngOnInit(): void {\n }\n\n}\n","
\n

Users

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
User IdFirstnameLastnameEmail
{{i + 1}}{{user.firstName}}{{user.lastName}}{{user.email}}
\n
\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n"]} -------------------------------------------------------------------------------- /app-ui/dist/angular-nodejs-example/runtime-es2015.js: -------------------------------------------------------------------------------- 1 | /******/ (function(modules) { // webpackBootstrap 2 | /******/ // install a JSONP callback for chunk loading 3 | /******/ function webpackJsonpCallback(data) { 4 | /******/ var chunkIds = data[0]; 5 | /******/ var moreModules = data[1]; 6 | /******/ var executeModules = data[2]; 7 | /******/ 8 | /******/ // add "moreModules" to the modules object, 9 | /******/ // then flag all "chunkIds" as loaded and fire callback 10 | /******/ var moduleId, chunkId, i = 0, resolves = []; 11 | /******/ for(;i < chunkIds.length; i++) { 12 | /******/ chunkId = chunkIds[i]; 13 | /******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) { 14 | /******/ resolves.push(installedChunks[chunkId][0]); 15 | /******/ } 16 | /******/ installedChunks[chunkId] = 0; 17 | /******/ } 18 | /******/ for(moduleId in moreModules) { 19 | /******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { 20 | /******/ modules[moduleId] = moreModules[moduleId]; 21 | /******/ } 22 | /******/ } 23 | /******/ if(parentJsonpFunction) parentJsonpFunction(data); 24 | /******/ 25 | /******/ while(resolves.length) { 26 | /******/ resolves.shift()(); 27 | /******/ } 28 | /******/ 29 | /******/ // add entry modules from loaded chunk to deferred list 30 | /******/ deferredModules.push.apply(deferredModules, executeModules || []); 31 | /******/ 32 | /******/ // run deferred modules when all chunks ready 33 | /******/ return checkDeferredModules(); 34 | /******/ }; 35 | /******/ function checkDeferredModules() { 36 | /******/ var result; 37 | /******/ for(var i = 0; i < deferredModules.length; i++) { 38 | /******/ var deferredModule = deferredModules[i]; 39 | /******/ var fulfilled = true; 40 | /******/ for(var j = 1; j < deferredModule.length; j++) { 41 | /******/ var depId = deferredModule[j]; 42 | /******/ if(installedChunks[depId] !== 0) fulfilled = false; 43 | /******/ } 44 | /******/ if(fulfilled) { 45 | /******/ deferredModules.splice(i--, 1); 46 | /******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); 47 | /******/ } 48 | /******/ } 49 | /******/ 50 | /******/ return result; 51 | /******/ } 52 | /******/ 53 | /******/ // The module cache 54 | /******/ var installedModules = {}; 55 | /******/ 56 | /******/ // object to store loaded and loading chunks 57 | /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched 58 | /******/ // Promise = chunk loading, 0 = chunk loaded 59 | /******/ var installedChunks = { 60 | /******/ "runtime": 0 61 | /******/ }; 62 | /******/ 63 | /******/ var deferredModules = []; 64 | /******/ 65 | /******/ // The require function 66 | /******/ function __webpack_require__(moduleId) { 67 | /******/ 68 | /******/ // Check if module is in cache 69 | /******/ if(installedModules[moduleId]) { 70 | /******/ return installedModules[moduleId].exports; 71 | /******/ } 72 | /******/ // Create a new module (and put it into the cache) 73 | /******/ var module = installedModules[moduleId] = { 74 | /******/ i: moduleId, 75 | /******/ l: false, 76 | /******/ exports: {} 77 | /******/ }; 78 | /******/ 79 | /******/ // Execute the module function 80 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 81 | /******/ 82 | /******/ // Flag the module as loaded 83 | /******/ module.l = true; 84 | /******/ 85 | /******/ // Return the exports of the module 86 | /******/ return module.exports; 87 | /******/ } 88 | /******/ 89 | /******/ 90 | /******/ // expose the modules object (__webpack_modules__) 91 | /******/ __webpack_require__.m = modules; 92 | /******/ 93 | /******/ // expose the module cache 94 | /******/ __webpack_require__.c = installedModules; 95 | /******/ 96 | /******/ // define getter function for harmony exports 97 | /******/ __webpack_require__.d = function(exports, name, getter) { 98 | /******/ if(!__webpack_require__.o(exports, name)) { 99 | /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 100 | /******/ } 101 | /******/ }; 102 | /******/ 103 | /******/ // define __esModule on exports 104 | /******/ __webpack_require__.r = function(exports) { 105 | /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 106 | /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 107 | /******/ } 108 | /******/ Object.defineProperty(exports, '__esModule', { value: true }); 109 | /******/ }; 110 | /******/ 111 | /******/ // create a fake namespace object 112 | /******/ // mode & 1: value is a module id, require it 113 | /******/ // mode & 2: merge all properties of value into the ns 114 | /******/ // mode & 4: return value when already ns object 115 | /******/ // mode & 8|1: behave like require 116 | /******/ __webpack_require__.t = function(value, mode) { 117 | /******/ if(mode & 1) value = __webpack_require__(value); 118 | /******/ if(mode & 8) return value; 119 | /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 120 | /******/ var ns = Object.create(null); 121 | /******/ __webpack_require__.r(ns); 122 | /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 123 | /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 124 | /******/ return ns; 125 | /******/ }; 126 | /******/ 127 | /******/ // getDefaultExport function for compatibility with non-harmony modules 128 | /******/ __webpack_require__.n = function(module) { 129 | /******/ var getter = module && module.__esModule ? 130 | /******/ function getDefault() { return module['default']; } : 131 | /******/ function getModuleExports() { return module; }; 132 | /******/ __webpack_require__.d(getter, 'a', getter); 133 | /******/ return getter; 134 | /******/ }; 135 | /******/ 136 | /******/ // Object.prototype.hasOwnProperty.call 137 | /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 138 | /******/ 139 | /******/ // __webpack_public_path__ 140 | /******/ __webpack_require__.p = ""; 141 | /******/ 142 | /******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; 143 | /******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); 144 | /******/ jsonpArray.push = webpackJsonpCallback; 145 | /******/ jsonpArray = jsonpArray.slice(); 146 | /******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); 147 | /******/ var parentJsonpFunction = oldJsonpFunction; 148 | /******/ 149 | /******/ 150 | /******/ // run deferred modules from other chunks 151 | /******/ checkDeferredModules(); 152 | /******/ }) 153 | /************************************************************************/ 154 | /******/ ([]); 155 | //# sourceMappingURL=runtime-es2015.js.map -------------------------------------------------------------------------------- /app-ui/dist/angular-nodejs-example/runtime-es2015.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack/bootstrap"],"names":[],"mappings":";QAAA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA,QAAQ,oBAAoB;QAC5B;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA,iBAAiB,4BAA4B;QAC7C;QACA;QACA,kBAAkB,2BAA2B;QAC7C;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;;QAEA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;QAEA;QACA;QACA;QACA;QACA,gBAAgB,uBAAuB;QACvC;;;QAGA;QACA","file":"runtime-es2015.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"runtime\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":"webpack:///"} -------------------------------------------------------------------------------- /app-ui/dist/angular-nodejs-example/runtime-es5.js: -------------------------------------------------------------------------------- 1 | /******/ (function(modules) { // webpackBootstrap 2 | /******/ // install a JSONP callback for chunk loading 3 | /******/ function webpackJsonpCallback(data) { 4 | /******/ var chunkIds = data[0]; 5 | /******/ var moreModules = data[1]; 6 | /******/ var executeModules = data[2]; 7 | /******/ 8 | /******/ // add "moreModules" to the modules object, 9 | /******/ // then flag all "chunkIds" as loaded and fire callback 10 | /******/ var moduleId, chunkId, i = 0, resolves = []; 11 | /******/ for(;i < chunkIds.length; i++) { 12 | /******/ chunkId = chunkIds[i]; 13 | /******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) { 14 | /******/ resolves.push(installedChunks[chunkId][0]); 15 | /******/ } 16 | /******/ installedChunks[chunkId] = 0; 17 | /******/ } 18 | /******/ for(moduleId in moreModules) { 19 | /******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { 20 | /******/ modules[moduleId] = moreModules[moduleId]; 21 | /******/ } 22 | /******/ } 23 | /******/ if(parentJsonpFunction) parentJsonpFunction(data); 24 | /******/ 25 | /******/ while(resolves.length) { 26 | /******/ resolves.shift()(); 27 | /******/ } 28 | /******/ 29 | /******/ // add entry modules from loaded chunk to deferred list 30 | /******/ deferredModules.push.apply(deferredModules, executeModules || []); 31 | /******/ 32 | /******/ // run deferred modules when all chunks ready 33 | /******/ return checkDeferredModules(); 34 | /******/ }; 35 | /******/ function checkDeferredModules() { 36 | /******/ var result; 37 | /******/ for(var i = 0; i < deferredModules.length; i++) { 38 | /******/ var deferredModule = deferredModules[i]; 39 | /******/ var fulfilled = true; 40 | /******/ for(var j = 1; j < deferredModule.length; j++) { 41 | /******/ var depId = deferredModule[j]; 42 | /******/ if(installedChunks[depId] !== 0) fulfilled = false; 43 | /******/ } 44 | /******/ if(fulfilled) { 45 | /******/ deferredModules.splice(i--, 1); 46 | /******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); 47 | /******/ } 48 | /******/ } 49 | /******/ 50 | /******/ return result; 51 | /******/ } 52 | /******/ 53 | /******/ // The module cache 54 | /******/ var installedModules = {}; 55 | /******/ 56 | /******/ // object to store loaded and loading chunks 57 | /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched 58 | /******/ // Promise = chunk loading, 0 = chunk loaded 59 | /******/ var installedChunks = { 60 | /******/ "runtime": 0 61 | /******/ }; 62 | /******/ 63 | /******/ var deferredModules = []; 64 | /******/ 65 | /******/ // The require function 66 | /******/ function __webpack_require__(moduleId) { 67 | /******/ 68 | /******/ // Check if module is in cache 69 | /******/ if(installedModules[moduleId]) { 70 | /******/ return installedModules[moduleId].exports; 71 | /******/ } 72 | /******/ // Create a new module (and put it into the cache) 73 | /******/ var module = installedModules[moduleId] = { 74 | /******/ i: moduleId, 75 | /******/ l: false, 76 | /******/ exports: {} 77 | /******/ }; 78 | /******/ 79 | /******/ // Execute the module function 80 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 81 | /******/ 82 | /******/ // Flag the module as loaded 83 | /******/ module.l = true; 84 | /******/ 85 | /******/ // Return the exports of the module 86 | /******/ return module.exports; 87 | /******/ } 88 | /******/ 89 | /******/ 90 | /******/ // expose the modules object (__webpack_modules__) 91 | /******/ __webpack_require__.m = modules; 92 | /******/ 93 | /******/ // expose the module cache 94 | /******/ __webpack_require__.c = installedModules; 95 | /******/ 96 | /******/ // define getter function for harmony exports 97 | /******/ __webpack_require__.d = function(exports, name, getter) { 98 | /******/ if(!__webpack_require__.o(exports, name)) { 99 | /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 100 | /******/ } 101 | /******/ }; 102 | /******/ 103 | /******/ // define __esModule on exports 104 | /******/ __webpack_require__.r = function(exports) { 105 | /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 106 | /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 107 | /******/ } 108 | /******/ Object.defineProperty(exports, '__esModule', { value: true }); 109 | /******/ }; 110 | /******/ 111 | /******/ // create a fake namespace object 112 | /******/ // mode & 1: value is a module id, require it 113 | /******/ // mode & 2: merge all properties of value into the ns 114 | /******/ // mode & 4: return value when already ns object 115 | /******/ // mode & 8|1: behave like require 116 | /******/ __webpack_require__.t = function(value, mode) { 117 | /******/ if(mode & 1) value = __webpack_require__(value); 118 | /******/ if(mode & 8) return value; 119 | /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 120 | /******/ var ns = Object.create(null); 121 | /******/ __webpack_require__.r(ns); 122 | /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 123 | /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 124 | /******/ return ns; 125 | /******/ }; 126 | /******/ 127 | /******/ // getDefaultExport function for compatibility with non-harmony modules 128 | /******/ __webpack_require__.n = function(module) { 129 | /******/ var getter = module && module.__esModule ? 130 | /******/ function getDefault() { return module['default']; } : 131 | /******/ function getModuleExports() { return module; }; 132 | /******/ __webpack_require__.d(getter, 'a', getter); 133 | /******/ return getter; 134 | /******/ }; 135 | /******/ 136 | /******/ // Object.prototype.hasOwnProperty.call 137 | /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 138 | /******/ 139 | /******/ // __webpack_public_path__ 140 | /******/ __webpack_require__.p = ""; 141 | /******/ 142 | /******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; 143 | /******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); 144 | /******/ jsonpArray.push = webpackJsonpCallback; 145 | /******/ jsonpArray = jsonpArray.slice(); 146 | /******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); 147 | /******/ var parentJsonpFunction = oldJsonpFunction; 148 | /******/ 149 | /******/ 150 | /******/ // run deferred modules from other chunks 151 | /******/ checkDeferredModules(); 152 | /******/ }) 153 | /************************************************************************/ 154 | /******/ ([]); 155 | //# sourceMappingURL=runtime-es5.js.map -------------------------------------------------------------------------------- /app-ui/dist/angular-nodejs-example/runtime-es5.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack/bootstrap"],"names":[],"mappings":";QAAA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA,QAAQ,oBAAoB;QAC5B;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA,iBAAiB,4BAA4B;QAC7C;QACA;QACA,kBAAkB,2BAA2B;QAC7C;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;;QAEA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;QAEA;QACA;QACA;QACA;QACA,gBAAgB,uBAAuB;QACvC;;;QAGA;QACA","file":"runtime-es5.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"runtime\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":"webpack:///"} -------------------------------------------------------------------------------- /app-ui/e2e/protractor.conf.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | // Protractor configuration file, see link for more information 3 | // https://github.com/angular/protractor/blob/master/lib/config.ts 4 | 5 | const { SpecReporter } = require('jasmine-spec-reporter'); 6 | 7 | /** 8 | * @type { import("protractor").Config } 9 | */ 10 | exports.config = { 11 | allScriptsTimeout: 11000, 12 | specs: [ 13 | './src/**/*.e2e-spec.ts' 14 | ], 15 | capabilities: { 16 | browserName: 'chrome' 17 | }, 18 | directConnect: true, 19 | baseUrl: 'http://localhost:4200/', 20 | framework: 'jasmine', 21 | jasmineNodeOpts: { 22 | showColors: true, 23 | defaultTimeoutInterval: 30000, 24 | print: function() {} 25 | }, 26 | onPrepare() { 27 | require('ts-node').register({ 28 | project: require('path').join(__dirname, './tsconfig.json') 29 | }); 30 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 31 | } 32 | }; -------------------------------------------------------------------------------- /app-ui/e2e/src/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { AppPage } from './app.po'; 2 | import { browser, logging } from 'protractor'; 3 | 4 | describe('workspace-project App', () => { 5 | let page: AppPage; 6 | 7 | beforeEach(() => { 8 | page = new AppPage(); 9 | }); 10 | 11 | it('should display welcome message', () => { 12 | page.navigateTo(); 13 | expect(page.getTitleText()).toEqual('angular-nodejs-example app is running!'); 14 | }); 15 | 16 | afterEach(async () => { 17 | // Assert that there are no errors emitted from the browser 18 | const logs = await browser.manage().logs().get(logging.Type.BROWSER); 19 | expect(logs).not.toContain(jasmine.objectContaining({ 20 | level: logging.Level.SEVERE, 21 | } as logging.Entry)); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /app-ui/e2e/src/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, by, element } from 'protractor'; 2 | 3 | export class AppPage { 4 | navigateTo(): Promise { 5 | return browser.get(browser.baseUrl) as Promise; 6 | } 7 | 8 | getTitleText(): Promise { 9 | return element(by.css('app-root .content span')).getText() as Promise; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app-ui/e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/e2e", 5 | "module": "commonjs", 6 | "target": "es5", 7 | "types": [ 8 | "jasmine", 9 | "jasminewd2", 10 | "node" 11 | ] 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app-ui/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage-istanbul-reporter'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client: { 16 | clearContext: false // leave Jasmine Spec Runner output visible in browser 17 | }, 18 | coverageIstanbulReporter: { 19 | dir: require('path').join(__dirname, './coverage/angular-nodejs-example'), 20 | reports: ['html', 'lcovonly', 'text-summary'], 21 | fixWebpackSourcePaths: true 22 | }, 23 | reporters: ['progress', 'kjhtml'], 24 | port: 9876, 25 | colors: true, 26 | logLevel: config.LOG_INFO, 27 | autoWatch: true, 28 | browsers: ['Chrome'], 29 | singleRun: false, 30 | restartOnFileChange: true 31 | }); 32 | }; 33 | -------------------------------------------------------------------------------- /app-ui/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-nodejs-example", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "ng": "ng", 6 | "start": "ng serve --host=0.0.0.0 --port 4201", 7 | "build": "ng build", 8 | "test": "ng test", 9 | "lint": "ng lint", 10 | "e2e": "ng e2e" 11 | }, 12 | "private": true, 13 | "dependencies": { 14 | "@angular/animations": "~9.0.3", 15 | "@angular/common": "~9.0.3", 16 | "@angular/compiler": "~9.0.3", 17 | "@angular/core": "~9.0.3", 18 | "@angular/forms": "~9.0.3", 19 | "@angular/platform-browser": "~9.0.3", 20 | "@angular/platform-browser-dynamic": "~9.0.3", 21 | "@angular/router": "~9.0.3", 22 | "@ngrx/effects": "^9.0.0", 23 | "@ngrx/entity": "^9.0.0", 24 | "@ngrx/router-store": "^9.0.0", 25 | "@ngrx/store": "^9.0.0", 26 | "@ngrx/store-devtools": "^9.0.0", 27 | "bootstrap": "4.1.1", 28 | "ngrx": "0.0.1-security", 29 | "ngrx-store-freeze": "^0.2.4", 30 | "ngrx-store-localstorage": "^9.0.0", 31 | "ngx-bootstrap": "^5.5.0", 32 | "rxjs": "~6.5.4", 33 | "tslib": "^1.10.0", 34 | "zone.js": "~0.10.2" 35 | }, 36 | "devDependencies": { 37 | "@angular-devkit/build-angular": "~0.900.4", 38 | "@angular/cli": "~9.0.4", 39 | "@angular/compiler-cli": "~9.0.3", 40 | "@angular/language-service": "~9.0.3", 41 | "@types/node": "^12.11.1", 42 | "@types/jasmine": "~3.5.0", 43 | "@types/jasminewd2": "~2.0.3", 44 | "codelyzer": "^5.1.2", 45 | "jasmine-core": "~3.5.0", 46 | "jasmine-spec-reporter": "~4.2.1", 47 | "karma": "~4.3.0", 48 | "karma-chrome-launcher": "~3.1.0", 49 | "karma-coverage-istanbul-reporter": "~2.1.0", 50 | "karma-jasmine": "~2.0.1", 51 | "karma-jasmine-html-reporter": "^1.4.2", 52 | "protractor": "~5.4.3", 53 | "ts-node": "~8.3.0", 54 | "tslint": "~5.18.0", 55 | "typescript": "~3.7.5" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app-ui/proxy.conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "/api": { 3 | "target": "http://node-api:3080", 4 | "secure": false 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /app-ui/src/app/app-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { Routes, RouterModule } from '@angular/router'; 3 | 4 | 5 | const routes: Routes = []; 6 | 7 | @NgModule({ 8 | imports: [RouterModule.forRoot(routes)], 9 | exports: [RouterModule] 10 | }) 11 | export class AppRoutingModule { } 12 | -------------------------------------------------------------------------------- /app-ui/src/app/app-state/actions/createUser.ts: -------------------------------------------------------------------------------- 1 | import { createAction, props } from '@ngrx/store'; 2 | import { User } from '../models'; 3 | 4 | export const CREATE_USER = '[CREATE USER] Create User API '; 5 | export const CREATE_USER_SUCCESS = '[CREATE USER] Create User API Success'; 6 | export const CREATE_USER_FAILURE = '[CREATE USER] Create User API Failure'; 7 | 8 | export const createUser = createAction( 9 | CREATE_USER, 10 | props() 11 | ); 12 | 13 | export const createUserSuccess = createAction( 14 | CREATE_USER, 15 | props() 16 | ); 17 | 18 | export const createUserFailure = createAction( 19 | CREATE_USER, 20 | props() 21 | ); 22 | -------------------------------------------------------------------------------- /app-ui/src/app/app-state/effects/index.ts: -------------------------------------------------------------------------------- 1 | // export { UserEffects } from './user.effects'; 2 | -------------------------------------------------------------------------------- /app-ui/src/app/app-state/models/index.ts: -------------------------------------------------------------------------------- 1 | export { User } from './user.model'; 2 | -------------------------------------------------------------------------------- /app-ui/src/app/app-state/models/user.model.ts: -------------------------------------------------------------------------------- 1 | export class User { 2 | firstName: string; 3 | lastName: string; 4 | email: string; 5 | } 6 | -------------------------------------------------------------------------------- /app-ui/src/app/app-state/reducers/createuser.ts: -------------------------------------------------------------------------------- 1 | import * as createUserActions from '../actions/createUser'; 2 | import { Action, createReducer, on } from '@ngrx/store'; 3 | 4 | export interface State { 5 | isLoading: boolean; 6 | isLoadingSuccess: boolean; 7 | users: any; 8 | } 9 | 10 | const initialState: State = { 11 | isLoading: false, 12 | isLoadingSuccess: false, 13 | users: [] 14 | }; 15 | 16 | export const createUserReducer = createReducer( 17 | initialState, 18 | on(createUserActions.createUser, state => ({...state, isLoading: true, isLoadingSuccess: false, login: undefined})), 19 | on(createUserActions.createUserSuccess, (state, user) => ({...state, isLoading: false, isLoadingSuccess: true, user})), 20 | on(createUserActions.createUserFailure, (state, user) => ({...state, isLoading: false, isLoadingSuccess: true, user})) 21 | ); 22 | 23 | export function reducer(state: State | undefined, action: Action) { 24 | return createUserReducer(state, action); 25 | } 26 | 27 | export const getUsers = (state: State) => { 28 | return { 29 | isLoading: state.isLoading, 30 | isLoadingSuccess: state.isLoadingSuccess, 31 | login: state.users }; 32 | }; 33 | -------------------------------------------------------------------------------- /app-ui/src/app/app-state/reducers/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ActionReducerMap, 3 | createSelector, 4 | createFeatureSelector, 5 | ActionReducer, 6 | MetaReducer, 7 | } from '@ngrx/store'; 8 | import { localStorageSync } from 'ngrx-store-localstorage'; 9 | import * as fromRouter from '@ngrx/router-store'; 10 | import { RouterStateUrl } from '../shared/utils'; 11 | 12 | import { environment } from '../../../environments/environment'; 13 | 14 | /** 15 | * storeFreeze prevents state from being mutated. When mutation occurs, an 16 | * exception will be thrown. This is useful during development mode to 17 | * ensure that none of the reducers accidentally mutates the state. 18 | */ 19 | import { storeFreeze } from 'ngrx-store-freeze'; 20 | 21 | /** 22 | * Every reducer module's default export is the reducer function itself. In 23 | * addition, each module should export a type or interface that describes 24 | * the state of the reducer plus any selector functions. The `* as` 25 | * notation packages up all of the exports into a single object. 26 | */ 27 | 28 | import * as fromCreateUser from './createuser'; 29 | 30 | /** 31 | * As mentioned, we treat each reducer like a table in a database. This means 32 | * our top level state interface is just a map of keys to inner state types. 33 | */ 34 | export interface State { 35 | createUser: fromCreateUser.State; 36 | routerReducer: fromRouter.RouterReducerState; 37 | } 38 | 39 | /** 40 | * Our state is composed of a map of action reducer functions. 41 | * These reducer functions are called with each dispatched action 42 | * and the current or initial state and return a new immutable state. 43 | */ 44 | export const reducers: ActionReducerMap = { 45 | createUser: fromCreateUser.reducer, 46 | routerReducer: fromRouter.routerReducer, 47 | }; 48 | 49 | /*localstorage setup for the store 50 | Provide state (reducer) keys to sync with local storage. Returns a meta-reducer. 51 | */ 52 | 53 | const reducerKeys = ['loggedinuser']; 54 | export function localStorageSyncReducer(reducer: ActionReducer): ActionReducer { 55 | return localStorageSync({keys: reducerKeys})(reducer); 56 | } 57 | 58 | // //console.log all actions 59 | export function logger(reducer: ActionReducer): ActionReducer { 60 | // tslint:disable-next-line: only-arrow-functions 61 | return function(state: State, action: any): State { 62 | console.log('state', state); 63 | console.log('action', action); 64 | return reducer(state, action); 65 | }; 66 | } 67 | 68 | /** 69 | * By default, @ngrx/store uses combineReducers with the reducer map to compose 70 | * the root meta-reducer. To add more meta-reducers, provide an array of meta-reducers 71 | * that will be composed to form the root meta-reducer. 72 | */ 73 | 74 | export const metaReducers: MetaReducer[] = 75 | environment.production ? [localStorageSyncReducer] 76 | : [logger, storeFreeze, localStorageSyncReducer]; 77 | 78 | /* Transactions State start */ 79 | export const getCreateUserState = createFeatureSelector('createUser'); 80 | 81 | export const getUsers = createSelector( 82 | getCreateUserState, 83 | fromCreateUser.getUsers 84 | ); 85 | -------------------------------------------------------------------------------- /app-ui/src/app/app-state/shared/utils.ts: -------------------------------------------------------------------------------- 1 | import { RouterStateSerializer } from '@ngrx/router-store'; 2 | import { RouterStateSnapshot, Params } from '@angular/router'; 3 | 4 | /** 5 | * The RouterStateSerializer takes the current RouterStateSnapshot 6 | * and returns any pertinent information needed. The snapshot contains 7 | * all information about the state of the router at the given point in time. 8 | * The entire snapshot is complex and not always needed. In this case, you only 9 | * need the URL and query parameters from the snapshot in the store. Other items could be 10 | * returned such as route parameters and static route data. 11 | */ 12 | 13 | export interface RouterStateUrl { 14 | url: string; 15 | queryParams: Params; 16 | } 17 | 18 | export class CustomRouterStateSerializer 19 | implements RouterStateSerializer { 20 | serialize(routerState: RouterStateSnapshot): RouterStateUrl { 21 | const { url } = routerState; 22 | const queryParams = routerState.root.queryParams; 23 | 24 | return { url, queryParams }; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app-ui/src/app/app.component.css: -------------------------------------------------------------------------------- 1 | .mrgnbtm { 2 | margin-top: 20px; 3 | } 4 | -------------------------------------------------------------------------------- /app-ui/src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 |

Create User

6 |
7 |
8 |
9 | 10 | 11 |
12 |
13 | 14 | 15 |
16 |
17 |
18 |
19 | 20 | 21 |
22 |
23 | 24 |
25 |
26 |
27 | 31 | 32 |
33 |
34 |
35 |
36 | 37 |
38 | -------------------------------------------------------------------------------- /app-ui/src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, async } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | import { AppComponent } from './app.component'; 4 | 5 | describe('AppComponent', () => { 6 | beforeEach(async(() => { 7 | TestBed.configureTestingModule({ 8 | imports: [ 9 | RouterTestingModule 10 | ], 11 | declarations: [ 12 | AppComponent 13 | ], 14 | }).compileComponents(); 15 | })); 16 | 17 | it('should create the app', () => { 18 | const fixture = TestBed.createComponent(AppComponent); 19 | const app = fixture.componentInstance; 20 | expect(app).toBeTruthy(); 21 | }); 22 | 23 | it(`should have as title 'angular-nodejs-example'`, () => { 24 | const fixture = TestBed.createComponent(AppComponent); 25 | const app = fixture.componentInstance; 26 | expect(app.title).toEqual('angular-nodejs-example'); 27 | }); 28 | 29 | it('should render title', () => { 30 | const fixture = TestBed.createComponent(AppComponent); 31 | fixture.detectChanges(); 32 | const compiled = fixture.nativeElement; 33 | expect(compiled.querySelector('.content span').textContent).toContain('angular-nodejs-example app is running!'); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /app-ui/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnDestroy } from '@angular/core'; 2 | import { FormGroup, FormControl, Validators } from '@angular/forms'; 3 | import { AppService } from './app.service'; 4 | import { takeUntil } from 'rxjs/operators'; 5 | import { Subject } from 'rxjs'; 6 | 7 | @Component({ 8 | selector: 'app-root', 9 | templateUrl: './app.component.html', 10 | styleUrls: ['./app.component.css'] 11 | }) 12 | export class AppComponent implements OnDestroy { 13 | 14 | constructor(private appService: AppService) {} 15 | 16 | title = 'angular-nodejs-example'; 17 | 18 | userForm = new FormGroup({ 19 | firstName: new FormControl('', Validators.nullValidator && Validators.required), 20 | lastName: new FormControl('', Validators.nullValidator && Validators.required), 21 | email: new FormControl('', Validators.nullValidator && Validators.required) 22 | }); 23 | 24 | users: any[] = []; 25 | userCount = 0; 26 | 27 | destroy$: Subject = new Subject(); 28 | 29 | onSubmit() { 30 | 31 | this.appService.addUser(this.userForm.value).pipe(takeUntil(this.destroy$)).subscribe(data => { 32 | console.log('message::::', data); 33 | this.userCount = this.userCount + 1; 34 | console.log(this.userCount); 35 | this.userForm.reset(); 36 | }); 37 | } 38 | 39 | getAllUsers() { 40 | this.appService.getUsers().pipe(takeUntil(this.destroy$)).subscribe((users: any[]) => { 41 | this.users = users; 42 | }); 43 | } 44 | 45 | ngOnDestroy() { 46 | this.destroy$.next(true); 47 | this.destroy$.unsubscribe(); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app-ui/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { BrowserModule } from '@angular/platform-browser'; 2 | import { NgModule } from '@angular/core'; 3 | import { ReactiveFormsModule } from '@angular/forms'; 4 | 5 | import { AppRoutingModule } from './app-routing.module'; 6 | import { HttpClientModule } from '@angular/common/http'; 7 | import { AppComponent } from './app.component'; 8 | import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 9 | import { HeaderComponent } from './header/header.component'; 10 | import { DisplayBoardComponent } from './display-board.component'; 11 | import { UsersComponent } from './users.component'; 12 | import { environment } from '../environments/environment'; 13 | 14 | // state related imports 15 | // import { StoreModule } from '@ngrx/store'; 16 | // import { StoreDevtoolsModule } from '@ngrx/store-devtools'; 17 | // import { reducers, metaReducers } from './app-state/reducers'; 18 | // import { CustomRouterStateSerializer } from './app-state/shared/utils'; 19 | // import { StoreRouterConnectingModule, RouterStateSerializer } from '@ngrx/router-store'; 20 | 21 | @NgModule({ 22 | declarations: [ 23 | AppComponent, 24 | HeaderComponent, 25 | DisplayBoardComponent, 26 | UsersComponent 27 | ], 28 | imports: [ 29 | BrowserModule, 30 | AppRoutingModule, 31 | BrowserAnimationsModule, 32 | ReactiveFormsModule, 33 | HttpClientModule, 34 | /** 35 | * StoreModule.forRoot is imported once in the root module, accepting a reducer 36 | * function or object map of reducer functions. If passed an object of 37 | * reducers, combineReducers will be run creating your application 38 | * meta-reducer. This returns all providers for an @ngrx/store 39 | * based application. 40 | 41 | StoreModule.forRoot(reducers, { metaReducers }), 42 | 43 | /** 44 | * @ngrx/router-store keeps router state up-to-date in the store. 45 | 46 | StoreRouterConnectingModule, 47 | 48 | /** 49 | * Store devtools instrument the store retaining past versions of state 50 | * and recalculating new states. This enables powerful time-travel 51 | * debugging. 52 | * 53 | * To use the debugger, install the Redux Devtools extension for either 54 | * Chrome or Firefox 55 | * 56 | * See: https://github.com/zalmoxisus/redux-devtools-extension 57 | 58 | !environment.production ? StoreDevtoolsModule.instrument() : [], 59 | 60 | /** 61 | * EffectsModule.forRoot() is imported once in the root module and 62 | * sets up the effects class to be initialized immediately when the 63 | * application starts. 64 | * 65 | * See: https://github.com/ngrx/platform/blob/master/docs/effects/api.md#forroot 66 | */ 67 | ], 68 | providers: [], 69 | bootstrap: [AppComponent] 70 | }) 71 | export class AppModule { } 72 | -------------------------------------------------------------------------------- /app-ui/src/app/app.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { AppService } from './app.service'; 4 | 5 | describe('AppService', () => { 6 | let service: AppService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(AppService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /app-ui/src/app/app.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { HttpClient } from '@angular/common/http'; 3 | 4 | @Injectable({ 5 | providedIn: 'root' 6 | }) 7 | export class AppService { 8 | 9 | constructor(private http: HttpClient) { } 10 | 11 | rootURL = '/api'; 12 | 13 | getUsers() { 14 | return this.http.get(this.rootURL + '/users'); 15 | } 16 | 17 | addUser(user: any) { 18 | return this.http.post(this.rootURL + '/user', {user}); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /app-ui/src/app/display-board.component.css: -------------------------------------------------------------------------------- 1 | .display-board { 2 | width: 100%; 3 | background-color: rgb(112, 120, 236); 4 | padding: 5%; 5 | } 6 | 7 | .number { 8 | color: red; 9 | font-size: 75px; 10 | text-align: center; 11 | } 12 | -------------------------------------------------------------------------------- /app-ui/src/app/display-board.component.html: -------------------------------------------------------------------------------- 1 |
2 |

Users Created

3 |
4 | {{userCount}} 5 |
6 |
7 | 8 |
9 |
10 | -------------------------------------------------------------------------------- /app-ui/src/app/display-board.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { DisplayBoardComponent } from './display-board.component'; 4 | 5 | describe('DisplayBoardComponent', () => { 6 | let component: DisplayBoardComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ DisplayBoardComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(DisplayBoardComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /app-ui/src/app/display-board.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-display-board', 5 | templateUrl: './display-board.component.html', 6 | styleUrls: ['./display-board.component.css'] 7 | }) 8 | export class DisplayBoardComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | @Input() userCount = 0; 13 | @Output() getUsersEvent = new EventEmitter(); 14 | 15 | ngOnInit(): void { 16 | } 17 | 18 | getAllUsers() { 19 | this.getUsersEvent.emit('get all users'); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /app-ui/src/app/header/header.component.css: -------------------------------------------------------------------------------- 1 | .header { 2 | width: 100%; 3 | padding: 2%; 4 | background-color: blueviolet; 5 | color: white; 6 | text-align: center; 7 | } 8 | -------------------------------------------------------------------------------- /app-ui/src/app/header/header.component.html: -------------------------------------------------------------------------------- 1 |
2 |

Angular With NodeJS

3 |
4 | -------------------------------------------------------------------------------- /app-ui/src/app/header/header.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HeaderComponent } from './header.component'; 4 | 5 | describe('HeaderComponent', () => { 6 | let component: HeaderComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ HeaderComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(HeaderComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /app-ui/src/app/header/header.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-header', 5 | templateUrl: './header.component.html', 6 | styleUrls: ['./header.component.css'] 7 | }) 8 | export class HeaderComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app-ui/src/app/users.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bbachi/angular-nodejs-docker-compose/bc6dafa1810c41fdb4dd8d1e1f36e451c84638ac/app-ui/src/app/users.component.css -------------------------------------------------------------------------------- /app-ui/src/app/users.component.html: -------------------------------------------------------------------------------- 1 |
2 |

Users

3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
User IdFirstnameLastnameEmail
{{i + 1}}{{user.firstName}}{{user.lastName}}{{user.email}}
21 |
22 | -------------------------------------------------------------------------------- /app-ui/src/app/users.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { UsersComponent } from './users.component'; 4 | 5 | describe('UsersComponent', () => { 6 | let component: UsersComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ UsersComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(UsersComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /app-ui/src/app/users.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-users', 5 | templateUrl: './users.component.html', 6 | styleUrls: ['./users.component.css'] 7 | }) 8 | export class UsersComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | @Input() users: any[]; 13 | 14 | ngOnInit(): void { 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /app-ui/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bbachi/angular-nodejs-docker-compose/bc6dafa1810c41fdb4dd8d1e1f36e451c84638ac/app-ui/src/assets/.gitkeep -------------------------------------------------------------------------------- /app-ui/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /app-ui/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. 3 | // The list of file replacements can be found in `angular.json`. 4 | 5 | export const environment = { 6 | production: false 7 | }; 8 | 9 | /* 10 | * For easier debugging in development mode, you can import the following file 11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 12 | * 13 | * This import should be commented out in production mode because it will have a negative impact 14 | * on performance if an error is thrown. 15 | */ 16 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI. 17 | -------------------------------------------------------------------------------- /app-ui/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bbachi/angular-nodejs-docker-compose/bc6dafa1810c41fdb4dd8d1e1f36e451c84638ac/app-ui/src/favicon.ico -------------------------------------------------------------------------------- /app-ui/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AngularNodejsExample 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app-ui/src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule) 12 | .catch(err => console.error(err)); 13 | -------------------------------------------------------------------------------- /app-ui/src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This file includes polyfills needed by Angular and is loaded before the app. 3 | * You can add your own extra polyfills to this file. 4 | * 5 | * This file is divided into 2 sections: 6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 8 | * file. 9 | * 10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), 12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. 13 | * 14 | * Learn more in https://angular.io/guide/browser-support 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ 22 | // import 'classlist.js'; // Run `npm install --save classlist.js`. 23 | 24 | /** 25 | * Web Animations `@angular/platform-browser/animations` 26 | * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. 27 | * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). 28 | */ 29 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 30 | 31 | /** 32 | * By default, zone.js will patch all possible macroTask and DomEvents 33 | * user can disable parts of macroTask/DomEvents patch by setting following flags 34 | * because those flags need to be set before `zone.js` being loaded, and webpack 35 | * will put import in the top of bundle, so user need to create a separate file 36 | * in this directory (for example: zone-flags.ts), and put the following flags 37 | * into that file, and then add the following code before importing zone.js. 38 | * import './zone-flags'; 39 | * 40 | * The flags allowed in zone-flags.ts are listed here. 41 | * 42 | * The following flags will work for all browsers. 43 | * 44 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame 45 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick 46 | * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames 47 | * 48 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js 49 | * with the following flag, it will bypass `zone.js` patch for IE/Edge 50 | * 51 | * (window as any).__Zone_enable_cross_context_check = true; 52 | * 53 | */ 54 | 55 | /*************************************************************************************************** 56 | * Zone JS is required by default for Angular itself. 57 | */ 58 | import 'zone.js/dist/zone'; // Included with Angular CLI. 59 | 60 | 61 | /*************************************************************************************************** 62 | * APPLICATION IMPORTS 63 | */ 64 | -------------------------------------------------------------------------------- /app-ui/src/styles.css: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | -------------------------------------------------------------------------------- /app-ui/src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/dist/zone-testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | declare const require: { 11 | context(path: string, deep?: boolean, filter?: RegExp): { 12 | keys(): string[]; 13 | (id: string): T; 14 | }; 15 | }; 16 | 17 | // First, initialize the Angular testing environment. 18 | getTestBed().initTestEnvironment( 19 | BrowserDynamicTestingModule, 20 | platformBrowserDynamicTesting() 21 | ); 22 | // Then we find all the tests. 23 | const context = require.context('./', true, /\.spec\.ts$/); 24 | // And load the modules. 25 | context.keys().map(context); 26 | -------------------------------------------------------------------------------- /app-ui/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "./out-tsc/app", 5 | "types": [] 6 | }, 7 | "files": [ 8 | "src/main.ts", 9 | "src/polyfills.ts" 10 | ], 11 | "include": [ 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /app-ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist/out-tsc", 6 | "sourceMap": true, 7 | "declaration": false, 8 | "downlevelIteration": true, 9 | "experimentalDecorators": true, 10 | "module": "esnext", 11 | "moduleResolution": "node", 12 | "importHelpers": true, 13 | "target": "es2015", 14 | "typeRoots": [ 15 | "node_modules/@types" 16 | ], 17 | "lib": [ 18 | "es2018", 19 | "dom" 20 | ] 21 | }, 22 | "angularCompilerOptions": { 23 | "fullTemplateTypeCheck": true, 24 | "strictInjectionParameters": true 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app-ui/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "./out-tsc/spec", 5 | "types": [ 6 | "jasmine", 7 | "node" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts", 12 | "src/polyfills.ts" 13 | ], 14 | "include": [ 15 | "src/**/*.spec.ts", 16 | "src/**/*.d.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /app-ui/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tslint:recommended", 3 | "rules": { 4 | "array-type": false, 5 | "arrow-parens": false, 6 | "deprecation": { 7 | "severity": "warning" 8 | }, 9 | "component-class-suffix": true, 10 | "contextual-lifecycle": true, 11 | "directive-class-suffix": true, 12 | "directive-selector": [ 13 | true, 14 | "attribute", 15 | "app", 16 | "camelCase" 17 | ], 18 | "component-selector": [ 19 | true, 20 | "element", 21 | "app", 22 | "kebab-case" 23 | ], 24 | "import-blacklist": [ 25 | true, 26 | "rxjs/Rx" 27 | ], 28 | "interface-name": false, 29 | "max-classes-per-file": false, 30 | "max-line-length": [ 31 | true, 32 | 140 33 | ], 34 | "member-access": false, 35 | "member-ordering": [ 36 | true, 37 | { 38 | "order": [ 39 | "static-field", 40 | "instance-field", 41 | "static-method", 42 | "instance-method" 43 | ] 44 | } 45 | ], 46 | "no-consecutive-blank-lines": false, 47 | "no-console": [ 48 | true, 49 | "debug", 50 | "info", 51 | "time", 52 | "timeEnd", 53 | "trace" 54 | ], 55 | "no-empty": false, 56 | "no-inferrable-types": [ 57 | true, 58 | "ignore-params" 59 | ], 60 | "no-non-null-assertion": true, 61 | "no-redundant-jsdoc": true, 62 | "no-switch-case-fall-through": true, 63 | "no-var-requires": false, 64 | "object-literal-key-quotes": [ 65 | true, 66 | "as-needed" 67 | ], 68 | "object-literal-sort-keys": false, 69 | "ordered-imports": false, 70 | "quotemark": [ 71 | true, 72 | "single" 73 | ], 74 | "trailing-comma": false, 75 | "no-conflicting-lifecycle": true, 76 | "no-host-metadata-property": true, 77 | "no-input-rename": true, 78 | "no-inputs-metadata-property": true, 79 | "no-output-native": true, 80 | "no-output-on-prefix": true, 81 | "no-output-rename": true, 82 | "no-outputs-metadata-property": true, 83 | "template-banana-in-box": true, 84 | "template-no-negated-async": true, 85 | "use-lifecycle-interface": true, 86 | "use-pipe-transform-interface": true 87 | }, 88 | "rulesDirectory": [ 89 | "codelyzer" 90 | ] 91 | } -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | nodejs-server: 4 | build: 5 | context: ./api 6 | dockerfile: Dockerfile-dev 7 | ports: 8 | - "3080:3080" 9 | container_name: node-api 10 | volumes: 11 | - ./api:/usr/src/app/api 12 | - /usr/src/app/api/node_modules 13 | angular-ui: 14 | build: 15 | context: ./app-ui 16 | dockerfile: Dockerfile-dev 17 | ports: 18 | - "4201:4201" 19 | container_name: angular-ui 20 | volumes: 21 | - ./app-ui:/usr/src/app/app-ui 22 | - /usr/src/app/app-ui/node_modules --------------------------------------------------------------------------------