From e318b98283224e4befe2b1d22307a564d39130bd Mon Sep 17 00:00:00 2001 From: zahra shahrouzi Date: Mon, 8 Apr 2024 19:32:45 +0330 Subject: [PATCH 01/10] move content of @repo/jest-presets/jest one level higher for better accessiblity --- examples/with-docker/apps/api/package.json | 4 ++-- .../packages/jest-presets/{jest => }/node/jest-preset.js | 0 examples/with-docker/packages/jest-presets/package.json | 5 ++++- examples/with-docker/packages/logger/package.json | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) rename examples/with-docker/packages/jest-presets/{jest => }/node/jest-preset.js (100%) diff --git a/examples/with-docker/apps/api/package.json b/examples/with-docker/apps/api/package.json index 871d6949b82b5..205cb3446c4c4 100644 --- a/examples/with-docker/apps/api/package.json +++ b/examples/with-docker/apps/api/package.json @@ -11,7 +11,7 @@ "test": "jest --detectOpenHandles" }, "jest": { - "preset": "@repo/jest-presets/jest/node" + "preset": "@repo/jest-presets/node" }, "dependencies": { "@repo/logger": "*", @@ -39,4 +39,4 @@ "supertest": "^6.3.3", "typescript": "^5.3.3" } -} +} \ No newline at end of file diff --git a/examples/with-docker/packages/jest-presets/jest/node/jest-preset.js b/examples/with-docker/packages/jest-presets/node/jest-preset.js similarity index 100% rename from examples/with-docker/packages/jest-presets/jest/node/jest-preset.js rename to examples/with-docker/packages/jest-presets/node/jest-preset.js diff --git a/examples/with-docker/packages/jest-presets/package.json b/examples/with-docker/packages/jest-presets/package.json index 27c42f87b82d7..7457684ee21fe 100644 --- a/examples/with-docker/packages/jest-presets/package.json +++ b/examples/with-docker/packages/jest-presets/package.json @@ -3,7 +3,10 @@ "version": "0.0.0", "private": true, "license": "MIT", + "files": [ + "node/jest-preset.js" + ], "dependencies": { "ts-jest": "^29.1.1" } -} +} \ No newline at end of file diff --git a/examples/with-docker/packages/logger/package.json b/examples/with-docker/packages/logger/package.json index 3b4fef2b5e3fe..62fdcaf5cecc1 100644 --- a/examples/with-docker/packages/logger/package.json +++ b/examples/with-docker/packages/logger/package.json @@ -15,7 +15,7 @@ "test": "jest" }, "jest": { - "preset": "@repo/jest-presets/jest/node" + "preset": "@repo/jest-presets/node" }, "devDependencies": { "@types/jest": "^29.5.12", From a0b13b7a4fdb516e8272ebcbaac0a72f3dea3966 Mon Sep 17 00:00:00 2001 From: zahra shahrouzi Date: Mon, 8 Apr 2024 19:33:23 +0330 Subject: [PATCH 02/10] add @types/node to @repo/logger --- examples/with-docker/packages/logger/package.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/examples/with-docker/packages/logger/package.json b/examples/with-docker/packages/logger/package.json index 62fdcaf5cecc1..728389c0cb294 100644 --- a/examples/with-docker/packages/logger/package.json +++ b/examples/with-docker/packages/logger/package.json @@ -18,12 +18,13 @@ "preset": "@repo/jest-presets/node" }, "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/jest-presets": "workspace:*", + "@repo/typescript-config": "workspace:*", "@types/jest": "^29.5.12", + "@types/node": "^20.11.24", "eslint": "^8.57.0", - "@repo/eslint-config": "*", "jest": "^29.7.0", - "@repo/jest-presets": "*", - "@repo/typescript-config": "*", "typescript": "^5.3.3" } -} +} \ No newline at end of file From 83d17d5b96bd354262ed30ac25d701602c5a1e82 Mon Sep 17 00:00:00 2001 From: zahra shahrouzi Date: Mon, 8 Apr 2024 19:34:13 +0330 Subject: [PATCH 03/10] remove tsconfig.json from __tests__ --- examples/with-docker/apps/api/src/__tests__/tsconfig.json | 4 ---- .../with-docker/packages/logger/src/__tests__/tsconfig.json | 4 ---- 2 files changed, 8 deletions(-) delete mode 100644 examples/with-docker/apps/api/src/__tests__/tsconfig.json delete mode 100644 examples/with-docker/packages/logger/src/__tests__/tsconfig.json diff --git a/examples/with-docker/apps/api/src/__tests__/tsconfig.json b/examples/with-docker/apps/api/src/__tests__/tsconfig.json deleted file mode 100644 index bf65be62f2d5c..0000000000000 --- a/examples/with-docker/apps/api/src/__tests__/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": [".", "../."] -} diff --git a/examples/with-docker/packages/logger/src/__tests__/tsconfig.json b/examples/with-docker/packages/logger/src/__tests__/tsconfig.json deleted file mode 100644 index bf65be62f2d5c..0000000000000 --- a/examples/with-docker/packages/logger/src/__tests__/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": [".", "../."] -} From c4f2c8e7c61fae2309527d3b4f30c4a2a24b7193 Mon Sep 17 00:00:00 2001 From: zahra shahrouzi Date: Mon, 8 Apr 2024 19:36:28 +0330 Subject: [PATCH 04/10] use @types/node in logger to fix the error "Cannot find name 'global'." --- examples/with-docker/packages/logger/tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/with-docker/packages/logger/tsconfig.json b/examples/with-docker/packages/logger/tsconfig.json index 225dca86b0d49..4a3ccd66ce4d8 100644 --- a/examples/with-docker/packages/logger/tsconfig.json +++ b/examples/with-docker/packages/logger/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "lib": ["ES2015"], "outDir": "./dist", - "rootDir": "./src" + "rootDir": "./src", + "types": ["jest", "node"] }, "include": ["src"], "exclude": ["node_modules"] From f6c59adae8c838e25176f7e607a4629e72ff3dc8 Mon Sep 17 00:00:00 2001 From: zahra shahrouzi Date: Mon, 8 Apr 2024 19:37:18 +0330 Subject: [PATCH 05/10] add "DOM" to lib to fix the error "Cannot find name 'console'." --- examples/with-docker/packages/logger/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/with-docker/packages/logger/tsconfig.json b/examples/with-docker/packages/logger/tsconfig.json index 4a3ccd66ce4d8..0ebbe11121b89 100644 --- a/examples/with-docker/packages/logger/tsconfig.json +++ b/examples/with-docker/packages/logger/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "@repo/typescript-config/base.json", "compilerOptions": { - "lib": ["ES2015"], + "lib": ["ES2015", "DOM"], "outDir": "./dist", "rootDir": "./src", "types": ["jest", "node"] From 0a385d653136a4c9ba3f0e3aacae9dcc3ab4b0c9 Mon Sep 17 00:00:00 2001 From: zahra shahrouzi Date: Mon, 8 Apr 2024 19:39:31 +0330 Subject: [PATCH 06/10] add type to the createServer function to fix the error "The inferred type of 'createServer' cannot be named without a reference" --- examples/with-docker/apps/api/src/server.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/with-docker/apps/api/src/server.ts b/examples/with-docker/apps/api/src/server.ts index 70ccf0b76b72c..3e062c5e1eae9 100644 --- a/examples/with-docker/apps/api/src/server.ts +++ b/examples/with-docker/apps/api/src/server.ts @@ -1,9 +1,9 @@ import { json, urlencoded } from "body-parser"; -import express from "express"; +import express, { type Express } from "express"; import morgan from "morgan"; import cors from "cors"; -export const createServer = () => { +export const createServer = (): Express => { const app = express(); app .disable("x-powered-by") From 57a5e458457b18e8418a6b7b66adb8090d8fe37c Mon Sep 17 00:00:00 2001 From: zahra shahrouzi Date: Mon, 8 Apr 2024 19:40:19 +0330 Subject: [PATCH 07/10] replace toBeCalled as it's been deprecated --- examples/with-docker/packages/logger/src/__tests__/log.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/with-docker/packages/logger/src/__tests__/log.test.ts b/examples/with-docker/packages/logger/src/__tests__/log.test.ts index 67e9dcb68f468..0da12534d68e4 100644 --- a/examples/with-docker/packages/logger/src/__tests__/log.test.ts +++ b/examples/with-docker/packages/logger/src/__tests__/log.test.ts @@ -5,6 +5,6 @@ jest.spyOn(global.console, "log"); describe("@repo/logger", () => { it("prints a message", () => { log("hello"); - expect(console.log).toBeCalled(); + expect(console.log).toHaveBeenCalled(); }); }); From 25139bcc827d6826bb4aa02bce9fc0d920bb267c Mon Sep 17 00:00:00 2001 From: zahra shahrouzi Date: Mon, 8 Apr 2024 19:41:24 +0330 Subject: [PATCH 08/10] change "healthz" to "status" for consistency --- examples/with-docker/apps/api/src/__tests__/server.test.ts | 6 +++--- examples/with-docker/apps/api/src/server.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/with-docker/apps/api/src/__tests__/server.test.ts b/examples/with-docker/apps/api/src/__tests__/server.test.ts index c0c9806f8a9d7..1385679fb36a5 100644 --- a/examples/with-docker/apps/api/src/__tests__/server.test.ts +++ b/examples/with-docker/apps/api/src/__tests__/server.test.ts @@ -2,9 +2,9 @@ import supertest from "supertest"; import { createServer } from "../server"; describe("server", () => { - it("health check returns 200", async () => { + it("status check returns 200", async () => { await supertest(createServer()) - .get("/healthz") + .get("/status") .expect(200) .then((res) => { expect(res.body.ok).toBe(true); @@ -16,7 +16,7 @@ describe("server", () => { .get("/message/jared") .expect(200) .then((res) => { - expect(res.body).toEqual({ message: "hello jared" }); + expect(res.body.message).toBe("hello jared"); }); }); }); diff --git a/examples/with-docker/apps/api/src/server.ts b/examples/with-docker/apps/api/src/server.ts index 3e062c5e1eae9..dedb517f21ed5 100644 --- a/examples/with-docker/apps/api/src/server.ts +++ b/examples/with-docker/apps/api/src/server.ts @@ -14,7 +14,7 @@ export const createServer = (): Express => { .get("/message/:name", (req, res) => { return res.json({ message: `hello ${req.params.name}` }); }) - .get("/healthz", (req, res) => { + .get("/status", (_, res) => { return res.json({ ok: true }); }); From ea61242e30e1680d5e9e534851cf02dff2a5d612 Mon Sep 17 00:00:00 2001 From: zahra shahrouzi Date: Mon, 8 Apr 2024 19:41:49 +0330 Subject: [PATCH 09/10] improve imports from React --- examples/with-docker/apps/web/src/app/page.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/with-docker/apps/web/src/app/page.tsx b/examples/with-docker/apps/web/src/app/page.tsx index 3f2d7c530356e..0b8db5bafe42e 100644 --- a/examples/with-docker/apps/web/src/app/page.tsx +++ b/examples/with-docker/apps/web/src/app/page.tsx @@ -1,7 +1,7 @@ "use client"; +import { useEffect, useState, ChangeEvent, FormEvent } from "react"; import { Button } from "@repo/ui/button"; -import { useEffect, useState } from "react"; const API_HOST = process.env.NEXT_PUBLIC_API_HOST || "http://localhost:3001"; @@ -15,10 +15,10 @@ export default function Web() { setError(undefined); }, [name]); - const onChange = (e: React.ChangeEvent) => + const onChange = (e: ChangeEvent) => setName(e.target.value); - const onSubmit = async (e: React.FormEvent) => { + const onSubmit = async (e: FormEvent) => { e.preventDefault(); try { From 12c83f69ca32d9677bbda1fbd27ee139d4894025 Mon Sep 17 00:00:00 2001 From: zahra shahrouzi Date: Mon, 8 Apr 2024 19:50:31 +0330 Subject: [PATCH 10/10] update README.md --- examples/with-docker/README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/examples/with-docker/README.md b/examples/with-docker/README.md index f6b00324ee924..5bafb934d62a4 100644 --- a/examples/with-docker/README.md +++ b/examples/with-docker/README.md @@ -12,18 +12,17 @@ npx create-turbo@latest -e with-docker ## What's inside? -This turborepo uses [Yarn](https://classic.yarnpkg.com/lang/en/) as a package manager. It includes the following packages/apps: +This Turborepo includes the following: ### Apps and Packages -- `@repo/web`: a [Next.js](https://nextjs.org/) app -- `@repo/api`: an [Express](https://expressjs.com/) server -- `@repo/ui`: ui: a React component library -- `@repo/eslint-config-custom`: `eslint` configurations for client side applications (includes `eslint-config-next` and `eslint-config-prettier`) -- `@repo/eslint-config-custom-server`: `eslint` configurations for server side applications (includes `eslint-config-next` and `eslint-config-prettier`) -- `scripts`: Jest configurations +- `web`: a [Next.js](https://nextjs.org/) app +- `api`: an [Express](https://expressjs.com/) server +- `@repo/ui`: a React component library - `@repo/logger`: Isomorphic logger (a small wrapper around console.log) +- `@repo/eslint-config`: ESLint presets - `@repo/typescript-config`: tsconfig.json's used throughout the monorepo +- `@repo/jest-presets`: Jest configurations Each package/app is 100% [TypeScript](https://www.typescriptlang.org/).