Skip to content

Commit

Permalink
fix: ensure gobalContext is globally shared
Browse files Browse the repository at this point in the history
  • Loading branch information
brillout committed Nov 14, 2022
1 parent a1d424d commit 7dc059d
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 24 deletions.
16 changes: 12 additions & 4 deletions telefunc/node/server/globalContext.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
export { globalContext }
export { getViteDevServer }
export { setViteDevServer }

import type { ViteDevServer } from 'vite'
import { getGlobalObject } from '../utils'

const globalContext: GlobalContext = {}
const globalObject = getGlobalObject<{ viteDevServer: null | ViteDevServer }>('globalContext.ts', {
viteDevServer: null
})

type GlobalContext = {
viteDevServer?: ViteDevServer
function setViteDevServer(viteDevServer: ViteDevServer): void {
globalObject.viteDevServer = viteDevServer
}

function getViteDevServer(): null | ViteDevServer {
return globalObject.viteDevServer
}
6 changes: 2 additions & 4 deletions telefunc/node/server/runTelefunc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import { handleError } from './runTelefunc/handleError'
import { callBugListeners } from './runTelefunc/onBug'
import { applyShield } from './runTelefunc/applyShield'
import { findTelefunction } from './runTelefunc/findTelefunction'
import { globalContext } from './globalContext'
import { resolveServerConfig } from './serverConfig'

/** The HTTP Response of a telefunction remote call HTTP Request */
Expand Down Expand Up @@ -55,7 +54,7 @@ async function runTelefunc(runContext: Parameters<typeof runTelefunc_>[0]) {
return await runTelefunc_(runContext)
} catch (err: unknown) {
callBugListeners(err)
handleError(err, globalContext.viteDevServer || null)
handleError(err)
return serverError
}
}
Expand All @@ -76,8 +75,7 @@ async function runTelefunc_(httpRequest: {
telefuncUrl: serverConfig.telefuncUrl
},
appRootDir: serverConfig.root,
telefuncFilesManuallyProvidedByUser: serverConfig.telefuncFiles,
viteDevServer: globalContext.viteDevServer ?? null
telefuncFilesManuallyProvidedByUser: serverConfig.telefuncFiles
})
}

Expand Down
4 changes: 3 additions & 1 deletion telefunc/node/server/runTelefunc/handleError.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ export { handleError }

import type { ViteDevServer } from 'vite'
import { hasProp } from '../../utils'
import { getViteDevServer } from '../globalContext'

function handleError(err: unknown, viteDevServer: ViteDevServer | null) {
function handleError(err: unknown) {
// We ensure we print a string; Cloudflare Workers doesn't seem to properly stringify `Error` objects.
const errStr = (hasProp(err, 'stack') && String(err.stack)) || String(err)

const viteDevServer = getViteDevServer()
if (viteAlreadyLoggedError(err, viteDevServer)) {
return
}
Expand Down
4 changes: 1 addition & 3 deletions telefunc/node/server/runTelefunc/loadTelefuncFiles.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
export { loadTelefuncFiles }

import type { ViteDevServer } from 'vite'
import type { TelefuncFiles } from '../types'
import { assertUsage, assert, hasProp } from '../../utils'
import { loadTelefuncFilesWithVite } from '../../vite/loadTelefuncFilesWithVite'
Expand All @@ -9,7 +8,6 @@ import { loadTelefuncFilesFromConfig } from './loadTelefuncFilesFromConfig'

async function loadTelefuncFiles(runContext: {
appRootDir: string | null
viteDevServer: ViteDevServer | null
telefuncFilesManuallyProvidedByUser: string[] | null
telefuncFilePath: string
}): Promise<{ telefuncFilesLoaded: TelefuncFiles; telefuncFilesAll: string[] }> {
Expand All @@ -26,7 +24,7 @@ async function loadTelefuncFiles(runContext: {

// Handles:
// - Next.js
// - Nuxt
// - Nuxt 2
// - Vite with `importBuild.js`
{
const telefuncFilesLoaded = loadTelefuncFilesWithRegistration()
Expand Down
18 changes: 8 additions & 10 deletions telefunc/node/vite/loadTelefuncFilesWithVite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,15 @@ export { loadTelefuncFilesWithVite }
import { loadBuild } from '@brillout/vite-plugin-import-build/loadBuild'
import { assert, assertWarning, getNodeEnv, hasProp, isObject, isProduction, isTelefuncFilePath } from '../utils'
import { telefuncFilesGlobFilePath } from './importGlob/telefuncFilesGlobPath'
import type { ViteDevServer } from 'vite'
import { loadTelefuncFilesWithImportBuild } from './plugins/importBuild/loadBuild'
import { getViteDevServer } from '../server/globalContext'

async function loadTelefuncFilesWithVite(runContext: {
telefuncFilePath: string
viteDevServer: ViteDevServer | null
}): Promise<null | {
async function loadTelefuncFilesWithVite(runContext: { telefuncFilePath: string }): Promise<null | {
telefuncFilesLoaded: Record<string, Record<string, unknown>>
telefuncFilesAll: string[]
viteProvider: 'viteDevServer' | 'importBuild.cjs'
}> {
const ret = await loadGlobImporter(runContext)
const ret = await loadGlobImporter()
if (!ret) {
return null
}
Expand All @@ -27,14 +24,15 @@ async function loadTelefuncFilesWithVite(runContext: {
return { telefuncFilesLoaded, viteProvider, telefuncFilesAll }
}

async function loadGlobImporter(runContext: { viteDevServer: ViteDevServer | null }) {
if (runContext.viteDevServer) {
async function loadGlobImporter() {
const viteDevServer = getViteDevServer()
if (viteDevServer) {
const devPath = telefuncFilesGlobFilePath
let moduleExports: unknown
try {
moduleExports = await runContext.viteDevServer.ssrLoadModule(devPath)
moduleExports = await viteDevServer.ssrLoadModule(devPath)
} catch (err: unknown) {
runContext.viteDevServer.ssrFixStacktrace(err as Error)
viteDevServer.ssrFixStacktrace(err as Error)
throw err
}
return { moduleExports, viteProvider: 'viteDevServer' as const }
Expand Down
4 changes: 2 additions & 2 deletions telefunc/node/vite/plugins/retrieveDevServer.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
export { retrieveDevServer }

import type { Plugin } from 'vite'
import { globalContext } from '../../server/globalContext'
import { setViteDevServer } from '../../server/globalContext'

function retrieveDevServer(): Plugin {
return {
name: 'telefunc:retrieveDevServer',
configureServer(viteDevServer) {
globalContext.viteDevServer = viteDevServer
setViteDevServer(viteDevServer)
}
} as Plugin
}

0 comments on commit 7dc059d

Please sign in to comment.