({ handler, onListen, port }: StartStudioServerOptions)
| 30 | } |
| 31 | |
| 32 | function startNodeStudioServer({ handler, onListen, port }: StartStudioServerOptions): StudioServer { |
| 33 | const server = createServer(async (nodeRequest, nodeResponse) => { |
| 34 | try { |
| 35 | const request = createNodeRequest(nodeRequest, port) |
| 36 | const response = await handler(request) |
| 37 | await writeNodeResponse(nodeResponse, response, nodeRequest.method) |
| 38 | } catch (error) { |
| 39 | console.error('[Prisma Studio]', error) |
| 40 | |
| 41 | if (nodeResponse.headersSent || nodeResponse.writableEnded) { |
| 42 | nodeResponse.destroy() |
| 43 | return |
| 44 | } |
| 45 | |
| 46 | nodeResponse.statusCode = 500 |
| 47 | nodeResponse.setHeader('Access-Control-Allow-Origin', '*') |
| 48 | nodeResponse.end(error instanceof Error ? error.message : 'Internal Server Error') |
| 49 | } |
| 50 | }) |
| 51 | |
| 52 | server.listen(port, onListen) |
| 53 | |
| 54 | return { |
| 55 | close() { |
| 56 | server.close() |
| 57 | }, |
| 58 | } |
| 59 | } |
| 60 | |
| 61 | function createNodeRequest(nodeRequest: IncomingMessage, port: number): Request { |
| 62 | const origin = `http://${nodeRequest.headers.host ?? `localhost:${port}`}` |
no test coverage detected