From 6312b344cded0a8646e10456d3e0228fd142df28 Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Mon, 2 Dec 2024 11:30:52 -0500 Subject: [PATCH] basic setup with yoga + pothos and pino logger --- bun.lockb | Bin 25701 -> 25323 bytes lib/logger/index.ts | 19 +++++++++++++++++++ package.json | 5 ++--- src/index.ts | 19 +++++++++++++------ src/yoga/index.ts | 8 ++++++++ src/{ => yoga}/schema.ts | 0 tsconfig.json | 11 ++++++++++- 7 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 lib/logger/index.ts create mode 100644 src/yoga/index.ts rename src/{ => yoga}/schema.ts (100%) diff --git a/bun.lockb b/bun.lockb index f2cbd8b745fe858ffedaabf70d7ce74a86641703..2f1fc70860ebc7ce23a59947f40855c69cb0ed8d 100755 GIT binary patch delta 3211 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 diff --git a/lib/logger/index.ts b/lib/logger/index.ts new file mode 100644 index 0000000..704b895 --- /dev/null +++ b/lib/logger/index.ts @@ -0,0 +1,19 @@ +import { type YogaLogger } from "graphql-yoga"; +import pino from "pino"; + +export const logger = pino(); + +export const yogaLogger: YogaLogger = { + debug(...args) { + logger.debug("", ...args); + }, + info(...args) { + logger.info("", ...args); + }, + warn(...args) { + logger.warn("", ...args); + }, + error(...args) { + logger.error("", ...args); + }, +}; diff --git a/package.json b/package.json index b18e0be..998ceef 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,10 @@ "module": "src/index.ts", "type": "module", "scripts": { - "dev": "bun src/index.ts --watch" + "dev": "bun --watch src/index.ts | pino-pretty" }, "devDependencies": { - "@types/bun": "latest", - "@types/pino": "^7.0.5" + "@types/bun": "latest" }, "peerDependencies": { "typescript": "^5.0.0" diff --git a/src/index.ts b/src/index.ts index 8a0f745..897da9b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,15 @@ -import { createYoga } from "graphql-yoga"; -import { schema } from "./schema"; +import { logger } from "@lib/logger"; +import { yoga } from "./yoga"; -const yoga = createYoga({ schema }); +const server = Bun.serve({ + fetch: yoga.fetch, + error: (error) => { + logger.error(error.message); + return new Response("", { + status: 500, + statusText: "You fucked the goose", + }); + }, +}); -const server = Bun.serve({ fetch: yoga.fetch }); - -console.log(`Server is running on: ${server.url}${yoga.graphqlEndpoint}`); +logger.info(`Server is running on: ${server.url}${yoga.graphqlEndpoint}`); diff --git a/src/yoga/index.ts b/src/yoga/index.ts new file mode 100644 index 0000000..43ce842 --- /dev/null +++ b/src/yoga/index.ts @@ -0,0 +1,8 @@ +import { yogaLogger } from "@lib/logger"; +import { createYoga } from "graphql-yoga"; +import { schema } from "./schema"; + +export const yoga = createYoga({ + schema, + logging: yogaLogger, +}); diff --git a/src/schema.ts b/src/yoga/schema.ts similarity index 100% rename from src/schema.ts rename to src/yoga/schema.ts diff --git a/tsconfig.json b/tsconfig.json index 238655f..c2f3b95 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,6 +22,15 @@ // Some stricter flags (disabled by default) "noUnusedLocals": false, "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false + "noPropertyAccessFromIndexSignature": false, + + // Path mapping + "baseUrl": ".", + "paths": { + "@app": ["./src"], + "@app/*": ["./src/*"], + "@lib": ["./lib"], + "@lib/*": ["./lib/*"] + } } }