/** * @license * Copyright 2015 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ goog.provide('shaka.util.MapUtils'); /** * @namespace shaka.util.MapUtils * @summary A set of map/object utility functions. */ /** * Returns true if the map is empty; otherwise, returns false. * * @param {!Object.} object * @return {boolean} * @template T */ shaka.util.MapUtils.empty = function(object) { return Object.keys(object).length == 0; }; /** * Gets the map's values. * * @param {!Object.} object * @return {!Array.} * @template T */ shaka.util.MapUtils.values = function(object) { return Object.keys(object).map(function(key) { return object[key]; }); }; /** * Gets a boolean value. * * @param {!Object.} object * @param {string} key * @return {?boolean} The value if the value exists and is a boolean value; * otherwise, return null if the value does not exist. * @throws TypeError if the value is not a boolean value. */ shaka.util.MapUtils.getBoolean = function(object, key) { var value = shaka.util.MapUtils.getAsPrimitiveType(object, key, 'boolean'); return /** @type {?boolean} */(value); }; /** * Gets a number value. * * @param {!Object.} object * @param {string} key * @param {number=} opt_lowerBound Optional lower bound (inclusive). * @param {number=} opt_upperBound Optional upper bound (inclusive). * @return {?number} The value if the value exists and is a number value that * is finite and within the given bounds, if any; otherwise, return null if * the value does not exist. * @throws TypeError if the value is not a number value. * @throws RangeError if the value is not finite or within the given bounds, * if any. */ shaka.util.MapUtils.getNumber = function( object, key, opt_lowerBound, opt_upperBound) { var value = shaka.util.MapUtils.getAsPrimitiveType(object, key, 'number'); if (value == null) { return null; } var n = /** @type {number} */(value); if (isNaN(n) || n == Number.NEGATIVE_INFINITY || n == Number.POSITIVE_INFINITY) { throw new RangeError('\'' + key + '\' must be finite.'); } if ((opt_lowerBound != null) && n < opt_lowerBound) { throw new RangeError('\'' + key + '\' must be >= ' + opt_lowerBound); } if ((opt_upperBound != null) && n > opt_upperBound) { throw new RangeError('\'' + key + '\' must be <= ' + opt_upperBound); } return n; }; /** * Gets a string value. * * @param {!Object.} object * @param {string} key * @return {?string} The value if the value exists and is a string value; * otherwise, return null if the value does not exist. * @throws TypeError if the value is not a string value. */ shaka.util.MapUtils.getString = function(object, key) { var value = shaka.util.MapUtils.getAsPrimitiveType(object, key, 'string'); return /** @type {?string} */(value); }; /** * Gets a value that has the specified primitive type * * @param {!Object.} object * @param {string} key * @param {string} typeName The primitive type's name, e.g., 'boolean'. * @return {*} The value if the value exists and has the specified type; * otherwise, return null if the value does not exist. * @throws TypeError if the value does not have the specified type. */ shaka.util.MapUtils.getAsPrimitiveType = function( object, key, typeName) { var value = object[key]; if (value == null) { return null; } if (typeof value != typeName) { throw new TypeError('\'' + key + '\' must be a ' + typeName + '.'); } return value; }; /** * Gets a value that is an instance of the specified class. * * @param {!Object.} object * @param {string} key * @param {(function(new:T)|function(new:T, ...*))} constructor The class's * constructor. * @return {T} The value if the value exists and is an instance of the * specified class; otherwise, return null if the value does not exist. * @throws TypeError if the value is not an instance of the specified class. * @template T */ shaka.util.MapUtils.getAsInstanceType = function( object, key, constructor) { var value = object[key]; if (value == null) { return null; } if (!(value instanceof constructor)) { throw new TypeError( '\'' + key + '\' must be an instance of ' + constructor.name + '.'); } return value; };