commit
						6c666b555f
					
				| @ -0,0 +1,26 @@ | |||||||
|  | { | ||||||
|  |   "env": { | ||||||
|  |     "es2021": true, | ||||||
|  |     "node": true | ||||||
|  |   }, | ||||||
|  |   "extends": [ | ||||||
|  |     "airbnb-typescript/base", | ||||||
|  |     "eslint:recommended", | ||||||
|  |     "plugin:@typescript-eslint/eslint-recommended", | ||||||
|  |     "plugin:@typescript-eslint/recommended" | ||||||
|  |   ], | ||||||
|  |   "root": true, | ||||||
|  |   "parser": "@typescript-eslint/parser", | ||||||
|  |   "plugins": [ | ||||||
|  |     "@typescript-eslint", | ||||||
|  |     "import", | ||||||
|  |     "promise" | ||||||
|  |   ], | ||||||
|  |   "overrides": [], | ||||||
|  |   "parserOptions": { | ||||||
|  |     "ecmaVersion": "latest", | ||||||
|  |     "sourceType": "module", | ||||||
|  |     "project": "./tsconfig.json" | ||||||
|  |   }, | ||||||
|  |   "rules": {} | ||||||
|  | } | ||||||
| @ -0,0 +1,229 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Created by https://www.toptal.com/developers/gitignore/api/node,linux,macos,windows,sublimetext | ||||||
|  | # Edit at https://www.toptal.com/developers/gitignore?templates=node,linux,macos,windows,sublimetext | ||||||
|  | 
 | ||||||
|  | ### Linux ### | ||||||
|  | *~ | ||||||
|  | 
 | ||||||
|  | # temporary files which can be created if a process still has a handle open of a deleted file | ||||||
|  | .fuse_hidden* | ||||||
|  | 
 | ||||||
|  | # KDE directory preferences | ||||||
|  | .directory | ||||||
|  | 
 | ||||||
|  | # Linux trash folder which might appear on any partition or disk | ||||||
|  | .Trash-* | ||||||
|  | 
 | ||||||
|  | # .nfs files are created when an open file is removed but is still being accessed | ||||||
|  | .nfs* | ||||||
|  | 
 | ||||||
|  | ### macOS ### | ||||||
|  | # General | ||||||
|  | .DS_Store | ||||||
|  | .AppleDouble | ||||||
|  | .LSOverride | ||||||
|  | 
 | ||||||
|  | # Icon must end with two \r | ||||||
|  | Icon | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Thumbnails | ||||||
|  | ._* | ||||||
|  | 
 | ||||||
|  | # Files that might appear in the root of a volume | ||||||
|  | .DocumentRevisions-V100 | ||||||
|  | .fseventsd | ||||||
|  | .Spotlight-V100 | ||||||
|  | .TemporaryItems | ||||||
|  | .Trashes | ||||||
|  | .VolumeIcon.icns | ||||||
|  | .com.apple.timemachine.donotpresent | ||||||
|  | 
 | ||||||
|  | # Directories potentially created on remote AFP share | ||||||
|  | .AppleDB | ||||||
|  | .AppleDesktop | ||||||
|  | Network Trash Folder | ||||||
|  | Temporary Items | ||||||
|  | .apdisk | ||||||
|  | 
 | ||||||
|  | ### Node ### | ||||||
|  | # Logs | ||||||
|  | logs | ||||||
|  | *.log | ||||||
|  | npm-debug.log* | ||||||
|  | yarn-debug.log* | ||||||
|  | yarn-error.log* | ||||||
|  | lerna-debug.log* | ||||||
|  | .pnpm-debug.log* | ||||||
|  | 
 | ||||||
|  | # Diagnostic reports (https://nodejs.org/api/report.html) | ||||||
|  | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json | ||||||
|  | 
 | ||||||
|  | # Runtime data | ||||||
|  | pids | ||||||
|  | *.pid | ||||||
|  | *.seed | ||||||
|  | *.pid.lock | ||||||
|  | 
 | ||||||
