index.js 1017 B

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