54 lines
1.3 KiB
JavaScript
54 lines
1.3 KiB
JavaScript
const request = require('./request.conf');
|
|
const cheerio = require('cheerio');
|
|
const parallel = require('async/parallel');
|
|
|
|
const manifest = require('./manifest');
|
|
const favicon = require('./favicon');
|
|
const browserconfig = require('./browserconfig');
|
|
const links = require('./links');
|
|
const ogimage = require('./ogimage')
|
|
|
|
const grab = (fn, $) => {
|
|
return (cb) => {
|
|
fn($, (err, icons) => {
|
|
cb(err, icons);
|
|
});
|
|
}
|
|
};
|
|
|
|
module.exports = (url, done) => {
|
|
if (/\?/.test(url)) {
|
|
url += `&${Date.now()}`
|
|
} else {
|
|
url += `?${Date.now()}`
|
|
}
|
|
request(url, (err, res, page) => {
|
|
if (err) return done(err);
|
|
|
|
// if (res.statusCode !== 200) return done(null, []);
|
|
if (page && typeof page !== 'string' && !(page instanceof String)) return done(null, []);
|
|
|
|
const $ = cheerio.load(page, {
|
|
// ignore case for tags and attribute names
|
|
lowerCaseTags: true,
|
|
lowerCaseAttributeNames: true,
|
|
});
|
|
|
|
$.baseUrl = `${res.request.uri.protocol}//${res.request.uri.hostname}`;
|
|
|
|
let icons = links($);
|
|
let ogi = ogimage($)
|
|
icons = [...icons, ...ogi]
|
|
|
|
parallel([
|
|
grab(manifest, $),
|
|
grab(favicon, $),
|
|
grab(browserconfig, $),
|
|
], (err, results) => {
|
|
// ignore errors
|
|
results.forEach(arr => icons = [...icons, ...arr]);
|
|
return done(null, icons, $.baseUrl);
|
|
});
|
|
});
|
|
};
|