Fix exports in prod (#521)
* Fix exports in prod * downgrade libs to fit under next.js serverless function size limit
This commit is contained in:
parent
8977d296a9
commit
30d1d7721c
5 changed files with 123 additions and 102 deletions
|
@ -1,7 +1,8 @@
|
|||
import { NextApiRequest, NextApiResponse } from 'next'
|
||||
import puppeteer from 'puppeteer'
|
||||
import chromium from 'chrome-aws-lambda'
|
||||
import Cors from 'cors'
|
||||
import { TDExport, TDExportTypes, TldrawApp } from '@tldraw/tldraw'
|
||||
import { AnyLengthString } from 'aws-sdk/clients/comprehend'
|
||||
|
||||
const cors = Cors({
|
||||
methods: ['POST'],
|
||||
|
@ -35,13 +36,15 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
|
|||
type,
|
||||
} = body
|
||||
if (type === TDExportTypes.PDF) res.status(500).send('Not implemented yet.')
|
||||
let browser: puppeteer.Browser = null
|
||||
try {
|
||||
browser = await puppeteer.launch({
|
||||
const browser = await chromium.puppeteer.launch({
|
||||
slowMo: 50,
|
||||
args: chromium.args,
|
||||
defaultViewport: chromium.defaultViewport,
|
||||
executablePath: await chromium.executablePath,
|
||||
ignoreHTTPSErrors: true,
|
||||
headless: true,
|
||||
})
|
||||
|
||||
const page = await browser.newPage()
|
||||
await page.setUserAgent(
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
|
||||
|
@ -49,25 +52,32 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
|
|||
await page.setViewport({ width: Math.floor(width), height: Math.floor(height) })
|
||||
await page.goto(FRONTEND_URL, { timeout: 15 * 1000, waitUntil: 'networkidle0' })
|
||||
await page.evaluateHandle('document.fonts.ready')
|
||||
let err: AnyLengthString
|
||||
await page.evaluate(async (body: TDExport) => {
|
||||
let app = window.app
|
||||
if (!app) app = await new Promise((resolve) => setTimeout(() => resolve(window.app), 250))
|
||||
await app.ready
|
||||
const { assets, shapes } = body
|
||||
app.patchAssets(assets)
|
||||
app.createShapes(...shapes)
|
||||
app.selectAll()
|
||||
app.zoomToSelection()
|
||||
app.selectNone()
|
||||
try {
|
||||
let app = window.app
|
||||
if (!app) app = await new Promise((resolve) => setTimeout(() => resolve(window.app), 250))
|
||||
await app.ready
|
||||
const { assets, shapes } = body
|
||||
app.patchAssets(assets)
|
||||
app.createShapes(...shapes)
|
||||
app.selectAll()
|
||||
app.zoomToSelection()
|
||||
app.selectNone()
|
||||
} catch (e) {
|
||||
err = e.message
|
||||
}
|
||||
}, body)
|
||||
if (err) {
|
||||
throw err
|
||||
}
|
||||
const imageBuffer = await page.screenshot({
|
||||
type,
|
||||
})
|
||||
await browser.close()
|
||||
res.status(200).send(imageBuffer)
|
||||
} catch (err) {
|
||||
console.error(err.message)
|
||||
res.status(500).send(err)
|
||||
} finally {
|
||||
await browser.close()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue