123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', {
- value: true
- });
- exports.printIteratorEntries = printIteratorEntries;
- exports.printIteratorValues = printIteratorValues;
- exports.printListItems = printListItems;
- exports.printObjectProperties = printObjectProperties;
- /**
- * Copyright (c) Facebook, Inc. and its affiliates. 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 getKeysOfEnumerableProperties = object => {
- const keys = Object.keys(object).sort();
- if (Object.getOwnPropertySymbols) {
- Object.getOwnPropertySymbols(object).forEach(symbol => {
- if (Object.getOwnPropertyDescriptor(object, symbol).enumerable) {
- keys.push(symbol);
- }
- });
- }
- return keys;
- };
- /**
- * Return entries (for example, of a map)
- * with spacing, indentation, and comma
- * without surrounding punctuation (for example, braces)
- */
- function printIteratorEntries(
- iterator,
- config,
- indentation,
- depth,
- refs,
- printer, // Too bad, so sad that separator for ECMAScript Map has been ' => '
- // What a distracting diff if you change a data structure to/from
- // ECMAScript Object or Immutable.Map/OrderedMap which use the default.
- separator = ': '
- ) {
- 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 = '';
- const keys = getKeysOfEnumerableProperties(val);
- 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;
- }
|