0
0
mirror of https://github.com/honojs/hono.git synced 2024-11-30 01:56:18 +01:00
hono/deno_dist/utils/filepath.ts
Yusuke Wada 77b7ac7fe7
fix(utils/filepath): allow .. in filename (#1272)
* fix(utils/filepath): allow `..` in filename

* denoify

* support `./foo../bar.txt`

* denoify

* add tests

---

Co-authored-by: Taku Amano <taku@taaas.jp>
2023-07-27 11:43:42 +09:00

34 lines
885 B
TypeScript

type FilePathOptions = {
filename: string
root?: string
defaultDocument?: string
}
export const getFilePath = (options: FilePathOptions): string | undefined => {
let filename = options.filename
if (/(?:^|\/)\.\.(?:$|\/)/.test(filename)) return
let root = options.root || ''
const defaultDocument = options.defaultDocument || 'index.html'
if (filename.endsWith('/')) {
// /top/ => /top/index.html
filename = filename.concat(defaultDocument)
} else if (!filename.match(/\.[a-zA-Z0-9]+$/)) {
// /top => /top/index.html
filename = filename.concat('/' + defaultDocument)
}
// /foo.html => foo.html
filename = filename.replace(/^\.?\//, '')
// assets/ => assets
root = root.replace(/\/$/, '')
// ./assets/foo.html => assets/foo.html
let path = root ? root + '/' + filename : filename
path = path.replace(/^\.?\//, '')
return path
}