1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00
next.js/server/read.js
2016-10-15 00:05:08 +09:00

43 lines
874 B
JavaScript

import fs from 'mz/fs'
import resolve from './resolve'
const cache = {}
/**
* resolve a file like `require.resolve`,
* and read and cache the file content
*/
async function read (path, { mfs }) {
const f = await (mfs ? resolveFromMFS(path, mfs) : resolve(path))
if (mfs) {
return mfs.readFileSync(f, 'utf8')
} else {
let promise = cache[f]
if (!promise) {
promise = cache[f] = fs.readFile(f, 'utf8')
}
return promise
}
}
function resolveFromMFS (path, mfs) {
const isFile = (file, cb) => {
if (!mfs.existsSync(file)) return cb(null, false)
let stat
try {
stat = mfs.statSync(file)
} catch (err) {
return cb(err)
}
cb(null, stat.isFile() || stat.isFIFO())
}
const readFile = mfs.readFile.bind(mfs)
return resolve(path, { isFile, readFile })
}
module.exports = read
exports.cache = cache