(payload: unknown, executor: Executor)
| 541 | } |
| 542 | |
| 543 | async function handleStudioBffRequest(payload: unknown, executor: Executor): Promise<Response> { |
| 544 | const request = payload as StudioBFFRequest |
| 545 | const { procedure } = request |
| 546 | |
| 547 | if (procedure === 'query') { |
| 548 | const [error, results] = await executor.execute(request.query) |
| 549 | |
| 550 | if (error) { |
| 551 | return jsonResponse([serializeBffError(error)]) |
| 552 | } |
| 553 | |
| 554 | return jsonResponse([null, results]) |
| 555 | } |
| 556 | |
| 557 | if (procedure === 'sequence') { |
| 558 | if (!('executeSequence' in executor)) { |
| 559 | return jsonResponse([[serializeBffError(new Error('Executor does not support sequences'))]]) |
| 560 | } |
| 561 | |
| 562 | const [[error0, result0], maybeResult1] = await (executor as SequenceExecutor).executeSequence(request.sequence) |
| 563 | |
| 564 | if (error0) { |
| 565 | return jsonResponse([[serializeBffError(error0)]]) |
| 566 | } |
| 567 | |
| 568 | const [error1, result1] = maybeResult1 || [] |
| 569 | |
| 570 | if (error1) { |
| 571 | return jsonResponse([[null, result0], [serializeBffError(error1)]]) |
| 572 | } |
| 573 | |
| 574 | return jsonResponse([ |
| 575 | [null, result0], |
| 576 | [null, result1], |
| 577 | ]) |
| 578 | } |
| 579 | |
| 580 | if (procedure === 'transaction') { |
| 581 | if (!executor.executeTransaction) { |
| 582 | return jsonResponse([serializeBffError(new Error('Executor does not support transactions'))]) |
| 583 | } |
| 584 | |
| 585 | const [error, results] = await executor.executeTransaction(request.queries) |
| 586 | |
| 587 | if (error) { |
| 588 | return jsonResponse([serializeBffError(error)]) |
| 589 | } |
| 590 | |
| 591 | return jsonResponse([null, results]) |
| 592 | } |
| 593 | |
| 594 | if (procedure === 'sql-lint') { |
| 595 | if (!executor.lintSql) { |
| 596 | return jsonResponse([serializeBffError(new Error('Executor does not support SQL lint'))]) |
| 597 | } |
| 598 | |
| 599 | const [error, result] = await executor.lintSql({ |
| 600 | schemaVersion: request.schemaVersion, |
no test coverage detected