const vega = require('vega');const path = require('path');const args = require('./args');const read = require('./read');const vegaLite = require('..');
function load(file) { return require(path.resolve(file));}
const Levels = { error: vega.Error, warn: vega.Warn, info: vega.Info, debug: vega.Debug};
module.exports = function (type, callback, opt) { const arg = args(type);
const base = arg.base || (arg._[0] ? path.dirname(arg._[0]) : null);
const loglevel = Levels[String(arg.loglevel).toLowerCase()] || vega.Warn;
const config = arg.config ? load(arg.config) : null;
const scale = arg.scale || undefined;
if (typeof arg.seed !== 'undefined') { if (Number.isNaN(arg.seed)) throw 'Illegal seed value: must be a valid number.'; vega.setRandom(vega.randomLCG(arg.seed)); }
const locale = { number: arg.format ? load(arg.format) : null, time: arg.timeFormat ? load(arg.timeFormat) : null };
function render(vlSpec) { const vgSpec = vegaLite.compile(vlSpec).spec; const view = new vega.View(vega.parse(vgSpec, config), { locale: locale, loader: vega.loader({baseURL: base}), logger: vega.logger(loglevel, 'error'), renderer: 'none' }).finalize();
return (type === 'svg' ? view.toSVG(scale) : view.toCanvas(scale, opt)).then(_ => callback(_, arg)); }
read(arg._[0] || null) .then(text => render(JSON.parse(text))) .catch(err => console.error(err)); };