From f8a16a9fce70e7e0d2a46ee069b89b302a8b8851 Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Mon, 2 Dec 2024 09:43:56 -0500 Subject: [PATCH] init --- .gitignore | 3 +++ .tool-versions | 1 + README.md | 21 +++++++++++++++++++++ bun.lockb | Bin 0 -> 25701 bytes package.json | 22 ++++++++++++++++++++++ src/index.ts | 8 ++++++++ src/schema.ts | 13 +++++++++++++ tsconfig.json | 27 +++++++++++++++++++++++++++ 8 files changed, 95 insertions(+) create mode 100644 .gitignore create mode 100644 .tool-versions create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 package.json create mode 100644 src/index.ts create mode 100644 src/schema.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..11ddd8d --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +# Keep environment variables out of version control +.env diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000..51048a9 --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +bun 1.1.38 diff --git a/README.md b/README.md new file mode 100644 index 0000000..ae6cb47 --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# Hestia + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run src/index.ts +``` + +## Stack + +- **Bun** Package manager +- **Yoga** GraphQL Server +- **Pothos** +- **Prisma** Database ORM +- **Pino** Logger diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..f2cbd8b745fe858ffedaabf70d7ce74a86641703 GIT binary patch literal 25701 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json new file mode 100644 index 0000000..b18e0be --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "hestia", + "module": "src/index.ts", + "type": "module", + "scripts": { + "dev": "bun src/index.ts --watch" + }, + "devDependencies": { + "@types/bun": "latest", + "@types/pino": "^7.0.5" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "dependencies": { + "@pothos/core": "^4.3.0", + "graphql": "^16.9.0", + "graphql-yoga": "^5.10.4", + "pino": "^9.5.0", + "pino-pretty": "^13.0.0" + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..8a0f745 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,8 @@ +import { createYoga } from "graphql-yoga"; +import { schema } from "./schema"; + +const yoga = createYoga({ schema }); + +const server = Bun.serve({ fetch: yoga.fetch }); + +console.log(`Server is running on: ${server.url}${yoga.graphqlEndpoint}`); diff --git a/src/schema.ts b/src/schema.ts new file mode 100644 index 0000000..8636b24 --- /dev/null +++ b/src/schema.ts @@ -0,0 +1,13 @@ +import SchemaBuilder from "@pothos/core"; + +const builder = new SchemaBuilder({}); + +builder.queryType({ + fields: (t) => ({ + hello: t.string({ + resolve: () => "world", + }), + }), +}); + +export const schema = builder.toSchema(); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..238655f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + // Enable latest features + "lib": ["ESNext", "DOM"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +}