UNPKG

@farmfe/core

Version:

Farm is a extremely fast web build tool written in Rust. Farm can start a project in milliseconds and perform HMR within 10ms, making it much faster than similar tools like webpack and vite.

48 lines 1.68 kB
import fs from 'fs'; import path from 'path'; import { ERR_SYMLINK_IN_RECURSIVE_READDIR, recursiveReaddir } from './file.js'; import { withTrailingSlash } from './path.js'; import { normalizePath } from './share.js'; import { cleanUrl } from './url.js'; const publicFilesMap = new WeakMap(); export async function checkPublicFile(url, config) { // note if the file is in /public, the resolver would have returned it // as-is so it's not going to be a fully resolved path. const { publicDir } = config; if (!publicDir || url[0] !== '/') { return; } await initPublicFiles(config); const fileName = cleanUrl(url); const publicFiles = getPublicFiles(config); if (publicFiles) { return publicFiles.has(fileName) ? normalizePath(path.join(publicDir, fileName)) : undefined; } const publicFile = normalizePath(path.join(publicDir, fileName)); if (!publicFile.startsWith(withTrailingSlash(publicDir))) { // can happen if URL starts with '../' return; } return fs.existsSync(publicFile) ? publicFile : undefined; } export async function initPublicFiles(config) { let fileNames; try { fileNames = await recursiveReaddir(config.publicDir); } catch (e) { if (e.code === ERR_SYMLINK_IN_RECURSIVE_READDIR) { return; } throw e; } const publicFiles = new Set(fileNames.map((fileName) => fileName.slice(config.publicDir.length))); publicFilesMap.set(config, publicFiles); return publicFiles; } function getPublicFiles(config) { return publicFilesMap.get(config); } //# sourceMappingURL=publicDir.js.map