index.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. let fs = require('fs');
  2. let path = require('path')
  3. let getOGPreviewData = require('./getOGPreviewData');
  4. let getPreviewHTML = require('./getPreviewHTML');
  5. let previewPatterns = [];
  6. fs.readdirSync(path.join(__dirname, 'patterns'), (err, files) => {
  7. if(!err) {
  8. previewPatterns = files.map(file => {
  9. return require(path.join(__dirname, file));
  10. });
  11. }
  12. });
  13. module.exports = async function linkPreview(url) {
  14. let previewData;
  15. for(let pattern of previewPatterns) {
  16. if(pattern.matches(url)) {
  17. previewData = await pattern.getPreviewData(url);
  18. break;
  19. }
  20. }
  21. //If the url doesn't match a pattern for a specific
  22. //site, try getting a possible preview using OG tags
  23. if(!previewData) previewData = await getOGPreviewData(url);
  24. //If there is some data scraped from the site for a
  25. //preview, generate a HTML string
  26. //Otherwise return an empty string
  27. if(typeof previewData === 'object' && previewData !== null) {
  28. return getPreviewHTML(previewData);
  29. } else if(typeof previewData === 'string') {
  30. return previewData;
  31. } else {
  32. return '';
  33. }
  34. }