|  | # Directory for instrumented libs generated by jscoverage/JSCover | ||||||
|  | lib-cov | ||||||
|  | 
 | ||||||
|  | # Coverage directory used by tools like istanbul | ||||||
|  | coverage | ||||||
|  | *.lcov | ||||||
|  | 
 | ||||||
|  | # nyc test coverage | ||||||
|  | .nyc_output | ||||||
|  | 
 | ||||||
|  | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) | ||||||
|  | .grunt | ||||||
|  | 
 | ||||||
|  | # Bower dependency directory (https://bower.io/) | ||||||
|  | bower_components | ||||||
|  | 
 | ||||||
|  | # node-waf configuration | ||||||
|  | .lock-wscript | ||||||
|  | 
 | ||||||
|  | # Compiled binary addons (https://nodejs.org/api/addons.html) | ||||||
|  | build/Release | ||||||
|  | 
 | ||||||
|  | # Dependency directories | ||||||
|  | node_modules/ | ||||||
|  | jspm_packages/ | ||||||
|  | 
 | ||||||
|  | # Snowpack dependency directory (https://snowpack.dev/) | ||||||
|  | web_modules/ | ||||||
|  | 
 | ||||||
|  | # TypeScript cache | ||||||
|  | *.tsbuildinfo | ||||||
|  | 
 | ||||||
|  | # Optional npm cache directory | ||||||
|  | .npm | ||||||
|  | 
 | ||||||
|  | # Optional eslint cache | ||||||
|  | .eslintcache | ||||||
|  | 
 | ||||||
|  | # Microbundle cache | ||||||
|  | .rpt2_cache/ | ||||||
|  | .rts2_cache_cjs/ | ||||||
|  | .rts2_cache_es/ | ||||||
|  | .rts2_cache_umd/ | ||||||
|  | 
 | ||||||
|  | # Optional REPL history | ||||||
|  | .node_repl_history | ||||||
|  | 
 | ||||||
|  | # Output of 'npm pack' | ||||||
|  | *.tgz | ||||||
|  | 
 | ||||||
|  | # Yarn Integrity file | ||||||
|  | .yarn-integrity | ||||||
|  | 
 | ||||||
|  | # dotenv environment variables file | ||||||
|  | .env | ||||||
|  | .env.test | ||||||
|  | .env.production | ||||||
|  | 
 | ||||||
|  | # parcel-bundler cache (https://parceljs.org/) | ||||||
|  | .cache | ||||||
|  | .parcel-cache | ||||||
|  | 
 | ||||||
|  | # Next.js build output | ||||||
|  | .next | ||||||
|  | out | ||||||
|  | 
 | ||||||
|  | # Nuxt.js build / generate output | ||||||
|  | .nuxt | ||||||
|  | dist | ||||||
|  | 
 | ||||||
|  | # Gatsby files | ||||||
|  | .cache/ | ||||||
|  | # Comment in the public line in if your project uses Gatsby and not Next.js | ||||||
|  | # https://nextjs.org/blog/next-9-1#public-directory-support | ||||||
|  | # public | ||||||
|  | 
 | ||||||
|  | # vuepress build output | ||||||
|  | .vuepress/dist | ||||||
|  | 
 | ||||||
|  | # Serverless directories | ||||||
|  | .serverless/ | ||||||
|  | 
 | ||||||
|  | # FuseBox cache | ||||||
|  | .fusebox/ | ||||||
|  | 
 | ||||||
|  | # DynamoDB Local files | ||||||
|  | .dynamodb/ | ||||||
|  | 
 | ||||||
|  | # TernJS port file | ||||||
|  | .tern-port | ||||||
|  | 
 | ||||||
|  | # Stores VSCode versions used for testing VSCode extensions | ||||||
|  | .vscode-test | ||||||
|  | 
 | ||||||
