'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); exports.printIteratorEntries = printIteratorEntries; exports.printIteratorValues = printIteratorValues; exports.printListItems = printListItems; exports.printObjectProperties = printObjectProperties; const getSymbols = Object.getOwnPropertySymbols || (obj => []); /** * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * */ const isSymbol = key => // $FlowFixMe string literal `symbol`. This value is not a valid `typeof` return value typeof key === 'symbol' || toString.call(key) === '[object Symbol]'; // Return entries (for example, of a map) // with spacing, indentation, and comma // without surrounding punctuation (for example, braces) function printIteratorEntries( // Flow 0.51.0: property `@@iterator` of $Iterator not found in Object // To allow simplistic getRecordIterator in immutable.js iterator, config, indentation, depth, refs, printer ) { let separator = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : ': '; let result = ''; let current = iterator.next(); if (!current.done) { result += config.spacingOuter; const indentationNext = indentation + config.indent; while (!current.done) { const name = printer( current.value[0], config, indentationNext, depth, refs ); const value = printer( current.value[1], config, indentationNext, depth, refs ); result += indentationNext + name + separator + value; current = iterator.next(); if (!current.done) { result += ',' + config.spacingInner; } else if (!config.min) { result += ','; } } result += config.spacingOuter + indentation; } return result; } // Return values (for example, of a set) // with spacing, indentation, and comma // without surrounding punctuation (braces or brackets) function printIteratorValues( iterator, config, indentation, depth, refs, printer ) { let result = ''; let current = iterator.next(); if (!current.done) { result += config.spacingOuter; const indentationNext = indentation + config.indent; while (!current.done) { result += indentationNext + printer(current.value, config, indentationNext, depth, refs); current = iterator.next(); if (!current.done) { result += ',' + config.spacingInner; } else if (!config.min) { result += ','; } } result += config.spacingOuter + indentation; } return result; } // Return items (for example, of an array) // with spacing, indentation, and comma // without surrounding punctuation (for example, brackets) function printListItems(list, config, indentation, depth, refs, printer) { let result = ''; if (list.length) { result += config.spacingOuter; const indentationNext = indentation + config.indent; for (let i = 0; i < list.length; i++) { result += indentationNext + printer(list[i], config, indentationNext, depth, refs); if (i < list.length - 1) { result += ',' + config.spacingInner; } else if (!config.min) { result += ','; } } result += config.spacingOuter + indentation; } return result; } // Return properties of an object // with spacing, indentation, and comma // without surrounding punctuation (for example, braces) function printObjectProperties(val, config, indentation, depth, refs, printer) { let result = ''; let keys = Object.keys(val).sort(); const symbols = getSymbols(val); if (symbols.length) { keys = keys.filter(key => !isSymbol(key)).concat(symbols); } if (keys.length) { result += config.spacingOuter; const indentationNext = indentation + config.indent; for (let i = 0; i < keys.length; i++) { const key = keys[i]; const name = printer(key, config, indentationNext, depth, refs); const value = printer(val[key], config, indentationNext, depth, refs); result += indentationNext + name + ': ' + value; if (i < keys.length - 1) { result += ',' + config.spacingInner; } else if (!config.min) { result += ','; } } result += config.spacingOuter + indentation; } return result; }