text: 'use strict';
  
  var hasSyncZlib = true;
  var zlib = require('zlib');
  var SyncReader = require('./sync-reader');
  var FilterSync = require('./filter-parse-sync');
  var Parser = require('./parser');
  var bitmapper = require('./bitmapper');
  var formatNormaliser = require('./format-normaliser');
  
  
  module.exports = function(buffer, options) {
  
    if (!hasSyncZlib) {
      throw new Error('To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0');
    }
  
    var err;
    function handleError(_err_) {
      err = _err_;
    }
  
    var metaData;
    function handleMetaData(_metaData_) {
      metaData = _metaData_;
    }
  
    function handleTransColor(transColor) {
      metaData.transColor = transColor;
    }
  
    function handlePalette(palette) {
      metaData.palette = palette;
    }
  
    var gamma;
    function handleGamma(_gamma_) {
      gamma = _gamma_;
    }
  
    var inflateDataList = [];
    function handleInflateData(inflatedData) {
      inflateDataList.push(inflatedData);
    }
  
    var reader = new SyncReader(buffer);
  
    var parser = new Parser(options, {
      read: reader.read.bind(reader),
      error: handleError,
      metadata: handleMetaData,
      gamma: handleGamma,
      palette: handlePalette,
      transColor: handleTransColor,
      inflateData: handleInflateData
    });
  
    parser.start();
    reader.process();
  
    if (err) {
      throw err;
    }
  
    //join together the inflate datas
    var inflateData = Buffer.concat(inflateDataList);
    inflateDataList.length = 0;
  
    var inflatedData = zlib.inflateSync(inflateData);
    inflateData = null;
  
    if (!inflatedData || !inflatedData.length) {
      throw new Error('bad png - invalid inflate data response');
    }
  
    var unfilteredData = FilterSync.process(inflatedData, metaData);
    inflateData = null;
  
    var bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);
    unfilteredData = null;
  
    var normalisedBitmapData = formatNormaliser(bitmapData, metaData);
  
    metaData.data = normalisedBitmapData;
    metaData.gamma = gamma || 0;
  
    return metaData;
  };
  