# All files packer-sync.js

25% Statements 6/24
8.33% Branches 1/12
0% Functions 0/1
25% Lines 6/24

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57

    1x
    1x
    1x

    1x
    1x

    1x

     "use strict";

    let hasSyncZlib = true;
    let zlib = require("zlib");
    Iif (!zlib.deflateSync) {
      hasSyncZlib = false;
    }
    let constants = require("./constants");
    let Packer = require("./packer");

    module.exports = function (metaData, opt) {
      if (!hasSyncZlib) {
        throw new Error(
          "To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0"
        );
      }

      let options = opt || {};

      let packer = new Packer(options);

      let chunks = [];

      // Signature
      chunks.push(Buffer.from(constants.PNG_SIGNATURE));

      // Header
      chunks.push(packer.packIHDR(metaData.width, metaData.height));

      if (metaData.gamma) {
        chunks.push(packer.packGAMA(metaData.gamma));
      }

      let filteredData = packer.filterData(
        metaData.data,
        metaData.width,
        metaData.height
      );

      // compress it
      let compressedData = zlib.deflateSync(
        filteredData,
        packer.getDeflateOptions()
      );
      filteredData = null;

      if (!compressedData || !compressedData.length) {
        throw new Error("bad png - invalid compressed data response");
      }
      chunks.push(packer.packIDAT(compressedData));

      // End
      chunks.push(packer.packIEND());

      return Buffer.concat(chunks);
    };