Skip to content

Commit

Permalink
refactor(vite): use native isFileServingAllowed util (#20414)
Browse files Browse the repository at this point in the history
  • Loading branch information
danielroe committed Apr 20, 2023
1 parent 3ac14c9 commit 0ea7197
Showing 1 changed file with 2 additions and 62 deletions.
64 changes: 2 additions & 62 deletions packages/vite/src/vite-node.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { pathToFileURL } from 'node:url'
import os from 'node:os'
import { createApp, createError, defineEventHandler, defineLazyEventHandler, eventHandler, toNodeListener } from 'h3'
import { ViteNodeServer } from 'vite-node/server'
import fse from 'fs-extra'
import { isAbsolute, normalize, resolve } from 'pathe'
import { addDevServerHandler } from '@nuxt/kit'
import type { ModuleNode, ViteDevServer, Plugin as VitePlugin } from 'vite'
import { isFileServingAllowed } from 'vite'
import type { ModuleNode, Plugin as VitePlugin } from 'vite'
import { normalizeViteManifest } from 'vue-bundle-renderer'
import { resolve as resolveModule } from 'mlly'
import { distDir } from './dirs'
Expand Down Expand Up @@ -183,63 +183,3 @@ export async function initViteNodeServer (ctx: ViteBuildContext) {
`export { default } from ${JSON.stringify(pathToFileURL(manifestResolvedPath).href)}`
)
}

/**
* The following code is ported from vite
* Awaits https://github.com/vitejs/vite/pull/12894
*/
const VOLUME_RE = /^[A-Z]:/i
const FS_PREFIX = '/@fs/'
const isWindows = os.platform() === 'win32'
const postfixRE = /[?#].*$/s
const windowsSlashRE = /\\/g

function slash (p: string): string {
return p.replace(windowsSlashRE, '/')
}

function normalizePath (id: string): string {
return normalize(isWindows ? slash(id) : id)
}
function fsPathFromId (id: string): string {
const fsPath = normalizePath(
id.startsWith(FS_PREFIX) ? id.slice(FS_PREFIX.length) : id
)
return fsPath[0] === '/' || fsPath.match(VOLUME_RE) ? fsPath : `/${fsPath}`
}

function fsPathFromUrl (url: string): string {
return fsPathFromId(cleanUrl(url))
}

function cleanUrl (url: string): string {
return url.replace(postfixRE, '')
}

function isFileServingAllowed (
url: string,
server: ViteDevServer
): boolean {
if (!server.config.server.fs.strict) { return true }

const file = fsPathFromUrl(url)

// @ts-expect-error private API
if (server._fsDenyGlob(file)) { return false }

if (server.moduleGraph.safeModulesPath.has(file)) { return true }

if (server.config.server.fs.allow.some(dir => isParentDirectory(dir, file))) { return true }

return false
}

function isParentDirectory (dir: string, file: string): boolean {
if (dir[dir.length - 1] !== '/') {
dir = `${dir}/`
}
return (
file.startsWith(dir) ||
(file.toLowerCase().startsWith(dir.toLowerCase()))
)
}

0 comments on commit 0ea7197

Please sign in to comment.