1 line
63 KiB
JavaScript
1 line
63 KiB
JavaScript
["^ ","~:resource-id",["~:shadow.build.classpath/resource","goog/object/object.js"],"~:js","goog.loadModule(function(exports) {\n \"use strict\";\n goog.module(\"goog.object\");\n goog.module.declareLegacyNamespace();\n function forEach(obj, f, opt_obj) {\n for (const key in obj) {\n f.call(opt_obj, obj[key], key, obj);\n }\n }\n function filter(obj, f, opt_obj) {\n const res = {};\n for (const key in obj) {\n if (f.call(opt_obj, obj[key], key, obj)) {\n res[key] = obj[key];\n }\n }\n return res;\n }\n function map(obj, f, opt_obj) {\n const res = {};\n for (const key in obj) {\n res[key] = f.call(opt_obj, obj[key], key, obj);\n }\n return res;\n }\n function some(obj, f, opt_obj) {\n for (const key in obj) {\n if (f.call(opt_obj, obj[key], key, obj)) {\n return true;\n }\n }\n return false;\n }\n function every(obj, f, opt_obj) {\n for (const key in obj) {\n if (!f.call(opt_obj, obj[key], key, obj)) {\n return false;\n }\n }\n return true;\n }\n function getCount(obj) {\n let rv = 0;\n for (const key in obj) {\n rv++;\n }\n return rv;\n }\n function getAnyKey(obj) {\n for (const key in obj) {\n return key;\n }\n }\n function getAnyValue(obj) {\n for (const key in obj) {\n return obj[key];\n }\n }\n function contains(obj, val) {\n return containsValue(obj, val);\n }\n function getValues(obj) {\n const res = [];\n let i = 0;\n for (const key in obj) {\n res[i++] = obj[key];\n }\n return res;\n }\n function getKeys(obj) {\n const res = [];\n let i = 0;\n for (const key in obj) {\n res[i++] = key;\n }\n return res;\n }\n function getValueByKeys(obj, var_args) {\n const isArrayLike = goog.isArrayLike(var_args);\n const keys = isArrayLike ? var_args : arguments;\n for (let i = isArrayLike ? 0 : 1; i < keys.length; i++) {\n if (obj == null) {\n return undefined;\n }\n obj = obj[keys[i]];\n }\n return obj;\n }\n function containsKey(obj, key) {\n return obj !== null && key in obj;\n }\n function containsValue(obj, val) {\n for (const key in obj) {\n if (obj[key] == val) {\n return true;\n }\n }\n return false;\n }\n function findKey(obj, f, thisObj = undefined) {\n for (const key in obj) {\n if (f.call(thisObj, obj[key], key, obj)) {\n return key;\n }\n }\n return undefined;\n }\n function findValue(obj, f, thisObj = undefined) {\n const key = findKey(obj, f, thisObj);\n return key && obj[key];\n }\n function isEmpty(obj) {\n for (const key in obj) {\n return false;\n }\n return true;\n }\n function clear(obj) {\n for (const i in obj) {\n delete obj[i];\n }\n }\n function remove(obj, key) {\n let rv;\n if (rv = key in obj) {\n delete obj[key];\n }\n return rv;\n }\n function add(obj, key, val) {\n if (obj !== null && key in obj) {\n throw new Error(`The object already contains the key \"${key}\"`);\n }\n set(obj, key, val);\n }\n function get(obj, key, val = undefined) {\n if (obj !== null && key in obj) {\n return obj[key];\n }\n return val;\n }\n function set(obj, key, value) {\n obj[key] = value;\n }\n function setIfUndefined(obj, key, value) {\n return key in obj ? obj[key] : obj[key] = value;\n }\n function setWithReturnValueIfNotSet(obj, key, f) {\n if (key in obj) {\n return obj[key];\n }\n const val = f();\n obj[key] = val;\n return val;\n }\n function equals(a, b) {\n for (const k in a) {\n if (!(k in b) || a[k] !== b[k]) {\n return false;\n }\n }\n for (const k in b) {\n if (!(k in a)) {\n return false;\n }\n }\n return true;\n }\n function clone(obj) {\n const res = {};\n for (const key in obj) {\n res[key] = obj[key];\n }\n return res;\n }\n function unsafeClone(obj) {\n if (!obj || typeof obj !== \"object\") {\n return obj;\n }\n if (typeof obj.clone === \"function\") {\n return obj.clone();\n }\n if (typeof Map !== \"undefined\" && obj instanceof Map) {\n return new Map(obj);\n } else if (typeof Set !== \"undefined\" && obj instanceof Set) {\n return new Set(obj);\n } else if (obj instanceof Date) {\n return new Date(obj.getTime());\n }\n const clone = Array.isArray(obj) ? [] : typeof ArrayBuffer === \"function\" && typeof ArrayBuffer.isView === \"function\" && ArrayBuffer.isView(obj) && !(obj instanceof DataView) ? new obj.constructor(obj.length) : {};\n for (const key in obj) {\n clone[key] = unsafeClone(obj[key]);\n }\n return clone;\n }\n function transpose(obj) {\n const transposed = {};\n for (const key in obj) {\n transposed[obj[key]] = key;\n }\n return transposed;\n }\n const PROTOTYPE_FIELDS = [\"constructor\", \"hasOwnProperty\", \"isPrototypeOf\", \"propertyIsEnumerable\", \"toLocaleString\", \"toString\", \"valueOf\",];\n function extend(target, var_args) {\n let key;\n let source;\n for (let i = 1; i < arguments.length; i++) {\n source = arguments[i];\n for (key in source) {\n target[key] = source[key];\n }\n for (let j = 0; j < PROTOTYPE_FIELDS.length; j++) {\n key = PROTOTYPE_FIELDS[j];\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n }\n function create(var_args) {\n const argLength = arguments.length;\n if (argLength == 1 && Array.isArray(arguments[0])) {\n return create.apply(null, arguments[0]);\n }\n if (argLength % 2) {\n throw new Error(\"Uneven number of arguments\");\n }\n const rv = {};\n for (let i = 0; i < argLength; i += 2) {\n rv[arguments[i]] = arguments[i + 1];\n }\n return rv;\n }\n function createSet(var_args) {\n const argLength = arguments.length;\n if (argLength == 1 && Array.isArray(arguments[0])) {\n return createSet.apply(null, arguments[0]);\n }\n const rv = {};\n for (let i = 0; i < argLength; i++) {\n rv[arguments[i]] = true;\n }\n return rv;\n }\n function createImmutableView(obj) {\n let result = obj;\n if (Object.isFrozen && !Object.isFrozen(obj)) {\n result = Object.create(obj);\n Object.freeze(result);\n }\n return result;\n }\n function isImmutableView(obj) {\n return !!Object.isFrozen && Object.isFrozen(obj);\n }\n function getAllPropertyNames(obj, includeObjectPrototype = undefined, includeFunctionPrototype = undefined) {\n if (!obj) {\n return [];\n }\n if (!Object.getOwnPropertyNames || !Object.getPrototypeOf) {\n return getKeys(obj);\n }\n const visitedSet = {};\n let proto = obj;\n while (proto && (proto !== Object.prototype || !!includeObjectPrototype) && (proto !== Function.prototype || !!includeFunctionPrototype)) {\n const names = Object.getOwnPropertyNames(proto);\n for (let i = 0; i < names.length; i++) {\n visitedSet[names[i]] = true;\n }\n proto = Object.getPrototypeOf(proto);\n }\n return getKeys(visitedSet);\n }\n function getSuperClass(constructor) {\n const proto = Object.getPrototypeOf(constructor.prototype);\n return proto && proto.constructor;\n }\n exports = {add, clear, clone, contains, containsKey, containsValue, create, createImmutableView, createSet, equals, every, extend, filter, findKey, findValue, forEach, get, getAllPropertyNames, getAnyKey, getAnyValue, getCount, getKeys, getSuperClass, getValueByKeys, getValues, isEmpty, isImmutableView, map, remove, set, setIfUndefined, setWithReturnValueIfNotSet, some, transpose, unsafeClone,};\n return exports;\n});\n","~:source","/**\n * @license\n * Copyright The Closure Library Authors.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Utilities for manipulating objects/maps/hashes.\n */\ngoog.module('goog.object');\ngoog.module.declareLegacyNamespace();\n\n/**\n * Calls a function for each element in an object/map/hash.\n * @param {?Object<K,V>} obj The object over which to iterate.\n * @param {function(this:T,V,?,?Object<K,V>):?} f The function to call for every\n * element. This function takes 3 arguments (the value, the key and the\n * object) and the return value is ignored.\n * @param {T=} opt_obj This is used as the 'this' object within f.\n * @return {void}\n * @template T,K,V\n */\nfunction forEach(obj, f, opt_obj) {\n for (const key in obj) {\n f.call(/** @type {?} */ (opt_obj), obj[key], key, obj);\n }\n}\n\n/**\n * Calls a function for each element in an object/map/hash. If that call returns\n * true, adds the element to a new object.\n * @param {?Object<K,V>} obj The object over which to iterate.\n * @param {function(this:T,V,?,?Object<K,V>):boolean} f The function to call for\n * every element. This function takes 3 arguments (the value, the key and\n * the object) and should return a boolean. If the return value is true the\n * element is added to the result object. If it is false the element is not\n * included.\n * @param {T=} opt_obj This is used as the 'this' object within f.\n * @return {!Object<K,V>} a new object in which only elements that passed the\n * test are present.\n * @template T,K,V\n */\nfunction filter(obj, f, opt_obj) {\n const res = {};\n for (const key in obj) {\n if (f.call(/** @type {?} */ (opt_obj), obj[key], key, obj)) {\n res[key] = obj[key];\n }\n }\n return res;\n}\n\n/**\n * For every element in an object/map/hash calls a function and inserts the\n * result into a new object.\n * @param {?Object<K,V>} obj The object over which to iterate.\n * @param {function(this:T,V,?,?Object<K,V>):R} f The function to call for every\n * element. This function takes 3 arguments (the value, the key and the\n * object) and should return something. The result will be inserted into a\n * new object.\n * @param {T=} opt_obj This is used as the 'this' object within f.\n * @return {!Object<K,R>} a new object with the results from f.\n * @template T,K,V,R\n */\nfunction map(obj, f, opt_obj) {\n const res = {};\n for (const key in obj) {\n res[key] = f.call(/** @type {?} */ (opt_obj), obj[key], key, obj);\n }\n return res;\n}\n\n/**\n * Calls a function for each element in an object/map/hash. If any\n * call returns true, returns true (without checking the rest). If\n * all calls return false, returns false.\n * @param {?Object<K,V>} obj The object to check.\n * @param {function(this:T,V,?,?Object<K,V>):boolean} f The function to call for\n * every element. This function takes 3 arguments (the value, the key and\n * the object) and should return a boolean.\n * @param {T=} opt_obj This is used as the 'this' object within f.\n * @return {boolean} true if any element passes the test.\n * @template T,K,V\n */\nfunction some(obj, f, opt_obj) {\n for (const key in obj) {\n if (f.call(/** @type {?} */ (opt_obj), obj[key], key, obj)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Calls a function for each element in an object/map/hash. If\n * all calls return true, returns true. If any call returns false, returns\n * false at this point and does not continue to check the remaining elements.\n * @param {?Object<K,V>} obj The object to check.\n * @param {?function(this:T,V,?,?Object<K,V>):boolean} f The function to call\n * for every element. This function takes 3 arguments (the value, the key\n * and the object) and should return a boolean.\n * @param {T=} opt_obj This is used as the 'this' object within f.\n * @return {boolean} false if any element fails the test.\n * @template T,K,V\n */\nfunction every(obj, f, opt_obj) {\n for (const key in obj) {\n if (!f.call(/** @type {?} */ (opt_obj), obj[key], key, obj)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Returns the number of key-value pairs in the object map.\n * @param {?Object} obj The object for which to get the number of key-value\n * pairs.\n * @return {number} The number of key-value pairs in the object map.\n */\nfunction getCount(obj) {\n let rv = 0;\n for (const key in obj) {\n rv++;\n }\n return rv;\n}\n\n/**\n * Returns one key from the object map, if any exists.\n * For map literals the returned key will be the first one in most of the\n * browsers (a know exception is Konqueror).\n * @param {?Object} obj The object to pick a key from.\n * @return {string|undefined} The key or undefined if the object is empty.\n */\nfunction getAnyKey(obj) {\n for (const key in obj) {\n return key;\n }\n}\n\n/**\n * Returns one value from the object map, if any exists.\n * For map literals the returned value will be the first one in most of the\n * browsers (a know exception is Konqueror).\n * @param {?Object<K,V>} obj The object to pick a value from.\n * @return {V|undefined} The value or undefined if the object is empty.\n * @template K,V\n */\nfunction getAnyValue(obj) {\n for (const key in obj) {\n return obj[key];\n }\n}\n\n/**\n * Whether the object/hash/map contains the given object as a value.\n * An alias for containsValue(obj, val).\n * @param {?Object<K,V>} obj The object in which to look for val.\n * @param {V} val The object for which to check.\n * @return {boolean} true if val is present.\n * @template K,V\n */\nfunction contains(obj, val) {\n return containsValue(obj, val);\n}\n\n/**\n * Returns the values of the object/map/hash.\n * @param {?Object<K,V>} obj The object from which to get the values.\n * @return {!Array<V>} The values in the object/map/hash.\n * @template K,V\n */\nfunction getValues(obj) {\n const res = [];\n let i = 0;\n for (const key in obj) {\n res[i++] = obj[key];\n }\n return res;\n}\n\n/**\n * Returns the keys of the object/map/hash.\n * @param {?Object} obj The object from which to get the keys.\n * @return {!Array<string>} Array of property keys.\n */\nfunction getKeys(obj) {\n const res = [];\n let i = 0;\n for (const key in obj) {\n res[i++] = key;\n }\n return res;\n}\n\n/**\n * Get a value from an object multiple levels deep. This is useful for\n * pulling values from deeply nested objects, such as JSON responses.\n * Example usage: getValueByKeys(jsonObj, 'foo', 'entries', 3)\n * @param {?Object} obj An object to get the value from. Can be array-like.\n * @param {...(string|number|!IArrayLike<number|string>)} var_args A number of\n * keys (as strings, or numbers, for array-like objects). Can also be\n * specified as a single array of keys.\n * @return {*} The resulting value. If, at any point, the value for a key in the\n * current object is null or undefined, returns undefined.\n */\nfunction getValueByKeys(obj, var_args) {\n const isArrayLike = goog.isArrayLike(var_args);\n const keys = isArrayLike ?\n /** @type {!IArrayLike<number|string>} */ (var_args) :\n arguments;\n\n // Start with the 2nd parameter for the variable parameters syntax.\n for (let i = isArrayLike ? 0 : 1; i < keys.length; i++) {\n if (obj == null) return undefined;\n obj = obj[keys[i]];\n }\n\n return obj;\n}\n\n/**\n * Whether the object/map/hash contains the given key.\n * @param {?Object} obj The object in which to look for key.\n * @param {?} key The key for which to check.\n * @return {boolean} true If the map contains the key.\n */\nfunction containsKey(obj, key) {\n return obj !== null && key in obj;\n}\n\n/**\n * Whether the object/map/hash contains the given value. This is O(n).\n * @param {?Object<K,V>} obj The object in which to look for val.\n * @param {V} val The value for which to check.\n * @return {boolean} true If the map contains the value.\n * @template K,V\n */\nfunction containsValue(obj, val) {\n for (const key in obj) {\n if (obj[key] == val) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Searches an object for an element that satisfies the given condition and\n * returns its key.\n * @param {?Object<K,V>} obj The object to search in.\n * @param {function(this:T,V,string,?Object<K,V>):boolean} f The function to\n * call for every element. Takes 3 arguments (the value, the key and the\n * object) and should return a boolean.\n * @param {T=} thisObj An optional \"this\" context for the function.\n * @return {string|undefined} The key of an element for which the function\n * returns true or undefined if no such element is found.\n * @template T,K,V\n */\nfunction findKey(obj, f, thisObj = undefined) {\n for (const key in obj) {\n if (f.call(/** @type {?} */ (thisObj), obj[key], key, obj)) {\n return key;\n }\n }\n return undefined;\n}\n\n/**\n * Searches an object for an element that satisfies the given condition and\n * returns its value.\n * @param {?Object<K,V>} obj The object to search in.\n * @param {function(this:T,V,string,?Object<K,V>):boolean} f The function to\n * call for every element. Takes 3 arguments (the value, the key and the\n * object) and should return a boolean.\n * @param {T=} thisObj An optional \"this\" context for the function.\n * @return {V} The value of an element for which the function returns true or\n * undefined if no such element is found.\n * @template T,K,V\n */\nfunction findValue(obj, f, thisObj = undefined) {\n const key = findKey(obj, f, thisObj);\n return key && obj[key];\n}\n\n/**\n * Whether the object/map/hash is empty.\n * @param {?Object} obj The object to test.\n * @return {boolean} true if obj is empty.\n */\nfunction isEmpty(obj) {\n for (const key in obj) {\n return false;\n }\n return true;\n}\n\n/**\n * Removes all key value pairs from the object/map/hash.\n * @param {?Object} obj The object to clear.\n * @return {void}\n */\nfunction clear(obj) {\n for (const i in obj) {\n delete obj[i];\n }\n}\n\n/**\n * Removes a key-value pair based on the key.\n * @param {?Object} obj The object from which to remove the key.\n * @param {?} key The key to remove.\n * @return {boolean} Whether an element was removed.\n */\nfunction remove(obj, key) {\n let rv;\n if (rv = key in /** @type {!Object} */ (obj)) {\n delete obj[key];\n }\n return rv;\n}\n\n/**\n * Adds a key-value pair to the object. Throws an exception if the key is\n * already in use. Use set if you want to change an existing pair.\n * @param {?Object<K,V>} obj The object to which to add the key-value pair.\n * @param {string} key The key to add.\n * @param {V} val The value to add.\n * @return {void}\n * @template K,V\n */\nfunction add(obj, key, val) {\n if (obj !== null && key in obj) {\n throw new Error(`The object already contains the key \"${key}\"`);\n }\n set(obj, key, val);\n}\n\n/**\n * Returns the value for the given key.\n * @param {?Object<K,V>} obj The object from which to get the value.\n * @param {string} key The key for which to get the value.\n * @param {R=} val The value to return if no item is found for the given key\n * (default is undefined).\n * @return {V|R|undefined} The value for the given key.\n * @template K,V,R\n */\nfunction get(obj, key, val = undefined) {\n if (obj !== null && key in obj) {\n return obj[key];\n }\n return val;\n}\n\n/**\n * Adds a key-value pair to the object/map/hash.\n * @param {?Object<K,V>} obj The object to which to add the key-value pair.\n * @param {string} key The key to add.\n * @param {V} value The value to add.\n * @template K,V\n * @return {void}\n */\nfunction set(obj, key, value) {\n obj[key] = value;\n}\n\n/**\n * Adds a key-value pair to the object/map/hash if it doesn't exist yet.\n * @param {?Object<K,V>} obj The object to which to add the key-value pair.\n * @param {string} key The key to add.\n * @param {V} value The value to add if the key wasn't present.\n * @return {V} The value of the entry at the end of the function.\n * @template K,V\n */\nfunction setIfUndefined(obj, key, value) {\n return key in /** @type {!Object} */ (obj) ? obj[key] : (obj[key] = value);\n}\n\n/**\n * Sets a key and value to an object if the key is not set. The value will be\n * the return value of the given function. If the key already exists, the\n * object will not be changed and the function will not be called (the function\n * will be lazily evaluated -- only called if necessary).\n * This function is particularly useful when used with an `Object` which is\n * acting as a cache.\n * @param {?Object<K,V>} obj The object to which to add the key-value pair.\n * @param {string} key The key to add.\n * @param {function():V} f The value to add if the key wasn't present.\n * @return {V} The value of the entry at the end of the function.\n * @template K,V\n */\nfunction setWithReturnValueIfNotSet(obj, key, f) {\n if (key in obj) {\n return obj[key];\n }\n\n const val = f();\n obj[key] = val;\n return val;\n}\n\n/**\n * Compares two objects for equality using === on the values.\n * @param {!Object<K,V>} a\n * @param {!Object<K,V>} b\n * @return {boolean}\n * @template K,V\n */\nfunction equals(a, b) {\n for (const k in a) {\n if (!(k in b) || a[k] !== b[k]) {\n return false;\n }\n }\n for (const k in b) {\n if (!(k in a)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Returns a shallow clone of the object.\n * @param {?Object<K,V>} obj Object to clone.\n * @return {!Object<K,V>} Clone of the input object.\n * @template K,V\n */\nfunction clone(obj) {\n const res = {};\n for (const key in obj) {\n res[key] = obj[key];\n }\n return res;\n}\n\n/**\n * Clones a value. The input may be an Object, Array, or basic type. Objects and\n * arrays will be cloned recursively.\n * WARNINGS:\n * <code>unsafeClone</code> does not detect reference loops. Objects\n * that refer to themselves will cause infinite recursion.\n * <code>unsafeClone</code> is unaware of unique identifiers, and\n * copies UIDs created by <code>getUid</code> into cloned results.\n * @param {T} obj The value to clone.\n * @return {T} A clone of the input value.\n * @template T\n */\nfunction unsafeClone(obj) {\n if (!obj || typeof obj !== 'object') return obj;\n if (typeof obj.clone === 'function') return obj.clone();\n if (typeof Map !== 'undefined' && obj instanceof Map) {\n return new Map(obj);\n } else if (typeof Set !== 'undefined' && obj instanceof Set) {\n return new Set(obj);\n } else if (obj instanceof Date) {\n return new Date(obj.getTime());\n }\n const clone = Array.isArray(obj) ? [] :\n typeof ArrayBuffer === 'function' &&\n typeof ArrayBuffer.isView === 'function' && ArrayBuffer.isView(obj) &&\n !(obj instanceof DataView) ?\n new obj.constructor(obj.length) :\n {};\n for (const key in obj) {\n clone[key] = unsafeClone(obj[key]);\n }\n return clone;\n}\n\n/**\n * Returns a new object in which all the keys and values are interchanged\n * (keys become values and values become keys). If multiple keys map to the\n * same value, the chosen transposed value is implementation-dependent.\n * @param {?Object} obj The object to transpose.\n * @return {!Object} The transposed object.\n */\nfunction transpose(obj) {\n const transposed = {};\n for (const key in obj) {\n transposed[obj[key]] = key;\n }\n return transposed;\n}\n\n/**\n * The names of the fields that are defined on Object.prototype.\n * @type {!Array<string>}\n */\nconst PROTOTYPE_FIELDS = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf',\n];\n\n/**\n * Extends an object with another object.\n * This operates 'in-place'; it does not create a new Object.\n * Example:\n * var o = {};\n * extend(o, {a: 0, b: 1});\n * o; // {a: 0, b: 1}\n * extend(o, {b: 2, c: 3});\n * o; // {a: 0, b: 2, c: 3}\n * @param {?Object} target The object to modify. Existing properties will be\n * overwritten if they are also present in one of the objects in `var_args`.\n * @param {...(?Object|undefined)} var_args The objects from which values\n * will be copied.\n * @return {void}\n * @deprecated Prefer Object.assign\n */\nfunction extend(target, var_args) {\n let key;\n let source;\n for (let i = 1; i < arguments.length; i++) {\n source = arguments[i];\n for (key in source) {\n target[key] = source[key];\n }\n\n // For IE the for-in-loop does not contain any properties that are not\n // enumerable on the prototype object (for example isPrototypeOf from\n // Object.prototype) and it will also not include 'replace' on objects that\n // extend String and change 'replace' (not that it is common for anyone to\n // extend anything except Object).\n\n for (let j = 0; j < PROTOTYPE_FIELDS.length; j++) {\n key = PROTOTYPE_FIELDS[j];\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n}\n\n/**\n * Creates a new object built from the key-value pairs provided as arguments.\n * @param {...*} var_args If only one argument is provided and it is an array\n * then this is used as the arguments, otherwise even arguments are used as\n * the property names and odd arguments are used as the property values.\n * @return {!Object} The new object.\n * @throws {!Error} If there are uneven number of arguments or there is only one\n * non array argument.\n */\nfunction create(var_args) {\n const argLength = arguments.length;\n if (argLength == 1 && Array.isArray(arguments[0])) {\n return create.apply(null, arguments[0]);\n }\n\n if (argLength % 2) {\n throw new Error('Uneven number of arguments');\n }\n\n const rv = {};\n for (let i = 0; i < argLength; i += 2) {\n rv[arguments[i]] = arguments[i + 1];\n }\n return rv;\n}\n\n/**\n * Creates a new object where the property names come from the arguments but\n * the value is always set to true\n * @param {...*} var_args If only one argument is provided and it is an array\n * then this is used as the arguments, otherwise the arguments are used as\n * the property names.\n * @return {!Object} The new object.\n */\nfunction createSet(var_args) {\n const argLength = arguments.length;\n if (argLength == 1 && Array.isArray(arguments[0])) {\n return createSet.apply(null, arguments[0]);\n }\n\n const rv = {};\n for (let i = 0; i < argLength; i++) {\n rv[arguments[i]] = true;\n }\n return rv;\n}\n\n/**\n * Creates an immutable view of the underlying object, if the browser\n * supports immutable objects.\n * In default mode, writes to this view will fail silently. In strict mode,\n * they will throw an error.\n * @param {!Object<K,V>} obj An object.\n * @return {!Object<K,V>} An immutable view of that object, or the original\n * object if this browser does not support immutables.\n * @template K,V\n */\nfunction createImmutableView(obj) {\n let result = obj;\n if (Object.isFrozen && !Object.isFrozen(obj)) {\n result = Object.create(obj);\n Object.freeze(result);\n }\n return result;\n}\n\n/**\n * @param {!Object} obj An object.\n * @return {boolean} Whether this is an immutable view of the object.\n */\nfunction isImmutableView(obj) {\n return !!Object.isFrozen && Object.isFrozen(obj);\n}\n\n/**\n * Get all properties names on a given Object regardless of enumerability.\n * <p> If the browser does not support `Object.getOwnPropertyNames` nor\n * `Object.getPrototypeOf` then this is equivalent to using\n * `getKeys`\n * @param {?Object} obj The object to get the properties of.\n * @param {boolean=} includeObjectPrototype Whether properties defined on\n * `Object.prototype` should be included in the result.\n * @param {boolean=} includeFunctionPrototype Whether properties defined on\n * `Function.prototype` should be included in the result.\n * @return {!Array<string>}\n * @public\n */\nfunction getAllPropertyNames(\n obj, includeObjectPrototype = undefined,\n includeFunctionPrototype = undefined) {\n if (!obj) {\n return [];\n }\n\n // Naively use a for..in loop to get the property names if the browser doesn't\n // support any other APIs for getting it.\n if (!Object.getOwnPropertyNames || !Object.getPrototypeOf) {\n return getKeys(obj);\n }\n\n const visitedSet = {};\n\n // Traverse the prototype chain and add all properties to the visited set.\n let proto = obj;\n while (proto && (proto !== Object.prototype || !!includeObjectPrototype) &&\n (proto !== Function.prototype || !!includeFunctionPrototype)) {\n const names = Object.getOwnPropertyNames(proto);\n for (let i = 0; i < names.length; i++) {\n visitedSet[names[i]] = true;\n }\n proto = Object.getPrototypeOf(proto);\n }\n\n return getKeys(visitedSet);\n}\n\n/**\n * Given a ES5 or ES6 class reference, return its super class / super\n * constructor.\n * This should be used in rare cases where you need to walk up the inheritance\n * tree (this is generally a bad idea). But this work with ES5 and ES6 classes,\n * unlike relying on the superClass_ property.\n * Note: To start walking up the hierarchy from an instance call this with its\n * `constructor` property; e.g. `getSuperClass(instance.constructor)`.\n * @param {function(new: ?)} constructor\n * @return {?Object}\n */\nfunction getSuperClass(constructor) {\n const proto = Object.getPrototypeOf(constructor.prototype);\n return proto && proto.constructor;\n}\n\nexports = {\n add,\n clear,\n clone,\n contains,\n containsKey,\n containsValue,\n create,\n createImmutableView,\n createSet,\n equals,\n every,\n extend,\n filter,\n findKey,\n findValue,\n forEach,\n get,\n getAllPropertyNames,\n getAnyKey,\n getAnyValue,\n getCount,\n getKeys,\n getSuperClass,\n getValueByKeys,\n getValues,\n isEmpty,\n isImmutableView,\n map,\n remove,\n set,\n setIfUndefined,\n setWithReturnValueIfNotSet,\n some,\n transpose,\n unsafeClone,\n};\n","~:compiled-at",1684858197886,"~:source-map-json","{\n\"version\":3,\n\"file\":\"goog.object.object.js\",\n\"lineCount\":281,\n\"mappings\":\"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\",\n\"sources\":[\"goog/object/object.js\"],\n\"sourcesContent\":[\"/**\\n * @license\\n * Copyright The Closure Library Authors.\\n * SPDX-License-Identifier: Apache-2.0\\n */\\n\\n/**\\n * @fileoverview Utilities for manipulating objects/maps/hashes.\\n */\\ngoog.module('goog.object');\\ngoog.module.declareLegacyNamespace();\\n\\n/**\\n * Calls a function for each element in an object/map/hash.\\n * @param {?Object<K,V>} obj The object over which to iterate.\\n * @param {function(this:T,V,?,?Object<K,V>):?} f The function to call for every\\n * element. This function takes 3 arguments (the value, the key and the\\n * object) and the return value is ignored.\\n * @param {T=} opt_obj This is used as the 'this' object within f.\\n * @return {void}\\n * @template T,K,V\\n */\\nfunction forEach(obj, f, opt_obj) {\\n for (const key in obj) {\\n f.call(/** @type {?} */ (opt_obj), obj[key], key, obj);\\n }\\n}\\n\\n/**\\n * Calls a function for each element in an object/map/hash. If that call returns\\n * true, adds the element to a new object.\\n * @param {?Object<K,V>} obj The object over which to iterate.\\n * @param {function(this:T,V,?,?Object<K,V>):boolean} f The function to call for\\n * every element. This function takes 3 arguments (the value, the key and\\n * the object) and should return a boolean. If the return value is true the\\n * element is added to the result object. If it is false the element is not\\n * included.\\n * @param {T=} opt_obj This is used as the 'this' object within f.\\n * @return {!Object<K,V>} a new object in which only elements that passed the\\n * test are present.\\n * @template T,K,V\\n */\\nfunction filter(obj, f, opt_obj) {\\n const res = {};\\n for (const key in obj) {\\n if (f.call(/** @type {?} */ (opt_obj), obj[key], key, obj)) {\\n res[key] = obj[key];\\n }\\n }\\n return res;\\n}\\n\\n/**\\n * For every element in an object/map/hash calls a function and inserts the\\n * result into a new object.\\n * @param {?Object<K,V>} obj The object over which to iterate.\\n * @param {function(this:T,V,?,?Object<K,V>):R} f The function to call for every\\n * element. This function takes 3 arguments (the value, the key and the\\n * object) and should return something. The result will be inserted into a\\n * new object.\\n * @param {T=} opt_obj This is used as the 'this' object within f.\\n * @return {!Object<K,R>} a new object with the results from f.\\n * @template T,K,V,R\\n */\\nfunction map(obj, f, opt_obj) {\\n const res = {};\\n for (const key in obj) {\\n res[key] = f.call(/** @type {?} */ (opt_obj), obj[key], key, obj);\\n }\\n return res;\\n}\\n\\n/**\\n * Calls a function for each element in an object/map/hash. If any\\n * call returns true, returns true (without checking the rest). If\\n * all calls return false, returns false.\\n * @param {?Object<K,V>} obj The object to check.\\n * @param {function(this:T,V,?,?Object<K,V>):boolean} f The function to call for\\n * every element. This function takes 3 arguments (the value, the key and\\n * the object) and should return a boolean.\\n * @param {T=} opt_obj This is used as the 'this' object within f.\\n * @return {boolean} true if any element passes the test.\\n * @template T,K,V\\n */\\nfunction some(obj, f, opt_obj) {\\n for (const key in obj) {\\n if (f.call(/** @type {?} */ (opt_obj), obj[key], key, obj)) {\\n return true;\\n }\\n }\\n return false;\\n}\\n\\n/**\\n * Calls a function for each element in an object/map/hash. If\\n * all calls return true, returns true. If any call returns false, returns\\n * false at this point and does not continue to check the remaining elements.\\n * @param {?Object<K,V>} obj The object to check.\\n * @param {?function(this:T,V,?,?Object<K,V>):boolean} f The function to call\\n * for every element. This function takes 3 arguments (the value, the key\\n * and the object) and should return a boolean.\\n * @param {T=} opt_obj This is used as the 'this' object within f.\\n * @return {boolean} false if any element fails the test.\\n * @template T,K,V\\n */\\nfunction every(obj, f, opt_obj) {\\n for (const key in obj) {\\n if (!f.call(/** @type {?} */ (opt_obj), obj[key], key, obj)) {\\n return false;\\n }\\n }\\n return true;\\n}\\n\\n/**\\n * Returns the number of key-value pairs in the object map.\\n * @param {?Object} obj The object for which to get the number of key-value\\n * pairs.\\n * @return {number} The number of key-value pairs in the object map.\\n */\\nfunction getCount(obj) {\\n let rv = 0;\\n for (const key in obj) {\\n rv++;\\n }\\n return rv;\\n}\\n\\n/**\\n * Returns one key from the object map, if any exists.\\n * For map literals the returned key will be the first one in most of the\\n * browsers (a know exception is Konqueror).\\n * @param {?Object} obj The object to pick a key from.\\n * @return {string|undefined} The key or undefined if the object is empty.\\n */\\nfunction getAnyKey(obj) {\\n for (const key in obj) {\\n return key;\\n }\\n}\\n\\n/**\\n * Returns one value from the object map, if any exists.\\n * For map literals the returned value will be the first one in most of the\\n * browsers (a know exception is Konqueror).\\n * @param {?Object<K,V>} obj The object to pick a value from.\\n * @return {V|undefined} The value or undefined if the object is empty.\\n * @template K,V\\n */\\nfunction getAnyValue(obj) {\\n for (const key in obj) {\\n return obj[key];\\n }\\n}\\n\\n/**\\n * Whether the object/hash/map contains the given object as a value.\\n * An alias for containsValue(obj, val).\\n * @param {?Object<K,V>} obj The object in which to look for val.\\n * @param {V} val The object for which to check.\\n * @return {boolean} true if val is present.\\n * @template K,V\\n */\\nfunction contains(obj, val) {\\n return containsValue(obj, val);\\n}\\n\\n/**\\n * Returns the values of the object/map/hash.\\n * @param {?Object<K,V>} obj The object from which to get the values.\\n * @return {!Array<V>} The values in the object/map/hash.\\n * @template K,V\\n */\\nfunction getValues(obj) {\\n const res = [];\\n let i = 0;\\n for (const key in obj) {\\n res[i++] = obj[key];\\n }\\n return res;\\n}\\n\\n/**\\n * Returns the keys of the object/map/hash.\\n * @param {?Object} obj The object from which to get the keys.\\n * @return {!Array<string>} Array of property keys.\\n */\\nfunction getKeys(obj) {\\n const res = [];\\n let i = 0;\\n for (const key in obj) {\\n res[i++] = key;\\n }\\n return res;\\n}\\n\\n/**\\n * Get a value from an object multiple levels deep. This is useful for\\n * pulling values from deeply nested objects, such as JSON responses.\\n * Example usage: getValueByKeys(jsonObj, 'foo', 'entries', 3)\\n * @param {?Object} obj An object to get the value from. Can be array-like.\\n * @param {...(string|number|!IArrayLike<number|string>)} var_args A number of\\n * keys (as strings, or numbers, for array-like objects). Can also be\\n * specified as a single array of keys.\\n * @return {*} The resulting value. If, at any point, the value for a key in the\\n * current object is null or undefined, returns undefined.\\n */\\nfunction getValueByKeys(obj, var_args) {\\n const isArrayLike = goog.isArrayLike(var_args);\\n const keys = isArrayLike ?\\n /** @type {!IArrayLike<number|string>} */ (var_args) :\\n arguments;\\n\\n // Start with the 2nd parameter for the variable parameters syntax.\\n for (let i = isArrayLike ? 0 : 1; i < keys.length; i++) {\\n if (obj == null) return undefined;\\n obj = obj[keys[i]];\\n }\\n\\n return obj;\\n}\\n\\n/**\\n * Whether the object/map/hash contains the given key.\\n * @param {?Object} obj The object in which to look for key.\\n * @param {?} key The key for which to check.\\n * @return {boolean} true If the map contains the key.\\n */\\nfunction containsKey(obj, key) {\\n return obj !== null && key in obj;\\n}\\n\\n/**\\n * Whether the object/map/hash contains the given value. This is O(n).\\n * @param {?Object<K,V>} obj The object in which to look for val.\\n * @param {V} val The value for which to check.\\n * @return {boolean} true If the map contains the value.\\n * @template K,V\\n */\\nfunction containsValue(obj, val) {\\n for (const key in obj) {\\n if (obj[key] == val) {\\n return true;\\n }\\n }\\n return false;\\n}\\n\\n/**\\n * Searches an object for an element that satisfies the given condition and\\n * returns its key.\\n * @param {?Object<K,V>} obj The object to search in.\\n * @param {function(this:T,V,string,?Object<K,V>):boolean} f The function to\\n * call for every element. Takes 3 arguments (the value, the key and the\\n * object) and should return a boolean.\\n * @param {T=} thisObj An optional \\\"this\\\" context for the function.\\n * @return {string|undefined} The key of an element for which the function\\n * returns true or undefined if no such element is found.\\n * @template T,K,V\\n */\\nfunction findKey(obj, f, thisObj = undefined) {\\n for (const key in obj) {\\n if (f.call(/** @type {?} */ (thisObj), obj[key], key, obj)) {\\n return key;\\n }\\n }\\n return undefined;\\n}\\n\\n/**\\n * Searches an object for an element that satisfies the given condition and\\n * returns its value.\\n * @param {?Object<K,V>} obj The object to search in.\\n * @param {function(this:T,V,string,?Object<K,V>):boolean} f The function to\\n * call for every element. Takes 3 arguments (the value, the key and the\\n * object) and should return a boolean.\\n * @param {T=} thisObj An optional \\\"this\\\" context for the function.\\n * @return {V} The value of an element for which the function returns true or\\n * undefined if no such element is found.\\n * @template T,K,V\\n */\\nfunction findValue(obj, f, thisObj = undefined) {\\n const key = findKey(obj, f, thisObj);\\n return key && obj[key];\\n}\\n\\n/**\\n * Whether the object/map/hash is empty.\\n * @param {?Object} obj The object to test.\\n * @return {boolean} true if obj is empty.\\n */\\nfunction isEmpty(obj) {\\n for (const key in obj) {\\n return false;\\n }\\n return true;\\n}\\n\\n/**\\n * Removes all key value pairs from the object/map/hash.\\n * @param {?Object} obj The object to clear.\\n * @return {void}\\n */\\nfunction clear(obj) {\\n for (const i in obj) {\\n delete obj[i];\\n }\\n}\\n\\n/**\\n * Removes a key-value pair based on the key.\\n * @param {?Object} obj The object from which to remove the key.\\n * @param {?} key The key to remove.\\n * @return {boolean} Whether an element was removed.\\n */\\nfunction remove(obj, key) {\\n let rv;\\n if (rv = key in /** @type {!Object} */ (obj)) {\\n delete obj[key];\\n }\\n return rv;\\n}\\n\\n/**\\n * Adds a key-value pair to the object. Throws an exception if the key is\\n * already in use. Use set if you want to change an existing pair.\\n * @param {?Object<K,V>} obj The object to which to add the key-value pair.\\n * @param {string} key The key to add.\\n * @param {V} val The value to add.\\n * @return {void}\\n * @template K,V\\n */\\nfunction add(obj, key, val) {\\n if (obj !== null && key in obj) {\\n throw new Error(`The object already contains the key \\\"${key}\\\"`);\\n }\\n set(obj, key, val);\\n}\\n\\n/**\\n * Returns the value for the given key.\\n * @param {?Object<K,V>} obj The object from which to get the value.\\n * @param {string} key The key for which to get the value.\\n * @param {R=} val The value to return if no item is found for the given key\\n * (default is undefined).\\n * @return {V|R|undefined} The value for the given key.\\n * @template K,V,R\\n */\\nfunction get(obj, key, val = undefined) {\\n if (obj !== null && key in obj) {\\n return obj[key];\\n }\\n return val;\\n}\\n\\n/**\\n * Adds a key-value pair to the object/map/hash.\\n * @param {?Object<K,V>} obj The object to which to add the key-value pair.\\n * @param {string} key The key to add.\\n * @param {V} value The value to add.\\n * @template K,V\\n * @return {void}\\n */\\nfunction set(obj, key, value) {\\n obj[key] = value;\\n}\\n\\n/**\\n * Adds a key-value pair to the object/map/hash if it doesn't exist yet.\\n * @param {?Object<K,V>} obj The object to which to add the key-value pair.\\n * @param {string} key The key to add.\\n * @param {V} value The value to add if the key wasn't present.\\n * @return {V} The value of the entry at the end of the function.\\n * @template K,V\\n */\\nfunction setIfUndefined(obj, key, value) {\\n return key in /** @type {!Object} */ (obj) ? obj[key] : (obj[key] = value);\\n}\\n\\n/**\\n * Sets a key and value to an object if the key is not set. The value will be\\n * the return value of the given function. If the key already exists, the\\n * object will not be changed and the function will not be called (the function\\n * will be lazily evaluated -- only called if necessary).\\n * This function is particularly useful when used with an `Object` which is\\n * acting as a cache.\\n * @param {?Object<K,V>} obj The object to which to add the key-value pair.\\n * @param {string} key The key to add.\\n * @param {function():V} f The value to add if the key wasn't present.\\n * @return {V} The value of the entry at the end of the function.\\n * @template K,V\\n */\\nfunction setWithReturnValueIfNotSet(obj, key, f) {\\n if (key in obj) {\\n return obj[key];\\n }\\n\\n const val = f();\\n obj[key] = val;\\n return val;\\n}\\n\\n/**\\n * Compares two objects for equality using === on the values.\\n * @param {!Object<K,V>} a\\n * @param {!Object<K,V>} b\\n * @return {boolean}\\n * @template K,V\\n */\\nfunction equals(a, b) {\\n for (const k in a) {\\n if (!(k in b) || a[k] !== b[k]) {\\n return false;\\n }\\n }\\n for (const k in b) {\\n if (!(k in a)) {\\n return false;\\n }\\n }\\n return true;\\n}\\n\\n/**\\n * Returns a shallow clone of the object.\\n * @param {?Object<K,V>} obj Object to clone.\\n * @return {!Object<K,V>} Clone of the input object.\\n * @template K,V\\n */\\nfunction clone(obj) {\\n const res = {};\\n for (const key in obj) {\\n res[key] = obj[key];\\n }\\n return res;\\n}\\n\\n/**\\n * Clones a value. The input may be an Object, Array, or basic type. Objects and\\n * arrays will be cloned recursively.\\n * WARNINGS:\\n * <code>unsafeClone</code> does not detect reference loops. Objects\\n * that refer to themselves will cause infinite recursion.\\n * <code>unsafeClone</code> is unaware of unique identifiers, and\\n * copies UIDs created by <code>getUid</code> into cloned results.\\n * @param {T} obj The value to clone.\\n * @return {T} A clone of the input value.\\n * @template T\\n */\\nfunction unsafeClone(obj) {\\n if (!obj || typeof obj !== 'object') return obj;\\n if (typeof obj.clone === 'function') return obj.clone();\\n if (typeof Map !== 'undefined' && obj instanceof Map) {\\n return new Map(obj);\\n } else if (typeof Set !== 'undefined' && obj instanceof Set) {\\n return new Set(obj);\\n } else if (obj instanceof Date) {\\n return new Date(obj.getTime());\\n }\\n const clone = Array.isArray(obj) ? [] :\\n typeof ArrayBuffer === 'function' &&\\n typeof ArrayBuffer.isView === 'function' && ArrayBuffer.isView(obj) &&\\n !(obj instanceof DataView) ?\\n new obj.constructor(obj.length) :\\n {};\\n for (const key in obj) {\\n clone[key] = unsafeClone(obj[key]);\\n }\\n return clone;\\n}\\n\\n/**\\n * Returns a new object in which all the keys and values are interchanged\\n * (keys become values and values become keys). If multiple keys map to the\\n * same value, the chosen transposed value is implementation-dependent.\\n * @param {?Object} obj The object to transpose.\\n * @return {!Object} The transposed object.\\n */\\nfunction transpose(obj) {\\n const transposed = {};\\n for (const key in obj) {\\n transposed[obj[key]] = key;\\n }\\n return transposed;\\n}\\n\\n/**\\n * The names of the fields that are defined on Object.prototype.\\n * @type {!Array<string>}\\n */\\nconst PROTOTYPE_FIELDS = [\\n 'constructor',\\n 'hasOwnProperty',\\n 'isPrototypeOf',\\n 'propertyIsEnumerable',\\n 'toLocaleString',\\n 'toString',\\n 'valueOf',\\n];\\n\\n/**\\n * Extends an object with another object.\\n * This operates 'in-place'; it does not create a new Object.\\n * Example:\\n * var o = {};\\n * extend(o, {a: 0, b: 1});\\n * o; // {a: 0, b: 1}\\n * extend(o, {b: 2, c: 3});\\n * o; // {a: 0, b: 2, c: 3}\\n * @param {?Object} target The object to modify. Existing properties will be\\n * overwritten if they are also present in one of the objects in `var_args`.\\n * @param {...(?Object|undefined)} var_args The objects from which values\\n * will be copied.\\n * @return {void}\\n * @deprecated Prefer Object.assign\\n */\\nfunction extend(target, var_args) {\\n let key;\\n let source;\\n for (let i = 1; i < arguments.length; i++) {\\n source = arguments[i];\\n for (key in source) {\\n target[key] = source[key];\\n }\\n\\n // For IE the for-in-loop does not contain any properties that are not\\n // enumerable on the prototype object (for example isPrototypeOf from\\n // Object.prototype) and it will also not include 'replace' on objects that\\n // extend String and change 'replace' (not that it is common for anyone to\\n // extend anything except Object).\\n\\n for (let j = 0; j < PROTOTYPE_FIELDS.length; j++) {\\n key = PROTOTYPE_FIELDS[j];\\n if (Object.prototype.hasOwnProperty.call(source, key)) {\\n target[key] = source[key];\\n }\\n }\\n }\\n}\\n\\n/**\\n * Creates a new object built from the key-value pairs provided as arguments.\\n * @param {...*} var_args If only one argument is provided and it is an array\\n * then this is used as the arguments, otherwise even arguments are used as\\n * the property names and odd arguments are used as the property values.\\n * @return {!Object} The new object.\\n * @throws {!Error} If there are uneven number of arguments or there is only one\\n * non array argument.\\n */\\nfunction create(var_args) {\\n const argLength = arguments.length;\\n if (argLength == 1 && Array.isArray(arguments[0])) {\\n return create.apply(null, arguments[0]);\\n }\\n\\n if (argLength % 2) {\\n throw new Error('Uneven number of arguments');\\n }\\n\\n const rv = {};\\n for (let i = 0; i < argLength; i += 2) {\\n rv[arguments[i]] = arguments[i + 1];\\n }\\n return rv;\\n}\\n\\n/**\\n * Creates a new object where the property names come from the arguments but\\n * the value is always set to true\\n * @param {...*} var_args If only one argument is provided and it is an array\\n * then this is used as the arguments, otherwise the arguments are used as\\n * the property names.\\n * @return {!Object} The new object.\\n */\\nfunction createSet(var_args) {\\n const argLength = arguments.length;\\n if (argLength == 1 && Array.isArray(arguments[0])) {\\n return createSet.apply(null, arguments[0]);\\n }\\n\\n const rv = {};\\n for (let i = 0; i < argLength; i++) {\\n rv[arguments[i]] = true;\\n }\\n return rv;\\n}\\n\\n/**\\n * Creates an immutable view of the underlying object, if the browser\\n * supports immutable objects.\\n * In default mode, writes to this view will fail silently. In strict mode,\\n * they will throw an error.\\n * @param {!Object<K,V>} obj An object.\\n * @return {!Object<K,V>} An immutable view of that object, or the original\\n * object if this browser does not support immutables.\\n * @template K,V\\n */\\nfunction createImmutableView(obj) {\\n let result = obj;\\n if (Object.isFrozen && !Object.isFrozen(obj)) {\\n result = Object.create(obj);\\n Object.freeze(result);\\n }\\n return result;\\n}\\n\\n/**\\n * @param {!Object} obj An object.\\n * @return {boolean} Whether this is an immutable view of the object.\\n */\\nfunction isImmutableView(obj) {\\n return !!Object.isFrozen && Object.isFrozen(obj);\\n}\\n\\n/**\\n * Get all properties names on a given Object regardless of enumerability.\\n * <p> If the browser does not support `Object.getOwnPropertyNames` nor\\n * `Object.getPrototypeOf` then this is equivalent to using\\n * `getKeys`\\n * @param {?Object} obj The object to get the properties of.\\n * @param {boolean=} includeObjectPrototype Whether properties defined on\\n * `Object.prototype` should be included in the result.\\n * @param {boolean=} includeFunctionPrototype Whether properties defined on\\n * `Function.prototype` should be included in the result.\\n * @return {!Array<string>}\\n * @public\\n */\\nfunction getAllPropertyNames(\\n obj, includeObjectPrototype = undefined,\\n includeFunctionPrototype = undefined) {\\n if (!obj) {\\n return [];\\n }\\n\\n // Naively use a for..in loop to get the property names if the browser doesn't\\n // support any other APIs for getting it.\\n if (!Object.getOwnPropertyNames || !Object.getPrototypeOf) {\\n return getKeys(obj);\\n }\\n\\n const visitedSet = {};\\n\\n // Traverse the prototype chain and add all properties to the visited set.\\n let proto = obj;\\n while (proto && (proto !== Object.prototype || !!includeObjectPrototype) &&\\n (proto !== Function.prototype || !!includeFunctionPrototype)) {\\n const names = Object.getOwnPropertyNames(proto);\\n for (let i = 0; i < names.length; i++) {\\n visitedSet[names[i]] = true;\\n }\\n proto = Object.getPrototypeOf(proto);\\n }\\n\\n return getKeys(visitedSet);\\n}\\n\\n/**\\n * Given a ES5 or ES6 class reference, return its super class / super\\n * constructor.\\n * This should be used in rare cases where you need to walk up the inheritance\\n * tree (this is generally a bad idea). But this work with ES5 and ES6 classes,\\n * unlike relying on the superClass_ property.\\n * Note: To start walking up the hierarchy from an instance call this with its\\n * `constructor` property; e.g. `getSuperClass(instance.constructor)`.\\n * @param {function(new: ?)} constructor\\n * @return {?Object}\\n */\\nfunction getSuperClass(constructor) {\\n const proto = Object.getPrototypeOf(constructor.prototype);\\n return proto && proto.constructor;\\n}\\n\\nexports = {\\n add,\\n clear,\\n clone,\\n contains,\\n containsKey,\\n containsValue,\\n create,\\n createImmutableView,\\n createSet,\\n equals,\\n every,\\n extend,\\n filter,\\n findKey,\\n findValue,\\n forEach,\\n get,\\n getAllPropertyNames,\\n getAnyKey,\\n getAnyValue,\\n getCount,\\n getKeys,\\n getSuperClass,\\n getValueByKeys,\\n getValues,\\n isEmpty,\\n isImmutableView,\\n map,\\n remove,\\n set,\\n setIfUndefined,\\n setWithReturnValueIfNotSet,\\n some,\\n transpose,\\n unsafeClone,\\n};\\n\"],\n\"names\":[\"goog\",\"module\",\"declareLegacyNamespace\",\"forEach\",\"obj\",\"f\",\"opt_obj\",\"key\",\"call\",\"filter\",\"res\",\"map\",\"some\",\"every\",\"getCount\",\"rv\",\"getAnyKey\",\"getAnyValue\",\"contains\",\"val\",\"containsValue\",\"getValues\",\"i\",\"getKeys\",\"getValueByKeys\",\"var_args\",\"isArrayLike\",\"keys\",\"arguments\",\"length\",\"undefined\",\"containsKey\",\"findKey\",\"thisObj\",\"findValue\",\"isEmpty\",\"clear\",\"remove\",\"add\",\"Error\",\"set\",\"get\",\"value\",\"setIfUndefined\",\"setWithReturnValueIfNotSet\",\"equals\",\"a\",\"b\",\"k\",\"clone\",\"unsafeClone\",\"Map\",\"Set\",\"Date\",\"getTime\",\"Array\",\"isArray\",\"ArrayBuffer\",\"isView\",\"DataView\",\"constructor\",\"transpose\",\"transposed\",\"PROTOTYPE_FIELDS\",\"extend\",\"target\",\"source\",\"j\",\"Object\",\"prototype\",\"hasOwnProperty\",\"create\",\"argLength\",\"apply\",\"createSet\",\"createImmutableView\",\"result\",\"isFrozen\",\"freeze\",\"isImmutableView\",\"getAllPropertyNames\",\"includeObjectPrototype\",\"includeFunctionPrototype\",\"getOwnPropertyNames\",\"getPrototypeOf\",\"visitedSet\",\"proto\",\"Function\",\"names\",\"getSuperClass\",\"exports\"]\n}\n"] |