32 |
33 |
51 |
52 | `;
53 | fs.writeFileSync(`${clientDistDir}/index.html`, html);
54 | }
55 | }
56 |
57 | const generator = new DummyPageGenerator();
58 | generator.start();
59 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846
3 | "recommendations": ["angular.ng-template"]
4 | }
5 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
3 | "version": "0.2.0",
4 | "configurations": [
5 | {
6 | "name": "Debug for client",
7 | "type": "chrome",
8 | "request": "launch",
9 | "preLaunchTask": "npm: start:dev",
10 | "webRoot": "${workspaceFolder}/client",
11 | "url": "http://localhost:4200/"
12 | },
13 | {
14 | "name": "ng test",
15 | "type": "chrome",
16 | "request": "launch",
17 | "preLaunchTask": "npm: test",
18 | "url": "http://localhost:9876/debug.html"
19 | }
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558
3 | "version": "2.0.0",
4 | "tasks": [
5 | {
6 | "type": "npm",
7 | "script": "start:dev",
8 | "isBackground": true,
9 | "problemMatcher": {
10 | "owner": "typescript",
11 | "pattern": "$tsc",
12 | "background": {
13 | "activeOnStart": true,
14 | "beginsPattern": {
15 | "regexp": "(.*?)"
16 | },
17 | "endsPattern": {
18 | "regexp": "bundle generation complete"
19 | }
20 | }
21 | }
22 | },
23 | {
24 | "type": "npm",
25 | "script": "test",
26 | "isBackground": true,
27 | "problemMatcher": {
28 | "owner": "typescript",
29 | "pattern": "$tsc",
30 | "background": {
31 | "activeOnStart": true,
32 | "beginsPattern": {
33 | "regexp": "(.*?)"
34 | },
35 | "endsPattern": {
36 | "regexp": "bundle generation complete"
37 | }
38 | }
39 | }
40 | }
41 | ]
42 | }
43 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:22-slim
2 |
3 | WORKDIR /opt/app/
4 |
5 | EXPOSE 3000
6 |
7 | ARG NODE_ENV="production"
8 | ENV NODE_ENV "${NODE_ENV}"
9 |
10 | # Install npm modules for app
11 | COPY package.json ./
12 | COPY client/package.json ./client/
13 | COPY server/package.json ./server/
14 |
15 | RUN echo "Installing npm modules..." && \
16 | NODE_ENV=development npm install || exit 1 && \
17 | echo "npm modules installed." && \
18 | npm cache clean --force
19 |
20 | # Copy files for app
21 | COPY . /opt/app/
22 |
23 | # Build for production env
24 | RUN echo "Building app...\n" && \
25 | npm run build || exit 1 && \
26 | echo "build was completed."
27 |
28 | # Start app
29 | CMD ["npm", "start"]
30 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Creative Commons Legal Code
2 |
3 | CC0 1.0 Universal
4 |
5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
12 | HEREUNDER.
13 |
14 | Statement of Purpose
15 |
16 | The laws of most jurisdictions throughout the world automatically confer
17 | exclusive Copyright and Related Rights (defined below) upon the creator
18 | and subsequent owner(s) (each and all, an "owner") of an original work of
19 | authorship and/or a database (each, a "Work").
20 |
21 | Certain owners wish to permanently relinquish those rights to a Work for
22 | the purpose of contributing to a commons of creative, cultural and
23 | scientific works ("Commons") that the public can reliably and without fear
24 | of later claims of infringement build upon, modify, incorporate in other
25 | works, reuse and redistribute as freely as possible in any form whatsoever
26 | and for any purposes, including without limitation commercial purposes.
27 | These owners may contribute to the Commons to promote the ideal of a free
28 | culture and the further production of creative, cultural and scientific
29 | works, or to gain reputation or greater distribution for their Work in
30 | part through the use and efforts of others.
31 |
32 | For these and/or other purposes and motivations, and without any
33 | expectation of additional consideration or compensation, the person
34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she
35 | is an owner of Copyright and Related Rights in the Work, voluntarily
36 | elects to apply CC0 to the Work and publicly distribute the Work under its
37 | terms, with knowledge of his or her Copyright and Related Rights in the
38 | Work and the meaning and intended legal effect of CC0 on those rights.
39 |
40 | 1. Copyright and Related Rights. A Work made available under CC0 may be
41 | protected by copyright and related or neighboring rights ("Copyright and
42 | Related Rights"). Copyright and Related Rights include, but are not
43 | limited to, the following:
44 |
45 | i. the right to reproduce, adapt, distribute, perform, display,
46 | communicate, and translate a Work;
47 | ii. moral rights retained by the original author(s) and/or performer(s);
48 | iii. publicity and privacy rights pertaining to a person's image or
49 | likeness depicted in a Work;
50 | iv. rights protecting against unfair competition in regards to a Work,
51 | subject to the limitations in paragraph 4(a), below;
52 | v. rights protecting the extraction, dissemination, use and reuse of data
53 | in a Work;
54 | vi. database rights (such as those arising under Directive 96/9/EC of the
55 | European Parliament and of the Council of 11 March 1996 on the legal
56 | protection of databases, and under any national implementation
57 | thereof, including any amended or successor version of such
58 | directive); and
59 | vii. other similar, equivalent or corresponding rights throughout the
60 | world based on applicable law or treaty, and any national
61 | implementations thereof.
62 |
63 | 2. Waiver. To the greatest extent permitted by, but not in contravention
64 | of, applicable law, Affirmer hereby overtly, fully, permanently,
65 | irrevocably and unconditionally waives, abandons, and surrenders all of
66 | Affirmer's Copyright and Related Rights and associated claims and causes
67 | of action, whether now known or unknown (including existing as well as
68 | future claims and causes of action), in the Work (i) in all territories
69 | worldwide, (ii) for the maximum duration provided by applicable law or
70 | treaty (including future time extensions), (iii) in any current or future
71 | medium and for any number of copies, and (iv) for any purpose whatsoever,
72 | including without limitation commercial, advertising or promotional
73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
74 | member of the public at large and to the detriment of Affirmer's heirs and
75 | successors, fully intending that such Waiver shall not be subject to
76 | revocation, rescission, cancellation, termination, or any other legal or
77 | equitable action to disrupt the quiet enjoyment of the Work by the public
78 | as contemplated by Affirmer's express Statement of Purpose.
79 |
80 | 3. Public License Fallback. Should any part of the Waiver for any reason
81 | be judged legally invalid or ineffective under applicable law, then the
82 | Waiver shall be preserved to the maximum extent permitted taking into
83 | account Affirmer's express Statement of Purpose. In addition, to the
84 | extent the Waiver is so judged Affirmer hereby grants to each affected
85 | person a royalty-free, non transferable, non sublicensable, non exclusive,
86 | irrevocable and unconditional license to exercise Affirmer's Copyright and
87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the
88 | maximum duration provided by applicable law or treaty (including future
89 | time extensions), (iii) in any current or future medium and for any number
90 | of copies, and (iv) for any purpose whatsoever, including without
91 | limitation commercial, advertising or promotional purposes (the
92 | "License"). The License shall be deemed effective as of the date CC0 was
93 | applied by Affirmer to the Work. Should any part of the License for any
94 | reason be judged legally invalid or ineffective under applicable law, such
95 | partial invalidity or ineffectiveness shall not invalidate the remainder
96 | of the License, and in such case Affirmer hereby affirms that he or she
97 | will not (i) exercise any of his or her remaining Copyright and Related
98 | Rights in the Work or (ii) assert any associated claims and causes of
99 | action with respect to the Work, in either case contrary to Affirmer's
100 | express Statement of Purpose.
101 |
102 | 4. Limitations and Disclaimers.
103 |
104 | a. No trademark or patent rights held by Affirmer are waived, abandoned,
105 | surrendered, licensed or otherwise affected by this document.
106 | b. Affirmer offers the Work as-is and makes no representations or
107 | warranties of any kind concerning the Work, express, implied,
108 | statutory or otherwise, including without limitation warranties of
109 | title, merchantability, fitness for a particular purpose, non
110 | infringement, or the absence of latent or other defects, accuracy, or
111 | the present or absence of errors, whether or not discoverable, all to
112 | the greatest extent permissible under applicable law.
113 | c. Affirmer disclaims responsibility for clearing rights of other persons
114 | that may apply to the Work or any use thereof, including without
115 | limitation any person's Copyright and Related Rights in the Work.
116 | Further, Affirmer disclaims responsibility for obtaining any necessary
117 | consents, permissions or other rights required for any use of the
118 | Work.
119 | d. Affirmer understands and acknowledges that Creative Commons is not a
120 | party to this document and has no duty or obligation with respect to
121 | this CC0 or use of the Work.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # angular-nest
2 |
3 | Simple web app template with Angular + NestJS + ng-openapi-gen + Angular Material.
4 |
5 | Deployable on Heroku, Render, Google App Engine (GAE), Cloud Run and other hosting services using with/without Docker ([learn more](https://github.com/mugifly/angular-nest/wiki/#Deployments)).
6 |
7 | [](https://github.com/mugifly/angular-nest/actions/workflows/build.yml)
8 |
9 | ---
10 |
11 | ## Key Elements
12 |
13 | There is some variations... https://github.com/mugifly/angular-nest/wiki#variations
14 |
15 | - Angular -- for Frontend app.
16 | - NestJS -- for Backend app.
17 | - ng-openapi-gen -- for API Client generation.
18 | - Angular Material -- for UI.
19 | - NOTE: There is also a [vanilla branch](https://github.com/mugifly/angular-nest/tree/vanilla) that doesn't include Angular Material.
20 | - Docker -- for Production environment.
21 | - NOTE: Deployments without Docker are also supported.
22 | - Karma + Jasmine -- for Unit testing of Frontend (with Puppeteer + Headless Chromium)
23 | - Jest -- for Unit testing of Backend
24 | - GitHub Actions -- for CI
25 | - npm Workspaces - for Monorepo structure.
26 |
27 | ---
28 |
29 | ## Quick Start for Development
30 |
31 | ### StackBlitz
32 |
33 | StackBlitz lets you quickly run and edit your source code in your browser.
34 |
35 | [](https://stackblitz.com/github/mugifly/angular-nest/tree/master?file=client%2Fsrc%2Fapp%2Fapp.component.html)
36 |
37 | ### Local
38 |
39 | Before you start, you should install the following softwares:
40 |
41 | - Git
42 |
43 | - Node.js v22+
44 |
45 | - Visual Studio Code
46 |
47 | Next, please [Create a new repository from this repository](https://github.com/mugifly/angular-nest/generate).
48 |
49 | Then, execute as the following in your terminal:
50 |
51 | ```
52 | $ git clone git@github.com:YOUR_GITHUB_NAME/angular-nest.git
53 | $ cd angular-nest/
54 |
55 | $ npm install
56 |
57 | $ npm run start:dev
58 | ```
59 |
60 | Finally, open the web browser and navigate to `http://localhost:4200/`.
61 | Also, when you edit the frontend source-code, auto-reloading applies your changes to the browser immediately.
62 |
63 | An API documentation is generated by Swagger UI, and you can access it at `http://localhost:4200/api/docs`.
64 |
65 | See the [Wiki](https://github.com/mugifly/angular-nest/wiki/) for additional information.
66 | You'll find tips for implementing database connectivity, guides for future updates, and more.
67 |
68 | ---
69 |
70 | ## Quick Start for Deployment
71 |
72 | This app supports direct deployment to [various hosting services](https://github.com/mugifly/angular-nest/wiki/#Deployments) as a production environment.
73 |
74 | It's also very easy to automatic-deployment, because you don't have to run the build process locally or in CI.
75 |
76 | ### Deployment on Heroku
77 |
78 | [](https://heroku.com/deploy)
79 |
80 | This app can be deployed either to the `Heroku` stack (Node.js buildpack based) or the `Container` stack (Docker based).
81 |
82 | Please see [Deploy to Heroku](https://github.com/mugifly/angular-nest/wiki/Deploy-to-Heroku) page for more informations.
83 |
84 | ### Deployment on Render
85 |
86 | [](https://render.com/deploy)
87 |
88 | This app can be deployed either as a Node.js application or Docker based application.
89 |
90 | Please see [Deploy to Render](https://github.com/mugifly/angular-nest/wiki/Deploy-to-Render) page for more informations.
91 |
92 | ### Deployment on other servers (with/without Docker)
93 |
94 | https://github.com/mugifly/angular-nest/wiki/#Deployments
95 |
96 | ---
97 |
98 | ## CLI Commands
99 |
100 | ### Start
101 |
102 | - Start the development server (watch mode): `npm run dev`
103 | - Start the production app: `npm run build && npm run start`
104 |
105 | ### Angular CLI & Nest CLI
106 |
107 | - Angular CLI (@angular/cli): `npm run ng`
108 | - Generate component: `npm run ng -- generate component foo-bar`
109 | - Other `ng` commands can also be run by typing it after `npm run ng -- `. See [here](https://angular.io/cli#command-overview) for a list of the available commands.
110 | - Nest CLI (@nestjs/cli): `npm run nest`
111 | - Generate controller: `npm run nest -- generate controller foo-bar`
112 | - Other `nest` commands can also be run by typing it after `npm run nest -- `. See [here](https://docs.nestjs.com/cli/usages) for a list of the available commands.
113 |
114 | ### Testing
115 |
116 | - Unit tests for frontend: `npm run test -w client` (Google Chrome and [dependencies of Puppeteer](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md) required)
117 | - NOTE: If you have never generated an API client (or run `npm run dev`), you should run `npm run build-api-client` before running the test.
118 | - Unit tests for backend: `npm run test -w server`
119 | - E2E tests for backend: `npm run test:e2e -w server`
120 |
121 | ### Install npm modules
122 |
123 | - Install for frontend: `npm install -w client XXXXX`
124 | - Install for backend: `npm install -w server XXXXX` (e.g. `npm install -w server @nestjs/typeorm typeorm`)
125 |
126 | ---
127 |
128 | ## License and Author
129 |
130 | This project is released under the [CC0 1.0 Universal](https://github.com/mugifly/angular-nest/blob/master/LICENSE) license, by Masanori Ohgita ([mugifly](https://github.com/mugifly)).
131 |
132 | Therefore, a copyright notice is NOT required.
133 | Feel free to use or copy it to your project :)
134 |
135 | NOTE: However, some sample codes and documents (e.g. client/README.md and server/README.md) that generated by Angular CLI or Nest CLI may be based on their respective licenses.
136 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-nest",
3 | "env": {},
4 | "addons": []
5 | }
6 |
--------------------------------------------------------------------------------
/client/.gitignore:
--------------------------------------------------------------------------------
1 | # See http://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # Compiled output
4 | /dist
5 | /tmp
6 | /out-tsc
7 | /bazel-out
8 |
9 | # Node
10 | /node_modules
11 | npm-debug.log
12 | yarn-error.log
13 |
14 | # IDEs and editors
15 | .idea/
16 | .project
17 | .classpath
18 | .c9/
19 | *.launch
20 | .settings/
21 | *.sublime-workspace
22 |
23 | # Visual Studio Code
24 | .vscode/*
25 | !.vscode/settings.json
26 | !.vscode/tasks.json
27 | !.vscode/launch.json
28 | !.vscode/extensions.json
29 | .history/*
30 |
31 | # Miscellaneous
32 | /.angular/cache
33 | .sass-cache/
34 | /connect.lock
35 | /coverage
36 | /libpeerconnection.log
37 | testem.log
38 | /typings
39 | TESTS-*.xml
40 |
41 | # System files
42 | .DS_Store
43 | Thumbs.db
44 |
45 | # API Client
46 | .api-client/
47 |
48 |
--------------------------------------------------------------------------------
/client/.proxy.conf.json:
--------------------------------------------------------------------------------
1 | {
2 | "/api": {
3 | "target": "http://localhost:3000/",
4 | "secure": false,
5 | "logLevel": "debug"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/client/README.md:
--------------------------------------------------------------------------------
1 | # Client
2 |
3 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.0.3.
4 |
5 | ## Development server
6 |
7 | Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application 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.
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 a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
24 |
25 | ## Further help
26 |
27 | To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
28 |
--------------------------------------------------------------------------------
/client/angular.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "../node_modules/@angular/cli/lib/config/schema.json",
3 | "version": 1,
4 | "newProjectRoot": "projects",
5 | "projects": {
6 | "client": {
7 | "projectType": "application",
8 | "schematics": {
9 | "@schematics/angular:component": {
10 | "style": "scss"
11 | }
12 | },
13 | "root": "",
14 | "sourceRoot": "src",
15 | "prefix": "app",
16 | "architect": {
17 | "build": {
18 | "builder": "@angular-devkit/build-angular:application",
19 | "options": {
20 | "outputPath": {
21 | "base": "dist"
22 | },
23 | "index": "src/index.html",
24 | "browser": "src/main.ts",
25 | "polyfills": ["zone.js"],
26 | "tsConfig": "tsconfig.app.json",
27 | "inlineStyleLanguage": "scss",
28 | "assets": [
29 | {
30 | "glob": "**/*",
31 | "input": "public"
32 | }
33 | ],
34 | "styles": [
35 | "../node_modules/@angular/material/prebuilt-themes/azure-blue.css",
36 | "src/styles.scss"
37 | ],
38 | "scripts": []
39 | },
40 | "configurations": {
41 | "production": {
42 | "budgets": [
43 | {
44 | "type": "initial",
45 | "maximumWarning": "500kB",
46 | "maximumError": "1MB"
47 | },
48 | {
49 | "type": "anyComponentStyle",
50 | "maximumWarning": "2kB",
51 | "maximumError": "4kB"
52 | }
53 | ],
54 | "outputHashing": "all"
55 | },
56 | "development": {
57 | "optimization": false,
58 | "extractLicenses": false,
59 | "sourceMap": true,
60 | "fileReplacements": [
61 | {
62 | "replace": "src/environments/environment.ts",
63 | "with": "src/environments/environment.development.ts"
64 | }
65 | ]
66 | }
67 | },
68 | "defaultConfiguration": "production"
69 | },
70 | "serve": {
71 | "builder": "@angular-devkit/build-angular:dev-server",
72 | "configurations": {
73 | "production": {
74 | "buildTarget": "client:build:production"
75 | },
76 | "development": {
77 | "buildTarget": "client:build:development"
78 | }
79 | },
80 | "defaultConfiguration": "development"
81 | },
82 | "extract-i18n": {
83 | "builder": "@angular-devkit/build-angular:extract-i18n"
84 | },
85 | "test": {
86 | "builder": "@angular-devkit/build-angular:karma",
87 | "options": {
88 | "polyfills": ["zone.js", "zone.js/testing"],
89 | "tsConfig": "tsconfig.spec.json",
90 | "karmaConfig": "karma.conf.js",
91 | "inlineStyleLanguage": "scss",
92 | "assets": [
93 | {
94 | "glob": "**/*",
95 | "input": "public"
96 | }
97 | ],
98 | "styles": [
99 | "../node_modules/@angular/material/prebuilt-themes/azure-blue.css",
100 | "src/styles.scss"
101 | ],
102 | "scripts": []
103 | }
104 | }
105 | }
106 | }
107 | }
108 | }
109 |
--------------------------------------------------------------------------------
/client/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'),
13 | require('karma-junit-reporter'),
14 | require('@angular-devkit/build-angular/plugins/karma'),
15 | ],
16 | client: {
17 | jasmine: {
18 | // you can add configuration options for Jasmine here
19 | // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
20 | // for example, you can disable the random execution with `random: false`
21 | // or set a specific seed with `seed: 4321`
22 | },
23 | clearContext: false, // leave Jasmine Spec Runner output visible in browser
24 | },
25 | jasmineHtmlReporter: {
26 | suppressAll: true, // removes the duplicated traces
27 | },
28 | coverageReporter: {
29 | dir: require('path').join(__dirname, './coverage/client'),
30 | subdir: '.',
31 | reporters: [{ type: 'html' }, { type: 'text-summary' }],
32 | },
33 | reporters: ['progress', 'kjhtml'],
34 | browsers: ['Chrome'],
35 | restartOnFileChange: true,
36 | });
37 | };
38 |
--------------------------------------------------------------------------------
/client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "client",
3 | "version": "0.0.0",
4 | "scripts": {
5 | "ng": "ng",
6 | "start": "ng serve",
7 | "start:dev": "ng serve --proxy-config .proxy.conf.json",
8 | "build": "ng build",
9 | "watch": "ng build --watch --configuration development",
10 | "test": "ng test"
11 | },
12 | "private": true,
13 | "dependencies": {
14 | "@angular/animations": "^19.0.1",
15 | "@angular/cdk": "^19.0.1",
16 | "@angular/common": "^19.0.1",
17 | "@angular/compiler": "^19.0.1",
18 | "@angular/core": "^19.0.1",
19 | "@angular/forms": "^19.0.1",
20 | "@angular/material": "^19.0.1",
21 | "@angular/platform-browser": "^19.0.1",
22 | "@angular/platform-browser-dynamic": "^19.0.1",
23 | "@angular/router": "^19.0.1",
24 | "rxjs": "^7.8.1",
25 | "tslib": "^2.3.0",
26 | "zone.js": "^0.15.0"
27 | },
28 | "devDependencies": {
29 | "@angular-devkit/build-angular": "^19.0.2",
30 | "@angular/cli": "^19.0.2",
31 | "@angular/compiler-cli": "^19.0.1",
32 | "@types/jasmine": "~3.10.0",
33 | "@types/node": "^12.11.1",
34 | "jasmine-core": "~4.0.0",
35 | "karma": "~6.3.0",
36 | "karma-chrome-launcher": "~3.1.0",
37 | "karma-coverage": "~2.1.0",
38 | "karma-jasmine": "~4.0.0",
39 | "karma-jasmine-html-reporter": "~1.7.0",
40 | "karma-junit-reporter": "^2.0.1",
41 | "typescript": "5.6.3"
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/client/public/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mugifly/angular-nest/37ae15f959c2d5d1c1d79b6191bce5abc2728198/client/public/.gitkeep
--------------------------------------------------------------------------------
/client/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mugifly/angular-nest/37ae15f959c2d5d1c1d79b6191bce5abc2728198/client/public/favicon.ico
--------------------------------------------------------------------------------
/client/src/app/app.component.html:
--------------------------------------------------------------------------------
1 |
2 | angular-nest
3 |
4 | @if (!isProduction) {
5 |
6 | (dev)
7 | }
8 |
9 |
10 |