import { __require as requireUnicodeUtils } from '../../../../fbjs@2.0.0/node_modules/fbjs/lib/UnicodeUtils.js';
import { __require as requireFindRangesImmutable } from './findRangesImmutable.js';

/**
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @format
 * 
 * @emails oncall+draft_js
 */

var encodeInlineStyleRanges_1;
var hasRequiredEncodeInlineStyleRanges;

function requireEncodeInlineStyleRanges () {
	if (hasRequiredEncodeInlineStyleRanges) return encodeInlineStyleRanges_1;
	hasRequiredEncodeInlineStyleRanges = 1;

	var UnicodeUtils = requireUnicodeUtils();

	var findRangesImmutable = requireFindRangesImmutable();

	var areEqual = function areEqual(a, b) {
	  return a === b;
	};

	var isTruthy = function isTruthy(a) {
	  return !!a;
	};

	var EMPTY_ARRAY = [];
	/**
	 * Helper function for getting encoded styles for each inline style. Convert
	 * to UTF-8 character counts for storage.
	 */

	function getEncodedInlinesForType(block, styleList, styleToEncode) {
	  var ranges = []; // Obtain an array with ranges for only the specified style.

	  var filteredInlines = styleList.map(function (style) {
	    return style.has(styleToEncode);
	  }).toList();
	  findRangesImmutable(filteredInlines, areEqual, // We only want to keep ranges with nonzero style values.
	  isTruthy, function (start, end) {
	    var text = block.getText();
	    ranges.push({
	      offset: UnicodeUtils.strlen(text.slice(0, start)),
	      length: UnicodeUtils.strlen(text.slice(start, end)),
	      style: styleToEncode
	    });
	  });
	  return ranges;
	}
	/*
	 * Retrieve the encoded arrays of inline styles, with each individual style
	 * treated separately.
	 */


	function encodeInlineStyleRanges(block) {
	  var styleList = block.getCharacterList().map(function (c) {
	    return c.getStyle();
	  }).toList();
	  var ranges = styleList.flatten().toSet().map(function (style) {
	    return getEncodedInlinesForType(block, styleList, style);
	  });
	  return Array.prototype.concat.apply(EMPTY_ARRAY, ranges.toJS());
	}

	encodeInlineStyleRanges_1 = encodeInlineStyleRanges;
	return encodeInlineStyleRanges_1;
}

export { requireEncodeInlineStyleRanges as __require };
//# sourceMappingURL=encodeInlineStyleRanges.js.map