|  | # yarn v2 | ||||||
|  | .yarn/cache | ||||||
|  | .yarn/unplugged | ||||||
|  | .yarn/build-state.yml | ||||||
|  | .yarn/install-state.gz | ||||||
|  | .pnp.* | ||||||
|  | 
 | ||||||
|  | ### SublimeText ### | ||||||
|  | # Cache files for Sublime Text | ||||||
|  | *.tmlanguage.cache | ||||||
|  | *.tmPreferences.cache | ||||||
|  | *.stTheme.cache | ||||||
|  | 
 | ||||||
|  | # Workspace files are user-specific | ||||||
|  | *.sublime-workspace | ||||||
|  | 
 | ||||||
|  | # Project files should be checked into the repository, unless a significant | ||||||
|  | # proportion of contributors will probably not be using Sublime Text | ||||||
|  | # *.sublime-project | ||||||
|  | 
 | ||||||
|  | # SFTP configuration file | ||||||
|  | sftp-config.json | ||||||
|  | sftp-config-alt*.json | ||||||
|  | 
 | ||||||
|  | # Package control specific files | ||||||
|  | Package Control.last-run | ||||||
|  | Package Control.ca-list | ||||||
|  | Package Control.ca-bundle | ||||||
|  | Package Control.system-ca-bundle | ||||||
|  | Package Control.cache/ | ||||||
|  | Package Control.ca-certs/ | ||||||
|  | Package Control.merged-ca-bundle | ||||||
|  | Package Control.user-ca-bundle | ||||||
|  | oscrypto-ca-bundle.crt | ||||||
|  | bh_unicode_properties.cache | ||||||
|  | 
 | ||||||
|  | # Sublime-github package stores a github token in this file | ||||||
|  | # https://packagecontrol.io/packages/sublime-github | ||||||
|  | GitHub.sublime-settings | ||||||
|  | 
 | ||||||
|  | ### Windows ### | ||||||
|  | # Windows thumbnail cache files | ||||||
|  | Thumbs.db | ||||||
|  | Thumbs.db:encryptable | ||||||
|  | ehthumbs.db | ||||||
|  | ehthumbs_vista.db | ||||||
|  | 
 | ||||||
|  | # Dump file | ||||||
|  | *.stackdump | ||||||
|  | 
 | ||||||
|  | # Folder config file | ||||||
|  | [Dd]esktop.ini | ||||||
|  | 
 | ||||||
|  | # Recycle Bin used on file shares | ||||||
|  | $RECYCLE.BIN/ | ||||||
|  | 
 | ||||||
|  | # Windows Installer files | ||||||
|  | *.cab | ||||||
|  | *.msi | ||||||
|  | *.msix | ||||||
|  | *.msm | ||||||
|  | *.msp | ||||||
|  | 
 | ||||||
|  | # Windows shortcuts | ||||||
|  | *.lnk | ||||||
|  | 
 | ||||||
