From 31d61d58902ec7fa699d0b18f42449da69734218 Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Tue, 3 Dec 2024 16:20:25 -0500 Subject: [PATCH] done --- .editorconfig | 13 ++++++++ .github/workflows/pr.yml | 20 ++++++------ bun.lockb | Bin 29827 -> 74029 bytes eslint.config.mjs | 13 ++++++++ lib/logger/index.ts | 36 ++++++++++----------- package.json | 60 +++++++++++++++++++--------------- prettier.config.mjs | 13 ++++++++ src/config/index.ts | 28 ++++++++-------- src/index.ts | 20 ++++++------ src/prisma/index.ts | 2 +- src/yoga/builder.ts | 42 ++++++++++++------------ src/yoga/context.ts | 14 ++++---- src/yoga/index.ts | 14 ++++---- src/yoga/schema.ts | 68 +++++++++++++++++++-------------------- tsconfig.json | 60 +++++++++++++++++----------------- 15 files changed, 226 insertions(+), 177 deletions(-) create mode 100644 .editorconfig create mode 100644 eslint.config.mjs create mode 100644 prettier.config.mjs diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..97a9e37 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = false + +[*.{js,ts}] +indent_style = tab +indent_size = 4 + +[{*.{yml,mjs,json}}] +indent_style = space +indent_size = 2 diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index c1623fb..f782dbb 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -1,12 +1,14 @@ name: PR Checks on: [pull_request] jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - name: build - run: bun run clean && bun run build + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + - name: install + run: bun install + - name: build + run: bun run clean && bun run build diff --git a/bun.lockb b/bun.lockb index 196c00f2d35624b8453e9862aa71450d8863ba4d..061a4629941ea0de68740236d10b944de67fa624 100755 GIT binary patch literal 74029 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 G-~Rzd!XbG8 delta 4252 zcmcIn3s98T6~6aJ&>vj{gnh867&VIM3an&7kRL^jfGB2SaKMRxA`*E&e5IA`v__$& z%ADG09LH(2X=^p3(r7Z7QDbUg5hSE(tx0U7ViT=Nw3&=nt@b;2cRO_Qs-4N1J^#1o zp2xlS+;i{$--D+H{qU;X=7_y9y|5y<_T9<9{QbqfwI{Bb^ETgJTD+#{55M@q6aU;h z;q;Bq>xH76w*1jKd$PTP5UWb-8_J7?*igMfH7&$*s1WYyQiu`2cwjK_9B>$LG%yTU z(^y%<4!hglu!IjmqXmuiH5KIzi9*~GZP!LM^+U}e-UsTyJ|Ktc^vN~lRn_<_3W9_% zp*;o2UCaSS0>=W)zzE=Qpa4byzXh&00 zh<5;Su!~0f9pFgdX5a|XB-|Geh&z5A!{-^k02~ACL_5zg1DWK&lYwk^813BQJ|No{ zVif4ZorJ+L#sJw5pfU*`m4RH$%F1?VV85EW^7_i$Vj))6m#!(TYN$UB1*dQ~yt#vX zAa|JQLu5<^jDeCfQVHZLI0D3E+$${Y8-ju~3LO?tONQ0R0`d$q^k#S&(3+?%)FpE% z%Vfx1)NC^J%TkC8Xr$7NB|XHDm6V0&ergUewCfsmg{14z0YXeuW{W~xdLE>wAZhFr z_!8@=)s(8e7eHOZ)8#nQLyf?tgSa`@lq$DTbEu)e1$lvTT4ZwR5h#u6kOHV}OfqGK z8M1|%@jOi)Jj+NAH}v12jCgE<+Td{&(i6(RFU%!V$pee6gN2xjwn01){g06HAPrX1 zcq~miqyS?3<>VP*$YrEQ81myGkOvkw(8i-sq4Y%5VlE_P&*aiR z3Z)iXy38Yw&5%1uk219P!zeoneW5H8VOw!m^osni;ps_(oVF;m^A1&@iiBfD?pM=Z*g2KuNo1rtH*oE!ILUfOQt?0vxwc za9XkB-|7x-ZiyIefx^JB!e!m6Nuo(UFJ(Lm%G%m6cDZ4?beY+o*S<(~=U)xtt3 z`z#<6Bm1LF6fv@#;}u1YcmCc64uGmr28(=%ovQ-p1DP1PV{8w8TZkesPoMuK}{(I-iWUg(60_XX1Kd zW@7w`+G_ePi%WI<&9#O6vjLAT7R)1mn4*HYvj6Jh@@8mYO|d=8+>fd)UjKnb1yRYI z>X~3paVGfxDlYgj<$%AgwwhS+T@}}A#Qv7rn);B%)xKe#-At!9<;a;7_FO(CFEdf& zb2&1T-hlKmr16_`GN=!wDl?aa7PeT?FiDo7eS8g_uCKcj0*|=*tdu8WmER?S$1*%ftN5x zwY?{Dnn8K~pKzz*Q z;)JycA5Q!s!(T<}UBLTpEtvOd6}TE)11u`j5oPC@VlTPx>bFWFlSVGqYN z*Jb^-ev|yy0_Uest_+&JdM5(7yaD_dhjZuly_tU?#0Cw*Y4~;5VGH`hT*~}g#Qk+_>lXP^VeUhQ}al0;FC;+p+B9C zk`}so)@k?OhC(y99O!=Y#Rz4|GZAJodYyLvWyd*V`_6rzbzXwr=}2Jx>(tu2Om@;I zz0Pq>q1ZpDD*qKIe(RE-=Dpj$2G%K$3hFK1?kYCqYk$<;WNP#JFJ>htj$M}NI>jD=qAw?4MQ;@z%$&+J&g z=b3lPHMud_k%USS{;OHr)PmMWUzw2tO(OD?=tw?dp?m$-abGs@&tx8-fS@gflzb%v zM+2?95IIS@`Jtl!-I&2XQ>uXBum)DioG-Rm1 iQ%f4F+Nb<&Rm9O~S*1OHd$_beZ { - const { success, data, error } = z - .object({ - APP_VERSION: z.string().default("development"), - }) - .safeParse(process.env); + const { success, data, error } = z + .object({ + APP_VERSION: z.string().default('development'), + }) + .safeParse(process.env); - if (!success) { - logger.error(error.message); - } + if (!success) { + logger.error(error.message); + } - return { - app_version: data!.APP_VERSION, - }; + return { + app_version: data!.APP_VERSION, + }; }; diff --git a/src/index.ts b/src/index.ts index 897da9b..8d71ef1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,15 +1,15 @@ -import { logger } from "@lib/logger"; -import { yoga } from "./yoga"; +import { logger } from '@lib/logger'; +import { yoga } from './yoga'; const server = Bun.serve({ - fetch: yoga.fetch, - error: (error) => { - logger.error(error.message); - return new Response("", { - status: 500, - statusText: "You fucked the goose", - }); - }, + fetch: yoga.fetch, + error: (error) => { + logger.error(error.message); + return new Response('', { + status: 500, + statusText: 'You fucked the goose', + }); + }, }); logger.info(`Server is running on: ${server.url}${yoga.graphqlEndpoint}`); diff --git a/src/prisma/index.ts b/src/prisma/index.ts index 901f3a0..9b6c4ce 100644 --- a/src/prisma/index.ts +++ b/src/prisma/index.ts @@ -1,3 +1,3 @@ -import { PrismaClient } from "@prisma/client"; +import { PrismaClient } from '@prisma/client'; export const prisma = new PrismaClient(); diff --git a/src/yoga/builder.ts b/src/yoga/builder.ts index 565bdc3..750955c 100644 --- a/src/yoga/builder.ts +++ b/src/yoga/builder.ts @@ -1,29 +1,29 @@ -import type { Configuration } from "@app/config"; -import { prisma } from "@app/prisma"; -import SchemaBuilder from "@pothos/core"; +import type { Configuration } from '@app/config'; +import { prisma } from '@app/prisma'; +import SchemaBuilder from '@pothos/core'; import PrismaPlugin, { - type PrismaTypesFromClient, -} from "@pothos/plugin-prisma"; -import type { YogaInitialContext } from "graphql-yoga"; + type PrismaTypesFromClient, +} from '@pothos/plugin-prisma'; +import type { YogaInitialContext } from 'graphql-yoga'; type Context = YogaInitialContext & { - config: Configuration; + config: Configuration; }; export const builder = new SchemaBuilder<{ - Context: Context; - PrismaTypes: PrismaTypesFromClient; + Context: Context; + PrismaTypes: PrismaTypesFromClient; }>({ - plugins: [PrismaPlugin], - prisma: { - client: prisma, - // defaults to false, uses /// comments from prisma schema as descriptions - // for object types, relations and exposed fields. - // descriptions can be omitted by setting description to false - exposeDescriptions: false, - // use where clause from prismaRelatedConnection for totalCount (defaults to true) - filterConnectionTotalCount: true, - // warn when not using a query parameter correctly - onUnusedQuery: process.env.NODE_ENV === "production" ? null : "warn", - }, + plugins: [PrismaPlugin], + prisma: { + client: prisma, + // defaults to false, uses /// comments from prisma schema as descriptions + // for object types, relations and exposed fields. + // descriptions can be omitted by setting description to false + exposeDescriptions: false, + // use where clause from prismaRelatedConnection for totalCount (defaults to true) + filterConnectionTotalCount: true, + // warn when not using a query parameter correctly + onUnusedQuery: process.env.NODE_ENV === 'production' ? null : 'warn', + }, }); diff --git a/src/yoga/context.ts b/src/yoga/context.ts index bc85aa7..fac5b95 100644 --- a/src/yoga/context.ts +++ b/src/yoga/context.ts @@ -1,10 +1,10 @@ -import { LoadConfig } from "@app/config"; -import type { YogaInitialContext } from "graphql-yoga"; +import { LoadConfig } from '@app/config'; +import type { YogaInitialContext } from 'graphql-yoga'; export const context = (initialContext: YogaInitialContext) => { - const config = LoadConfig(); - return { - ...initialContext, - config, - }; + const config = LoadConfig(); + return { + ...initialContext, + config, + }; }; diff --git a/src/yoga/index.ts b/src/yoga/index.ts index 8d113ba..35233ab 100644 --- a/src/yoga/index.ts +++ b/src/yoga/index.ts @@ -1,10 +1,10 @@ -import { yogaLogger } from "@lib/logger"; -import { createYoga } from "graphql-yoga"; -import { context } from "./context"; -import { schema } from "./schema"; +import { yogaLogger } from '@lib/logger'; +import { createYoga } from 'graphql-yoga'; +import { context } from './context'; +import { schema } from './schema'; export const yoga = createYoga({ - schema, - context: context, - logging: yogaLogger, + schema, + context: context, + logging: yogaLogger, }); diff --git a/src/yoga/schema.ts b/src/yoga/schema.ts index f72cc19..bb3006e 100644 --- a/src/yoga/schema.ts +++ b/src/yoga/schema.ts @@ -1,43 +1,43 @@ -import { prisma } from "@app/prisma"; -import { builder } from "./builder"; +import { prisma } from '@app/prisma'; +import { builder } from './builder'; -const User = builder.prismaObject("User", { - fields: (t) => ({ - id: t.exposeID("id"), - email: t.exposeString("email"), - name: t.exposeString("name"), - posts: t.relation("posts"), - }), +const User = builder.prismaObject('User', { + fields: (t) => ({ + id: t.exposeID('id'), + email: t.exposeString('email'), + name: t.exposeString('name'), + posts: t.relation('posts'), + }), }); -const Post = builder.prismaObject("Post", { - fields: (t) => ({ - id: t.exposeID("id"), - title: t.exposeString("title"), - content: t.exposeString("content"), - published: t.exposeBoolean("published"), - author: t.relation("author"), - }), +const Post = builder.prismaObject('Post', { + fields: (t) => ({ + id: t.exposeID('id'), + title: t.exposeString('title'), + content: t.exposeString('content'), + published: t.exposeBoolean('published'), + author: t.relation('author'), + }), }); builder.queryType({ - fields: (t) => ({ - version: t.string({ - resolve: (parent, args, context) => context.config.app_version, - }), - users: t.prismaField({ - type: [User], - resolve: async () => { - return await prisma.user.findMany(); - }, - }), - posts: t.prismaField({ - type: [Post], - resolve: async () => { - return await prisma.post.findMany(); - }, - }), - }), + fields: (t) => ({ + version: t.string({ + resolve: (parent, args, context) => context.config.app_version, + }), + users: t.prismaField({ + type: [User], + resolve: async () => { + return await prisma.user.findMany(); + }, + }), + posts: t.prismaField({ + type: [Post], + resolve: async () => { + return await prisma.post.findMany(); + }, + }), + }), }); export const schema = builder.toSchema(); diff --git a/tsconfig.json b/tsconfig.json index c2f3b95..75671cb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,36 +1,36 @@ { - "compilerOptions": { - // Enable latest features - "lib": ["ESNext", "DOM"], - "target": "ESNext", - "module": "ESNext", - "moduleDetection": "force", - "jsx": "react-jsx", - "allowJs": true, + "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, + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, - // Best practices - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, - // Some stricter flags (disabled by default) - "noUnusedLocals": false, - "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false, + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false, - // Path mapping - "baseUrl": ".", - "paths": { - "@app": ["./src"], - "@app/*": ["./src/*"], - "@lib": ["./lib"], - "@lib/*": ["./lib/*"] - } - } + // Path mapping + "baseUrl": ".", + "paths": { + "@app": ["./src"], + "@app/*": ["./src/*"], + "@lib": ["./lib"], + "@lib/*": ["./lib/*"] + } + } }