initial commit
commit
72420f8daf
|
@ -0,0 +1,13 @@
|
||||||
|
# Editor configuration, see http://editorconfig.org
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
max_line_length = off
|
||||||
|
trim_trailing_whitespace = false
|
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
"root": true,
|
||||||
|
"parser": "@typescript-eslint/parser",
|
||||||
|
"parserOptions": {
|
||||||
|
"ecmaVersion": 2018,
|
||||||
|
"sourceType": "module",
|
||||||
|
"project": "./tsconfig.*?.json"
|
||||||
|
},
|
||||||
|
"ignorePatterns": ["**/*"],
|
||||||
|
"plugins": ["@typescript-eslint", "@nrwl/nx"],
|
||||||
|
"extends": [
|
||||||
|
"eslint:recommended",
|
||||||
|
"plugin:@typescript-eslint/eslint-recommended",
|
||||||
|
"plugin:@typescript-eslint/recommended",
|
||||||
|
"prettier",
|
||||||
|
"prettier/@typescript-eslint"
|
||||||
|
],
|
||||||
|
"rules": {
|
||||||
|
"@typescript-eslint/explicit-member-accessibility": "off",
|
||||||
|
"@typescript-eslint/explicit-module-boundary-types": "off",
|
||||||
|
"@typescript-eslint/explicit-function-return-type": "off",
|
||||||
|
"@typescript-eslint/no-parameter-properties": "off",
|
||||||
|
"@nrwl/nx/enforce-module-boundaries": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
"enforceBuildableLibDependency": true,
|
||||||
|
"allow": [],
|
||||||
|
"depConstraints": [
|
||||||
|
{ "sourceTag": "*", "onlyDependOnLibsWithTags": ["*"] }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"files": ["*.tsx"],
|
||||||
|
"rules": {
|
||||||
|
"@typescript-eslint/no-unused-vars": "off"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# compiled output
|
||||||
|
/dist
|
||||||
|
/tmp
|
||||||
|
/out-tsc
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
|
|
||||||
|
# IDEs and editors
|
||||||
|
/.idea
|
||||||
|
.project
|
||||||
|
.classpath
|
||||||
|
.c9/
|
||||||
|
*.launch
|
||||||
|
.settings/
|
||||||
|
*.sublime-workspace
|
||||||
|
|
||||||
|
# IDE - VSCode
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/extensions.json
|
||||||
|
|
||||||
|
# misc
|
||||||
|
/.sass-cache
|
||||||
|
/connect.lock
|
||||||
|
/coverage
|
||||||
|
/libpeerconnection.log
|
||||||
|
npm-debug.log
|
||||||
|
yarn-error.log
|
||||||
|
testem.log
|
||||||
|
/typings
|
||||||
|
|
||||||
|
# System Files
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
|
@ -0,0 +1,4 @@
|
||||||
|
# Add files here to ignore them from prettier formatting
|
||||||
|
|
||||||
|
/dist
|
||||||
|
/coverage
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"singleQuote": true
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"nrwl.angular-console",
|
||||||
|
"angular.ng-template",
|
||||||
|
"ms-vscode.vscode-typescript-tslint-plugin",
|
||||||
|
"esbenp.prettier-vscode",
|
||||||
|
"firsttris.vscode-jest-runner"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,98 @@
|
||||||
|
# ChatRoom
|
||||||
|
|
||||||
|
This project was generated using [Nx](https://nx.dev).
|
||||||
|
|
||||||
|
<p align="center"><img src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-logo.png" width="450"></p>
|
||||||
|
|
||||||
|
🔎 **Nx is a set of Extensible Dev Tools for Monorepos.**
|
||||||
|
|
||||||
|
## Quick Start & Documentation
|
||||||
|
|
||||||
|
[Nx Documentation](https://nx.dev/angular)
|
||||||
|
|
||||||
|
[10-minute video showing all Nx features](https://nx.dev/angular/getting-started/what-is-nx)
|
||||||
|
|
||||||
|
[Interactive Tutorial](https://nx.dev/angular/tutorial/01-create-application)
|
||||||
|
|
||||||
|
## Adding capabilities to your workspace
|
||||||
|
|
||||||
|
Nx supports many plugins which add capabilities for developing different types of applications and different tools.
|
||||||
|
|
||||||
|
These capabilities include generating applications, libraries, etc as well as the devtools to test, and build projects as well.
|
||||||
|
|
||||||
|
Below are our core plugins:
|
||||||
|
|
||||||
|
- [Angular](https://angular.io)
|
||||||
|
- `ng add @nrwl/angular`
|
||||||
|
- [React](https://reactjs.org)
|
||||||
|
- `ng add @nrwl/react`
|
||||||
|
- Web (no framework frontends)
|
||||||
|
- `ng add @nrwl/web`
|
||||||
|
- [Nest](https://nestjs.com)
|
||||||
|
- `ng add @nrwl/nest`
|
||||||
|
- [Express](https://expressjs.com)
|
||||||
|
- `ng add @nrwl/express`
|
||||||
|
- [Node](https://nodejs.org)
|
||||||
|
- `ng add @nrwl/node`
|
||||||
|
|
||||||
|
There are also many [community plugins](https://nx.dev/nx-community) you could add.
|
||||||
|
|
||||||
|
## Generate an application
|
||||||
|
|
||||||
|
Run `ng g @nrwl/angular:app my-app` to generate an application.
|
||||||
|
|
||||||
|
> You can use any of the plugins above to generate applications as well.
|
||||||
|
|
||||||
|
When using Nx, you can create multiple applications and libraries in the same workspace.
|
||||||
|
|
||||||
|
## Generate a library
|
||||||
|
|
||||||
|
Run `ng g @nrwl/angular:lib my-lib` to generate a library.
|
||||||
|
|
||||||
|
> You can also use any of the plugins above to generate libraries as well.
|
||||||
|
|
||||||
|
Libraries are sharable across libraries and applications. They can be imported from `@chat-room/mylib`.
|
||||||
|
|
||||||
|
## Development server
|
||||||
|
|
||||||
|
Run `ng serve my-app` for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files.
|
||||||
|
|
||||||
|
## Code scaffolding
|
||||||
|
|
||||||
|
Run `ng g component my-component --project=my-app` to generate a new component.
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
Run `ng build my-app` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build.
|
||||||
|
|
||||||
|
## Running unit tests
|
||||||
|
|
||||||
|
Run `ng test my-app` to execute the unit tests via [Jest](https://jestjs.io).
|
||||||
|
|
||||||
|
Run `nx affected:test` to execute the unit tests affected by a change.
|
||||||
|
|
||||||
|
## Running end-to-end tests
|
||||||
|
|
||||||
|
Run `ng e2e my-app` to execute the end-to-end tests via [Cypress](https://www.cypress.io).
|
||||||
|
|
||||||
|
Run `nx affected:e2e` to execute the end-to-end tests affected by a change.
|
||||||
|
|
||||||
|
## Understand your workspace
|
||||||
|
|
||||||
|
Run `nx dep-graph` to see a diagram of the dependencies of your projects.
|
||||||
|
|
||||||
|
## Further help
|
||||||
|
|
||||||
|
Visit the [Nx Documentation](https://nx.dev/angular) to learn more.
|
||||||
|
|
||||||
|
## ☁ Nx Cloud
|
||||||
|
|
||||||
|
### Computation Memoization in the Cloud
|
||||||
|
|
||||||
|
<p align="center"><img src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-cloud-card.png"></p>
|
||||||
|
|
||||||
|
Nx Cloud pairs with Nx in order to enable you to build and test code more rapidly, by up to 10 times. Even teams that are new to Nx can connect to Nx Cloud and start saving time instantly.
|
||||||
|
|
||||||
|
Teams using Nx gain the advantage of building full-stack applications with their preferred framework alongside Nx’s advanced code generation and project dependency graph, plus a unified experience for both frontend and backend developers.
|
||||||
|
|
||||||
|
Visit [Nx Cloud](https://nx.app/) to learn more.
|
|
@ -0,0 +1,217 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"projects": {
|
||||||
|
"chat-room": {
|
||||||
|
"projectType": "application",
|
||||||
|
"schematics": {
|
||||||
|
"@schematics/angular:component": {
|
||||||
|
"style": "scss"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "apps/chat-room",
|
||||||
|
"sourceRoot": "apps/chat-room/src",
|
||||||
|
"prefix": "chat-room",
|
||||||
|
"architect": {
|
||||||
|
"build": {
|
||||||
|
"builder": "@angular-devkit/build-angular:browser",
|
||||||
|
"options": {
|
||||||
|
"outputPath": "dist/apps/chat-room",
|
||||||
|
"index": "apps/chat-room/src/index.html",
|
||||||
|
"main": "apps/chat-room/src/main.ts",
|
||||||
|
"polyfills": "apps/chat-room/src/polyfills.ts",
|
||||||
|
"tsConfig": "apps/chat-room/tsconfig.app.json",
|
||||||
|
"aot": true,
|
||||||
|
"assets": [
|
||||||
|
"apps/chat-room/src/favicon.ico",
|
||||||
|
"apps/chat-room/src/assets"
|
||||||
|
],
|
||||||
|
"styles": ["apps/chat-room/src/styles.scss"],
|
||||||
|
"scripts": []
|
||||||
|
},
|
||||||
|
"configurations": {
|
||||||
|
"production": {
|
||||||
|
"fileReplacements": [
|
||||||
|
{
|
||||||
|
"replace": "apps/chat-room/src/environments/environment.ts",
|
||||||
|
"with": "apps/chat-room/src/environments/environment.prod.ts"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"optimization": true,
|
||||||
|
"outputHashing": "all",
|
||||||
|
"sourceMap": false,
|
||||||
|
"extractCss": true,
|
||||||
|
"namedChunks": false,
|
||||||
|
"extractLicenses": true,
|
||||||
|
"vendorChunk": false,
|
||||||
|
"buildOptimizer": true,
|
||||||
|
"budgets": [
|
||||||
|
{
|
||||||
|
"type": "initial",
|
||||||
|
"maximumWarning": "2mb",
|
||||||
|
"maximumError": "5mb"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "anyComponentStyle",
|
||||||
|
"maximumWarning": "6kb",
|
||||||
|
"maximumError": "10kb"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"serve": {
|
||||||
|
"builder": "@angular-devkit/build-angular:dev-server",
|
||||||
|
"options": {
|
||||||
|
"browserTarget": "chat-room:build",
|
||||||
|
"proxyConfig": "apps/chat-room/proxy.conf.json"
|
||||||
|
},
|
||||||
|
"configurations": {
|
||||||
|
"production": {
|
||||||
|
"browserTarget": "chat-room:build:production"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extract-i18n": {
|
||||||
|
"builder": "@angular-devkit/build-angular:extract-i18n",
|
||||||
|
"options": {
|
||||||
|
"browserTarget": "chat-room:build"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lint": {
|
||||||
|
"builder": "@nrwl/linter:eslint",
|
||||||
|
"options": {
|
||||||
|
"lintFilePatterns": ["apps/chat-room/src/**/*.ts"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"test": {
|
||||||
|
"builder": "@nrwl/jest:jest",
|
||||||
|
"options": {
|
||||||
|
"jestConfig": "apps/chat-room/jest.config.js",
|
||||||
|
"passWithNoTests": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"chat-room-e2e": {
|
||||||
|
"root": "apps/chat-room-e2e",
|
||||||
|
"sourceRoot": "apps/chat-room-e2e/src",
|
||||||
|
"projectType": "application",
|
||||||
|
"architect": {
|
||||||
|
"e2e": {
|
||||||
|
"builder": "@nrwl/cypress:cypress",
|
||||||
|
"options": {
|
||||||
|
"cypressConfig": "apps/chat-room-e2e/cypress.json",
|
||||||
|
"tsConfig": "apps/chat-room-e2e/tsconfig.e2e.json",
|
||||||
|
"devServerTarget": "chat-room:serve"
|
||||||
|
},
|
||||||
|
"configurations": {
|
||||||
|
"production": {
|
||||||
|
"devServerTarget": "chat-room:serve:production"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lint": {
|
||||||
|
"builder": "@nrwl/linter:eslint",
|
||||||
|
"options": {
|
||||||
|
"lintFilePatterns": ["apps/chat-room-e2e/**/*.{js,ts}"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"api": {
|
||||||
|
"root": "apps/api",
|
||||||
|
"sourceRoot": "apps/api/src",
|
||||||
|
"projectType": "application",
|
||||||
|
"prefix": "api",
|
||||||
|
"schematics": {},
|
||||||
|
"architect": {
|
||||||
|
"build": {
|
||||||
|
"builder": "@nrwl/node:build",
|
||||||
|
"options": {
|
||||||
|
"outputPath": "dist/apps/api",
|
||||||
|
"main": "apps/api/src/main.ts",
|
||||||
|
"tsConfig": "apps/api/tsconfig.app.json",
|
||||||
|
"assets": ["apps/api/src/assets"]
|
||||||
|
},
|
||||||
|
"configurations": {
|
||||||
|
"production": {
|
||||||
|
"optimization": true,
|
||||||
|
"extractLicenses": true,
|
||||||
|
"inspect": false,
|
||||||
|
"fileReplacements": [
|
||||||
|
{
|
||||||
|
"replace": "apps/api/src/environments/environment.ts",
|
||||||
|
"with": "apps/api/src/environments/environment.prod.ts"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"serve": {
|
||||||
|
"builder": "@nrwl/node:execute",
|
||||||
|
"options": {
|
||||||
|
"buildTarget": "api:build"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lint": {
|
||||||
|
"builder": "@nrwl/linter:eslint",
|
||||||
|
"options": {
|
||||||
|
"lintFilePatterns": ["apps/api/**/*.ts"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"test": {
|
||||||
|
"builder": "@nrwl/jest:jest",
|
||||||
|
"options": {
|
||||||
|
"jestConfig": "apps/api/jest.config.js",
|
||||||
|
"passWithNoTests": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"api-interfaces": {
|
||||||
|
"root": "libs/api-interfaces",
|
||||||
|
"sourceRoot": "libs/api-interfaces/src",
|
||||||
|
"projectType": "library",
|
||||||
|
"schematics": {},
|
||||||
|
"architect": {
|
||||||
|
"lint": {
|
||||||
|
"builder": "@nrwl/linter:eslint",
|
||||||
|
"options": {
|
||||||
|
"lintFilePatterns": ["libs/api-interfaces/**/*.ts"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"test": {
|
||||||
|
"builder": "@nrwl/jest:jest",
|
||||||
|
"options": {
|
||||||
|
"jestConfig": "libs/api-interfaces/jest.config.js",
|
||||||
|
"passWithNoTests": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cli": {
|
||||||
|
"defaultCollection": "@nrwl/angular"
|
||||||
|
},
|
||||||
|
"schematics": {
|
||||||
|
"@nrwl/angular": {
|
||||||
|
"application": {
|
||||||
|
"linter": "eslint"
|
||||||
|
},
|
||||||
|
"library": {
|
||||||
|
"linter": "eslint"
|
||||||
|
},
|
||||||
|
"storybook-configuration": {
|
||||||
|
"linter": "eslint"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@nrwl/angular:application": {
|
||||||
|
"unitTestRunner": "jest",
|
||||||
|
"e2eTestRunner": "cypress"
|
||||||
|
},
|
||||||
|
"@nrwl/angular:library": {
|
||||||
|
"unitTestRunner": "jest"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"defaultProject": "chat-room"
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
{ "extends": "../../.eslintrc.json", "ignorePatterns": ["!**/*"], "rules": {} }
|
|
@ -0,0 +1,14 @@
|
||||||
|
module.exports = {
|
||||||
|
displayName: 'api',
|
||||||
|
preset: '../../jest.preset.js',
|
||||||
|
globals: {
|
||||||
|
'ts-jest': {
|
||||||
|
tsConfig: '<rootDir>/tsconfig.spec.json',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
transform: {
|
||||||
|
'^.+\\.[tj]s$': 'ts-jest',
|
||||||
|
},
|
||||||
|
moduleFileExtensions: ['ts', 'js', 'html'],
|
||||||
|
coverageDirectory: '../../coverage/apps/api',
|
||||||
|
};
|
|
@ -0,0 +1,22 @@
|
||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
|
||||||
|
import { AppController } from './app.controller';
|
||||||
|
import { AppService } from './app.service';
|
||||||
|
|
||||||
|
describe('AppController', () => {
|
||||||
|
let app: TestingModule;
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
app = await Test.createTestingModule({
|
||||||
|
controllers: [AppController],
|
||||||
|
providers: [AppService],
|
||||||
|
}).compile();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getData', () => {
|
||||||
|
it('should return "Welcome to api!"', () => {
|
||||||
|
const appController = app.get<AppController>(AppController);
|
||||||
|
expect(appController.getData()).toEqual({ message: 'Welcome to api!' });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Controller, Get } from '@nestjs/common';
|
||||||
|
|
||||||
|
import { Message } from '@chat-room/api-interfaces';
|
||||||
|
|
||||||
|
import { AppService } from './app.service';
|
||||||
|
|
||||||
|
@Controller()
|
||||||
|
export class AppController {
|
||||||
|
constructor(private readonly appService: AppService) {}
|
||||||
|
|
||||||
|
@Get('hello')
|
||||||
|
getData(): Message {
|
||||||
|
return this.appService.getData();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
|
||||||
|
import { AppController } from './app.controller';
|
||||||
|
import { AppService } from './app.service';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [],
|
||||||
|
controllers: [AppController],
|
||||||
|
providers: [AppService],
|
||||||
|
})
|
||||||
|
export class AppModule {}
|
|
@ -0,0 +1,21 @@
|
||||||
|
import { Test } from '@nestjs/testing';
|
||||||
|
|
||||||
|
import { AppService } from './app.service';
|
||||||
|
|
||||||
|
describe('AppService', () => {
|
||||||
|
let service: AppService;
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
const app = await Test.createTestingModule({
|
||||||
|
providers: [AppService],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
service = app.get<AppService>(AppService);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getData', () => {
|
||||||
|
it('should return "Welcome to api!"', () => {
|
||||||
|
expect(service.getData()).toEqual({ message: 'Welcome to api!' });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,9 @@
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { Message } from '@chat-room/api-interfaces';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class AppService {
|
||||||
|
getData(): Message {
|
||||||
|
return { message: 'Welcome to api!' };
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
export const environment = {
|
||||||
|
production: true,
|
||||||
|
};
|
|
@ -0,0 +1,3 @@
|
||||||
|
export const environment = {
|
||||||
|
production: false,
|
||||||
|
};
|
|
@ -0,0 +1,21 @@
|
||||||
|
/**
|
||||||
|
* This is not a production server yet!
|
||||||
|
* This is only a minimal backend to get started.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Logger } from '@nestjs/common';
|
||||||
|
import { NestFactory } from '@nestjs/core';
|
||||||
|
|
||||||
|
import { AppModule } from './app/app.module';
|
||||||
|
|
||||||
|
async function bootstrap() {
|
||||||
|
const app = await NestFactory.create(AppModule);
|
||||||
|
const globalPrefix = 'api';
|
||||||
|
app.setGlobalPrefix(globalPrefix);
|
||||||
|
const port = process.env.PORT || 3333;
|
||||||
|
await app.listen(port, () => {
|
||||||
|
Logger.log('Listening at http://localhost:' + port + '/' + globalPrefix);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
bootstrap();
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc",
|
||||||
|
"types": ["node"],
|
||||||
|
"emitDecoratorMetadata": true,
|
||||||
|
"target": "es2015"
|
||||||
|
},
|
||||||
|
"exclude": ["**/*.spec.ts"],
|
||||||
|
"include": ["**/*.ts"]
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"files": [],
|
||||||
|
"include": [],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.app.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.spec.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc",
|
||||||
|
"module": "commonjs",
|
||||||
|
"types": ["jest", "node"]
|
||||||
|
},
|
||||||
|
"include": ["**/*.spec.ts", "**/*.d.ts"]
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"extends": ["plugin:cypress/recommended", "../../.eslintrc.json"],
|
||||||
|
"ignorePatterns": ["!**/*"],
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"files": ["src/plugins/index.js"],
|
||||||
|
"rules": {
|
||||||
|
"@typescript-eslint/no-var-requires": "off",
|
||||||
|
"no-undef": "off"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"fileServerFolder": ".",
|
||||||
|
"fixturesFolder": "./src/fixtures",
|
||||||
|
"integrationFolder": "./src/integration",
|
||||||
|
"modifyObstructiveCode": false,
|
||||||
|
"pluginsFile": "./src/plugins/index",
|
||||||
|
"supportFile": "./src/support/index.ts",
|
||||||
|
"video": true,
|
||||||
|
"videosFolder": "../../dist/cypress/apps/chat-room-e2e/videos",
|
||||||
|
"screenshotsFolder": "../../dist/cypress/apps/chat-room-e2e/screenshots",
|
||||||
|
"chromeWebSecurity": false
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"name": "Using fixtures to represent data",
|
||||||
|
"email": "hello@cypress.io"
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
import { getGreeting } from '../support/app.po';
|
||||||
|
|
||||||
|
describe('chat-room', () => {
|
||||||
|
beforeEach(() => cy.visit('/'));
|
||||||
|
|
||||||
|
it('should display welcome message', () => {
|
||||||
|
// Custom command example, see `../support/commands.ts` file
|
||||||
|
cy.login('my-email@something.com', 'myPassword');
|
||||||
|
|
||||||
|
// Function helper example, see `../support/app.po.ts` file
|
||||||
|
getGreeting().contains('Welcome to chat-room!');
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,22 @@
|
||||||
|
// ***********************************************************
|
||||||
|
// This example plugins/index.js can be used to load plugins
|
||||||
|
//
|
||||||
|
// You can change the location of this file or turn off loading
|
||||||
|
// the plugins file with the 'pluginsFile' configuration option.
|
||||||
|
//
|
||||||
|
// You can read more here:
|
||||||
|
// https://on.cypress.io/plugins-guide
|
||||||
|
// ***********************************************************
|
||||||
|
|
||||||
|
// This function is called when a project is opened or re-opened (e.g. due to
|
||||||
|
// the project's config changing)
|
||||||
|
|
||||||
|
const { preprocessTypescript } = require('@nrwl/cypress/plugins/preprocessor');
|
||||||
|
|
||||||
|
module.exports = (on, config) => {
|
||||||
|
// `on` is used to hook into various events Cypress emits
|
||||||
|
// `config` is the resolved Cypress config
|
||||||
|
|
||||||
|
// Preprocess Typescript file using Nx helper
|
||||||
|
on('file:preprocessor', preprocessTypescript(config));
|
||||||
|
};
|
|
@ -0,0 +1 @@
|
||||||
|
export const getGreeting = () => cy.get('h1');
|
|
@ -0,0 +1,33 @@
|
||||||
|
// ***********************************************
|
||||||
|
// This example commands.js shows you how to
|
||||||
|
// create various custom commands and overwrite
|
||||||
|
// existing commands.
|
||||||
|
//
|
||||||
|
// For more comprehensive examples of custom
|
||||||
|
// commands please read more here:
|
||||||
|
// https://on.cypress.io/custom-commands
|
||||||
|
// ***********************************************
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-namespace
|
||||||
|
declare namespace Cypress {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
interface Chainable<Subject> {
|
||||||
|
login(email: string, password: string): void;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// -- This is a parent command --
|
||||||
|
Cypress.Commands.add('login', (email, password) => {
|
||||||
|
console.log('Custom command example: Login', email, password);
|
||||||
|
});
|
||||||
|
//
|
||||||
|
// -- This is a child command --
|
||||||
|
// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// -- This is a dual command --
|
||||||
|
// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// -- This will overwrite an existing command --
|
||||||
|
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
|
|
@ -0,0 +1,17 @@
|
||||||
|
// ***********************************************************
|
||||||
|
// This example support/index.js is processed and
|
||||||
|
// loaded automatically before your test files.
|
||||||
|
//
|
||||||
|
// This is a great place to put global configuration and
|
||||||
|
// behavior that modifies Cypress.
|
||||||
|
//
|
||||||
|
// You can change the location of this file or turn off
|
||||||
|
// automatically serving support files with the
|
||||||
|
// 'supportFile' configuration option.
|
||||||
|
//
|
||||||
|
// You can read more here:
|
||||||
|
// https://on.cypress.io/configuration
|
||||||
|
// ***********************************************************
|
||||||
|
|
||||||
|
// Import commands.js using ES2015 syntax:
|
||||||
|
import './commands';
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"sourceMap": false,
|
||||||
|
"outDir": "../../dist/out-tsc",
|
||||||
|
"allowJs": true,
|
||||||
|
"types": ["cypress", "node"]
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts", "src/**/*.js"]
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"files": [],
|
||||||
|
"include": [],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.e2e.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
|
||||||
|
# For additional information regarding the format and rule options, please see:
|
||||||
|
# https://github.com/browserslist/browserslist#queries
|
||||||
|
|
||||||
|
# For the full list of supported browsers by the Angular framework, please see:
|
||||||
|
# https://angular.io/guide/browser-support
|
||||||
|
|
||||||
|
# You can see what browsers were selected by your queries by running:
|
||||||
|
# npx browserslist
|
||||||
|
|
||||||
|
last 1 Chrome version
|
||||||
|
last 1 Firefox version
|
||||||
|
last 2 Edge major versions
|
||||||
|
last 2 Safari major versions
|
||||||
|
last 2 iOS major versions
|
||||||
|
Firefox ESR
|
||||||
|
not IE 9-10 # Angular support for IE 9-10 has been deprecated and will be removed as of Angular v11. To opt-in, remove the 'not' prefix on this line.
|
||||||
|
not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line.
|
|
@ -0,0 +1 @@
|
||||||
|
{ "extends": "../../.eslintrc.json", "ignorePatterns": ["!**/*"], "rules": {} }
|
|
@ -0,0 +1,23 @@
|
||||||
|
module.exports = {
|
||||||
|
displayName: 'chat-room',
|
||||||
|
preset: '../../jest.preset.js',
|
||||||
|
setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
|
||||||
|
globals: {
|
||||||
|
'ts-jest': {
|
||||||
|
tsConfig: '<rootDir>/tsconfig.spec.json',
|
||||||
|
stringifyContentPathRegex: '\\.(html|svg)$',
|
||||||
|
astTransformers: {
|
||||||
|
before: [
|
||||||
|
'jest-preset-angular/build/InlineFilesTransformer',
|
||||||
|
'jest-preset-angular/build/StripStylesTransformer',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
coverageDirectory: '../../coverage/apps/chat-room',
|
||||||
|
snapshotSerializers: [
|
||||||
|
'jest-preset-angular/build/AngularNoNgAttributesSnapshotSerializer.js',
|
||||||
|
'jest-preset-angular/build/AngularSnapshotSerializer.js',
|
||||||
|
'jest-preset-angular/build/HTMLCommentSerializer.js',
|
||||||
|
],
|
||||||
|
};
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"/api": {
|
||||||
|
"target": "http://localhost:3333",
|
||||||
|
"secure": false
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<h1>Welcome to chat-room!</h1>
|
||||||
|
<img
|
||||||
|
width="450"
|
||||||
|
src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-logo.png"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div>Message: {{ hello$ | async | json }}</div>
|
|
@ -0,0 +1,133 @@
|
||||||
|
/*
|
||||||
|
* Remove template code below
|
||||||
|
*/
|
||||||
|
:host {
|
||||||
|
display: block;
|
||||||
|
font-family: sans-serif;
|
||||||
|
min-width: 300px;
|
||||||
|
max-width: 600px;
|
||||||
|
margin: 50px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gutter-left {
|
||||||
|
margin-left: 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.col-span-2 {
|
||||||
|
grid-column: span 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
background-color: #143055;
|
||||||
|
color: white;
|
||||||
|
padding: 5px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
padding: 0 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
text-align: center;
|
||||||
|
margin-left: 18px;
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 20px;
|
||||||
|
margin: 40px 0 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.resources {
|
||||||
|
text-align: center;
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
display: grid;
|
||||||
|
grid-gap: 9px;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.resource {
|
||||||
|
color: #0094ba;
|
||||||
|
height: 36px;
|
||||||
|
background-color: rgba(0, 0, 0, 0);
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.12);
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 3px 9px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.resource:hover {
|
||||||
|
background-color: rgba(68, 138, 255, 0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 9px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: black;
|
||||||
|
color: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
details {
|
||||||
|
border-radius: 4px;
|
||||||
|
color: #333;
|
||||||
|
background-color: rgba(0, 0, 0, 0);
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.12);
|
||||||
|
padding: 3px 9px;
|
||||||
|
margin-bottom: 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
summary {
|
||||||
|
cursor: pointer;
|
||||||
|
outline: none;
|
||||||
|
height: 36px;
|
||||||
|
line-height: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.github-star-container {
|
||||||
|
margin-top: 12px;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.github-star-container a {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.github-star-badge {
|
||||||
|
color: #24292e;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 12px;
|
||||||
|
padding: 3px 10px;
|
||||||
|
border: 1px solid rgba(27, 31, 35, 0.2);
|
||||||
|
border-radius: 3px;
|
||||||
|
background-image: linear-gradient(-180deg, #fafbfc, #eff3f6 90%);
|
||||||
|
margin-left: 4px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.github-star-badge:hover {
|
||||||
|
background-image: linear-gradient(-180deg, #f0f3f6, #e6ebf1 90%);
|
||||||
|
border-color: rgba(27, 31, 35, 0.35);
|
||||||
|
background-position: -0.5em;
|
||||||
|
}
|
||||||
|
.github-star-badge .material-icons {
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
import { Component } from '@angular/core';
|
||||||
|
import { TestBed, async } from '@angular/core/testing';
|
||||||
|
import { HttpClientModule } from '@angular/common/http';
|
||||||
|
import { AppComponent } from './app.component';
|
||||||
|
|
||||||
|
describe('AppComponent', () => {
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [AppComponent],
|
||||||
|
imports: [HttpClientModule],
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should create the app', () => {
|
||||||
|
const fixture = TestBed.createComponent(AppComponent);
|
||||||
|
const app = fixture.debugElement.componentInstance;
|
||||||
|
expect(app).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,13 @@
|
||||||
|
import { Component } from '@angular/core';
|
||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
import { Message } from '@chat-room/api-interfaces';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'chat-room-root',
|
||||||
|
templateUrl: './app.component.html',
|
||||||
|
styleUrls: ['./app.component.scss'],
|
||||||
|
})
|
||||||
|
export class AppComponent {
|
||||||
|
hello$ = this.http.get<Message>('/api/hello');
|
||||||
|
constructor(private http: HttpClient) {}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
|
||||||
|
import { AppComponent } from './app.component';
|
||||||
|
import { HttpClientModule } from '@angular/common/http';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [AppComponent],
|
||||||
|
imports: [BrowserModule, HttpClientModule],
|
||||||
|
providers: [],
|
||||||
|
bootstrap: [AppComponent],
|
||||||
|
})
|
||||||
|
export class AppModule {}
|
|
@ -0,0 +1,3 @@
|
||||||
|
export const environment = {
|
||||||
|
production: true,
|
||||||
|
};
|
|
@ -0,0 +1,16 @@
|
||||||
|
// This file can be replaced during build by using the `fileReplacements` array.
|
||||||
|
// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.
|
||||||
|
// The list of file replacements can be found in `angular.json`.
|
||||||
|
|
||||||
|
export const environment = {
|
||||||
|
production: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For easier debugging in development mode, you can import the following file
|
||||||
|
* to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
|
||||||
|
*
|
||||||
|
* This import should be commented out in production mode because it will have a negative impact
|
||||||
|
* on performance if an error is thrown.
|
||||||
|
*/
|
||||||
|
// import 'zone.js/dist/zone-error'; // Included with Angular CLI.
|
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
|
@ -0,0 +1,13 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>ChatRoom</title>
|
||||||
|
<base href="/" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="icon" type="image/x-icon" href="favicon.ico" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<chat-room-root></chat-room-root>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,13 @@
|
||||||
|
import { enableProdMode } from '@angular/core';
|
||||||
|
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||||
|
|
||||||
|
import { AppModule } from './app/app.module';
|
||||||
|
import { environment } from './environments/environment';
|
||||||
|
|
||||||
|
if (environment.production) {
|
||||||
|
enableProdMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
platformBrowserDynamic()
|
||||||
|
.bootstrapModule(AppModule)
|
||||||
|
.catch((err) => console.error(err));
|
|
@ -0,0 +1,62 @@
|
||||||
|
/**
|
||||||
|
* This file includes polyfills needed by Angular and is loaded before the app.
|
||||||
|
* You can add your own extra polyfills to this file.
|
||||||
|
*
|
||||||
|
* This file is divided into 2 sections:
|
||||||
|
* 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
|
||||||
|
* 2. Application imports. Files imported after ZoneJS that should be loaded before your main
|
||||||
|
* file.
|
||||||
|
*
|
||||||
|
* The current setup is for so-called "evergreen" browsers; the last versions of browsers that
|
||||||
|
* automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
|
||||||
|
* Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
|
||||||
|
*
|
||||||
|
* Learn more in https://angular.io/guide/browser-support
|
||||||
|
*/
|
||||||
|
|
||||||
|
/***************************************************************************************************
|
||||||
|
* BROWSER POLYFILLS
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** IE10 and IE11 requires the following for NgClass support on SVG elements */
|
||||||
|
// import 'classlist.js'; // Run `npm install --save classlist.js`.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Web Animations `@angular/platform-browser/animations`
|
||||||
|
* Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
|
||||||
|
* Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
|
||||||
|
*/
|
||||||
|
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* By default, zone.js will patch all possible macroTask and DomEvents
|
||||||
|
* user can disable parts of macroTask/DomEvents patch by setting following flags
|
||||||
|
* because those flags need to be set before `zone.js` being loaded, and webpack
|
||||||
|
* will put import in the top of bundle, so user need to create a separate file
|
||||||
|
* in this directory (for example: zone-flags.ts), and put the following flags
|
||||||
|
* into that file, and then add the following code before importing zone.js.
|
||||||
|
* import './zone-flags';
|
||||||
|
*
|
||||||
|
* The flags allowed in zone-flags.ts are listed here.
|
||||||
|
*
|
||||||
|
* The following flags will work for all browsers.
|
||||||
|
*
|
||||||
|
* (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
|
||||||
|
* (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
|
||||||
|
* (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
|
||||||
|
*
|
||||||
|
* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
|
||||||
|
* with the following flag, it will bypass `zone.js` patch for IE/Edge
|
||||||
|
*
|
||||||
|
* (window as any).__Zone_enable_cross_context_check = true;
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/***************************************************************************************************
|
||||||
|
* Zone JS is required by default for Angular itself.
|
||||||
|
*/
|
||||||
|
import 'zone.js/dist/zone'; // Included with Angular CLI.
|
||||||
|
|
||||||
|
/***************************************************************************************************
|
||||||
|
* APPLICATION IMPORTS
|
||||||
|
*/
|
|
@ -0,0 +1 @@
|
||||||
|
/* You can add global styles to this file, and also import other style files */
|
|
@ -0,0 +1 @@
|
||||||
|
import 'jest-preset-angular';
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc",
|
||||||
|
"types": []
|
||||||
|
},
|
||||||
|
"files": ["src/main.ts", "src/polyfills.ts"]
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"include": ["**/*.ts"],
|
||||||
|
"compilerOptions": {
|
||||||
|
"types": ["jest", "node"]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"files": [],
|
||||||
|
"include": [],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.app.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.spec.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.editor.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc",
|
||||||
|
"module": "commonjs",
|
||||||
|
"types": ["jest", "node"]
|
||||||
|
},
|
||||||
|
"files": ["src/test-setup.ts"],
|
||||||
|
"include": ["**/*.spec.ts", "**/*.d.ts"]
|
||||||
|
}
|
|
@ -0,0 +1,104 @@
|
||||||
|
/**
|
||||||
|
* This file decorates the Angular CLI with the Nx CLI to enable features such as computation caching
|
||||||
|
* and faster execution of tasks.
|
||||||
|
*
|
||||||
|
* It does this by:
|
||||||
|
*
|
||||||
|
* - Patching the Angular CLI to warn you in case you accidentally use the undecorated ng command.
|
||||||
|
* - Symlinking the ng to nx command, so all commands run through the Nx CLI
|
||||||
|
* - Updating the package.json postinstall script to give you control over this script
|
||||||
|
*
|
||||||
|
* The Nx CLI decorates the Angular CLI, so the Nx CLI is fully compatible with it.
|
||||||
|
* Every command you run should work the same when using the Nx CLI, except faster.
|
||||||
|
*
|
||||||
|
* Because of symlinking you can still type `ng build/test/lint` in the terminal. The ng command, in this case,
|
||||||
|
* will point to nx, which will perform optimizations before invoking ng. So the Angular CLI is always invoked.
|
||||||
|
* The Nx CLI simply does some optimizations before invoking the Angular CLI.
|
||||||
|
*
|
||||||
|
* To opt out of this patch:
|
||||||
|
* - Replace occurrences of nx with ng in your package.json
|
||||||
|
* - Remove the script from your postinstall script in your package.json
|
||||||
|
* - Delete and reinstall your node_modules
|
||||||
|
*/
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
const os = require("os");
|
||||||
|
const cp = require("child_process");
|
||||||
|
const isWindows = os.platform() === "win32";
|
||||||
|
let output;
|
||||||
|
try {
|
||||||
|
output = require("@nrwl/workspace").output;
|
||||||
|
} catch (e) {
|
||||||
|
console.warn(
|
||||||
|
"Angular CLI could not be decorated to enable computation caching. Please ensure @nrwl/workspace is installed."
|
||||||
|
);
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paths to files being patched
|
||||||
|
*/
|
||||||
|
const angularCLIInitPath = "node_modules/@angular/cli/lib/cli/index.js";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Patch index.js to warn you if you invoke the undecorated Angular CLI.
|
||||||
|
*/
|
||||||
|
function patchAngularCLI(initPath) {
|
||||||
|
const angularCLIInit = fs.readFileSync(initPath, "utf-8").toString();
|
||||||
|
|
||||||
|
if (!angularCLIInit.includes("NX_CLI_SET")) {
|
||||||
|
fs.writeFileSync(
|
||||||
|
initPath,
|
||||||
|
`
|
||||||
|
if (!process.env['NX_CLI_SET']) {
|
||||||
|
const { output } = require('@nrwl/workspace');
|
||||||
|
output.warn({ title: 'The Angular CLI was invoked instead of the Nx CLI. Use "npx ng [command]" or "nx [command]" instead.' });
|
||||||
|
}
|
||||||
|
${angularCLIInit}
|
||||||
|
`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Symlink of ng to nx, so you can keep using `ng build/test/lint` and still
|
||||||
|
* invoke the Nx CLI and get the benefits of computation caching.
|
||||||
|
*/
|
||||||
|
function symlinkNgCLItoNxCLI() {
|
||||||
|
try {
|
||||||
|
const ngPath = "./node_modules/.bin/ng";
|
||||||
|
const nxPath = "./node_modules/.bin/nx";
|
||||||
|
if (isWindows) {
|
||||||
|
/**
|
||||||
|
* This is the most reliable way to create symlink-like behavior on Windows.
|
||||||
|
* Such that it works in all shells and works with npx.
|
||||||
|
*/
|
||||||
|
["", ".cmd", ".ps1"].forEach((ext) => {
|
||||||
|
if (fs.existsSync(nxPath + ext))
|
||||||
|
fs.writeFileSync(ngPath + ext, fs.readFileSync(nxPath + ext));
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// If unix-based, symlink
|
||||||
|
cp.execSync(`ln -sf ./nx ${ngPath}`);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
output.error({
|
||||||
|
title:
|
||||||
|
"Unable to create a symlink from the Angular CLI to the Nx CLI:" +
|
||||||
|
e.message,
|
||||||
|
});
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
symlinkNgCLItoNxCLI();
|
||||||
|
patchAngularCLI(angularCLIInitPath);
|
||||||
|
output.log({
|
||||||
|
title: "Angular CLI has been decorated to enable computation caching.",
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
output.error({
|
||||||
|
title: "Decoration of the Angular CLI did not complete successfully",
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
module.exports = {
|
||||||
|
projects: [
|
||||||
|
'<rootDir>/apps/chat-room',
|
||||||
|
'<rootDir>/apps/api',
|
||||||
|
'<rootDir>/libs/api-interfaces',
|
||||||
|
],
|
||||||
|
};
|
|
@ -0,0 +1,3 @@
|
||||||
|
const nxPreset = require('@nrwl/jest/preset');
|
||||||
|
|
||||||
|
module.exports = { ...nxPreset };
|
|
@ -0,0 +1 @@
|
||||||
|
{ "extends": "../../.eslintrc.json", "ignorePatterns": ["!**/*"], "rules": {} }
|
|
@ -0,0 +1,7 @@
|
||||||
|
# api-interfaces
|
||||||
|
|
||||||
|
This library was generated with [Nx](https://nx.dev).
|
||||||
|
|
||||||
|
## Running unit tests
|
||||||
|
|
||||||
|
Run `ng test api-interfaces` to execute the unit tests via [Jest](https://jestjs.io).
|
|
@ -0,0 +1,14 @@
|
||||||
|
module.exports = {
|
||||||
|
displayName: 'api-interfaces',
|
||||||
|
preset: '../../jest.preset.js',
|
||||||
|
globals: {
|
||||||
|
'ts-jest': {
|
||||||
|
tsConfig: '<rootDir>/tsconfig.spec.json',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
transform: {
|
||||||
|
'^.+\\.[tj]sx?$': 'ts-jest',
|
||||||
|
},
|
||||||
|
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
|
||||||
|
coverageDirectory: '../../coverage/libs/api-interfaces',
|
||||||
|
};
|
|
@ -0,0 +1 @@
|
||||||
|
export * from './lib/api-interfaces';
|
|
@ -0,0 +1,3 @@
|
||||||
|
export interface Message {
|
||||||
|
message: string;
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"files": [],
|
||||||
|
"include": [],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.lib.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.spec.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc",
|
||||||
|
"types": []
|
||||||
|
},
|
||||||
|
"exclude": ["**/*.spec.ts"],
|
||||||
|
"include": ["**/*.ts"]
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc",
|
||||||
|
"module": "commonjs",
|
||||||
|
"types": ["jest", "node"]
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"**/*.spec.ts",
|
||||||
|
"**/*.spec.tsx",
|
||||||
|
"**/*.spec.js",
|
||||||
|
"**/*.spec.jsx",
|
||||||
|
"**/*.d.ts"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
{
|
||||||
|
"npmScope": "chat-room",
|
||||||
|
"affected": {
|
||||||
|
"defaultBase": "master"
|
||||||
|
},
|
||||||
|
"implicitDependencies": {
|
||||||
|
"angular.json": "*",
|
||||||
|
"package.json": {
|
||||||
|
"dependencies": "*",
|
||||||
|
"devDependencies": "*"
|
||||||
|
},
|
||||||
|
"tsconfig.base.json": "*",
|
||||||
|
"tslint.json": "*",
|
||||||
|
".eslintrc.json": "*",
|
||||||
|
"nx.json": "*"
|
||||||
|
},
|
||||||
|
"tasksRunnerOptions": {
|
||||||
|
"default": {
|
||||||
|
"runner": "@nrwl/workspace/tasks-runners/default",
|
||||||
|
"options": {
|
||||||
|
"cacheableOperations": ["build", "lint", "test", "e2e"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"projects": {
|
||||||
|
"chat-room": {
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
|
"chat-room-e2e": {
|
||||||
|
"tags": [],
|
||||||
|
"implicitDependencies": ["chat-room"]
|
||||||
|
},
|
||||||
|
"api": {
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
|
"api-interfaces": {
|
||||||
|
"tags": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,80 @@
|
||||||
|
{
|
||||||
|
"name": "chat-room",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"license": "MIT",
|
||||||
|
"scripts": {
|
||||||
|
"ng": "nx",
|
||||||
|
"postinstall": "node ./decorate-angular-cli.js && ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points",
|
||||||
|
"nx": "nx",
|
||||||
|
"start": "ng serve",
|
||||||
|
"build": "ng build",
|
||||||
|
"test": "ng test",
|
||||||
|
"lint": "nx workspace-lint && ng lint",
|
||||||
|
"e2e": "ng e2e",
|
||||||
|
"affected:apps": "nx affected:apps",
|
||||||
|
"affected:libs": "nx affected:libs",
|
||||||
|
"affected:build": "nx affected:build",
|
||||||
|
"affected:e2e": "nx affected:e2e",
|
||||||
|
"affected:test": "nx affected:test",
|
||||||
|
"affected:lint": "nx affected:lint",
|
||||||
|
"affected:dep-graph": "nx affected:dep-graph",
|
||||||
|
"affected": "nx affected",
|
||||||
|
"format": "nx format:write",
|
||||||
|
"format:write": "nx format:write",
|
||||||
|
"format:check": "nx format:check",
|
||||||
|
"update": "ng update @nrwl/workspace",
|
||||||
|
"workspace-schematic": "nx workspace-schematic",
|
||||||
|
"dep-graph": "nx dep-graph",
|
||||||
|
"help": "nx help"
|
||||||
|
},
|
||||||
|
"private": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@angular/animations": "^10.1.0",
|
||||||
|
"@angular/common": "^10.1.0",
|
||||||
|
"@angular/compiler": "^10.1.0",
|
||||||
|
"@angular/core": "^10.1.0",
|
||||||
|
"@angular/forms": "^10.1.0",
|
||||||
|
"@angular/platform-browser": "^10.1.0",
|
||||||
|
"@angular/platform-browser-dynamic": "^10.1.0",
|
||||||
|
"@angular/router": "^10.1.0",
|
||||||
|
"@nestjs/common": "^7.0.0",
|
||||||
|
"@nestjs/core": "^7.0.0",
|
||||||
|
"@nestjs/platform-express": "^7.0.0",
|
||||||
|
"@nrwl/angular": "10.3.0",
|
||||||
|
"reflect-metadata": "^0.1.13",
|
||||||
|
"rxjs": "~6.5.5",
|
||||||
|
"zone.js": "^0.10.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@angular-devkit/build-angular": "~0.1001.3",
|
||||||
|
"@angular/cli": "~10.1.3",
|
||||||
|
"@angular/compiler-cli": "^10.1.0",
|
||||||
|
"@angular/language-service": "^10.1.0",
|
||||||
|
"@nestjs/schematics": "^7.0.0",
|
||||||
|
"@nestjs/testing": "^7.0.0",
|
||||||
|
"@nrwl/cli": "10.3.0",
|
||||||
|
"@nrwl/cypress": "10.3.0",
|
||||||
|
"@nrwl/eslint-plugin-nx": "10.3.0",
|
||||||
|
"@nrwl/jest": "10.3.0",
|
||||||
|
"@nrwl/nest": "10.3.0",
|
||||||
|
"@nrwl/node": "10.3.0",
|
||||||
|
"@nrwl/workspace": "10.3.0",
|
||||||
|
"@types/jest": "26.0.8",
|
||||||
|
"@types/node": "~8.9.4",
|
||||||
|
"@typescript-eslint/eslint-plugin": "4.3.0",
|
||||||
|
"@typescript-eslint/parser": "4.3.0",
|
||||||
|
"codelyzer": "~5.0.1",
|
||||||
|
"cypress": "^4.1.0",
|
||||||
|
"dotenv": "6.2.0",
|
||||||
|
"eslint": "7.10.0",
|
||||||
|
"eslint-config-prettier": "6.0.0",
|
||||||
|
"eslint-plugin-cypress": "^2.10.3",
|
||||||
|
"jest": "26.2.2",
|
||||||
|
"jest-preset-angular": "8.3.1",
|
||||||
|
"prettier": "2.0.4",
|
||||||
|
"ts-jest": "26.4.0",
|
||||||
|
"ts-node": "~7.0.0",
|
||||||
|
"tslint": "~6.0.0",
|
||||||
|
"typescript": "~4.0.3"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"extends": "../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../dist/out-tsc/tools",
|
||||||
|
"rootDir": ".",
|
||||||
|
"module": "commonjs",
|
||||||
|
"target": "es5",
|
||||||
|
"types": ["node"]
|
||||||
|
},
|
||||||
|
"include": ["**/*.ts"]
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"compileOnSave": false,
|
||||||
|
"compilerOptions": {
|
||||||
|
"rootDir": ".",
|
||||||
|
"sourceMap": true,
|
||||||
|
"declaration": false,
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"emitDecoratorMetadata": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"importHelpers": true,
|
||||||
|
"target": "es2015",
|
||||||
|
"module": "esnext",
|
||||||
|
"typeRoots": ["node_modules/@types"],
|
||||||
|
"lib": ["es2017", "dom"],
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"skipDefaultLibCheck": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"@chat-room/api-interfaces": ["libs/api-interfaces/src/index.ts"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"exclude": ["node_modules", "tmp"]
|
||||||
|
}
|
Loading…
Reference in New Issue