├── frontend
├── src
│ ├── assets
│ │ └── .gitkeep
│ ├── app
│ │ ├── app.component.css
│ │ ├── app.component.html
│ │ ├── app-routing.module.ts
│ │ ├── services
│ │ │ └── mostrador.service.ts
│ │ ├── app.module.ts
│ │ └── app.component.ts
│ ├── styles.css
│ ├── favicon.ico
│ ├── main.ts
│ └── index.html
├── .vscode
│ ├── extensions.json
│ ├── launch.json
│ └── tasks.json
├── tsconfig.app.json
├── tsconfig.spec.json
├── .editorconfig
├── .gitignore
├── tsconfig.json
├── README.md
├── package.json
└── angular.json
├── .gitattributes
├── backend
├── Dockerfile
├── package.json
├── index.js
└── package-lock.json
├── .github
└── workflows
│ └── ci_cd_example.yml
├── .gitignore
└── README.md
/frontend/src/assets/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/src/app/app.component.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/frontend/src/styles.css:
--------------------------------------------------------------------------------
1 | /* You can add global styles to this file, and also import other style files */
2 |
--------------------------------------------------------------------------------
/frontend/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DeveloperMartin/01-restaurante-fullapp/HEAD/frontend/src/favicon.ico
--------------------------------------------------------------------------------
/frontend/src/app/app.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/frontend/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846
3 | "recommendations": ["angular.ng-template"]
4 | }
5 |
--------------------------------------------------------------------------------
/backend/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:18-bullseye-slim
2 |
3 | WORKDIR /app
4 |
5 | COPY package.json ./
6 |
7 | RUN npm install
8 |
9 | COPY ./ ./
10 |
11 | EXPOSE 3000
12 |
13 | CMD ["node", "./index.js"]
--------------------------------------------------------------------------------
/frontend/src/main.ts:
--------------------------------------------------------------------------------
1 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
2 |
3 | import { AppModule } from './app/app.module';
4 |
5 |
6 | platformBrowserDynamic().bootstrapModule(AppModule)
7 | .catch(err => console.error(err));
8 |
--------------------------------------------------------------------------------
/frontend/src/app/app-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { RouterModule, Routes } from '@angular/router';
3 |
4 | const routes: Routes = [];
5 |
6 | @NgModule({
7 | imports: [RouterModule.forRoot(routes)],
8 | exports: [RouterModule]
9 | })
10 | export class AppRoutingModule { }
11 |
--------------------------------------------------------------------------------
/frontend/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "./out-tsc/app",
6 | "types": []
7 | },
8 | "files": [
9 | "src/main.ts"
10 | ],
11 | "include": [
12 | "src/**/*.d.ts"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "./out-tsc/spec",
6 | "types": [
7 | "jasmine"
8 | ]
9 | },
10 | "include": [
11 | "src/**/*.spec.ts",
12 | "src/**/*.d.ts"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.ts]
12 | quote_type = single
13 |
14 | [*.md]
15 | max_line_length = off
16 | trim_trailing_whitespace = false
17 |
--------------------------------------------------------------------------------
/frontend/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Frontend
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/backend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "restaurante-backend",
3 | "version": "1.0.0",
4 | "description": "Aplicacion de ejemplo de un restaurante ficticio ",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "node ./index.js"
8 | },
9 | "author": "Martin",
10 | "license": "ISC",
11 | "dependencies": {
12 | "cors": "^2.8.5",
13 | "express": "^4.18.2"
14 | }
15 | }
--------------------------------------------------------------------------------
/frontend/src/app/services/mostrador.service.ts:
--------------------------------------------------------------------------------
1 | import { HttpClient } from '@angular/common/http';
2 | import { Injectable } from '@angular/core';
3 |
4 | @Injectable({
5 | providedIn: 'root'
6 | })
7 | export class MostradorService {
8 |
9 | constructor(private httpClient: HttpClient) { }
10 |
11 | getFood() {
12 | return this.httpClient.get('http://localhost:3000/foods');
13 | }
14 |
15 | getDrink() {
16 | return this.httpClient.get('http://localhost:3000/drinks');
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/frontend/src/app/app.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { BrowserModule } from '@angular/platform-browser';
3 | import { HttpClientModule } from '@angular/common/http';
4 | import { AppRoutingModule } from './app-routing.module';
5 | import { AppComponent } from './app.component';
6 |
7 | @NgModule({
8 | declarations: [
9 | AppComponent
10 | ],
11 | imports: [
12 | BrowserModule,
13 | AppRoutingModule,
14 | HttpClientModule
15 | ],
16 | providers: [],
17 | bootstrap: [AppComponent]
18 | })
19 | export class AppModule { }
20 |
--------------------------------------------------------------------------------
/frontend/.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": "ng serve",
7 | "type": "pwa-chrome",
8 | "request": "launch",
9 | "preLaunchTask": "npm: start",
10 | "url": "http://localhost:4200/"
11 | },
12 | {
13 | "name": "ng test",
14 | "type": "chrome",
15 | "request": "launch",
16 | "preLaunchTask": "npm: test",
17 | "url": "http://localhost:9876/debug.html"
18 | }
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/frontend/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { MostradorService } from './services/mostrador.service';
3 |
4 | @Component({
5 | selector: 'app-root',
6 | templateUrl: './app.component.html',
7 | styleUrls: ['./app.component.css']
8 | })
9 | export class AppComponent {
10 |
11 | constructor(private mostradorService: MostradorService) {}
12 |
13 | getFood(){
14 | this.mostradorService.getFood().subscribe((data) => {
15 | console.log(data);
16 | });
17 | }
18 |
19 | getDrink(){
20 | this.mostradorService.getDrink().subscribe((data) => {
21 | console.log(data);
22 | });
23 | }
24 |
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/frontend/.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 |
40 | # System files
41 | .DS_Store
42 | Thumbs.db
43 |
--------------------------------------------------------------------------------
/backend/index.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const app = express()
3 | const path = require('path')
4 |
5 | console.log(path.join(__dirname, 'dist'))
6 |
7 | app.use(express.static(path.join(__dirname, 'dist')))
8 |
9 | app.get('/frontend', (req, res) => {
10 | res.sendFile(path.join(__dirname, 'dist', 'index.html'))
11 | })
12 |
13 | app.get('/foods', function (req, res) {
14 | res.json({
15 | response: [{
16 | food: 'pizza'
17 | }, {
18 | food: 'tacos'
19 | }, {
20 | food: 'sushi'
21 | }]
22 | })
23 | })
24 |
25 | app.get('/drinks', function (req, res) {
26 | res.json({
27 | response: [{
28 | drink: 'cerveza'
29 | }, {
30 | drink: 'mojito'
31 | }, {
32 | drink: 'monster'
33 | }, {
34 | drink: 'vodka'
35 | }]
36 | })
37 | })
38 |
39 | app.listen(3000, () => {
40 | console.log('La aplicacion se levanto en el puerto 3000')
41 | })
--------------------------------------------------------------------------------
/.github/workflows/ci_cd_example.yml:
--------------------------------------------------------------------------------
1 | name: CI / CD - Ejemplo
2 |
3 | on:
4 | push:
5 | tags:
6 | - 'v*'
7 |
8 | jobs:
9 | build:
10 | runs-on: ubuntu-latest
11 |
12 | strategy:
13 | matrix:
14 | node-version: [16.x]
15 |
16 | steps:
17 | - uses: actions/checkout@v2
18 |
19 | - name: build backend
20 | working-directory: backend
21 | run: |
22 | npm install
23 |
24 | - name: build docker backend image
25 | working-directory: backend
26 | run: |
27 | docker build -t developermartinfernandez/backend-twitch:$(echo ${GITHUB_REF:10}) .
28 |
29 | - name: Login de docker hub
30 | uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
31 | with:
32 | registry: docker.io
33 | username: developermartinfernandez
34 | password: ${{ secrets.TOKEN_DE_DOCKER_HUB }}
35 |
36 | - name: Publish Image
37 | run: |
38 | docker image push developermartinfernandez/backend-twitch:$(echo ${GITHUB_REF:10})
39 |
40 |
41 |
--------------------------------------------------------------------------------
/frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "compileOnSave": false,
4 | "compilerOptions": {
5 | "baseUrl": "./",
6 | "outDir": "./dist/out-tsc",
7 | "forceConsistentCasingInFileNames": true,
8 | "strict": true,
9 | "noImplicitOverride": true,
10 | "noPropertyAccessFromIndexSignature": true,
11 | "noImplicitReturns": true,
12 | "noFallthroughCasesInSwitch": true,
13 | "sourceMap": true,
14 | "declaration": false,
15 | "downlevelIteration": true,
16 | "experimentalDecorators": true,
17 | "moduleResolution": "node",
18 | "importHelpers": true,
19 | "target": "ES2022",
20 | "module": "ES2022",
21 | "useDefineForClassFields": false,
22 | "lib": [
23 | "ES2022",
24 | "dom"
25 | ]
26 | },
27 | "angularCompilerOptions": {
28 | "enableI18nLegacyMessageIdFormat": false,
29 | "strictInjectionParameters": true,
30 | "strictInputAccessModifiers": true,
31 | "strictTemplates": true
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/frontend/.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",
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 |
--------------------------------------------------------------------------------
/frontend/README.md:
--------------------------------------------------------------------------------
1 | # Frontend
2 |
3 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 15.0.0.
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.io/cli) page.
28 |
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "frontend",
3 | "version": "0.0.0",
4 | "scripts": {
5 | "ng": "ng",
6 | "start": "ng serve",
7 | "build": "ng build",
8 | "watch": "ng build --watch --configuration development",
9 | "test": "ng test"
10 | },
11 | "private": true,
12 | "dependencies": {
13 | "@angular/animations": "^15.0.0",
14 | "@angular/common": "^15.0.0",
15 | "@angular/compiler": "^15.0.0",
16 | "@angular/core": "^15.0.0",
17 | "@angular/forms": "^15.0.0",
18 | "@angular/platform-browser": "^15.0.0",
19 | "@angular/platform-browser-dynamic": "^15.0.0",
20 | "@angular/router": "^15.0.0",
21 | "rxjs": "~7.5.0",
22 | "tslib": "^2.3.0",
23 | "zone.js": "~0.12.0"
24 | },
25 | "devDependencies": {
26 | "@angular-devkit/build-angular": "^15.0.0",
27 | "@angular/cli": "~15.0.0",
28 | "@angular/compiler-cli": "^15.0.0",
29 | "@types/jasmine": "~4.3.0",
30 | "jasmine-core": "~4.5.0",
31 | "karma": "~6.4.0",
32 | "karma-chrome-launcher": "~3.1.0",
33 | "karma-coverage": "~2.2.0",
34 | "karma-jasmine": "~5.1.0",
35 | "karma-jasmine-html-reporter": "~2.0.0",
36 | "typescript": "~4.8.2"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 | .pnpm-debug.log*
9 |
10 | # Diagnostic reports (https://nodejs.org/api/report.html)
11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12 |
13 | # Runtime data
14 | pids
15 | *.pid
16 | *.seed
17 | *.pid.lock
18 |
19 | # Directory for instrumented libs generated by jscoverage/JSCover
20 | lib-cov
21 |
22 | # Coverage directory used by tools like istanbul
23 | coverage
24 | *.lcov
25 |
26 | # nyc test coverage
27 | .nyc_output
28 |
29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30 | .grunt
31 |
32 | # Bower dependency directory (https://bower.io/)
33 | bower_components
34 |
35 | # node-waf configuration
36 | .lock-wscript
37 |
38 | # Compiled binary addons (https://nodejs.org/api/addons.html)
39 | build/Release
40 |
41 | # Dependency directories
42 | node_modules/
43 | jspm_packages/
44 |
45 | # Snowpack dependency directory (https://snowpack.dev/)
46 | web_modules/
47 |
48 | # TypeScript cache
49 | *.tsbuildinfo
50 |
51 | # Optional npm cache directory
52 | .npm
53 |
54 | # Optional eslint cache
55 | .eslintcache
56 |
57 | # Optional stylelint cache
58 | .stylelintcache
59 |
60 | # Microbundle cache
61 | .rpt2_cache/
62 | .rts2_cache_cjs/
63 | .rts2_cache_es/
64 | .rts2_cache_umd/
65 |
66 | # Optional REPL history
67 | .node_repl_history
68 |
69 | # Output of 'npm pack'
70 | *.tgz
71 |
72 | # Yarn Integrity file
73 | .yarn-integrity
74 |
75 | # dotenv environment variable files
76 | .env
77 | .env.development.local
78 | .env.test.local
79 | .env.production.local
80 | .env.local
81 |
82 | # parcel-bundler cache (https://parceljs.org/)
83 | .cache
84 | .parcel-cache
85 |
86 | # Next.js build output
87 | .next
88 | out
89 |
90 | # Nuxt.js build / generate output
91 | .nuxt
92 | dist
93 |
94 | # Gatsby files
95 | .cache/
96 | # Comment in the public line in if your project uses Gatsby and not Next.js
97 | # https://nextjs.org/blog/next-9-1#public-directory-support
98 | # public
99 |
100 | # vuepress build output
101 | .vuepress/dist
102 |
103 | # vuepress v2.x temp and cache directory
104 | .temp
105 | .cache
106 |
107 | # Serverless directories
108 | .serverless/
109 |
110 | # FuseBox cache
111 | .fusebox/
112 |
113 | # DynamoDB Local files
114 | .dynamodb/
115 |
116 | # TernJS port file
117 | .tern-port
118 |
119 | # Stores VSCode versions used for testing VSCode extensions
120 | .vscode-test
121 |
122 | # yarn v2
123 | .yarn/cache
124 | .yarn/unplugged
125 | .yarn/build-state.yml
126 | .yarn/install-state.gz
127 | .pnp.*
128 |
--------------------------------------------------------------------------------
/frontend/angular.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3 | "version": 1,
4 | "newProjectRoot": "projects",
5 | "projects": {
6 | "frontend": {
7 | "projectType": "application",
8 | "schematics": {},
9 | "root": "",
10 | "sourceRoot": "src",
11 | "prefix": "app",
12 | "architect": {
13 | "build": {
14 | "builder": "@angular-devkit/build-angular:browser",
15 | "options": {
16 | "outputPath": "../backend/dist",
17 | "index": "src/index.html",
18 | "main": "src/main.ts",
19 | "polyfills": [
20 | "zone.js"
21 | ],
22 | "tsConfig": "tsconfig.app.json",
23 | "assets": [
24 | "src/favicon.ico",
25 | "src/assets"
26 | ],
27 | "styles": [
28 | "src/styles.css"
29 | ],
30 | "scripts": []
31 | },
32 | "configurations": {
33 | "production": {
34 | "budgets": [
35 | {
36 | "type": "initial",
37 | "maximumWarning": "500kb",
38 | "maximumError": "1mb"
39 | },
40 | {
41 | "type": "anyComponentStyle",
42 | "maximumWarning": "2kb",
43 | "maximumError": "4kb"
44 | }
45 | ],
46 | "outputHashing": "all"
47 | },
48 | "development": {
49 | "buildOptimizer": false,
50 | "optimization": false,
51 | "vendorChunk": true,
52 | "extractLicenses": false,
53 | "sourceMap": true,
54 | "namedChunks": true
55 | }
56 | },
57 | "defaultConfiguration": "production"
58 | },
59 | "serve": {
60 | "builder": "@angular-devkit/build-angular:dev-server",
61 | "configurations": {
62 | "production": {
63 | "browserTarget": "frontend:build:production"
64 | },
65 | "development": {
66 | "browserTarget": "frontend:build:development"
67 | }
68 | },
69 | "defaultConfiguration": "development"
70 | },
71 | "extract-i18n": {
72 | "builder": "@angular-devkit/build-angular:extract-i18n",
73 | "options": {
74 | "browserTarget": "frontend:build"
75 | }
76 | },
77 | "test": {
78 | "builder": "@angular-devkit/build-angular:karma",
79 | "options": {
80 | "polyfills": [
81 | "zone.js",
82 | "zone.js/testing"
83 | ],
84 | "tsConfig": "tsconfig.spec.json",
85 | "assets": [
86 | "src/favicon.ico",
87 | "src/assets"
88 | ],
89 | "styles": [
90 | "src/styles.css"
91 | ],
92 | "scripts": []
93 | }
94 | }
95 | }
96 | }
97 | },
98 | "cli": {
99 | "analytics": "cb5e6fe1-07bf-4b11-a121-47a8cbb4d489"
100 | }
101 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Restaurante full app
2 |
3 | 
4 | > Aplicacion para simular la comunicación entre Frontend y Backend utilizando la analogia del restaurante
5 |
6 |
7 | ### Estado del proyecto 🏗
8 |
9 | En progreso
10 |
11 |
12 | ### Pre-requisitos necesarios 📋
13 | * Descargar [Visual Studio Code (Color azul)](https://visualstudio.microsoft.com/es/downloads/) (o su editor de texto de confianza)
14 | * Descargar e instalar el [software de control de versiones](https://git-scm.com/)
15 | * Descargar e instalar [Node.js (Version LTS)](https://git-scm.com/)
16 | * Ejecutar en la terminal
17 | ```bash
18 | npm install -g @angular/cli
19 | ```
20 |
21 | ### Pre-requisitos no necesarios
22 |
23 | * Extensiones para Visual Studio Code
24 | * [Angular Language Service](https://marketplace.visualstudio.com/items?itemName=Angular.ng-template)
25 | * [Angular Snippets (Version 13)](https://marketplace.visualstudio.com/items?itemName=johnpapa.Angular2)
26 | * [Angular 10 Snippets](https://marketplace.visualstudio.com/items?itemName=Mikael.Angular-BeastCode)
27 | * [Error Lens](https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens)
28 | * [Material Icon Theme](https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme)
29 |
30 | ## Comenzando 🚀
31 |
32 | 1. Clonar el repositorio
33 | ```bash
34 | git clone https://github.com/DeveloperMartin/01-restaurante-fullapp.git
35 | ```
36 | 2. Instalar las dependencias del backend y del frontend, recorda que tenes que ir hasta la carpeta del backend, ejecutar el comando y despues tenes que ir al frontend a realizar la misma accion (el orden en el que se haga no importa)
37 | ```bash
38 | npm install
39 | ```
40 | 3. Levantar el backend (Recorda viajar hasta la carpeta de backend para ejecutar este comando)
41 | ```bash
42 | node ./index.js
43 | ```
44 | 4. Abri otra terminal (Es importante que la terminal donde esta corriendo el backend no la cierres)
45 | 5. Levantar el frontend (Recordar viajar hasta la carpeta del frontend para ejecutar este comando)
46 | ```bash
47 | ng serve -o
48 | ```
49 |
50 | > `clone` va a crear una carpeta con el nombre completo del repositorio en donde sea que este situado en la terminal. Es aconsejable viajar con la terminal hasta la ruta donde realmente quiere que el proyecto se descargue (Por ejemplo en Documents). Para ello hay que utilizar el comando `cd` e indicar a que carpeta se quiere mover con la terminal.
51 | ```bash
52 | cd ./users
53 | cd ./Documents
54 | cd ./github
55 | git clone https...
56 | ```
57 | * [Documentación del comando clone](https://www.google.com/search?q=git+clone&rlz=1C1ONGR_esAR1032AR1032&oq=git+clone&aqs=chrome..69i57j69i64.884j0j7&sourceid=chrome&ie=UTF-8)
58 | * [Documentacion del comando - cd -](https://denovatoanovato.net/comando-cd/)
59 |
60 | ## Despliegue 📦
61 |
62 | 1. Abrir terminal
63 | 2. Viajar hasta la carpeta del frontend
64 | 3. Ejecutar comando
65 | ```bash
66 | ng build
67 | ```
68 | 4. Con la misma termimal (no es necesario), viajar hasta el backend
69 | 5. Ejecutar comando
70 | ```bash
71 | node ./index.js
72 | ```
73 | 6. En el navegador buscar
74 | ```url
75 | http://localhost:3000/frontend
76 | ```
77 | 7. Si aparece la aplicacion de frontend, entonces ya tenes todo!
78 |
79 | ## Expresiones de Gratitud 🎁
80 |
81 | * Comenta a otros sobre este proyecto 📢
82 | * Seguime en [Twitch](https://twitch.tv/zatge)
83 |
84 |  - [Invitación](https://discord.gg/UMCMAKxcZ7)
85 |
86 | ---
87 | con ❤️ por [Zatge](https://github.com/DeveloperMartin) 😊
88 |
--------------------------------------------------------------------------------
/backend/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "restaurante-backend",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "restaurante-backend",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "cors": "^2.8.5",
13 | "express": "^4.18.2"
14 | }
15 | },
16 | "node_modules/accepts": {
17 | "version": "1.3.8",
18 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
19 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
20 | "dependencies": {
21 | "mime-types": "~2.1.34",
22 | "negotiator": "0.6.3"
23 | },
24 | "engines": {
25 | "node": ">= 0.6"
26 | }
27 | },
28 | "node_modules/array-flatten": {
29 | "version": "1.1.1",
30 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
31 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
32 | },
33 | "node_modules/body-parser": {
34 | "version": "1.20.1",
35 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
36 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
37 | "dependencies": {
38 | "bytes": "3.1.2",
39 | "content-type": "~1.0.4",
40 | "debug": "2.6.9",
41 | "depd": "2.0.0",
42 | "destroy": "1.2.0",
43 | "http-errors": "2.0.0",
44 | "iconv-lite": "0.4.24",
45 | "on-finished": "2.4.1",
46 | "qs": "6.11.0",
47 | "raw-body": "2.5.1",
48 | "type-is": "~1.6.18",
49 | "unpipe": "1.0.0"
50 | },
51 | "engines": {
52 | "node": ">= 0.8",
53 | "npm": "1.2.8000 || >= 1.4.16"
54 | }
55 | },
56 | "node_modules/bytes": {
57 | "version": "3.1.2",
58 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
59 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
60 | "engines": {
61 | "node": ">= 0.8"
62 | }
63 | },
64 | "node_modules/call-bind": {
65 | "version": "1.0.2",
66 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
67 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
68 | "dependencies": {
69 | "function-bind": "^1.1.1",
70 | "get-intrinsic": "^1.0.2"
71 | },
72 | "funding": {
73 | "url": "https://github.com/sponsors/ljharb"
74 | }
75 | },
76 | "node_modules/content-disposition": {
77 | "version": "0.5.4",
78 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
79 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
80 | "dependencies": {
81 | "safe-buffer": "5.2.1"
82 | },
83 | "engines": {
84 | "node": ">= 0.6"
85 | }
86 | },
87 | "node_modules/content-type": {
88 | "version": "1.0.4",
89 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
90 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
91 | "engines": {
92 | "node": ">= 0.6"
93 | }
94 | },
95 | "node_modules/cookie": {
96 | "version": "0.5.0",
97 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
98 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
99 | "engines": {
100 | "node": ">= 0.6"
101 | }
102 | },
103 | "node_modules/cookie-signature": {
104 | "version": "1.0.6",
105 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
106 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
107 | },
108 | "node_modules/cors": {
109 | "version": "2.8.5",
110 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
111 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
112 | "dependencies": {
113 | "object-assign": "^4",
114 | "vary": "^1"
115 | },
116 | "engines": {
117 | "node": ">= 0.10"
118 | }
119 | },
120 | "node_modules/debug": {
121 | "version": "2.6.9",
122 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
123 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
124 | "dependencies": {
125 | "ms": "2.0.0"
126 | }
127 | },
128 | "node_modules/depd": {
129 | "version": "2.0.0",
130 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
131 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
132 | "engines": {
133 | "node": ">= 0.8"
134 | }
135 | },
136 | "node_modules/destroy": {
137 | "version": "1.2.0",
138 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
139 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
140 | "engines": {
141 | "node": ">= 0.8",
142 | "npm": "1.2.8000 || >= 1.4.16"
143 | }
144 | },
145 | "node_modules/ee-first": {
146 | "version": "1.1.1",
147 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
148 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
149 | },
150 | "node_modules/encodeurl": {
151 | "version": "1.0.2",
152 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
153 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
154 | "engines": {
155 | "node": ">= 0.8"
156 | }
157 | },
158 | "node_modules/escape-html": {
159 | "version": "1.0.3",
160 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
161 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
162 | },
163 | "node_modules/etag": {
164 | "version": "1.8.1",
165 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
166 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
167 | "engines": {
168 | "node": ">= 0.6"
169 | }
170 | },
171 | "node_modules/express": {
172 | "version": "4.18.2",
173 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
174 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
175 | "dependencies": {
176 | "accepts": "~1.3.8",
177 | "array-flatten": "1.1.1",
178 | "body-parser": "1.20.1",
179 | "content-disposition": "0.5.4",
180 | "content-type": "~1.0.4",
181 | "cookie": "0.5.0",
182 | "cookie-signature": "1.0.6",
183 | "debug": "2.6.9",
184 | "depd": "2.0.0",
185 | "encodeurl": "~1.0.2",
186 | "escape-html": "~1.0.3",
187 | "etag": "~1.8.1",
188 | "finalhandler": "1.2.0",
189 | "fresh": "0.5.2",
190 | "http-errors": "2.0.0",
191 | "merge-descriptors": "1.0.1",
192 | "methods": "~1.1.2",
193 | "on-finished": "2.4.1",
194 | "parseurl": "~1.3.3",
195 | "path-to-regexp": "0.1.7",
196 | "proxy-addr": "~2.0.7",
197 | "qs": "6.11.0",
198 | "range-parser": "~1.2.1",
199 | "safe-buffer": "5.2.1",
200 | "send": "0.18.0",
201 | "serve-static": "1.15.0",
202 | "setprototypeof": "1.2.0",
203 | "statuses": "2.0.1",
204 | "type-is": "~1.6.18",
205 | "utils-merge": "1.0.1",
206 | "vary": "~1.1.2"
207 | },
208 | "engines": {
209 | "node": ">= 0.10.0"
210 | }
211 | },
212 | "node_modules/finalhandler": {
213 | "version": "1.2.0",
214 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
215 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
216 | "dependencies": {
217 | "debug": "2.6.9",
218 | "encodeurl": "~1.0.2",
219 | "escape-html": "~1.0.3",
220 | "on-finished": "2.4.1",
221 | "parseurl": "~1.3.3",
222 | "statuses": "2.0.1",
223 | "unpipe": "~1.0.0"
224 | },
225 | "engines": {
226 | "node": ">= 0.8"
227 | }
228 | },
229 | "node_modules/forwarded": {
230 | "version": "0.2.0",
231 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
232 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
233 | "engines": {
234 | "node": ">= 0.6"
235 | }
236 | },
237 | "node_modules/fresh": {
238 | "version": "0.5.2",
239 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
240 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
241 | "engines": {
242 | "node": ">= 0.6"
243 | }
244 | },
245 | "node_modules/function-bind": {
246 | "version": "1.1.1",
247 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
248 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
249 | },
250 | "node_modules/get-intrinsic": {
251 | "version": "1.1.3",
252 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
253 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
254 | "dependencies": {
255 | "function-bind": "^1.1.1",
256 | "has": "^1.0.3",
257 | "has-symbols": "^1.0.3"
258 | },
259 | "funding": {
260 | "url": "https://github.com/sponsors/ljharb"
261 | }
262 | },
263 | "node_modules/has": {
264 | "version": "1.0.3",
265 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
266 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
267 | "dependencies": {
268 | "function-bind": "^1.1.1"
269 | },
270 | "engines": {
271 | "node": ">= 0.4.0"
272 | }
273 | },
274 | "node_modules/has-symbols": {
275 | "version": "1.0.3",
276 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
277 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
278 | "engines": {
279 | "node": ">= 0.4"
280 | },
281 | "funding": {
282 | "url": "https://github.com/sponsors/ljharb"
283 | }
284 | },
285 | "node_modules/http-errors": {
286 | "version": "2.0.0",
287 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
288 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
289 | "dependencies": {
290 | "depd": "2.0.0",
291 | "inherits": "2.0.4",
292 | "setprototypeof": "1.2.0",
293 | "statuses": "2.0.1",
294 | "toidentifier": "1.0.1"
295 | },
296 | "engines": {
297 | "node": ">= 0.8"
298 | }
299 | },
300 | "node_modules/iconv-lite": {
301 | "version": "0.4.24",
302 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
303 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
304 | "dependencies": {
305 | "safer-buffer": ">= 2.1.2 < 3"
306 | },
307 | "engines": {
308 | "node": ">=0.10.0"
309 | }
310 | },
311 | "node_modules/inherits": {
312 | "version": "2.0.4",
313 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
314 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
315 | },
316 | "node_modules/ipaddr.js": {
317 | "version": "1.9.1",
318 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
319 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
320 | "engines": {
321 | "node": ">= 0.10"
322 | }
323 | },
324 | "node_modules/media-typer": {
325 | "version": "0.3.0",
326 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
327 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
328 | "engines": {
329 | "node": ">= 0.6"
330 | }
331 | },
332 | "node_modules/merge-descriptors": {
333 | "version": "1.0.1",
334 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
335 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
336 | },
337 | "node_modules/methods": {
338 | "version": "1.1.2",
339 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
340 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
341 | "engines": {
342 | "node": ">= 0.6"
343 | }
344 | },
345 | "node_modules/mime": {
346 | "version": "1.6.0",
347 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
348 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
349 | "bin": {
350 | "mime": "cli.js"
351 | },
352 | "engines": {
353 | "node": ">=4"
354 | }
355 | },
356 | "node_modules/mime-db": {
357 | "version": "1.52.0",
358 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
359 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
360 | "engines": {
361 | "node": ">= 0.6"
362 | }
363 | },
364 | "node_modules/mime-types": {
365 | "version": "2.1.35",
366 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
367 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
368 | "dependencies": {
369 | "mime-db": "1.52.0"
370 | },
371 | "engines": {
372 | "node": ">= 0.6"
373 | }
374 | },
375 | "node_modules/ms": {
376 | "version": "2.0.0",
377 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
378 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
379 | },
380 | "node_modules/negotiator": {
381 | "version": "0.6.3",
382 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
383 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
384 | "engines": {
385 | "node": ">= 0.6"
386 | }
387 | },
388 | "node_modules/object-assign": {
389 | "version": "4.1.1",
390 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
391 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
392 | "engines": {
393 | "node": ">=0.10.0"
394 | }
395 | },
396 | "node_modules/object-inspect": {
397 | "version": "1.12.2",
398 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
399 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
400 | "funding": {
401 | "url": "https://github.com/sponsors/ljharb"
402 | }
403 | },
404 | "node_modules/on-finished": {
405 | "version": "2.4.1",
406 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
407 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
408 | "dependencies": {
409 | "ee-first": "1.1.1"
410 | },
411 | "engines": {
412 | "node": ">= 0.8"
413 | }
414 | },
415 | "node_modules/parseurl": {
416 | "version": "1.3.3",
417 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
418 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
419 | "engines": {
420 | "node": ">= 0.8"
421 | }
422 | },
423 | "node_modules/path-to-regexp": {
424 | "version": "0.1.7",
425 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
426 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
427 | },
428 | "node_modules/proxy-addr": {
429 | "version": "2.0.7",
430 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
431 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
432 | "dependencies": {
433 | "forwarded": "0.2.0",
434 | "ipaddr.js": "1.9.1"
435 | },
436 | "engines": {
437 | "node": ">= 0.10"
438 | }
439 | },
440 | "node_modules/qs": {
441 | "version": "6.11.0",
442 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
443 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
444 | "dependencies": {
445 | "side-channel": "^1.0.4"
446 | },
447 | "engines": {
448 | "node": ">=0.6"
449 | },
450 | "funding": {
451 | "url": "https://github.com/sponsors/ljharb"
452 | }
453 | },
454 | "node_modules/range-parser": {
455 | "version": "1.2.1",
456 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
457 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
458 | "engines": {
459 | "node": ">= 0.6"
460 | }
461 | },
462 | "node_modules/raw-body": {
463 | "version": "2.5.1",
464 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
465 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
466 | "dependencies": {
467 | "bytes": "3.1.2",
468 | "http-errors": "2.0.0",
469 | "iconv-lite": "0.4.24",
470 | "unpipe": "1.0.0"
471 | },
472 | "engines": {
473 | "node": ">= 0.8"
474 | }
475 | },
476 | "node_modules/safe-buffer": {
477 | "version": "5.2.1",
478 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
479 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
480 | "funding": [
481 | {
482 | "type": "github",
483 | "url": "https://github.com/sponsors/feross"
484 | },
485 | {
486 | "type": "patreon",
487 | "url": "https://www.patreon.com/feross"
488 | },
489 | {
490 | "type": "consulting",
491 | "url": "https://feross.org/support"
492 | }
493 | ]
494 | },
495 | "node_modules/safer-buffer": {
496 | "version": "2.1.2",
497 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
498 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
499 | },
500 | "node_modules/send": {
501 | "version": "0.18.0",
502 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
503 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
504 | "dependencies": {
505 | "debug": "2.6.9",
506 | "depd": "2.0.0",
507 | "destroy": "1.2.0",
508 | "encodeurl": "~1.0.2",
509 | "escape-html": "~1.0.3",
510 | "etag": "~1.8.1",
511 | "fresh": "0.5.2",
512 | "http-errors": "2.0.0",
513 | "mime": "1.6.0",
514 | "ms": "2.1.3",
515 | "on-finished": "2.4.1",
516 | "range-parser": "~1.2.1",
517 | "statuses": "2.0.1"
518 | },
519 | "engines": {
520 | "node": ">= 0.8.0"
521 | }
522 | },
523 | "node_modules/send/node_modules/ms": {
524 | "version": "2.1.3",
525 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
526 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
527 | },
528 | "node_modules/serve-static": {
529 | "version": "1.15.0",
530 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
531 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
532 | "dependencies": {
533 | "encodeurl": "~1.0.2",
534 | "escape-html": "~1.0.3",
535 | "parseurl": "~1.3.3",
536 | "send": "0.18.0"
537 | },
538 | "engines": {
539 | "node": ">= 0.8.0"
540 | }
541 | },
542 | "node_modules/setprototypeof": {
543 | "version": "1.2.0",
544 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
545 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
546 | },
547 | "node_modules/side-channel": {
548 | "version": "1.0.4",
549 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
550 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
551 | "dependencies": {
552 | "call-bind": "^1.0.0",
553 | "get-intrinsic": "^1.0.2",
554 | "object-inspect": "^1.9.0"
555 | },
556 | "funding": {
557 | "url": "https://github.com/sponsors/ljharb"
558 | }
559 | },
560 | "node_modules/statuses": {
561 | "version": "2.0.1",
562 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
563 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
564 | "engines": {
565 | "node": ">= 0.8"
566 | }
567 | },
568 | "node_modules/toidentifier": {
569 | "version": "1.0.1",
570 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
571 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
572 | "engines": {
573 | "node": ">=0.6"
574 | }
575 | },
576 | "node_modules/type-is": {
577 | "version": "1.6.18",
578 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
579 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
580 | "dependencies": {
581 | "media-typer": "0.3.0",
582 | "mime-types": "~2.1.24"
583 | },
584 | "engines": {
585 | "node": ">= 0.6"
586 | }
587 | },
588 | "node_modules/unpipe": {
589 | "version": "1.0.0",
590 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
591 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
592 | "engines": {
593 | "node": ">= 0.8"
594 | }
595 | },
596 | "node_modules/utils-merge": {
597 | "version": "1.0.1",
598 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
599 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
600 | "engines": {
601 | "node": ">= 0.4.0"
602 | }
603 | },
604 | "node_modules/vary": {
605 | "version": "1.1.2",
606 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
607 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
608 | "engines": {
609 | "node": ">= 0.8"
610 | }
611 | }
612 | },
613 | "dependencies": {
614 | "accepts": {
615 | "version": "1.3.8",
616 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
617 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
618 | "requires": {
619 | "mime-types": "~2.1.34",
620 | "negotiator": "0.6.3"
621 | }
622 | },
623 | "array-flatten": {
624 | "version": "1.1.1",
625 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
626 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
627 | },
628 | "body-parser": {
629 | "version": "1.20.1",
630 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
631 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
632 | "requires": {
633 | "bytes": "3.1.2",
634 | "content-type": "~1.0.4",
635 | "debug": "2.6.9",
636 | "depd": "2.0.0",
637 | "destroy": "1.2.0",
638 | "http-errors": "2.0.0",
639 | "iconv-lite": "0.4.24",
640 | "on-finished": "2.4.1",
641 | "qs": "6.11.0",
642 | "raw-body": "2.5.1",
643 | "type-is": "~1.6.18",
644 | "unpipe": "1.0.0"
645 | }
646 | },
647 | "bytes": {
648 | "version": "3.1.2",
649 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
650 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
651 | },
652 | "call-bind": {
653 | "version": "1.0.2",
654 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
655 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
656 | "requires": {
657 | "function-bind": "^1.1.1",
658 | "get-intrinsic": "^1.0.2"
659 | }
660 | },
661 | "content-disposition": {
662 | "version": "0.5.4",
663 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
664 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
665 | "requires": {
666 | "safe-buffer": "5.2.1"
667 | }
668 | },
669 | "content-type": {
670 | "version": "1.0.4",
671 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
672 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
673 | },
674 | "cookie": {
675 | "version": "0.5.0",
676 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
677 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
678 | },
679 | "cookie-signature": {
680 | "version": "1.0.6",
681 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
682 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
683 | },
684 | "cors": {
685 | "version": "2.8.5",
686 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
687 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
688 | "requires": {
689 | "object-assign": "^4",
690 | "vary": "^1"
691 | }
692 | },
693 | "debug": {
694 | "version": "2.6.9",
695 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
696 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
697 | "requires": {
698 | "ms": "2.0.0"
699 | }
700 | },
701 | "depd": {
702 | "version": "2.0.0",
703 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
704 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
705 | },
706 | "destroy": {
707 | "version": "1.2.0",
708 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
709 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
710 | },
711 | "ee-first": {
712 | "version": "1.1.1",
713 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
714 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
715 | },
716 | "encodeurl": {
717 | "version": "1.0.2",
718 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
719 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
720 | },
721 | "escape-html": {
722 | "version": "1.0.3",
723 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
724 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
725 | },
726 | "etag": {
727 | "version": "1.8.1",
728 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
729 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
730 | },
731 | "express": {
732 | "version": "4.18.2",
733 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
734 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
735 | "requires": {
736 | "accepts": "~1.3.8",
737 | "array-flatten": "1.1.1",
738 | "body-parser": "1.20.1",
739 | "content-disposition": "0.5.4",
740 | "content-type": "~1.0.4",
741 | "cookie": "0.5.0",
742 | "cookie-signature": "1.0.6",
743 | "debug": "2.6.9",
744 | "depd": "2.0.0",
745 | "encodeurl": "~1.0.2",
746 | "escape-html": "~1.0.3",
747 | "etag": "~1.8.1",
748 | "finalhandler": "1.2.0",
749 | "fresh": "0.5.2",
750 | "http-errors": "2.0.0",
751 | "merge-descriptors": "1.0.1",
752 | "methods": "~1.1.2",
753 | "on-finished": "2.4.1",
754 | "parseurl": "~1.3.3",
755 | "path-to-regexp": "0.1.7",
756 | "proxy-addr": "~2.0.7",
757 | "qs": "6.11.0",
758 | "range-parser": "~1.2.1",
759 | "safe-buffer": "5.2.1",
760 | "send": "0.18.0",
761 | "serve-static": "1.15.0",
762 | "setprototypeof": "1.2.0",
763 | "statuses": "2.0.1",
764 | "type-is": "~1.6.18",
765 | "utils-merge": "1.0.1",
766 | "vary": "~1.1.2"
767 | }
768 | },
769 | "finalhandler": {
770 | "version": "1.2.0",
771 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
772 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
773 | "requires": {
774 | "debug": "2.6.9",
775 | "encodeurl": "~1.0.2",
776 | "escape-html": "~1.0.3",
777 | "on-finished": "2.4.1",
778 | "parseurl": "~1.3.3",
779 | "statuses": "2.0.1",
780 | "unpipe": "~1.0.0"
781 | }
782 | },
783 | "forwarded": {
784 | "version": "0.2.0",
785 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
786 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
787 | },
788 | "fresh": {
789 | "version": "0.5.2",
790 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
791 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
792 | },
793 | "function-bind": {
794 | "version": "1.1.1",
795 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
796 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
797 | },
798 | "get-intrinsic": {
799 | "version": "1.1.3",
800 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
801 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
802 | "requires": {
803 | "function-bind": "^1.1.1",
804 | "has": "^1.0.3",
805 | "has-symbols": "^1.0.3"
806 | }
807 | },
808 | "has": {
809 | "version": "1.0.3",
810 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
811 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
812 | "requires": {
813 | "function-bind": "^1.1.1"
814 | }
815 | },
816 | "has-symbols": {
817 | "version": "1.0.3",
818 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
819 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
820 | },
821 | "http-errors": {
822 | "version": "2.0.0",
823 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
824 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
825 | "requires": {
826 | "depd": "2.0.0",
827 | "inherits": "2.0.4",
828 | "setprototypeof": "1.2.0",
829 | "statuses": "2.0.1",
830 | "toidentifier": "1.0.1"
831 | }
832 | },
833 | "iconv-lite": {
834 | "version": "0.4.24",
835 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
836 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
837 | "requires": {
838 | "safer-buffer": ">= 2.1.2 < 3"
839 | }
840 | },
841 | "inherits": {
842 | "version": "2.0.4",
843 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
844 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
845 | },
846 | "ipaddr.js": {
847 | "version": "1.9.1",
848 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
849 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
850 | },
851 | "media-typer": {
852 | "version": "0.3.0",
853 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
854 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
855 | },
856 | "merge-descriptors": {
857 | "version": "1.0.1",
858 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
859 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
860 | },
861 | "methods": {
862 | "version": "1.1.2",
863 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
864 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
865 | },
866 | "mime": {
867 | "version": "1.6.0",
868 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
869 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
870 | },
871 | "mime-db": {
872 | "version": "1.52.0",
873 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
874 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
875 | },
876 | "mime-types": {
877 | "version": "2.1.35",
878 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
879 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
880 | "requires": {
881 | "mime-db": "1.52.0"
882 | }
883 | },
884 | "ms": {
885 | "version": "2.0.0",
886 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
887 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
888 | },
889 | "negotiator": {
890 | "version": "0.6.3",
891 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
892 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
893 | },
894 | "object-assign": {
895 | "version": "4.1.1",
896 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
897 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
898 | },
899 | "object-inspect": {
900 | "version": "1.12.2",
901 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
902 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
903 | },
904 | "on-finished": {
905 | "version": "2.4.1",
906 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
907 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
908 | "requires": {
909 | "ee-first": "1.1.1"
910 | }
911 | },
912 | "parseurl": {
913 | "version": "1.3.3",
914 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
915 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
916 | },
917 | "path-to-regexp": {
918 | "version": "0.1.7",
919 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
920 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
921 | },
922 | "proxy-addr": {
923 | "version": "2.0.7",
924 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
925 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
926 | "requires": {
927 | "forwarded": "0.2.0",
928 | "ipaddr.js": "1.9.1"
929 | }
930 | },
931 | "qs": {
932 | "version": "6.11.0",
933 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
934 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
935 | "requires": {
936 | "side-channel": "^1.0.4"
937 | }
938 | },
939 | "range-parser": {
940 | "version": "1.2.1",
941 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
942 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
943 | },
944 | "raw-body": {
945 | "version": "2.5.1",
946 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
947 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
948 | "requires": {
949 | "bytes": "3.1.2",
950 | "http-errors": "2.0.0",
951 | "iconv-lite": "0.4.24",
952 | "unpipe": "1.0.0"
953 | }
954 | },
955 | "safe-buffer": {
956 | "version": "5.2.1",
957 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
958 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
959 | },
960 | "safer-buffer": {
961 | "version": "2.1.2",
962 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
963 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
964 | },
965 | "send": {
966 | "version": "0.18.0",
967 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
968 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
969 | "requires": {
970 | "debug": "2.6.9",
971 | "depd": "2.0.0",
972 | "destroy": "1.2.0",
973 | "encodeurl": "~1.0.2",
974 | "escape-html": "~1.0.3",
975 | "etag": "~1.8.1",
976 | "fresh": "0.5.2",
977 | "http-errors": "2.0.0",
978 | "mime": "1.6.0",
979 | "ms": "2.1.3",
980 | "on-finished": "2.4.1",
981 | "range-parser": "~1.2.1",
982 | "statuses": "2.0.1"
983 | },
984 | "dependencies": {
985 | "ms": {
986 | "version": "2.1.3",
987 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
988 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
989 | }
990 | }
991 | },
992 | "serve-static": {
993 | "version": "1.15.0",
994 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
995 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
996 | "requires": {
997 | "encodeurl": "~1.0.2",
998 | "escape-html": "~1.0.3",
999 | "parseurl": "~1.3.3",
1000 | "send": "0.18.0"
1001 | }
1002 | },
1003 | "setprototypeof": {
1004 | "version": "1.2.0",
1005 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1006 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1007 | },
1008 | "side-channel": {
1009 | "version": "1.0.4",
1010 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
1011 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
1012 | "requires": {
1013 | "call-bind": "^1.0.0",
1014 | "get-intrinsic": "^1.0.2",
1015 | "object-inspect": "^1.9.0"
1016 | }
1017 | },
1018 | "statuses": {
1019 | "version": "2.0.1",
1020 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1021 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
1022 | },
1023 | "toidentifier": {
1024 | "version": "1.0.1",
1025 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1026 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
1027 | },
1028 | "type-is": {
1029 | "version": "1.6.18",
1030 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1031 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1032 | "requires": {
1033 | "media-typer": "0.3.0",
1034 | "mime-types": "~2.1.24"
1035 | }
1036 | },
1037 | "unpipe": {
1038 | "version": "1.0.0",
1039 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1040 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
1041 | },
1042 | "utils-merge": {
1043 | "version": "1.0.1",
1044 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1045 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
1046 | },
1047 | "vary": {
1048 | "version": "1.1.2",
1049 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1050 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
1051 | }
1052 | }
1053 | }
1054 |
--------------------------------------------------------------------------------