import cheerio from 'cheerio'; import HtmlGenerator from '../../html/HTMLGenerator'; export default (service, opts = {}) => { const { config, paths, webpackConfig, routes } = service; const { chunksMap, headScripts, scripts } = opts; return new HtmlGenerator({ config, paths, routes, publicPath: webpackConfig.output.publicPath, chunksMap, modifyContext(context, opts = {}) { const { route } = opts; return service.applyPlugins('modifyHTMLContext', { initialValue: context, args: { route }, }); }, modifyRouterBaseStr(str) { return str; }, modifyPublicPathStr(memo) { return service.applyPlugins('modifyPublicPathStr', { initialValue: memo, }); }, modifyChunks(memo, opts = {}) { const { route } = opts; return service.applyPlugins('modifyHTMLChunks', { initialValue: memo, args: { route }, }); }, modifyMetas(memo, opts = {}) { const { route } = opts; return service.applyPlugins('addHTMLMeta', { initialValue: memo, args: { route }, }); }, modifyLinks(memo, opts = {}) { const { route } = opts; return service.applyPlugins('addHTMLLink', { initialValue: memo, args: { route }, }); }, modifyScripts(memo, opts = {}) { const { route } = opts; return service.applyPlugins('addHTMLScript', { initialValue: [...(scripts || []), ...memo], args: { route }, }); }, modifyStyles(memo, opts = {}) { const { route } = opts; return service.applyPlugins('addHTMLStyle', { initialValue: memo, args: { route }, }); }, modifyHeadScripts(memo, opts = {}) { const { route } = opts; return service.applyPlugins('addHTMLHeadScript', { initialValue: [...(headScripts || []), ...memo], args: { route }, }); }, modifyHTML(memo, opts = {}) { const { route, getChunkPath } = opts; const $ = cheerio.load(memo, { decodeEntities: false, recognizeSelfClosing: true }); service.applyPlugins('modifyHTMLWithAST', { initialValue: $, args: { route, getChunkPath, }, }); return $.html(); }, }); };