|  | # End of https://www.toptal.com/developers/gitignore/api/node,linux,macos,windows,sublimetext | ||||||
| @ -0,0 +1,18 @@ | |||||||
|  | { | ||||||
|  |   // Use IntelliSense to learn about possible attributes. | ||||||
|  |   // Hover to view descriptions of existing attributes. | ||||||
|  |   // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||||||
|  |   "version": "0.2.0", | ||||||
|  |   "configurations": [ | ||||||
|  |     { | ||||||
|  |       "name": "Attach 2 Node", | ||||||
|  |       "type": "node", | ||||||
|  |       "request": "attach", | ||||||
|  |       "port": 9229, | ||||||
|  |       "address": "localhost", | ||||||
|  |       "localRoot": "${workspaceFolder}", | ||||||
|  |       "remoteRoot": "/app", | ||||||
|  |       "restart": true | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
| @ -0,0 +1,48 @@ | |||||||
|  | # ################################################################ | ||||||
|  | # ###                        Base image                        ### | ||||||
|  | # ################################################################ | ||||||
|  | FROM node:16-alpine as base | ||||||
|  | 
 | ||||||
|  | WORKDIR /app | ||||||
|  | 
 | ||||||
|  | COPY . . | ||||||
|  | 
 | ||||||
|  | ARG NODE_ENV=production | ||||||
|  | ENV NODE_ENV ${NODE_ENV} | ||||||
|  | 
 | ||||||
|  | # ################################################################ | ||||||
|  | # ###                     development image                    ### | ||||||
|  | # ################################################################ | ||||||
|  | FROM base as development | ||||||
|  | 
 | ||||||
|  | WORKDIR /app | ||||||
|  | 
 | ||||||
|  | RUN npm install --quiet --unsafe-perm --no-progress --no-audit --include=dev | ||||||
|  | 
 | ||||||
|  | CMD npm run run:dev | ||||||
|  | 
 | ||||||
|  | # ################################################################ | ||||||
|  | # ###                    backend build image                   ### | ||||||
|  | # ################################################################ | ||||||
|  | 
 | ||||||
|  | FROM base as backendbuild | ||||||
|  | 
 | ||||||
|  | WORKDIR /app | ||||||
|  | 
 | ||||||
|  | RUN npm install --quiet --unsafe-perm --no-progress --no-audit --include=dev | ||||||
|  | 
 | ||||||
|  | RUN npx tsc -p ./tsconfig.json | ||||||
|  | 
 | ||||||
|  | # ################################################################ | ||||||
|  | # ###                     production image                     ### | ||||||
|  | # ################################################################ | ||||||
|  | 
 | ||||||
|  | FROM base as production | ||||||
|  | 
 | ||||||
|  | COPY --from=backendbuild --chown=node:node /app/dist/ /app/dist/ | ||||||
|  | 
 | ||||||
|  | WORKDIR /app | ||||||
|  | 
 | ||||||
|  | RUN npm install --quiet --unsafe-perm --no-progress --no-audit --omit=dev | ||||||
|  | 
 | ||||||
|  | CMD npm run run:prod | ||||||
| @ -0,0 +1,7 @@ | |||||||
|  | # TypeScript Project Template | ||||||
|  | 
 | ||||||
|  | ## preparation | ||||||
|  | 
 | ||||||
|  | ```sh | ||||||
|  | npm install -g eslint eslint-config-airbnb-typescript eslint-plugin-import eslint-plugin-n eslint-plugin-promise | ||||||
|  | ``` | ||||||
| @ -0,0 +1,18 @@ | |||||||
|  | version: '2.4' | ||||||
|  | 
 | ||||||
|  | services: | ||||||
|  |   app: | ||||||
|  |     build: | ||||||
|  |       context: . | ||||||
|  |       dockerfile: ./Dockerfile | ||||||
|  |       target: development | ||||||
|  |       args: | ||||||
|  |         - NODE_ENV=development | ||||||
|  |     ports: | ||||||
|  |       - '3030:3030/tcp' | ||||||
|  |       - '9229:9229/tcp' | ||||||
|  |     volumes: | ||||||
|  |       - .:/app:delegated | ||||||
|  |     environment: | ||||||
|  |       - MONGO_URI | ||||||
|  |       - PORT=3030 | ||||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								| @ -0,0 +1,33 @@ | |||||||
|  | { | ||||||
|  |   "name": "app", | ||||||
|  |   "version": "1.0.0", | ||||||
|  |   "description": "", | ||||||
|  |   "main": "index.js", | ||||||
|  |   "scripts": { | ||||||
|  |     "test": "echo \"Error: no test specified\" && exit 1", | ||||||
|  |     "prerun:dev": "npm install && rimraf dist/*", | ||||||
|  |     "run:prod": "node --inspect=0.0.0.0:9229 dist/app.js", | ||||||
|  |     "run:dev": "tsc-watch --onSuccess \"npm run run:prod\" --onFailure \"echo WHOOPS! Server compilation failed\"" | ||||||
|  |   }, | ||||||
|  |   "keywords": [], | ||||||
|  |   "author": "Fionn Sperath", | ||||||
|  |   "license": "ISC", | ||||||
|  |   "dependencies": { | ||||||
|  |     "ejs-mate": "^4.0.0", | ||||||
|  |     "express": "^4.18.1" | ||||||
|  |   }, | ||||||
|  |   "devDependencies": { | ||||||
|  |     "@types/express": "^4.17.13", | ||||||
|  |     "@types/node": "^18.7.6", | ||||||
|  |     "@typescript-eslint/eslint-plugin": "^5.38.1", | ||||||
|  |     "@typescript-eslint/parser": "^5.38.1", | ||||||
|  |     "eslint": "^8.23.1", | ||||||
|  |     "eslint-config-airbnb-typescript": "^17.0.0", | ||||||
|  |     "eslint-plugin-import": "^2.26.0", | ||||||
|  |     "eslint-plugin-n": "^15.2.5", | ||||||
|  |     "eslint-plugin-promise": "^6.0.1", | ||||||
|  |     "rimraf": "^3.0.2", | ||||||
|  |     "tsc-watch": "^5.0.3", | ||||||
|  |     "typescript": "^4.7.4" | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -0,0 +1,31 @@ | |||||||
|  | import express, { NextFunction, Request, Response } from 'express'; | ||||||
|  | import ejsMate from 'ejs-mate'; | ||||||
|  | 
 | ||||||
|  | const { PORT = 3000 } = process.env; | ||||||
|  | 
 | ||||||
|  | const app = express(); | ||||||
|  | 
 | ||||||
|  | app.engine('ejs', ejsMate); | ||||||
|  | app.set('views', '/app/views'); | ||||||
|  | app.set('view engine', 'ejs'); | ||||||
|  | 
 | ||||||
|  | app.use('/dist/bootstrap', express.static('/app/public')); | ||||||
|  | 
 | ||||||
|  | app.use(express.static('/app/public')); | ||||||
|  | 
 | ||||||
|  | app.use((req: Request, res: Response, next: NextFunction) => { | ||||||
|  |   // 404
 | ||||||
|  |   return next(new Error('404')); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | ||||||
|  | app.use((err, req: Request, res: Response, next: NextFunction) => { | ||||||
|  |   // 404
 | ||||||
|  |   res.render('error'); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | app.listen(PORT, () => { | ||||||
|  |   console.log( | ||||||
|  |     `application is listening on port ${PORT}`, | ||||||
|  |   ); | ||||||
|  | }); | ||||||
| @ -0,0 +1,18 @@ | |||||||
|  | { | ||||||
|  |   "compileOnSave": false, | ||||||
|  |   "compilerOptions": { | ||||||
|  |     "outDir": "dist", | ||||||
|  |     "module": "commonjs", | ||||||
|  |     "target": "es2015", | ||||||
|  |     "lib": [ | ||||||
|  |       "es2017" | ||||||
|  |     ], | ||||||
|  |     "sourceMap": true, | ||||||
|  |     "strictNullChecks": true, | ||||||
|  |     "noImplicitAny": false, | ||||||
|  |     "preserveConstEnums": true, | ||||||
|  |     "removeComments": true, | ||||||
|  |     "forceConsistentCasingInFileNames": true, | ||||||
|  |     "esModuleInterop": true | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | <% layout('layout') -%> | ||||||
|  | 
 | ||||||
|  | Oops! Something went wrong :( | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html lang="en"> | ||||||
|  | 
 | ||||||
|  | <head> | ||||||
|  |   <meta charset="UTF-8"> | ||||||
|  |   <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |   <title>New App 😀</title> | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body> | ||||||
|  |   <%- body -%> | ||||||
|  | </body> | ||||||
|  | 
 | ||||||
|  | </html> | ||||||
					Loading…
					
					
				
		Reference in new issue