46 lines
1.1 KiB
Plaintext
46 lines
1.1 KiB
Plaintext
|
/**
|
||
|
* Copyright (c) 2013-present, Facebook, Inc.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* This source code is licensed under the BSD-style license found in the
|
||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||
|
*
|
||
|
* @providesModule isEmpty
|
||
|
* @flow
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
/* eslint-disable fb-www/typeof-undefined */
|
||
|
/* eslint-disable no-unused-vars */
|
||
|
|
||
|
const invariant = require('./invariant');
|
||
|
|
||
|
/**
|
||
|
* Checks if a value is empty.
|
||
|
*/
|
||
|
function isEmpty(value: mixed): boolean {
|
||
|
if (Array.isArray(value)) {
|
||
|
return value.length === 0;
|
||
|
} else if (typeof value === 'object') {
|
||
|
if (value) {
|
||
|
invariant(!isIterable(value) || value.size === undefined, 'isEmpty() does not support iterable collections.');
|
||
|
for (const _ in value) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
return true;
|
||
|
} else {
|
||
|
return !value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function isIterable(value: any): boolean {
|
||
|
if (typeof Symbol === 'undefined') {
|
||
|
return false;
|
||
|
}
|
||
|
return value[Symbol.iterator];
|
||
|
}
|
||
|
|
||
|
module.exports = isEmpty;
|