Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
563ddc2
refactor: replace vite-node with Vite's native RunnableDevEnvironment
lisa-assistant May 5, 2026
3304f10
refactor: replace vite-node with Vite's native RunnableDevEnvironment
lisa-assistant May 5, 2026
d9d6e8c
refactor: replace vite-node with Vite's native RunnableDevEnvironment
lisa-assistant May 5, 2026
05eff97
refactor: replace vite-node with Vite's native RunnableDevEnvironment
lisa-assistant May 5, 2026
0e50ec9
fix: close vite server before throwing on guard failure in node-runner
lisa-assistant May 5, 2026
0cd0ea7
chore: update yarn.lock after removing vite-node
lisa-assistant May 5, 2026
9ccd211
chore: update yarn.lock after removing vite-node
lisa-assistant May 5, 2026
091169e
style: fix prettier formatting in exec.js
lisa-assistant May 5, 2026
f7abc0c
fix: remove .js extension stripping in src/ alias customResolver
lisa-assistant May 5, 2026
e0e91a7
fix: resolve actual file extension in src/ alias customResolver
lisa-assistant May 5, 2026
a6b4651
fix: add @rollup/plugin-commonjs to handle CJS modules in node runner
lisa-assistant May 5, 2026
1ad6a4f
fix: also resolve extensions for bare paths in src/ alias customResolver
lisa-assistant May 5, 2026
df40126
fix(prerender): use fix() wrapper for commonjs plugin to avoid TS2349…
lisa-assistant May 5, 2026
e8a8ab2
Add doc comment to const fix =
Tobbe May 5, 2026
02c06ed
fix(prerender): replace @rollup/plugin-commonjs with custom CJS compa…
lisa-assistant May 5, 2026
93d1016
style(prerender): fix prettier formatting in node-runner.ts
lisa-assistant May 5, 2026
5876eb8
Add CJS compat plugin to exec
Tobbe May 5, 2026
e63e9bc
cjs compat plugin improvements
Tobbe May 5, 2026
6f604b4
fix review comment
Tobbe May 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@
"title-case": "3.0.3",
"unionfs": "4.6.0",
"uuid": "11.1.0",
"vite-node": "3.2.4",
"yargs": "17.7.2"
},
"devDependencies": {
Expand Down
52 changes: 16 additions & 36 deletions packages/cli/src/lib/exec.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import path from 'node:path'

import { createServer, version as viteVersion } from 'vite'
import { ViteNodeRunner } from 'vite-node/client'
import { ViteNodeServer } from 'vite-node/server'
import { installSourcemapsSupport } from 'vite-node/source-map'
import { createServer, isRunnableDevEnvironment } from 'vite'

import { getPaths, importStatementPath } from '@cedarjs/project-config'
import {
Expand All @@ -28,10 +25,16 @@ export async function runScriptFunction({
const server = await createServer({
mode: 'production',
optimizeDeps: {
// This is recommended in the vite-node readme
noDiscovery: true,
include: undefined,
},
server: {
hmr: false,
watch: null,
},
environments: {
nodeRunnerEnv: {},
},
Comment thread
Tobbe marked this conversation as resolved.
resolve: {
alias: [
{
Expand Down Expand Up @@ -97,49 +100,26 @@ export async function runScriptFunction({
],
})

// For old Vite, this is needed to initialize the plugins.
if (Number(viteVersion.split('.')[0]) < 6) {
await server.pluginContainer.buildStart({})
const env = server.environments.nodeRunnerEnv
if (!env || !isRunnableDevEnvironment(env)) {
await server.close()
throw new Error('Vite environment is not runnable.')
}

const node = new ViteNodeServer(server, {
transformMode: {
ssr: [/.*/],
web: [/\/web\//],
},
deps: {
fallbackCJS: true,
},
})

// fixes stacktraces in Errors
installSourcemapsSupport({
getSourceMap: (source) => node.getSourceMap(source),
})

const runner = new ViteNodeRunner({
root: server.config.root,
base: server.config.base,
fetchModule(id) {
return node.fetchModule(id)
},
resolveId(id, importer) {
return node.resolveId(id, importer)
},
})

let returnValue
let scriptError = null

try {
const script = await runner.executeFile(scriptPath)
const script = await env.runner.import(scriptPath)
returnValue = await script[functionName](args)
} catch (error) {
scriptError = error
}

try {
const { db } = await runner.executeFile(path.join(getPaths().api.lib, 'db'))
const { db } = await env.runner.import(
path.join(getPaths().api.lib, 'db'),
)
db.$disconnect()
} catch (e) {
// silence
Expand Down
3 changes: 1 addition & 2 deletions packages/prerender/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,7 @@
"rollup-plugin-swc3": "0.12.1",
"unimport": "5.7.0",
"unplugin-auto-import": "19.3.0",
"vite": "7.3.2",
"vite-node": "3.2.4"
"vite": "7.3.2"
},
"devDependencies": {
"@cedarjs/framework-tools": "workspace:*",
Expand Down
60 changes: 23 additions & 37 deletions packages/prerender/src/graphql/node-runner.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
import { createServer, version as viteVersion, mergeConfig } from 'vite'
import type { ViteDevServer, UserConfig } from 'vite'
import { ViteNodeRunner } from 'vite-node/client'
import { ViteNodeServer } from 'vite-node/server'
import { installSourcemapsSupport } from 'vite-node/source-map'
import { createServer, isRunnableDevEnvironment, mergeConfig } from 'vite'
import type { ViteDevServer, RunnableDevEnvironment, UserConfig } from 'vite'

import { getPaths } from '@cedarjs/project-config'
import {
Expand All @@ -19,10 +16,16 @@ async function createViteServer(customConfig: UserConfig = {}) {
const defaultConfig: UserConfig = {
mode: 'production',
optimizeDeps: {
// This is recommended in the vite-node readme
noDiscovery: true,
include: undefined,
},
server: {
hmr: false,
watch: null,
},
environments: {
nodeRunnerEnv: {},
},
resolve: {
alias: [
{
Expand All @@ -45,17 +48,12 @@ async function createViteServer(customConfig: UserConfig = {}) {

const server = await createServer(mergedConfig)

// For old Vite, this is needed to initialize the plugins.
if (Number(viteVersion.split('.')[0]) < 6) {
await server.pluginContainer.buildStart({})
}

return server
}

export class NodeRunner {
private viteServer?: ViteDevServer = undefined
private runner?: ViteNodeRunner = undefined
private env?: RunnableDevEnvironment = undefined
private readonly customViteConfig: UserConfig

constructor(customViteConfig: UserConfig = {}) {
Expand All @@ -64,39 +62,27 @@ export class NodeRunner {

async init() {
this.viteServer = await createViteServer(this.customViteConfig)
const nodeServer = new ViteNodeServer(this.viteServer, {
transformMode: {
ssr: [/.*/],
web: [/\/web\//],
},
deps: {
fallbackCJS: true,
},
})

// fixes stacktraces in Errors
installSourcemapsSupport({
getSourceMap: (source) => nodeServer?.getSourceMap(source),
})
const env = this.viteServer.environments.nodeRunnerEnv
if (!env || !isRunnableDevEnvironment(env)) {
await this.viteServer.close()
throw new Error('Vite environment is not runnable.')
}

this.runner = new ViteNodeRunner({
root: this.viteServer.config.root,
base: this.viteServer.config.base,
fetchModule(id) {
return nodeServer.fetchModule(id)
},
resolveId(id, importer) {
return nodeServer.resolveId(id, importer)
},
})
this.env = env
Comment thread
Tobbe marked this conversation as resolved.
}

async importFile(filePath: string) {
if (!this.runner) {
if (!this.env) {
await this.init()
}

return this.runner?.executeFile(filePath)
const env = this.env
if (!env) {
throw new Error('NodeRunner failed to initialize')
}

return env.runner.import(filePath)
}

async close() {
Expand Down
Loading