-
Notifications
You must be signed in to change notification settings - Fork 40
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Consider serving and transforming all HTML files, rather than just limiting it to index files #110
Changes from 7 commits
98bdd14
961f47b
5d7d157
b927beb
7574fda
4abfecb
2fff4e0
d0765c9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -47,10 +47,6 @@ function info(msg: string) { | |||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
function isStaticFilePath(path: string) { | ||||||||||||||||||||||||||||||||||||||||||
return path.match(/(\.\w+$)|@vite|@id|@react-refresh/); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
async function getTransformedHTML(html: string, req: express.Request) { | ||||||||||||||||||||||||||||||||||||||||||
return Config.transformer ? Config.transformer(html, req) : html; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
@@ -108,9 +104,7 @@ async function resolveConfig(): Promise<ViteConfig> { | |||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} catch (e) { | ||||||||||||||||||||||||||||||||||||||||||
1; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} catch (e) {} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||||||||||||||
const config = fs.readFileSync(getViteConfigPath(), "utf8"); | ||||||||||||||||||||||||||||||||||||||||||
|
@@ -176,7 +170,10 @@ async function injectStaticMiddleware( | |||||||||||||||||||||||||||||||||||||||||
middleware: RequestHandler, | ||||||||||||||||||||||||||||||||||||||||||
) { | ||||||||||||||||||||||||||||||||||||||||||
const config = await getViteConfig(); | ||||||||||||||||||||||||||||||||||||||||||
app.use(config.base, middleware); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
app.use(config.base, (req, res, next) => | ||||||||||||||||||||||||||||||||||||||||||
req.path.endsWith(".html") ? next() : middleware(req, res, next), | ||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
const stubMiddlewareLayer = app._router.stack.find( | ||||||||||||||||||||||||||||||||||||||||||
(layer: { handle?: RequestHandler }) => layer.handle === stubMiddleware, | ||||||||||||||||||||||||||||||||||||||||||
|
@@ -198,20 +195,22 @@ function isIgnoredPath(path: string, req: express.Request) { | |||||||||||||||||||||||||||||||||||||||||
: Config.ignorePaths(path, req); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
function findClosestIndexToRoot( | ||||||||||||||||||||||||||||||||||||||||||
reqPath: string, | ||||||||||||||||||||||||||||||||||||||||||
root: string, | ||||||||||||||||||||||||||||||||||||||||||
): string | undefined { | ||||||||||||||||||||||||||||||||||||||||||
function findFilePath(reqPath: string, root: string): string | undefined { | ||||||||||||||||||||||||||||||||||||||||||
if (reqPath.endsWith(".html")) { | ||||||||||||||||||||||||||||||||||||||||||
const pathToTest = path.join(root, reqPath); | ||||||||||||||||||||||||||||||||||||||||||
if (fs.existsSync(pathToTest)) return pathToTest; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// find closest index to root | ||||||||||||||||||||||||||||||||||||||||||
const basePath = reqPath.slice(0, reqPath.lastIndexOf("/")); | ||||||||||||||||||||||||||||||||||||||||||
const dirs = basePath.split("/"); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
while (dirs.length > 0) { | ||||||||||||||||||||||||||||||||||||||||||
const pathToTest = path.join(root, ...dirs, "index.html"); | ||||||||||||||||||||||||||||||||||||||||||
if (fs.existsSync(pathToTest)) { | ||||||||||||||||||||||||||||||||||||||||||
return pathToTest; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
if (fs.existsSync(pathToTest)) return pathToTest; | ||||||||||||||||||||||||||||||||||||||||||
dirs.pop(); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
return undefined; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
|
@@ -226,22 +225,19 @@ async function injectViteIndexMiddleware( | |||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
if (isIgnoredPath(req.path, req)) return next(); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
if (isStaticFilePath(req.path)) next(); | ||||||||||||||||||||||||||||||||||||||||||
else { | ||||||||||||||||||||||||||||||||||||||||||
const indexPath = findClosestIndexToRoot(req.path, config.root); | ||||||||||||||||||||||||||||||||||||||||||
if (indexPath === undefined) return next(); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
const template = fs.readFileSync(indexPath, "utf8"); | ||||||||||||||||||||||||||||||||||||||||||
let html = await server.transformIndexHtml(req.originalUrl, template); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||||||||||||||
html = await getTransformedHTML(html, req); | ||||||||||||||||||||||||||||||||||||||||||
res.send(html); | ||||||||||||||||||||||||||||||||||||||||||
} catch (e) { | ||||||||||||||||||||||||||||||||||||||||||
console.error(e); | ||||||||||||||||||||||||||||||||||||||||||
res.status(500); | ||||||||||||||||||||||||||||||||||||||||||
return next(); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
const indexPath = findFilePath(req.path, config.root); | ||||||||||||||||||||||||||||||||||||||||||
if (indexPath === undefined) return next(); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
const template = fs.readFileSync(indexPath, "utf8"); | ||||||||||||||||||||||||||||||||||||||||||
let html = await server.transformIndexHtml(req.originalUrl, template); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||||||||||||||
html = await getTransformedHTML(html, req); | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What if we include the precise file path of the html file as an input for the
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
res.send(html); | ||||||||||||||||||||||||||||||||||||||||||
} catch (e) { | ||||||||||||||||||||||||||||||||||||||||||
console.error(e); | ||||||||||||||||||||||||||||||||||||||||||
res.status(500); | ||||||||||||||||||||||||||||||||||||||||||
return next(); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
@@ -253,7 +249,7 @@ async function injectIndexMiddleware(app: core.Express) { | |||||||||||||||||||||||||||||||||||||||||
app.use(config.base, async (req, res, next) => { | ||||||||||||||||||||||||||||||||||||||||||
if (isIgnoredPath(req.path, req)) return next(); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
const indexPath = findClosestIndexToRoot(req.path, distPath); | ||||||||||||||||||||||||||||||||||||||||||
const indexPath = findFilePath(req.path, distPath); | ||||||||||||||||||||||||||||||||||||||||||
if (indexPath === undefined) return next(); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
let html = fs.readFileSync(indexPath, "utf8"); | ||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
<!doctype html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="UTF-8" /> | ||
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> | ||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
<title>Document</title> | ||
</head> | ||
<body> | ||
<h1>main</h1> | ||
</body> | ||
</html> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
<!doctype html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="UTF-8" /> | ||
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> | ||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
<title>Document</title> | ||
</head> | ||
<body> | ||
<h1>main</h1> | ||
</body> | ||
</html> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I feel like we need to find more meaningful name instead of
findFilePath
for that function. I'm not sure how those HTML files should be called, templates maybe?So it would be called
findTemplateFilePath
or evenreadTemplate
and it would replace those couple of lines (obviously after adding this functionality to the function itself 😅)What do you think about that?