From a99496f2efd229b9250334f7eb9c0371b276fa33 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 8 Oct 2019 09:22:33 +0300 Subject: [PATCH] feat: create module template main app #1652 --- templates/app/angular/package.json | 2 +- templates/module/angular/.editorconfig | 13 ++ templates/module/angular/.gitignore | 48 +++++++ templates/module/angular/.npmrc | 1 + templates/module/angular/README.md | 27 ++++ templates/module/angular/angular.json | 136 ++++++++++++++++++ templates/module/angular/browserslist | 12 ++ .../module/angular/e2e/protractor.conf.js | 32 +++++ .../module/angular/e2e/src/app.e2e-spec.ts | 23 +++ templates/module/angular/e2e/src/app.po.ts | 11 ++ templates/module/angular/e2e/tsconfig.json | 13 ++ templates/module/angular/karma.conf.js | 32 +++++ templates/module/angular/package.json | 55 +++++++ .../angular/src/app/app-routing.module.ts | 25 ++++ .../module/angular/src/app/app.component.ts | 10 ++ .../module/angular/src/app/app.module.ts | 38 +++++ .../src/app/home/home-routing.module.ts | 18 +++ .../angular/src/app/home/home.component.html | 15 ++ .../angular/src/app/home/home.component.ts | 14 ++ .../angular/src/app/home/home.module.ts | 10 ++ .../app/lazy-libs/account-wrapper.module.ts | 7 + .../angular/src/app/shared/shared.module.ts | 14 ++ templates/module/angular/src/assets/.gitkeep | 0 .../src/environments/environment.hmr.ts | 25 ++++ .../src/environments/environment.prod.ts | 25 ++++ .../angular/src/environments/environment.ts | 25 ++++ templates/module/angular/src/favicon.ico | Bin 0 -> 5430 bytes templates/module/angular/src/index.html | 16 +++ templates/module/angular/src/main.ts | 20 +++ templates/module/angular/src/polyfills.ts | 63 ++++++++ templates/module/angular/src/styles.scss | 27 ++++ templates/module/angular/src/test.ts | 20 +++ templates/module/angular/tsconfig.app.json | 9 ++ templates/module/angular/tsconfig.json | 23 +++ templates/module/angular/tsconfig.spec.json | 18 +++ templates/module/angular/tslint.json | 92 ++++++++++++ 36 files changed, 918 insertions(+), 1 deletion(-) create mode 100644 templates/module/angular/.editorconfig create mode 100644 templates/module/angular/.gitignore create mode 100644 templates/module/angular/.npmrc create mode 100644 templates/module/angular/README.md create mode 100644 templates/module/angular/angular.json create mode 100644 templates/module/angular/browserslist create mode 100644 templates/module/angular/e2e/protractor.conf.js create mode 100644 templates/module/angular/e2e/src/app.e2e-spec.ts create mode 100644 templates/module/angular/e2e/src/app.po.ts create mode 100644 templates/module/angular/e2e/tsconfig.json create mode 100644 templates/module/angular/karma.conf.js create mode 100644 templates/module/angular/package.json create mode 100644 templates/module/angular/src/app/app-routing.module.ts create mode 100644 templates/module/angular/src/app/app.component.ts create mode 100644 templates/module/angular/src/app/app.module.ts create mode 100644 templates/module/angular/src/app/home/home-routing.module.ts create mode 100644 templates/module/angular/src/app/home/home.component.html create mode 100644 templates/module/angular/src/app/home/home.component.ts create mode 100644 templates/module/angular/src/app/home/home.module.ts create mode 100644 templates/module/angular/src/app/lazy-libs/account-wrapper.module.ts create mode 100644 templates/module/angular/src/app/shared/shared.module.ts create mode 100644 templates/module/angular/src/assets/.gitkeep create mode 100644 templates/module/angular/src/environments/environment.hmr.ts create mode 100644 templates/module/angular/src/environments/environment.prod.ts create mode 100644 templates/module/angular/src/environments/environment.ts create mode 100644 templates/module/angular/src/favicon.ico create mode 100644 templates/module/angular/src/index.html create mode 100644 templates/module/angular/src/main.ts create mode 100644 templates/module/angular/src/polyfills.ts create mode 100644 templates/module/angular/src/styles.scss create mode 100644 templates/module/angular/src/test.ts create mode 100644 templates/module/angular/tsconfig.app.json create mode 100644 templates/module/angular/tsconfig.json create mode 100644 templates/module/angular/tsconfig.spec.json create mode 100644 templates/module/angular/tslint.json diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 0ec7111eb6..47c4654cd2 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -26,8 +26,8 @@ "@angular/platform-browser-dynamic": "~8.2.8", "@angular/router": "~8.2.8", "@angularclass/hmr": "^2.1.3", - "@ngxs/devtools-plugin": "^3.5.0", "@ngxs/hmr-plugin": "^3.5.0", + "@ngxs/devtools-plugin": "^3.5.0", "rxjs": "~6.4.0", "tslib": "^1.10.0", "zone.js": "~0.9.1" diff --git a/templates/module/angular/.editorconfig b/templates/module/angular/.editorconfig new file mode 100644 index 0000000000..e89330a618 --- /dev/null +++ b/templates/module/angular/.editorconfig @@ -0,0 +1,13 @@ +# Editor configuration, see https://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 diff --git a/templates/module/angular/.gitignore b/templates/module/angular/.gitignore new file mode 100644 index 0000000000..c3569131e4 --- /dev/null +++ b/templates/module/angular/.gitignore @@ -0,0 +1,48 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc +# Only exists if Bazel was run +/bazel-out + +# dependencies +/node_modules + +# profiling files +chrome-profiler-events.json +speed-measure-plugin.json + +# 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 +.history/* + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db + +yarn.lock* \ No newline at end of file diff --git a/templates/module/angular/.npmrc b/templates/module/angular/.npmrc new file mode 100644 index 0000000000..5d05609c19 --- /dev/null +++ b/templates/module/angular/.npmrc @@ -0,0 +1 @@ +@volo:registry=http://192.168.1.45:4873/ \ No newline at end of file diff --git a/templates/module/angular/README.md b/templates/module/angular/README.md new file mode 100644 index 0000000000..787553e60c --- /dev/null +++ b/templates/module/angular/README.md @@ -0,0 +1,27 @@ +# MyProjectName + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.0.3. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). diff --git a/templates/module/angular/angular.json b/templates/module/angular/angular.json new file mode 100644 index 0000000000..5d5b8fae2b --- /dev/null +++ b/templates/module/angular/angular.json @@ -0,0 +1,136 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "myProjectName": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/myProjectName", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "aot": false, + "extractCss": true, + "assets": ["src/favicon.ico", "src/assets"], + "styles": [ + "src/styles.scss", + "node_modules/bootstrap/dist/css/bootstrap.min.css", + "node_modules/font-awesome/css/font-awesome.min.css", + "node_modules/primeng/resources/themes/nova-light/theme.css", + "node_modules/primeicons/primeicons.css", + "node_modules/primeng/resources/primeng.min.css" + ], + "scripts": [] + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "extractCss": true, + "namedChunks": false, + "aot": true, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + } + ] + }, + "hmr": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.hmr.ts" + } + ] + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "myProjectName:build" + }, + "configurations": { + "production": { + "browserTarget": "myProjectName:build:production" + }, + "hmr": { + "hmr": true, + "browserTarget": "myProjectName:build:hmr" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "myProjectName:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "assets": ["src/favicon.ico", "src/assets"], + "styles": [ + "src/styles.scss", + "node_modules/bootstrap/dist/css/bootstrap.min.css", + "node_modules/font-awesome/css/font-awesome.min.css", + "node_modules/primeng/resources/themes/nova-light/theme.css", + "node_modules/primeicons/primeicons.css", + "node_modules/primeng/resources/primeng.min.css" + ], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": ["tsconfig.app.json", "tsconfig.spec.json", "e2e/tsconfig.json"], + "exclude": ["**/node_modules/**"] + } + }, + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "myProjectName:serve" + }, + "configurations": { + "production": { + "devServerTarget": "myProjectName:serve:production" + } + } + } + } + } + }, + "defaultProject": "myProjectName" +} diff --git a/templates/module/angular/browserslist b/templates/module/angular/browserslist new file mode 100644 index 0000000000..80848532e4 --- /dev/null +++ b/templates/module/angular/browserslist @@ -0,0 +1,12 @@ +# 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 + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +> 0.5% +last 2 versions +Firefox ESR +not dead +not IE 9-11 # For IE 9-11 support, remove 'not'. \ No newline at end of file diff --git a/templates/module/angular/e2e/protractor.conf.js b/templates/module/angular/e2e/protractor.conf.js new file mode 100644 index 0000000000..73e4e6806c --- /dev/null +++ b/templates/module/angular/e2e/protractor.conf.js @@ -0,0 +1,32 @@ +// @ts-check +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter'); + +/** + * @type { import("protractor").Config } + */ +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './src/**/*.e2e-spec.ts' + ], + capabilities: { + 'browserName': 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: require('path').join(__dirname, './tsconfig.json') + }); + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; \ No newline at end of file diff --git a/templates/module/angular/e2e/src/app.e2e-spec.ts b/templates/module/angular/e2e/src/app.e2e-spec.ts new file mode 100644 index 0000000000..ddea6e46a7 --- /dev/null +++ b/templates/module/angular/e2e/src/app.e2e-spec.ts @@ -0,0 +1,23 @@ +import { AppPage } from './app.po'; +import { browser, logging } from 'protractor'; + +describe('workspace-project App', () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it('should display welcome message', () => { + page.navigateTo(); + expect(page.getTitleText()).toEqual('Welcome to myProjectName!'); + }); + + afterEach(async () => { + // Assert that there are no errors emitted from the browser + const logs = await browser.manage().logs().get(logging.Type.BROWSER); + expect(logs).not.toContain(jasmine.objectContaining({ + level: logging.Level.SEVERE, + } as logging.Entry)); + }); +}); diff --git a/templates/module/angular/e2e/src/app.po.ts b/templates/module/angular/e2e/src/app.po.ts new file mode 100644 index 0000000000..5776aa9eb8 --- /dev/null +++ b/templates/module/angular/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class AppPage { + navigateTo() { + return browser.get(browser.baseUrl) as Promise; + } + + getTitleText() { + return element(by.css('app-root h1')).getText() as Promise; + } +} diff --git a/templates/module/angular/e2e/tsconfig.json b/templates/module/angular/e2e/tsconfig.json new file mode 100644 index 0000000000..39b800f789 --- /dev/null +++ b/templates/module/angular/e2e/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "module": "commonjs", + "target": "es5", + "types": [ + "jasmine", + "jasminewd2", + "node" + ] + } +} diff --git a/templates/module/angular/karma.conf.js b/templates/module/angular/karma.conf.js new file mode 100644 index 0000000000..4e919a630c --- /dev/null +++ b/templates/module/angular/karma.conf.js @@ -0,0 +1,32 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, './coverage/myProjectName'), + reports: ['html', 'lcovonly', 'text-summary'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json new file mode 100644 index 0000000000..09791aefac --- /dev/null +++ b/templates/module/angular/package.json @@ -0,0 +1,55 @@ +{ + "name": "my-project-name", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "start:hmr": "ng serve --configuration hmr", + "build": "ng build", + "build:prod": "ng build --configuration production", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@abp/ng.account": "^0.9.0", + "@abp/ng.theme.basic": "^0.9.0", + "@angular/animations": "~8.2.8", + "@angular/common": "~8.2.8", + "@angular/compiler": "~8.2.8", + "@angular/core": "~8.2.8", + "@angular/forms": "~8.2.8", + "@angular/platform-browser": "~8.2.8", + "@angular/platform-browser-dynamic": "~8.2.8", + "@angular/router": "~8.2.8", + "@ngxs/devtools-plugin": "^3.5.0", + "@angularclass/hmr": "^2.1.3", + "@ngxs/hmr-plugin": "^3.5.0", + "rxjs": "~6.4.0", + "tslib": "^1.10.0", + "zone.js": "~0.9.1" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~0.803.6", + "@angular/cli": "~8.3.6", + "@angular/compiler-cli": "~8.2.8", + "@angular/language-service": "~8.2.8", + "@types/jasmine": "~3.3.8", + "@types/jasminewd2": "~2.0.3", + "@types/node": "~8.9.4", + "codelyzer": "^5.0.0", + "jasmine-core": "~3.4.0", + "jasmine-spec-reporter": "~4.2.1", + "karma": "~4.1.0", + "karma-chrome-launcher": "~2.2.0", + "karma-coverage-istanbul-reporter": "~2.0.1", + "karma-jasmine": "~2.0.1", + "karma-jasmine-html-reporter": "^1.4.0", + "ngxs-schematic": "^1.1.9", + "protractor": "~5.4.0", + "ts-node": "~7.0.0", + "tslint": "~5.15.0", + "typescript": "~3.5.3" + } +} diff --git a/templates/module/angular/src/app/app-routing.module.ts b/templates/module/angular/src/app/app-routing.module.ts new file mode 100644 index 0000000000..f65d8238eb --- /dev/null +++ b/templates/module/angular/src/app/app-routing.module.ts @@ -0,0 +1,25 @@ +import { ABP } from '@abp/ng.core'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +const routes: Routes = [ + { + path: '', + loadChildren: () => import('./home/home.module').then(m => m.HomeModule), + data: { + routes: { + name: '::Menu:Home', + } as ABP.Route, + }, + }, + { + path: 'account', + loadChildren: () => import('./lazy-libs/account-wrapper.module').then(m => m.AccountWrapperModule), + }, +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule], +}) +export class AppRoutingModule {} diff --git a/templates/module/angular/src/app/app.component.ts b/templates/module/angular/src/app/app.component.ts new file mode 100644 index 0000000000..bf2a27962a --- /dev/null +++ b/templates/module/angular/src/app/app.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-root', + template: ` + + + `, +}) +export class AppComponent {} diff --git a/templates/module/angular/src/app/app.module.ts b/templates/module/angular/src/app/app.module.ts new file mode 100644 index 0000000000..9bc1839b11 --- /dev/null +++ b/templates/module/angular/src/app/app.module.ts @@ -0,0 +1,38 @@ +import { CoreModule } from '@abp/ng.core'; +import { LAYOUTS } from '@abp/ng.theme.basic'; +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { NgxsReduxDevtoolsPluginModule } from '@ngxs/devtools-plugin'; +import { NgxsModule } from '@ngxs/store'; +import { OAuthModule } from 'angular-oauth2-oidc'; +import { environment } from '../environments/environment'; +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { SharedModule } from './shared/shared.module'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { AccountConfigModule } from '@abp/ng.account.config'; + +@NgModule({ + declarations: [AppComponent], + imports: [ + ThemeSharedModule.forRoot(), + CoreModule.forRoot({ + environment, + requirements: { + layouts: LAYOUTS, + }, + }), + OAuthModule.forRoot(), + NgxsModule.forRoot([]), + AccountConfigModule.forRoot({ redirectUrl: '/' }), + BrowserModule, + BrowserAnimationsModule, + AppRoutingModule, + SharedModule, + + NgxsReduxDevtoolsPluginModule.forRoot({ disabled: environment.production }), + ], + bootstrap: [AppComponent], +}) +export class AppModule {} diff --git a/templates/module/angular/src/app/home/home-routing.module.ts b/templates/module/angular/src/app/home/home-routing.module.ts new file mode 100644 index 0000000000..367affb583 --- /dev/null +++ b/templates/module/angular/src/app/home/home-routing.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { HomeComponent } from './home.component'; +import { ApplicationLayoutComponent } from '@abp/ng.theme.basic'; + +const routes: Routes = [ + { + path: '', + component: ApplicationLayoutComponent, + children: [{ path: '', component: HomeComponent }], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class HomeRoutingModule {} diff --git a/templates/module/angular/src/app/home/home.component.html b/templates/module/angular/src/app/home/home.component.html new file mode 100644 index 0000000000..4fafc67398 --- /dev/null +++ b/templates/module/angular/src/app/home/home.component.html @@ -0,0 +1,15 @@ +
+
{{ '::Welcome' | abpLocalization }}
+
+

