123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- var fs = require('fs');
- var path = require('path');
- var pify = require('pify');
- var stat = pify(fs.stat);
- var readFile = pify(fs.readFile);
- var resolve = path.resolve;
- var cache = Object.create(null);
- function convert(content, encoding) {
- if (Buffer.isEncoding(encoding)) {
- return content.toString(encoding);
- }
- return content;
- }
- module.exports = function (path, encoding) {
- path = resolve(path);
- return stat(path).then(function (stats) {
- var item = cache[path];
- if (item && item.mtime.getTime() === stats.mtime.getTime()) {
- return convert(item.content, encoding);
- }
- return readFile(path).then(function (data) {
- cache[path] = {
- mtime: stats.mtime,
- content: data
- };
- return convert(data, encoding);
- });
- }).catch(function (err) {
- cache[path] = null;
- return Promise.reject(err);
- });
- };
- module.exports.sync = function (path, encoding) {
- path = resolve(path);
- try {
- var stats = fs.statSync(path);
- var item = cache[path];
- if (item && item.mtime.getTime() === stats.mtime.getTime()) {
- return convert(item.content, encoding);
- }
- var data = fs.readFileSync(path);
- cache[path] = {
- mtime: stats.mtime,
- content: data
- };
- return convert(data, encoding);
- } catch (err) {
- cache[path] = null;
- throw err;
- }
- };
- module.exports.get = function (path, encoding) {
- path = resolve(path);
- if (cache[path]) {
- return convert(cache[path].content, encoding);
- }
- return null;
- };
- module.exports.clear = function () {
- cache = Object.create(null);
- };
|