Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
24 changes: 11 additions & 13 deletions packages/fastify-vite/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ const {
stat,
read,
sep,
determineOutDirRoot,
} = require('./ioutils.cjs')
const { createHtmlTemplateFunction } = require('./html.js')

Expand Down Expand Up @@ -317,25 +318,19 @@ async function resolveViteConfig(root, dev, { spa, distDir } = {}) {
]
}

async function determineOutDirRoot(vite) {
const { usePathsRelativeToAppRoot } = vite.fastify
if (usePathsRelativeToAppRoot) {
const { packageDirectory } = await import('package-directory')
return await packageDirectory()
}
return vite.root
}

async function resolveSSRBundle({ dev, vite }) {
const bundle = {}
let clientOutDir

if (!dev) {
if (vite.fastify) {
clientOutDir = resolveIfRelative(vite.fastify.outDirs.client, await determineOutDirRoot(vite))
clientOutDir = await resolveIfRelative(
vite.fastify.outDirs.client,
await determineOutDirRoot(vite),
)
} else {
// Backwards compatibility for projects that do not use the viteFastify plugin.
bundle.dir = resolveIfRelative(vite.build.outDir, vite.root)
bundle.dir = await resolveIfRelative(vite.build.outDir, vite.root)
clientOutDir = resolve(bundle.dir, 'client')
}

Expand Down Expand Up @@ -369,10 +364,13 @@ async function resolveSPABundle({ dev, vite }) {
let clientOutDir

if (vite.fastify) {
clientOutDir = resolveIfRelative(vite.fastify.outDirs.client, await determineOutDirRoot(vite))
clientOutDir = await resolveIfRelative(
vite.fastify.outDirs.client,
await determineOutDirRoot(vite),
)
} else {
// Backwards compatibility for projects that do not use the viteFastify plugin.
bundle.dir = resolveIfRelative(vite.build.outDir, vite.root)
bundle.dir = await resolveIfRelative(vite.build.outDir, vite.root)
clientOutDir = resolve(bundle.dir, 'client')
}

Expand Down
43 changes: 41 additions & 2 deletions packages/fastify-vite/ioutils.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,45 @@ const {
const { ensureDir, remove } = require('fs-extra')
const klaw = require('klaw')

function resolveIfRelative(p, root) {
return isAbsolute(p) ? p : resolve(root, p)
function getAppRoot() {
const file = require?.main?.filename || process.argv[1]
if (!file) return

return dirname(resolve(file))
}

async function resolveIfRelative(p, root) {
if (isAbsolute(p)) return p
if (isAbsolute(root)) return resolve(root, p)
if (existsSync(resolve(root, p))) return resolve(root, p)

const { packageDirectory } = await import('package-directory')
let _packageDirectory = await packageDirectory()

if (!_packageDirectory) {
_packageDirectory = await packageDirectory({
cwd: getAppRoot() || process.cwd(),
})
}

return resolve(_packageDirectory, root, p)
}

async function determineOutDirRoot(vite) {
const { usePathsRelativeToAppRoot } = vite.fastify
if (usePathsRelativeToAppRoot) {
const { packageDirectory } = await import('package-directory')
const _packageDirectory = await packageDirectory()
if (_packageDirectory) {
return _packageDirectory
}

return await packageDirectory({
cwd: getAppRoot() || process.cwd(),
})
}

return vite.root
}

async function* walk(dir, ignorePatterns = []) {
Expand Down Expand Up @@ -43,6 +80,8 @@ module.exports = {
remove,
isAbsolute,
sep,
getAppRoot,
determineOutDirRoot,
write: writeFile,
read: readFile,
exists: existsSync,
Expand Down
22 changes: 12 additions & 10 deletions packages/fastify-vite/mode/production.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
const { join, resolve } = require('node:path')
const FastifyStatic = require('@fastify/static')
const { parse, resolveIfRelative, read, exists } = require('../ioutils.cjs')
const {
parse,
resolveIfRelative,
read,
exists,
determineOutDirRoot,
} = require('../ioutils.cjs')

function fileUrl(str) {
if (typeof str !== 'string') {
Expand All @@ -23,19 +29,15 @@ async function setup(config) {
let ssrOutDir

if (vite.fastify) {
const { outDirs, usePathsRelativeToAppRoot } = vite.fastify
const { outDirs } = vite.fastify

let outDirRoot = vite.root
if (usePathsRelativeToAppRoot) {
const { packageDirectory } = await import('package-directory')
outDirRoot = await packageDirectory()
}
const outDirRoot = await determineOutDirRoot(vite)

clientOutDir = resolveIfRelative(outDirs.client, outDirRoot)
ssrOutDir = resolveIfRelative(outDirs.ssr || '', outDirRoot)
clientOutDir = await resolveIfRelative(outDirs.client, outDirRoot)
ssrOutDir = await resolveIfRelative(outDirs.ssr || '', outDirRoot)
} else {
// Backwards compatibility for projects that do not use the viteFastify plugin.
const outDir = resolveIfRelative(vite.build.outDir, vite.root)
const outDir = await resolveIfRelative(vite.build.outDir, vite.root)

clientOutDir = resolve(outDir, 'client')
ssrOutDir = resolve(outDir, 'server')
Expand Down
25 changes: 17 additions & 8 deletions packages/fastify-vite/plugin.mjs
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import { writeFile } from 'node:fs/promises'
import { isAbsolute, join, relative, sep } from 'node:path'
import getDeepMergeFunction from '@fastify/deepmerge'
import { writeFile } from 'node:fs/promises'

export function viteFastify({ spa, clientModule, useRelativePaths = false } = {}) {
export function viteFastify({
spa,
clientModule,
useRelativePaths = false,
} = {}) {
let customOutDir
let jsonFilePath
let configToWrite = {}
Expand Down Expand Up @@ -30,7 +34,8 @@ export function viteFastify({ spa, clientModule, useRelativePaths = false } = {}
rawConfig.environments.client ?? {},
)
if (!spa) {
const ssrEntryPoint = clientModule ?? resolveClientModule(rawConfig.root)
const ssrEntryPoint =
clientModule ?? resolveClientModule(rawConfig.root)
rawConfig.environments.ssr = deepMerge(
createSSREnvironment(isDevMode, outDir, ssrEntryPoint),
rawConfig.environments.ssr ?? {},
Expand Down Expand Up @@ -99,10 +104,11 @@ export function viteFastify({ spa, clientModule, useRelativePaths = false } = {}
let commonDistFolder = customOutDir // respect custom build.outDir config if provided
if (!commonDistFolder) {
const outDirs = Object.values(fastify.outDirs)
commonDistFolder = outDirs.length > 1
? findCommonPath(outDirs)
// Handle SPA case where there's only dist/client
: outDirs[0].split(sep)[0]
commonDistFolder =
outDirs.length > 1
? findCommonPath(outDirs)
: // Handle SPA case where there's only dist/client
outDirs[0].split(sep)[0]
}

if (isAbsolute(commonDistFolder)) {
Expand Down Expand Up @@ -152,7 +158,10 @@ async function makeAllPathsRelative(viteConfig) {
}

Object.keys(fastify.outDirs).forEach((key) => {
fastify.outDirs[key] = relative(applicationRootDirectory, fastify.outDirs[key])
fastify.outDirs[key] = relative(
applicationRootDirectory,
fastify.outDirs[key],
)
})
}

Expand Down