JezK
Edit File: stringify.js
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = stringify; function _typeof2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); _typeof2 = function _typeof2() { return data; }; return data; } function _misc() { var data = require("../util/misc.js"); _misc = function _misc() { return data; }; return data; } function _constants() { var data = require("../constants.js"); _constants = function _constants() { return data; }; return data; } function _package() { var data = require("../../package.json"); _package = function _package() { return data; }; return data; } var NODE_VERSION = process.version; function shouldWrapKey(str) { return str.indexOf('true') === 0 || str.indexOf('false') === 0 || /[:\s\n\\",\[\]]/g.test(str) || /^[0-9]/g.test(str) || !/^[a-zA-Z]/g.test(str); } function maybeWrap(str) { if (typeof str === 'boolean' || typeof str === 'number' || shouldWrapKey(str)) { return JSON.stringify(str); } else { return str; } } var priorities = { name: 1, version: 2, uid: 3, resolved: 4, integrity: 5, registry: 6, dependencies: 7 }; function priorityThenAlphaSort(a, b) { if (priorities[a] || priorities[b]) { return (priorities[a] || 100) > (priorities[b] || 100) ? 1 : -1; } else { return (0, _misc().sortAlpha)(a, b); } } function _stringify(obj, options) { if ((0, _typeof2()["default"])(obj) !== 'object') { throw new TypeError(); } var indent = options.indent; var lines = []; // Sorting order needs to be consistent between runs, we run native sort by name because there are no // problems with it being unstable because there are no to keys the same // However priorities can be duplicated and native sort can shuffle things from run to run var keys = Object.keys(obj).sort(priorityThenAlphaSort); var addedKeys = []; for (var i = 0; i < keys.length; i++) { var _key = keys[i]; var val = obj[_key]; if (val == null || addedKeys.indexOf(_key) >= 0) { continue; } var valKeys = [_key]; // get all keys that have the same value equality, we only want this for objects if ((0, _typeof2()["default"])(val) === 'object') { for (var j = i + 1; j < keys.length; j++) { var _key2 = keys[j]; if (val === obj[_key2]) { valKeys.push(_key2); } } } var keyLine = valKeys.sort(_misc().sortAlpha).map(maybeWrap).join(', '); if (typeof val === 'string' || typeof val === 'boolean' || typeof val === 'number') { lines.push("".concat(keyLine, " ").concat(maybeWrap(val))); } else if ((0, _typeof2()["default"])(val) === 'object') { lines.push("".concat(keyLine, ":\n").concat(_stringify(val, { indent: indent + ' ' })) + (options.topLevel ? '\n' : '')); } else { throw new TypeError(); } addedKeys = addedKeys.concat(valKeys); } return indent + lines.join("\n".concat(indent)); } function stringify(obj, noHeader, enableVersions) { var val = _stringify(obj, { indent: '', topLevel: true }); if (noHeader) { return val; } var lines = []; lines.push('# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.'); lines.push("# yarn lockfile v".concat(_constants().LOCKFILE_VERSION)); if (enableVersions) { lines.push("# yarn v".concat(_package().version)); lines.push("# node ".concat(NODE_VERSION)); } lines.push('\n'); lines.push(val); return lines.join('\n'); } //# sourceMappingURL=stringify.js.map