Ejemplo n.º 1
0
function* multipassCompress(settings) {
  // activate/deactivate plugins
  Object.keys(settings.plugins).forEach(pluginName => {
    pluginsData[pluginName].active = settings.plugins[pluginName];
  });

  // Set floatPrecision across all the plugins
  const floatPrecision = Number(settings.floatPrecision);

  for (const plugin of Object.values(pluginsData)) {
    if (plugin.params && 'floatPrecision' in plugin.params) {
      plugin.params.floatPrecision = floatPrecision;
    }
  }

  const svg = cloneParsedSvg(parsedSvg);
  let svgData;
  let previousDataLength;

  while (svgData === undefined || svgData.length != previousDataLength) {
    previousDataLength = svgData && svgData.length;
    plugins(svg, {input: 'string'}, optimisedPluginsData);
    svgData = js2svg(svg, {
      indent: '  ',
      pretty: settings.pretty
    }).data;

    yield {
      data: svgData,
      dimensions: getDimensions(svg)
    };
  }
}
    svg2js(value, (svg) => {
      if (svg.error) {
        reject(new Error(normalizeErrorString(svg.error)));
        return;
      }

      plugins(svg, opts);

      const jsx = js2svg(svg, {
        indent: '  ',
        pretty: true,
      }).data;

      resolve(jsx);
    });