Преглед на файлове

Added 'first' function.

Maciej Bukowski преди 8 години
родител
ревизия
15249a85af
променени са 2 файла, в които са добавени 46 реда и са изтрити 0 реда
  1. 24 0
      packages/ckeditor5-utils/src/first.js
  2. 22 0
      packages/ckeditor5-utils/tests/first.js

+ 24 - 0
packages/ckeditor5-utils/src/first.js

@@ -0,0 +1,24 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+/**
+ * @module utils/first
+ */
+
+/**
+ * Returns first item of an `iterable`.
+ *
+ * @param {Iterable.<*>} iterable
+ * @returns {*}
+ */
+export default function first( iterable ) {
+	const iteratorItem = iterable.next();
+
+	if ( !iteratorItem.done ) {
+		return iteratorItem.value;
+	}
+
+	return null;
+}

+ 22 - 0
packages/ckeditor5-utils/tests/first.js

@@ -0,0 +1,22 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+import first from '../src/first';
+
+describe( 'utils', () => {
+	describe( 'first', () => {
+		it( 'should return first item', () => {
+			const iterator = [ 11, 22 ][ Symbol.iterator ]();
+
+			expect( first( iterator ) ).to.equal( 11 );
+		} );
+
+		it( 'should return null if iterator is empty', () => {
+			const iterator = [][ Symbol.iterator ]();
+
+			expect( first( iterator ) ).to.be.null;
+		} );
+	} );
+} );