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