Minify: Asyncify `statFile()`
parent
947dc8eeed
commit
dd7ea1a8f9
|
@ -145,7 +145,7 @@ const minify = (req, res) => {
|
||||||
|
|
||||||
const contentType = mime.lookup(filename);
|
const contentType = mime.lookup(filename);
|
||||||
|
|
||||||
statFile(filename, (error, date, exists) => {
|
util.callbackify(statFile)(filename, 3, (error, [date, exists]) => {
|
||||||
if (date) {
|
if (date) {
|
||||||
date = new Date(date);
|
date = new Date(date);
|
||||||
date.setMilliseconds(0);
|
date.setMilliseconds(0);
|
||||||
|
@ -186,7 +186,7 @@ const minify = (req, res) => {
|
||||||
res.writeHead(405, {allow: 'HEAD, GET'});
|
res.writeHead(405, {allow: 'HEAD, GET'});
|
||||||
res.end();
|
res.end();
|
||||||
}
|
}
|
||||||
}, 3);
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// find all includes in ace.js and embed them.
|
// find all includes in ace.js and embed them.
|
||||||
|
@ -231,7 +231,7 @@ const getAceFile = async () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Check for the existance of the file and get the last modification date.
|
// Check for the existance of the file and get the last modification date.
|
||||||
const statFile = (filename, callback, dirStatLimit) => {
|
const statFile = async (filename, dirStatLimit) => {
|
||||||
/*
|
/*
|
||||||
* The only external call to this function provides an explicit value for
|
* The only external call to this function provides an explicit value for
|
||||||
* dirStatLimit: this check could be removed.
|
* dirStatLimit: this check could be removed.
|
||||||
|
@ -241,32 +241,26 @@ const statFile = (filename, callback, dirStatLimit) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dirStatLimit < 1 || filename === '' || filename === '/') {
|
if (dirStatLimit < 1 || filename === '' || filename === '/') {
|
||||||
callback(null, null, false);
|
return [null, false];
|
||||||
} else if (filename === 'js/ace.js') {
|
} else if (filename === 'js/ace.js') {
|
||||||
// Sometimes static assets are inlined into this file, so we have to stat
|
// Sometimes static assets are inlined into this file, so we have to stat
|
||||||
// everything.
|
// everything.
|
||||||
lastModifiedDateOfEverything().then(
|
return [await lastModifiedDateOfEverything(), true];
|
||||||
(date) => callback(null, date, true),
|
|
||||||
(err) => callback(err || new Error(err)));
|
|
||||||
} else if (filename === 'js/require-kernel.js') {
|
} else if (filename === 'js/require-kernel.js') {
|
||||||
callback(null, requireLastModified(), true);
|
return [requireLastModified(), true];
|
||||||
} else {
|
} else {
|
||||||
fs.stat(ROOT_DIR + filename, (error, stats) => {
|
let stats;
|
||||||
if (error) {
|
try {
|
||||||
if (error.code === 'ENOENT') {
|
stats = await util.promisify(fs.stat)(ROOT_DIR + filename);
|
||||||
// Stat the directory instead.
|
} catch (err) {
|
||||||
statFile(path.dirname(filename), (error, date, exists) => {
|
if (err.code === 'ENOENT') {
|
||||||
callback(error, date, false);
|
// Stat the directory instead.
|
||||||
}, dirStatLimit - 1);
|
const [date] = await statFile(path.dirname(filename), dirStatLimit - 1);
|
||||||
} else {
|
return [date, false];
|
||||||
callback(error);
|
|
||||||
}
|
|
||||||
} else if (stats.isFile()) {
|
|
||||||
callback(null, stats.mtime.getTime(), true);
|
|
||||||
} else {
|
|
||||||
callback(null, stats.mtime.getTime(), false);
|
|
||||||
}
|
}
|
||||||
});
|
throw err;
|
||||||
|
}
|
||||||
|
return [stats.mtime.getTime(), stats.isFile()];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue