From 05a95b72d09f15f69d46b1d4e12fd9d753e9c278 Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Tue, 10 Dec 2024 10:28:27 -0500 Subject: [PATCH] add config --- .env.development | 1 + .gitignore | 3 ++- bun.lockb | Bin 236053 -> 238180 bytes package.json | 4 +++- src/lib/config/index.ts | 24 ++++++++++++++++++++++++ src/lib/pothos/index.ts | 8 +++++--- src/lib/yoga/context.ts | 7 +++++++ src/lib/yoga/index.ts | 2 ++ 8 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 .env.development create mode 100644 src/lib/config/index.ts create mode 100644 src/lib/yoga/context.ts diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..3283edf --- /dev/null +++ b/.env.development @@ -0,0 +1 @@ +VITE_APP_VERSION=1.0.0-alpha \ No newline at end of file diff --git a/.gitignore b/.gitignore index a1bdc7b..68204fe 100644 --- a/.gitignore +++ b/.gitignore @@ -18,9 +18,10 @@ Thumbs.db .env.* !.env.example !.env.test +!.env.development # Vite vite.config.js.timestamp-* vite.config.ts.timestamp-* -*storybook.log +*storybook.log \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index ff51ac9ca6153b2d404c61e42c07164a2bb11a4f..50ee1dcb691b3df9bb85f3acd0cab1d22b4c9684 100755 GIT binary patch delta 45048 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%0A%|6F_cf0=&8GH+OBkw)!3%vKT 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ჼR*fX9xK(Iqf>rn6-U(LCeCFFpRyqHNrqE=o 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 diff --git a/package.json b/package.json index be83b8c..292b9d9 100644 --- a/package.json +++ b/package.json @@ -50,10 +50,12 @@ "dependencies": { "@pothos/core": "^4.3.0", "@tailwindcss/typography": "^0.5.15", + "@types/bun": "^1.1.14", "graphql": "^16.9.0", "graphql-yoga": "^5.10.4", "pino": "^9.5.0", "pino-pretty": "^13.0.0", - "storybook-dark-mode": "^4.0.2" + "storybook-dark-mode": "^4.0.2", + "zod": "^3.24.0" } } diff --git a/src/lib/config/index.ts b/src/lib/config/index.ts new file mode 100644 index 0000000..b87d270 --- /dev/null +++ b/src/lib/config/index.ts @@ -0,0 +1,24 @@ +import { logger } from '$lib/logger'; +import { z } from 'zod'; + +export interface Configuration { + app_version: string; +} + +export const LoadConfig = (): Configuration => { + const { success, data, error } = z + .object({ + VITE_APP_VERSION: z.string().default('development') + }) + .safeParse(import.meta.env); + + if (!success) { + logger.error(error.message); + } + + return { + app_version: data!.VITE_APP_VERSION + }; +}; + +export const Config = LoadConfig(); \ No newline at end of file diff --git a/src/lib/pothos/index.ts b/src/lib/pothos/index.ts index f1fa65a..934f50a 100644 --- a/src/lib/pothos/index.ts +++ b/src/lib/pothos/index.ts @@ -1,12 +1,14 @@ +import { Context } from '$lib/yoga/context'; import SchemaBuilder from '@pothos/core'; -export const builder = new SchemaBuilder({}); +type ContextType = ReturnType; + +export const builder = new SchemaBuilder<{ Context: ContextType }>({}); builder.queryType({ fields: (t) => ({ version: t.string({ - // eslint-disable-next-line @typescript-eslint/no-unused-vars - resolve: (parent, args, context) => '1.0.0-alpha' + resolve: (parent, args, context) => context.config.app_version }) }) }); diff --git a/src/lib/yoga/context.ts b/src/lib/yoga/context.ts new file mode 100644 index 0000000..d9a6a68 --- /dev/null +++ b/src/lib/yoga/context.ts @@ -0,0 +1,7 @@ +import { Config } from '$lib/config'; +import type { YogaInitialContext } from 'graphql-yoga'; + +export const Context = (initialContext: YogaInitialContext) => ({ + ...initialContext, + config: Config +}); \ No newline at end of file diff --git a/src/lib/yoga/index.ts b/src/lib/yoga/index.ts index 274b44f..b008b24 100644 --- a/src/lib/yoga/index.ts +++ b/src/lib/yoga/index.ts @@ -2,8 +2,10 @@ import { yogaLogger } from '$lib/logger'; import { Schema } from '$lib/pothos'; import type { RequestEvent } from '@sveltejs/kit'; import { createYoga } from 'graphql-yoga'; +import { Context } from './context'; export const Yoga = createYoga({ + context: Context, schema: Schema, graphqlEndpoint: '/api/graphql', // Let Yoga use sveltekit's Response object