UNPKG

electron-html-to

Version:

Convert html to html/image using electron

195 lines (138 loc) 5.73 kB
'use strict'; exports.__esModule = true; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _url = require('url'); var _url2 = _interopRequireDefault(_url); var _debug = require('debug'); var _debug2 = _interopRequireDefault(_debug); var _uuid = require('uuid'); var _uuid2 = _interopRequireDefault(_uuid); var _objectAssign = require('object-assign'); var _objectAssign2 = _interopRequireDefault(_objectAssign); var _mkdirp = require('mkdirp'); var _mkdirp2 = _interopRequireDefault(_mkdirp); var _packageJson = require('../package.json'); var _saveFile = require('./saveFile'); var _saveFile2 = _interopRequireDefault(_saveFile); var _serverIpcStrategy = require('./serverIpcStrategy'); var _serverIpcStrategy2 = _interopRequireDefault(_serverIpcStrategy); var _dedicatedProcessStrategy = require('./dedicatedProcessStrategy'); var _dedicatedProcessStrategy2 = _interopRequireDefault(_dedicatedProcessStrategy); var debugConversion = _debug2['default'](_packageJson.name + ':conversion'); function writeHtmlFileIfNeccesary(opt, tmpPath, type, id, cb) { var htmlPath = undefined; if (!opt[type]) { return cb(); } htmlPath = _path2['default'].resolve(_path2['default'].join(tmpPath, id + type + '.html')); // eslint-disable-next-line no-param-reassign opt[type + 'File'] = _path2['default'].resolve(htmlPath); debugConversion('creating temporal html file [type: %s] in %s..', type, htmlPath); _saveFile2['default'](tmpPath, htmlPath, opt[type], cb); } function writeHtmlIfNeccesary(opt, tmpPath, id, cb) { debugConversion('creating temporal html files in %s..', tmpPath); writeHtmlFileIfNeccesary(opt, tmpPath, 'html', id, function (htmlErr) { if (htmlErr) { return cb(htmlErr); } writeHtmlFileIfNeccesary(opt, tmpPath, 'header', id, function (headerErr) { if (headerErr) { return cb(headerErr); } writeHtmlFileIfNeccesary(opt, tmpPath, 'footer', id, function (footerErr) { if (footerErr) { return cb(footerErr); } cb(); }); }); }); } function createConversion(options) { var mode = undefined; var serverIpcStrategyCall = undefined; if (options.strategy === 'electron-server') { mode = 'server'; } else if (options.strategy === 'electron-ipc') { mode = 'ipc'; } if (options.strategy === 'electron-server' || options.strategy === 'electron-ipc') { // each instance with ipc or server mode will create a new electron-workers instance. serverIpcStrategyCall = _serverIpcStrategy2['default'](mode, options); } var conversion = function conversion(conversionOpts, cb) { var localOpts = conversionOpts, converterPath = undefined, id = undefined; var conversionOptsDefault = { browserWindow: { webPreferences: {} }, waitForJSVarName: 'ELECTRON_HTML_TO_READY', collectLogs: true }; debugConversion('generating new conversion task..'); if (typeof conversionOpts === 'string' || conversionOpts instanceof String) { debugConversion('normalizing local options object from a plain string parameter: %s', conversionOpts); localOpts = { html: conversionOpts }; } localOpts = _objectAssign2['default']({}, conversionOptsDefault, localOpts); if (localOpts.converterPath) { converterPath = localOpts.converterPath; } else { converterPath = options.converterPath; } if (localOpts.waitForJS && localOpts.browserWindow.webPreferences && localOpts.browserWindow.webPreferences.javascript === false) { throw new Error('can\'t use waitForJS option if browserWindow["web-preferences"].javascript is not activated'); } id = _uuid2['default'].v4(); debugConversion('conversion task id: %s', id); _mkdirp2['default'](options.tmpDir, function (mkdirErr) { if (mkdirErr) { // eslint-disable-next-line no-param-reassign mkdirErr.message = 'Error while trying to ensure tmpDir "' + options.tmpDir + '" existence: ' + mkdirErr.message; return cb(mkdirErr); } writeHtmlIfNeccesary(localOpts, options.tmpDir, id, function (err) { if (err) { return cb(err); } // prefix the request in order to recognize later in electron protocol handler localOpts.url = localOpts.url || _url2['default'].format({ protocol: 'file', pathname: localOpts.htmlFile }); localOpts.chromeCommandLineSwitches = options.chromeCommandLineSwitches; localOpts.extraHeaders = localOpts.extraHeaders || {}; localOpts.output = { tmpDir: _path2['default'].resolve(_path2['default'].join(options.tmpDir)), id: id }; delete localOpts.html; debugConversion('starting conversion task [strategy:%s][task id:%s] with options:', options.strategy, id, localOpts); if (options.strategy === 'electron-server' || options.strategy === 'electron-ipc') { return serverIpcStrategyCall(localOpts, converterPath, id, cb); } if (options.strategy === 'dedicated-process') { return _dedicatedProcessStrategy2['default'](options, localOpts, converterPath, id, cb); } cb(new Error('Unsupported strategy ' + options.strategy)); }); }); }; function kill() { if (serverIpcStrategyCall) { serverIpcStrategyCall.kill(); } } conversion.options = options; conversion.kill = kill; return conversion; } exports['default'] = createConversion; module.exports = exports['default'];