0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-01-06 22:40:14 -05:00

Lazyloaded cheerio dependency

- this moves cheerio to be lazyloaded
- given there are many uses of cheerio in this file, I've just made a
  helper function to DRY up the code
This commit is contained in:
Daniel Lockyer 2024-10-10 14:45:49 +01:00 committed by Daniel Lockyer
parent b092929bba
commit ab4c67f2d2

View file

@ -8,7 +8,6 @@ const {textColorForBackgroundColor, darkenToContrastThreshold} = require('@trygh
const {DateTime} = require('luxon');
const htmlToPlaintext = require('@tryghost/html-to-plaintext');
const tpl = require('@tryghost/tpl');
const cheerio = require('cheerio');
const {EmailAddressParser} = require('@tryghost/email-addresses');
const {registerHelpers} = require('./helpers/register-helpers');
const crypto = require('crypto');
@ -46,6 +45,12 @@ function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
// This aids with lazyloading the cheerio dependency
function cheerioLoad(html) {
const cheerio = require('cheerio');
return cheerio.load(html);
}
/**
* @typedef {string|null} Segment
* @typedef {object} Post
@ -253,7 +258,7 @@ class EmailRenderer {
return allowedSegments;
}
const $ = cheerio.load(html);
const $ = cheerioLoad(html);
let allSegments = $('[data-gh-segment]')
.get()
@ -316,7 +321,7 @@ class EmailRenderer {
}
}
let $ = cheerio.load(html);
let $ = cheerioLoad(html);
// Remove parts of the HTML not applicable to the current segment - We do this
// before rendering the template as the preheader for the email may be generated
@ -412,7 +417,7 @@ class EmailRenderer {
// juice will explicitly set the width/height attributes to `auto` on the <img /> tag
// This is not supported by Outlook, so we need to reset the width/height attributes to the original values
// Other clients will ignore the width/height attributes and use the inlined CSS instead
$ = cheerio.load(html);
$ = cheerioLoad(html);
const originalImageSizes = $('img').get().map((image) => {
const src = image.attribs.src;
const width = image.attribs.width;
@ -429,7 +434,7 @@ class EmailRenderer {
html = juice(html, {inlinePseudoElements: true, removeStyleTags: true});
// happens after inlining of CSS so we can change element types without worrying about styling
$ = cheerio.load(html);
$ = cheerioLoad(html);
// Reset any `height="auto"` or `width="auto"` attributes to their original values before inlining CSS
const imageTags = $('img').get();