diff options
| author | 2023-04-28 01:47:57 +0800 | |
|---|---|---|
| committer | 2023-04-28 01:47:57 +0800 | |
| commit | 8b2c4a38a461ff5ecc95972291bc711e2c5dec9a (patch) | |
| tree | 29f552e3df949073e21bf5c76d7abc3044830ec6 /examples/kitchen-sink/apps/api | |
| parent | fc8c5fdce62fb229202659408798a7b6c98f6e8b (diff) | |
| download | HydroRoll-8b2c4a38a461ff5ecc95972291bc711e2c5dec9a.tar.gz HydroRoll-8b2c4a38a461ff5ecc95972291bc711e2c5dec9a.zip | |
Diffstat (limited to 'examples/kitchen-sink/apps/api')
| -rw-r--r-- | examples/kitchen-sink/apps/api/.eslintrc.js | 4 | ||||
| -rw-r--r-- | examples/kitchen-sink/apps/api/package.json | 40 | ||||
| -rw-r--r-- | examples/kitchen-sink/apps/api/src/__tests__/server.test.ts | 22 | ||||
| -rw-r--r-- | examples/kitchen-sink/apps/api/src/__tests__/tsconfig.json | 4 | ||||
| -rw-r--r-- | examples/kitchen-sink/apps/api/src/index.ts | 9 | ||||
| -rw-r--r-- | examples/kitchen-sink/apps/api/src/server.ts | 22 | ||||
| -rw-r--r-- | examples/kitchen-sink/apps/api/tsconfig.json | 11 |
7 files changed, 112 insertions, 0 deletions
diff --git a/examples/kitchen-sink/apps/api/.eslintrc.js b/examples/kitchen-sink/apps/api/.eslintrc.js new file mode 100644 index 0000000..2308ff9 --- /dev/null +++ b/examples/kitchen-sink/apps/api/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ["custom-server"], +}; diff --git a/examples/kitchen-sink/apps/api/package.json b/examples/kitchen-sink/apps/api/package.json new file mode 100644 index 0000000..0c2a0c0 --- /dev/null +++ b/examples/kitchen-sink/apps/api/package.json @@ -0,0 +1,40 @@ +{ + "name": "api", + "version": "0.0.0", + "private": true, + "scripts": { + "build": "tsup src/index.ts --format cjs", + "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist", + "dev": "tsup src/index.ts --format cjs --watch --onSuccess \"node dist/index.js\"", + "lint": "tsc --noEmit && eslint \"src/**/*.ts*\"", + "start": "node dist/index.js", + "test": "jest --detectOpenHandles" + }, + "jest": { + "preset": "jest-presets/jest/node" + }, + "dependencies": { + "body-parser": "^1.19.0", + "cors": "^2.8.5", + "express": "^4.17.1", + "logger": "workspace:*", + "morgan": "^1.10.0" + }, + "devDependencies": { + "@types/body-parser": "^1.19.0", + "@types/cors": "^2.8.10", + "@types/express": "^4.17.12", + "@types/jest": "^26.0.22", + "@types/morgan": "^1.9.2", + "@types/node": "^15.12.2", + "@types/supertest": "^2.0.12", + "eslint": "^7.32.0", + "eslint-config-custom-server": "workspace:*", + "jest": "^26.6.3", + "jest-presets": "workspace:*", + "supertest": "^6.2.4", + "tsconfig": "workspace:*", + "tsup": "^6.2.3", + "typescript": "^4.8.3" + } +} diff --git a/examples/kitchen-sink/apps/api/src/__tests__/server.test.ts b/examples/kitchen-sink/apps/api/src/__tests__/server.test.ts new file mode 100644 index 0000000..c0c9806 --- /dev/null +++ b/examples/kitchen-sink/apps/api/src/__tests__/server.test.ts @@ -0,0 +1,22 @@ +import supertest from "supertest"; +import { createServer } from "../server"; + +describe("server", () => { + it("health check returns 200", async () => { + await supertest(createServer()) + .get("/healthz") + .expect(200) + .then((res) => { + expect(res.body.ok).toBe(true); + }); + }); + + it("message endpoint says hello", async () => { + await supertest(createServer()) + .get("/message/jared") + .expect(200) + .then((res) => { + expect(res.body).toEqual({ message: "hello jared" }); + }); + }); +}); diff --git a/examples/kitchen-sink/apps/api/src/__tests__/tsconfig.json b/examples/kitchen-sink/apps/api/src/__tests__/tsconfig.json new file mode 100644 index 0000000..bf65be6 --- /dev/null +++ b/examples/kitchen-sink/apps/api/src/__tests__/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.json", + "include": [".", "../."] +} diff --git a/examples/kitchen-sink/apps/api/src/index.ts b/examples/kitchen-sink/apps/api/src/index.ts new file mode 100644 index 0000000..5f48625 --- /dev/null +++ b/examples/kitchen-sink/apps/api/src/index.ts @@ -0,0 +1,9 @@ +import { createServer } from "./server"; +import { log } from "logger"; + +const port = process.env.PORT || 5001; +const server = createServer(); + +server.listen(port, () => { + log(`api running on ${port}`); +}); diff --git a/examples/kitchen-sink/apps/api/src/server.ts b/examples/kitchen-sink/apps/api/src/server.ts new file mode 100644 index 0000000..70ccf0b --- /dev/null +++ b/examples/kitchen-sink/apps/api/src/server.ts @@ -0,0 +1,22 @@ +import { json, urlencoded } from "body-parser"; +import express from "express"; +import morgan from "morgan"; +import cors from "cors"; + +export const createServer = () => { + const app = express(); + app + .disable("x-powered-by") + .use(morgan("dev")) + .use(urlencoded({ extended: true })) + .use(json()) + .use(cors()) + .get("/message/:name", (req, res) => { + return res.json({ message: `hello ${req.params.name}` }); + }) + .get("/healthz", (req, res) => { + return res.json({ ok: true }); + }); + + return app; +}; diff --git a/examples/kitchen-sink/apps/api/tsconfig.json b/examples/kitchen-sink/apps/api/tsconfig.json new file mode 100644 index 0000000..74f3de4 --- /dev/null +++ b/examples/kitchen-sink/apps/api/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "lib": ["ES2015"], + "module": "CommonJS", + "outDir": "./dist", + "rootDir": "./src" + }, + "exclude": ["node_modules"], + "extends": "tsconfig/base.json", + "include": ["src"] +} |