+ {{ '::LongWelcomeMessage' | abpLocalization }} +

+

+ {{ 'AbpIdentity::Login' | abpLocalization }} +

+
+

abp.io

+
+
diff --git a/templates/module/angular/src/app/home/home.component.ts b/templates/module/angular/src/app/home/home.component.ts new file mode 100644 index 0000000000..aa56d34131 --- /dev/null +++ b/templates/module/angular/src/app/home/home.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { OAuthService } from 'angular-oauth2-oidc'; + +@Component({ + selector: 'abp-home', + templateUrl: './home.component.html', +}) +export class HomeComponent { + get hasLoggedIn(): boolean { + return this.oAuthService.hasValidAccessToken(); + } + + constructor(private oAuthService: OAuthService) {} +} diff --git a/templates/module/angular/src/app/home/home.module.ts b/templates/module/angular/src/app/home/home.module.ts new file mode 100644 index 0000000000..72d20ccc65 --- /dev/null +++ b/templates/module/angular/src/app/home/home.module.ts @@ -0,0 +1,10 @@ +import { NgModule } from '@angular/core'; +import { SharedModule } from '../shared/shared.module'; +import { HomeRoutingModule } from './home-routing.module'; +import { HomeComponent } from './home.component'; + +@NgModule({ + declarations: [HomeComponent], + imports: [SharedModule, HomeRoutingModule], +}) +export class HomeModule {} diff --git a/templates/module/angular/src/app/lazy-libs/account-wrapper.module.ts b/templates/module/angular/src/app/lazy-libs/account-wrapper.module.ts new file mode 100644 index 0000000000..7130bb1a1a --- /dev/null +++ b/templates/module/angular/src/app/lazy-libs/account-wrapper.module.ts @@ -0,0 +1,7 @@ +import { NgModule } from '@angular/core'; +import { AccountModule } from '@abp/ng.account'; + +@NgModule({ + imports: [AccountModule], +}) +export class AccountWrapperModule {} diff --git a/templates/module/angular/src/app/shared/shared.module.ts b/templates/module/angular/src/app/shared/shared.module.ts new file mode 100644 index 0000000000..6bae4ea332 --- /dev/null +++ b/templates/module/angular/src/app/shared/shared.module.ts @@ -0,0 +1,14 @@ +import { CoreModule } from '@abp/ng.core'; +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgModule } from '@angular/core'; +import { ThemeBasicModule } from '@abp/ng.theme.basic'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { TableModule } from 'primeng/table'; + +@NgModule({ + declarations: [], + imports: [CoreModule, ThemeSharedModule, ThemeBasicModule, TableModule, NgbDropdownModule], + exports: [CoreModule, ThemeSharedModule, ThemeBasicModule, TableModule, NgbDropdownModule], + providers: [], +}) +export class SharedModule {} diff --git a/templates/module/angular/src/assets/.gitkeep b/templates/module/angular/src/assets/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/templates/module/angular/src/environments/environment.hmr.ts b/templates/module/angular/src/environments/environment.hmr.ts new file mode 100644 index 0000000000..64e134b252 --- /dev/null +++ b/templates/module/angular/src/environments/environment.hmr.ts @@ -0,0 +1,25 @@ +export const environment = { + production: false, + hmr: true, + application: { + name: 'MyProjectName', + logoUrl: '', + }, + oAuthConfig: { + issuer: 'https://localhost:44305', + clientId: 'MyProjectName_App', + dummyClientSecret: '1q2w3e*', + scope: 'MyProjectName', + showDebugInformation: true, + oidc: false, + requireHttps: true, + }, + apis: { + default: { + url: 'https://localhost:44305', + }, + }, + localization: { + defaultResourceName: 'MyProjectName', + }, +}; diff --git a/templates/module/angular/src/environments/environment.prod.ts b/templates/module/angular/src/environments/environment.prod.ts new file mode 100644 index 0000000000..5b42ebace3 --- /dev/null +++ b/templates/module/angular/src/environments/environment.prod.ts @@ -0,0 +1,25 @@ +export const environment = { + production: true, + hmr: false, + application: { + name: 'MyProjectName', + logoUrl: '', + }, + oAuthConfig: { + issuer: 'https://localhost:44305', + clientId: 'MyProjectName_App', + dummyClientSecret: '1q2w3e*', + scope: 'MyProjectName', + showDebugInformation: true, + oidc: false, + requireHttps: true, + }, + apis: { + default: { + url: 'https://localhost:44305', + }, + }, + localization: { + defaultResourceName: 'MyProjectName', + }, +}; diff --git a/templates/module/angular/src/environments/environment.ts b/templates/module/angular/src/environments/environment.ts new file mode 100644 index 0000000000..ca462ff043 --- /dev/null +++ b/templates/module/angular/src/environments/environment.ts @@ -0,0 +1,25 @@ +export const environment = { + production: false, + hmr: false, + application: { + name: 'MyProjectName', + logoUrl: '', + }, + oAuthConfig: { + issuer: 'https://localhost:44305', + clientId: 'MyProjectName_App', + dummyClientSecret: '1q2w3e*', + scope: 'MyProjectName', + showDebugInformation: true, + oidc: false, + requireHttps: true, + }, + apis: { + default: { + url: 'https://localhost:44305', + }, + }, + localization: { + defaultResourceName: 'MyProjectName', + }, +}; diff --git a/templates/module/angular/src/favicon.ico b/templates/module/angular/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8081c7ceaf2be08bf59010158c586170d9d2d517 GIT binary patch literal 5430 zcmc(je{54#6vvCoAI3i*G5%$U7!sA3wtMZ$fH6V9C`=eXGJb@R1%(I_{vnZtpD{6n z5Pl{DmxzBDbrB>}`90e12m8T*36WoeDLA&SD_hw{H^wM!cl_RWcVA!I+x87ee975; z@4kD^=bYPn&pmG@(+JZ`rqQEKxW<}RzhW}I!|ulN=fmjVi@x{p$cC`)5$a!)X&U+blKNvN5tg=uLvuLnuqRM;Yc*swiexsoh#XPNu{9F#c`G zQLe{yWA(Y6(;>y|-efAy11k<09(@Oo1B2@0`PtZSkqK&${ zgEY}`W@t{%?9u5rF?}Y7OL{338l*JY#P!%MVQY@oqnItpZ}?s z!r?*kwuR{A@jg2Chlf0^{q*>8n5Ir~YWf*wmsh7B5&EpHfd5@xVaj&gqsdui^spyL zB|kUoblGoO7G(MuKTfa9?pGH0@QP^b#!lM1yHWLh*2iq#`C1TdrnO-d#?Oh@XV2HK zKA{`eo{--^K&MW66Lgsktfvn#cCAc*(}qsfhrvOjMGLE?`dHVipu1J3Kgr%g?cNa8 z)pkmC8DGH~fG+dlrp(5^-QBeEvkOvv#q7MBVLtm2oD^$lJZx--_=K&Ttd=-krx(Bb zcEoKJda@S!%%@`P-##$>*u%T*mh+QjV@)Qa=Mk1?#zLk+M4tIt%}wagT{5J%!tXAE;r{@=bb%nNVxvI+C+$t?!VJ@0d@HIyMJTI{vEw0Ul ze(ha!e&qANbTL1ZneNl45t=#Ot??C0MHjjgY8%*mGisN|S6%g3;Hlx#fMNcL<87MW zZ>6moo1YD?P!fJ#Jb(4)_cc50X5n0KoDYfdPoL^iV`k&o{LPyaoqMqk92wVM#_O0l z09$(A-D+gVIlq4TA&{1T@BsUH`Bm=r#l$Z51J-U&F32+hfUP-iLo=jg7Xmy+WLq6_tWv&`wDlz#`&)Jp~iQf zZP)tu>}pIIJKuw+$&t}GQuqMd%Z>0?t%&BM&Wo^4P^Y z)c6h^f2R>X8*}q|bblAF?@;%?2>$y+cMQbN{X$)^R>vtNq_5AB|0N5U*d^T?X9{xQnJYeU{ zoZL#obI;~Pp95f1`%X3D$Mh*4^?O?IT~7HqlWguezmg?Ybq|7>qQ(@pPHbE9V?f|( z+0xo!#m@Np9PljsyxBY-UA*{U*la#8Wz2sO|48_-5t8%_!n?S$zlGe+NA%?vmxjS- zHE5O3ZarU=X}$7>;Okp(UWXJxI%G_J-@IH;%5#Rt$(WUX?6*Ux!IRd$dLP6+SmPn= z8zjm4jGjN772R{FGkXwcNv8GBcZI#@Y2m{RNF_w8(Z%^A*!bS*!}s6sh*NnURytky humW;*g7R+&|Ledvc- + + + + MyProjectName + + + + + + + +
+
+ + diff --git a/templates/module/angular/src/main.ts b/templates/module/angular/src/main.ts new file mode 100644 index 0000000000..bbdf75c32d --- /dev/null +++ b/templates/module/angular/src/main.ts @@ -0,0 +1,20 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { BootstrapModuleFn as Bootstrap, hmr, WebpackModule } from '@ngxs/hmr-plugin'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +declare const module: WebpackModule; + +if (environment.production) { + enableProdMode(); +} + +const bootstrap: Bootstrap = () => platformBrowserDynamic().bootstrapModule(AppModule); + +if (environment.hmr) { + hmr(module, bootstrap).catch(err => console.error(err)); +} else { + bootstrap().catch(err => console.log(err)); +} diff --git a/templates/module/angular/src/polyfills.ts b/templates/module/angular/src/polyfills.ts new file mode 100644 index 0000000000..aa665d6b87 --- /dev/null +++ b/templates/module/angular/src/polyfills.ts @@ -0,0 +1,63 @@ +/** + * 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.ts'; + * + * 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 + */ diff --git a/templates/module/angular/src/styles.scss b/templates/module/angular/src/styles.scss new file mode 100644 index 0000000000..d62aefa968 --- /dev/null +++ b/templates/module/angular/src/styles.scss @@ -0,0 +1,27 @@ +/* You can add global styles to this file, and also import other style files */ + +@keyframes donut-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.donut { + display: inline-block; + border: 4px solid rgba(0, 0, 0, 0.1); + border-left-color: #7983ff; + border-radius: 50%; + width: 30px; + height: 30px; + animation: donut-spin 1.2s linear infinite; + + &.centered { + position: fixed; + top: 50%; + left: 50%; + /* bring your own prefixes */ + transform: translate(-50%, -50%); + } +} diff --git a/templates/module/angular/src/test.ts b/templates/module/angular/src/test.ts new file mode 100644 index 0000000000..16317897b1 --- /dev/null +++ b/templates/module/angular/src/test.ts @@ -0,0 +1,20 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: any; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/templates/module/angular/tsconfig.app.json b/templates/module/angular/tsconfig.app.json new file mode 100644 index 0000000000..b750221da5 --- /dev/null +++ b/templates/module/angular/tsconfig.app.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/test.ts", "src/**/*.spec.ts"] +} diff --git a/templates/module/angular/tsconfig.json b/templates/module/angular/tsconfig.json new file mode 100644 index 0000000000..0a91f81078 --- /dev/null +++ b/templates/module/angular/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "module": "esnext", + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", + "typeRoots": [ + "node_modules/@types" + ], + "lib": [ + "es2018", + "dom" + ] + } +} diff --git a/templates/module/angular/tsconfig.spec.json b/templates/module/angular/tsconfig.spec.json new file mode 100644 index 0000000000..6400fde7d5 --- /dev/null +++ b/templates/module/angular/tsconfig.spec.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/templates/module/angular/tslint.json b/templates/module/angular/tslint.json new file mode 100644 index 0000000000..188bd78d32 --- /dev/null +++ b/templates/module/angular/tslint.json @@ -0,0 +1,92 @@ +{ + "extends": "tslint:recommended", + "rules": { + "array-type": false, + "arrow-parens": false, + "deprecation": { + "severity": "warn" + }, + "component-class-suffix": true, + "contextual-lifecycle": true, + "directive-class-suffix": true, + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ], + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "interface-name": false, + "max-classes-per-file": false, + "max-line-length": [ + true, + 140 + ], + "member-access": false, + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-consecutive-blank-lines": false, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-empty": false, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-switch-case-fall-through": true, + "no-use-before-declare": true, + "no-var-requires": false, + "object-literal-key-quotes": [ + true, + "as-needed" + ], + "object-literal-sort-keys": false, + "ordered-imports": false, + "quotemark": [ + true, + "single" + ], + "trailing-comma": false, + "no-conflicting-lifecycle": true, + "no-host-metadata-property": true, + "no-input-rename": true, + "no-inputs-metadata-property": true, + "no-output-native": true, + "no-output-on-prefix": true, + "no-output-rename": true, + "no-outputs-metadata-property": true, + "template-banana-in-box": true, + "template-no-negated-async": true, + "use-lifecycle-interface": true, + "use-pipe-transform-interface": true + }, + "rulesDirectory": [ + "codelyzer" + ] +} \ No newline at end of file