Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(server file): add createServer #9845

Merged
merged 34 commits into from
Jan 21, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
858cdaa
update server file to more finalized api
jtoar Oct 26, 2023
3610b75
createServer: Type `start`
Tobbe Jan 18, 2024
7329e51
make start options optional
jtoar Jan 18, 2024
1755f9f
Use Object.assign instead of spread to avoid copying object
Tobbe Jan 18, 2024
db5790f
move setup server file out of exp
jtoar Jan 18, 2024
c795c4f
remove experimental warning from dev server
jtoar Jan 18, 2024
be8178b
temporary fix for graphql
jtoar Jan 19, 2024
abf8b2a
add babel plugin
jtoar Jan 19, 2024
93d7d94
babel graphql extract plugin
Josh-Walker-GM Jan 19, 2024
a4f7f6c
revert graphql function
Josh-Walker-GM Jan 19, 2024
501b3ea
wip
Josh-Walker-GM Jan 19, 2024
56f36bc
handle apiRootPath in graphql
jtoar Jan 19, 2024
b6081bc
add filterFn to loadFunctions
jtoar Jan 19, 2024
ed74c95
fix filter fn options
jtoar Jan 19, 2024
6cf9a57
rename rw fastify plugin
jtoar Jan 19, 2024
4e59299
fix babel plugin
Josh-Walker-GM Jan 19, 2024
7c9fd71
remove unused graphql plugin from fastify package
jtoar Jan 19, 2024
97f0671
rm space from dirname lol
jtoar Jan 19, 2024
b36edeb
conditionally register graphql plugin
jtoar Jan 19, 2024
22b45e0
copy over dotenv-defaults fix
jtoar Jan 19, 2024
92a08da
get tests passing
jtoar Jan 19, 2024
8a283b5
refactor some tests
jtoar Jan 19, 2024
4168c36
move context up
jtoar Jan 19, 2024
8ccadeb
remove context from graphql
jtoar Jan 19, 2024
77f7262
pass cli args through to watch
jtoar Jan 19, 2024
fbde827
improve comments
jtoar Jan 19, 2024
cde8091
comment graphql options
jtoar Jan 20, 2024
9bdb885
improve mocks in tests
jtoar Jan 20, 2024
458a3f1
remove console log from serve api
jtoar Jan 20, 2024
8394041
style
jtoar Jan 20, 2024
4f20d4b
work on options
jtoar Jan 20, 2024
5898eae
work on entry points
jtoar Jan 20, 2024
f417191
use concurrently in serve
jtoar Jan 21, 2024
b979239
fix typo in error
jtoar Jan 21, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
handle apiRootPath in graphql
  • Loading branch information
jtoar committed Jan 19, 2024
commit 56f36bc37f17281109b658a7df0e1c78bc42cd01
4 changes: 3 additions & 1 deletion packages/api-server/src/createServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,9 @@ export async function createServer(options: CreateServerOptions = {}) {
},
})
await server.register(redwoodFastify, { redwood: { apiRootPath } })
await server.register(redwoodFastifyGraphQLServer)
await server.register(redwoodFastifyGraphQLServer, {
redwood: { apiRootPath },
})

// ------------------------
// See https://github.com/redwoodjs/redwood/pull/4744.
Expand Down
24 changes: 14 additions & 10 deletions packages/api-server/src/plugins/graphql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ import { getPaths } from '@redwoodjs/project-config'
import { lambdaEventForFastifyRequest } from '../requestHandlers/awsLambdaFastify'

export interface RedwoodFastifyGraphQLOptions {
redwood?: {
apiRootPath?: string
graphql: GraphQLYogaOptions
redwood: {
apiRootPath: string
graphql?: GraphQLYogaOptions
}
}

Expand All @@ -52,26 +52,24 @@ export async function redwoodFastifyGraphQLServer(
const method = ['GET', 'POST', 'OPTIONS'] as HTTPMethods[]

// Load the graphql options from the graphql function if none are explicitly provided
if (!options.redwood) {
if (!options.redwood.graphql) {
const [graphqlFunctionPath] = await fg('dist/functions/graphql.{ts,js}', {
cwd: getPaths().api.base,
absolute: true,
})

const { __rw_graphqlOptions } = await import(graphqlFunctionPath)
options.redwood = {
graphql: __rw_graphqlOptions,
}
options.redwood.graphql = __rw_graphqlOptions as GraphQLYogaOptions
}

const graphqlOptions = options.redwood.graphql

// TODO: This should be refactored to only be defined once and it might not live here
// Ensure that each request has a unique global context
fastify.addHook('onRequest', (_req, _reply, done) => {
getAsyncStoreInstance().run(new Map<string, GlobalContext>(), done)
})

const graphqlOptions = options.redwood.graphql

// Here we can add any plugins that we want to use with GraphQL Yoga Server
// that we do not want to add the the GraphQLHandler in the graphql-server
// graphql function.
Expand Down Expand Up @@ -117,7 +115,9 @@ export async function redwoodFastifyGraphQLServer(
const routePaths = ['', '/health', '/readiness', '/stream']
for (const routePath of routePaths) {
fastify.route({
url: `${yoga.graphqlEndpoint}${routePath}`,
url: `${options.redwood.apiRootPath}${formatGraphQLEndpoint(
yoga.graphqlEndpoint
)}${routePath}`,
method,
handler: async (req, reply) => await graphQLYogaHandler(req, reply),
})
Expand All @@ -138,3 +138,7 @@ export async function redwoodFastifyGraphQLServer(
console.log(e)
}
}

function formatGraphQLEndpoint(endpoint: string) {
return endpoint.replace(/^\//, '').replace(/\/$/, '')
}
Loading