Bypass transformers that are trivial, allow users to configure bson buffer size.
This commit is contained in:
parent
1a65ef3e4b
commit
889d3158e8
|
@ -19,6 +19,12 @@ function isDev() {
|
|||
return process.env.NODE_ENV !== "production"
|
||||
}
|
||||
|
||||
function parseIntSafe(number?: string) {
|
||||
if (number) {
|
||||
return parseInt(number)
|
||||
}
|
||||
}
|
||||
|
||||
let LOADED = false
|
||||
if (!LOADED && isDev() && !isTest()) {
|
||||
require("dotenv").config()
|
||||
|
@ -231,6 +237,7 @@ const environment = {
|
|||
MIN_VERSION_WITHOUT_POWER_ROLE:
|
||||
process.env.MIN_VERSION_WITHOUT_POWER_ROLE || "3.0.0",
|
||||
DISABLE_CONTENT_SECURITY_POLICY: process.env.DISABLE_CONTENT_SECURITY_POLICY,
|
||||
BSON_BUFFER_SIZE: parseIntSafe(process.env.BSON_BUFFER_SIZE),
|
||||
}
|
||||
|
||||
export function setEnv(newEnvVars: Partial<typeof environment>): () => void {
|
||||
|
|
|
@ -28,6 +28,7 @@ import Koa from "koa"
|
|||
import { Server } from "http"
|
||||
import { AddressInfo } from "net"
|
||||
import fs from "fs"
|
||||
import bson from "bson"
|
||||
|
||||
let STARTUP_RAN = false
|
||||
|
||||
|
@ -193,6 +194,10 @@ export async function startup(
|
|||
})
|
||||
}
|
||||
|
||||
if (coreEnv.BSON_BUFFER_SIZE) {
|
||||
bson.setInternalBufferSize(coreEnv.BSON_BUFFER_SIZE)
|
||||
}
|
||||
|
||||
console.log("Initialising JS runner")
|
||||
jsRunner.init()
|
||||
}
|
||||
|
|
|
@ -136,21 +136,23 @@ class QueryRunner {
|
|||
pagination = output.pagination
|
||||
}
|
||||
|
||||
// transform as required
|
||||
if (transformer) {
|
||||
// We avoid invoking the transformer if it's trivial because there is a cost
|
||||
// to passing data in and out of the isolate, especially for MongoDB where
|
||||
// we have to bson serialise/deserialise the data.
|
||||
const hasTransformer =
|
||||
transformer != null &&
|
||||
transformer.length > 0 &&
|
||||
transformer.trim() !== "return data" &&
|
||||
transformer.trim() !== "return data;"
|
||||
|
||||
if (transformer && hasTransformer) {
|
||||
transformer = iifeWrapper(transformer)
|
||||
let vm = new IsolatedVM()
|
||||
if (datasource.source === SourceName.MONGODB) {
|
||||
vm = vm.withParsingBson(rows)
|
||||
}
|
||||
|
||||
const ctx = {
|
||||
data: rows,
|
||||
params: enrichedParameters,
|
||||
}
|
||||
if (transformer != null) {
|
||||
rows = vm.withContext(ctx, () => vm.execute(transformer!))
|
||||
}
|
||||
const ctx = { data: rows, params: enrichedParameters }
|
||||
rows = vm.withContext(ctx, () => vm.execute(transformer!))
|
||||
}
|
||||
|
||||
// if the request fails we retry once, invalidating the cached value
|
||||
|
|
|
@ -24,6 +24,7 @@ import {
|
|||
db.init()
|
||||
import koaBody from "koa-body"
|
||||
import http from "http"
|
||||
import bson from "bson"
|
||||
import api from "./api"
|
||||
|
||||
const koaSession = require("koa-session")
|
||||
|
@ -99,6 +100,11 @@ export default server.listen(parseInt(env.PORT || "4002"), async () => {
|
|||
startupLog = `${startupLog} - environment: "${env.BUDIBASE_ENVIRONMENT}"`
|
||||
}
|
||||
console.log(startupLog)
|
||||
|
||||
if (coreEnv.BSON_BUFFER_SIZE) {
|
||||
bson.setInternalBufferSize(coreEnv.BSON_BUFFER_SIZE)
|
||||
}
|
||||
|
||||
await initPro()
|
||||
await redis.clients.init()
|
||||
features.init()
|
||||
|
|
Loading…
Reference in New Issue