PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` 'use strict'; var path = require('path') , fs = require('fs'); /** * Attempt to somewhat safely parse the JSON. * * @param {String} data JSON blob that needs to be parsed. * @returns {Object|false} Parsed JSON or false. * @api private */ function parse(data) { data = data.toString('utf-8'); // // Remove a possible UTF-8 BOM (byte order marker) as this can lead to parse // values when passed in to the JSON.parse. // if (data.charCodeAt(0) === 0xFEFF) data = data.slice(1); try { return JSON.parse(data); } catch (e) { return false; } } /** * Find package.json files. * * @param {String|Object} root The root directory we should start searching in. * @returns {Object} Iterator interface. * @api public */ module.exports = function find(root) { root = root || process.cwd(); if (typeof root !== "string") { if (typeof root === "object" && typeof root.filename === 'string') { root = root.filename; } else { throw new Error("Must pass a filename string or a module object to finder"); } } return { /** * Return the parsed package.json that we find in a parent folder. * * @returns {Object} Value, filename and indication if the iteration is done. * @api public */ next: function next() { if (root.match(/^(\w:\\|\/)$/)) return { value: undefined, filename: undefined, done: true }; var file = path.join(root, 'package.json') , data; root = path.resolve(root, '..'); if (fs.existsSync(file) && (data = parse(fs.readFileSync(file)))) { data.__path = file; return { value: data, filename: file, done: false }; } return next(); } }; };