create-expo-cljs-app
Version:
Create a react native application with Expo and Shadow-CLJS!
1 lines • 68.2 kB
JavaScript
["^ ","~:resource-id",["~:shadow.build.classpath/resource","goog/object/object.js"],"~:js","goog.provide(\"goog.object\");\ngoog.object.is = function(v, v2) {\n if (v === v2) {\n return v !== 0 || 1 / v === 1 / v2;\n }\n return v !== v && v2 !== v2;\n};\ngoog.object.forEach = function(obj, f, opt_obj) {\n for (const key in obj) {\n f.call(opt_obj, obj[key], key, obj);\n }\n};\ngoog.object.filter = function(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};\ngoog.object.map = function(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};\ngoog.object.some = function(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};\ngoog.object.every = function(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};\ngoog.object.getCount = function(obj) {\n let rv = 0;\n for (const key in obj) {\n rv++;\n }\n return rv;\n};\ngoog.object.getAnyKey = function(obj) {\n for (const key in obj) {\n return key;\n }\n};\ngoog.object.getAnyValue = function(obj) {\n for (const key in obj) {\n return obj[key];\n }\n};\ngoog.object.contains = function(obj, val) {\n return goog.object.containsValue(obj, val);\n};\ngoog.object.getValues = function(obj) {\n const res = [];\n let i = 0;\n for (const key in obj) {\n res[i++] = obj[key];\n }\n return res;\n};\ngoog.object.getKeys = function(obj) {\n const res = [];\n let i = 0;\n for (const key in obj) {\n res[i++] = key;\n }\n return res;\n};\ngoog.object.getValueByKeys = function(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};\ngoog.object.containsKey = function(obj, key) {\n return obj !== null && key in obj;\n};\ngoog.object.containsValue = function(obj, val) {\n for (const key in obj) {\n if (obj[key] == val) {\n return true;\n }\n }\n return false;\n};\ngoog.object.findKey = function(obj, f, opt_this) {\n for (const key in obj) {\n if (f.call(opt_this, obj[key], key, obj)) {\n return key;\n }\n }\n return undefined;\n};\ngoog.object.findValue = function(obj, f, opt_this) {\n const key = goog.object.findKey(obj, f, opt_this);\n return key && obj[key];\n};\ngoog.object.isEmpty = function(obj) {\n for (const key in obj) {\n return false;\n }\n return true;\n};\ngoog.object.clear = function(obj) {\n for (const i in obj) {\n delete obj[i];\n }\n};\ngoog.object.remove = function(obj, key) {\n let rv;\n if (rv = key in obj) {\n delete obj[key];\n }\n return rv;\n};\ngoog.object.add = function(obj, key, val) {\n if (obj !== null && key in obj) {\n throw new Error('The object already contains the key \"' + key + '\"');\n }\n goog.object.set(obj, key, val);\n};\ngoog.object.get = function(obj, key, opt_val) {\n if (obj !== null && key in obj) {\n return obj[key];\n }\n return opt_val;\n};\ngoog.object.set = function(obj, key, value) {\n obj[key] = value;\n};\ngoog.object.setIfUndefined = function(obj, key, value) {\n return key in obj ? obj[key] : obj[key] = value;\n};\ngoog.object.setWithReturnValueIfNotSet = function(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};\ngoog.object.equals = function(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};\ngoog.object.clone = function(obj) {\n const res = {};\n for (const key in obj) {\n res[key] = obj[key];\n }\n return res;\n};\ngoog.object.unsafeClone = function(obj) {\n const type = goog.typeOf(obj);\n if (type == \"object\" || type == \"array\") {\n if (goog.isFunction(obj.clone)) {\n return obj.clone();\n }\n const clone = type == \"array\" ? [] : {};\n for (const key in obj) {\n clone[key] = goog.object.unsafeClone(obj[key]);\n }\n return clone;\n }\n return obj;\n};\ngoog.object.transpose = function(obj) {\n const transposed = {};\n for (const key in obj) {\n transposed[obj[key]] = key;\n }\n return transposed;\n};\ngoog.object.PROTOTYPE_FIELDS_ = [\"constructor\", \"hasOwnProperty\", \"isPrototypeOf\", \"propertyIsEnumerable\", \"toLocaleString\", \"toString\", \"valueOf\"];\ngoog.object.extend = function(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 < goog.object.PROTOTYPE_FIELDS_.length; j++) {\n key = goog.object.PROTOTYPE_FIELDS_[j];\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n};\ngoog.object.create = function(var_args) {\n const argLength = arguments.length;\n if (argLength == 1 && goog.isArray(arguments[0])) {\n return goog.object.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};\ngoog.object.createSet = function(var_args) {\n const argLength = arguments.length;\n if (argLength == 1 && goog.isArray(arguments[0])) {\n return goog.object.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};\ngoog.object.createImmutableView = function(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};\ngoog.object.isImmutableView = function(obj) {\n return !!Object.isFrozen && Object.isFrozen(obj);\n};\ngoog.object.getAllPropertyNames = function(obj, opt_includeObjectPrototype, opt_includeFunctionPrototype) {\n if (!obj) {\n return [];\n }\n if (!Object.getOwnPropertyNames || !Object.getPrototypeOf) {\n return goog.object.getKeys(obj);\n }\n const visitedSet = {};\n let proto = obj;\n while (proto && (proto !== Object.prototype || !!opt_includeObjectPrototype) && (proto !== Function.prototype || !!opt_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 goog.object.getKeys(visitedSet);\n};\ngoog.object.getSuperClass = function(constructor) {\n var proto = Object.getPrototypeOf(constructor.prototype);\n return proto && proto.constructor;\n};\n","~:source","// Copyright 2006 The Closure Library Authors. All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS-IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n/**\n * @fileoverview Utilities for manipulating objects/maps/hashes.\n * @author arv@google.com (Erik Arvidsson)\n */\n\ngoog.provide('goog.object');\n\n\n/**\n * Whether two values are not observably distinguishable. This\n * correctly detects that 0 is not the same as -0 and two NaNs are\n * practically equivalent.\n *\n * The implementation is as suggested by harmony:egal proposal.\n *\n * @param {*} v The first value to compare.\n * @param {*} v2 The second value to compare.\n * @return {boolean} Whether two values are not observably distinguishable.\n * @see http://wiki.ecmascript.org/doku.php?id=harmony:egal\n */\ngoog.object.is = function(v, v2) {\n if (v === v2) {\n // 0 === -0, but they are not identical.\n // We need the cast because the compiler requires that v2 is a\n // number (although 1/v2 works with non-number). We cast to ? to\n // stop the compiler from type-checking this statement.\n return v !== 0 || 1 / v === 1 / /** @type {?} */ (v2);\n }\n\n // NaN is non-reflexive: NaN !== NaN, although they are identical.\n return v !== v && v2 !== v2;\n};\n\n\n/**\n * Calls a function for each element in an object/map/hash.\n *\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\n * for every element. This function takes 3 arguments (the value, the\n * key and the object) and the return value is ignored.\n * @param {T=} opt_obj This is used as the 'this' object within f.\n * @template T,K,V\n */\ngoog.object.forEach = function(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/**\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 *\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\n * for every element. This\n * function takes 3 arguments (the value, the key and the object)\n * 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\n * element is not 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 */\ngoog.object.filter = function(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/**\n * For every element in an object/map/hash calls a function and inserts the\n * result into a new object.\n *\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\n * for every element. This function\n * takes 3 arguments (the value, the key and the object)\n * and should return something. The result will be inserted\n * into a 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 */\ngoog.object.map = function(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/**\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 *\n * @param {Object<K,V>} obj The object to check.\n * @param {function(this:T,V,?,Object<K,V>):boolean} f The function to\n * call for every element. This function\n * takes 3 arguments (the value, the key and the object) and should\n * 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 */\ngoog.object.some = function(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/**\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 *\n * @param {Object<K,V>} obj The object to check.\n * @param {?function(this:T,V,?,Object<K,V>):boolean} f The function to\n * call for every element. This function\n * takes 3 arguments (the value, the key and the object) and should\n * 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 */\ngoog.object.every = function(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/**\n * Returns the number of key-value pairs in the object map.\n *\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 */\ngoog.object.getCount = function(obj) {\n let rv = 0;\n for (const key in obj) {\n rv++;\n }\n return rv;\n};\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 *\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 */\ngoog.object.getAnyKey = function(obj) {\n for (const key in obj) {\n return key;\n }\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 *\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 */\ngoog.object.getAnyValue = function(obj) {\n for (const key in obj) {\n return obj[key];\n }\n};\n\n\n/**\n * Whether the object/hash/map contains the given object as a value.\n * An alias for goog.object.containsValue(obj, val).\n *\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 */\ngoog.object.contains = function(obj, val) {\n return goog.object.containsValue(obj, val);\n};\n\n\n/**\n * Returns the values of the object/map/hash.\n *\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 */\ngoog.object.getValues = function(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/**\n * Returns the keys of the object/map/hash.\n *\n * @param {Object} obj The object from which to get the keys.\n * @return {!Array<string>} Array of property keys.\n */\ngoog.object.getKeys = function(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/**\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 *\n * @param {!Object} obj An object to get the value from. Can be array-like.\n * @param {...(string|number|!IArrayLike<number|string>)}\n * var_args A number of keys\n * (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\n * in the current object is null or undefined, returns undefined.\n */\ngoog.object.getValueByKeys = function(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/**\n * Whether the object/map/hash contains the given key.\n *\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 */\ngoog.object.containsKey = function(obj, key) {\n return obj !== null && key in obj;\n};\n\n\n/**\n * Whether the object/map/hash contains the given value. This is O(n).\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 */\ngoog.object.containsValue = function(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/**\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\n * function to call for every element. Takes 3 arguments (the value,\n * the key and the object) and should return a boolean.\n * @param {T=} opt_this 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 */\ngoog.object.findKey = function(obj, f, opt_this) {\n for (const key in obj) {\n if (f.call(/** @type {?} */ (opt_this), obj[key], key, obj)) {\n return key;\n }\n }\n return undefined;\n};\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\n * to call for every element. Takes 3 arguments (the value, the key\n * and the object) and should return a boolean.\n * @param {T=} opt_this 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 */\ngoog.object.findValue = function(obj, f, opt_this) {\n const key = goog.object.findKey(obj, f, opt_this);\n return key && obj[key];\n};\n\n\n/**\n * Whether the object/map/hash is empty.\n *\n * @param {Object} obj The object to test.\n * @return {boolean} true if obj is empty.\n */\ngoog.object.isEmpty = function(obj) {\n for (const key in obj) {\n return false;\n }\n return true;\n};\n\n\n/**\n * Removes all key value pairs from the object/map/hash.\n *\n * @param {Object} obj The object to clear.\n */\ngoog.object.clear = function(obj) {\n for (const i in obj) {\n delete obj[i];\n }\n};\n\n\n/**\n * Removes a key-value pair based on the key.\n *\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 */\ngoog.object.remove = function(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/**\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 *\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 * @template K,V\n */\ngoog.object.add = function(obj, key, val) {\n if (obj !== null && key in obj) {\n throw new Error('The object already contains the key \"' + key + '\"');\n }\n goog.object.set(obj, key, val);\n};\n\n\n/**\n * Returns the value for the given key.\n *\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=} opt_val The value to return if no item is found for the given\n * key (default is undefined).\n * @return {V|R|undefined} The value for the given key.\n * @template K,V,R\n */\ngoog.object.get = function(obj, key, opt_val) {\n if (obj !== null && key in obj) {\n return obj[key];\n }\n return opt_val;\n};\n\n\n/**\n * Adds a key-value pair to the object/map/hash.\n *\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 */\ngoog.object.set = function(obj, key, value) {\n obj[key] = value;\n};\n\n\n/**\n * Adds a key-value pair to the object/map/hash if it doesn't exist yet.\n *\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 */\ngoog.object.setIfUndefined = function(obj, key, value) {\n return key in /** @type {!Object} */ (obj) ? obj[key] : (obj[key] = value);\n};\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 *\n * This function is particularly useful when used with an `Object` which is\n * acting as a cache.\n *\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 */\ngoog.object.setWithReturnValueIfNotSet = function(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/**\n * Compares two objects for equality using === on the values.\n *\n * @param {!Object<K,V>} a\n * @param {!Object<K,V>} b\n * @return {boolean}\n * @template K,V\n */\ngoog.object.equals = function(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/**\n * Returns a shallow clone of the object.\n *\n * @param {Object<K,V>} obj Object to clone.\n * @return {!Object<K,V>} Clone of the input object.\n * @template K,V\n */\ngoog.object.clone = function(obj) {\n // We cannot use the prototype trick because a lot of methods depend on where\n // the actual key is set.\n\n const res = {};\n for (const key in obj) {\n res[key] = obj[key];\n }\n return res;\n // We could also use goog.mixin but I wanted this to be independent from that.\n};\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 *\n * WARNINGS:\n * <code>goog.object.unsafeClone</code> does not detect reference loops. Objects\n * that refer to themselves will cause infinite recursion.\n *\n * <code>goog.object.unsafeClone</code> is unaware of unique identifiers, and\n * copies UIDs created by <code>getUid</code> into cloned results.\n *\n * @param {T} obj The value to clone.\n * @return {T} A clone of the input value.\n * @template T\n */\ngoog.object.unsafeClone = function(obj) {\n const type = goog.typeOf(obj);\n if (type == 'object' || type == 'array') {\n if (goog.isFunction(obj.clone)) {\n return obj.clone();\n }\n const clone = type == 'array' ? [] : {};\n for (const key in obj) {\n clone[key] = goog.object.unsafeClone(obj[key]);\n }\n return clone;\n }\n\n return obj;\n};\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 *\n * @param {Object} obj The object to transpose.\n * @return {!Object} The transposed object.\n */\ngoog.object.transpose = function(obj) {\n const transposed = {};\n for (const key in obj) {\n transposed[obj[key]] = key;\n }\n return transposed;\n};\n\n\n/**\n * The names of the fields that are defined on Object.prototype.\n * @type {Array<string>}\n * @private\n */\ngoog.object.PROTOTYPE_FIELDS_ = [\n 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',\n 'toLocaleString', 'toString', 'valueOf'\n];\n\n\n/**\n * Extends an object with another object.\n * This operates 'in-place'; it does not create a new Object.\n *\n * Example:\n * var o = {};\n * goog.object.extend(o, {a: 0, b: 1});\n * o; // {a: 0, b: 1}\n * goog.object.extend(o, {b: 2, c: 3});\n * o; // {a: 0, b: 2, c: 3}\n *\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\n * `var_args`.\n * @param {...(Object|null|undefined)} var_args The objects from which values\n * will be copied.\n * @deprecated Prefer Object.assign\n */\ngoog.object.extend = function(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 < goog.object.PROTOTYPE_FIELDS_.length; j++) {\n key = goog.object.PROTOTYPE_FIELDS_[j];\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\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 */\ngoog.object.create = function(var_args) {\n const argLength = arguments.length;\n if (argLength == 1 && goog.isArray(arguments[0])) {\n return goog.object.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/**\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\n * as the property names.\n * @return {!Object} The new object.\n */\ngoog.object.createSet = function(var_args) {\n const argLength = arguments.length;\n if (argLength == 1 && goog.isArray(arguments[0])) {\n return goog.object.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/**\n * Creates an immutable view of the underlying object, if the browser\n * supports immutable objects.\n *\n * In default mode, writes to this view will fail silently. In strict mode,\n * they will throw an error.\n *\n * @param {!Object<K,V>} obj An object.\n * @return {!Object<K,V>} An immutable view of that object, or the\n * original object if this browser does not support immutables.\n * @template K,V\n */\ngoog.object.createImmutableView = function(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/**\n * @param {!Object} obj An object.\n * @return {boolean} Whether this is an immutable view of the object.\n */\ngoog.object.isImmutableView = function(obj) {\n return !!Object.isFrozen && Object.isFrozen(obj);\n};\n\n\n/**\n * Get all properties names on a given Object regardless of enumerability.\n *\n * <p> If the browser does not support `Object.getOwnPropertyNames` nor\n * `Object.getPrototypeOf` then this is equivalent to using\n * `goog.object.getKeys`\n *\n * @param {?Object} obj The object to get the properties of.\n * @param {boolean=} opt_includeObjectPrototype Whether properties defined on\n * `Object.prototype` should be included in the result.\n * @param {boolean=} opt_includeFunctionPrototype Whether properties defined on\n * `Function.prototype` should be included in the result.\n * @return {!Array<string>}\n * @public\n */\ngoog.object.getAllPropertyNames = function(\n obj, opt_includeObjectPrototype, opt_includeFunctionPrototype) {\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 goog.object.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 &&\n (proto !== Object.prototype || !!opt_includeObjectPrototype) &&\n (proto !== Function.prototype || !!opt_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 goog.object.getKeys(visitedSet);\n};\n\n\n/**\n * Given a ES5 or ES6 class reference, return its super class / super\n * constructor.\n *\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 *\n * Note: To start walking up the hierarchy from an instance call this with its\n * `constructor` property; e.g. `getSuperClass(instance.constructor)`.\n *\n * @param {function(new: ?)} constructor\n * @return {?Object}\n */\ngoog.object.getSuperClass = function(constructor) {\n var proto = Object.getPrototypeOf(constructor.prototype);\n return proto && proto.constructor;\n};\n","~:compiled-at",1613924115744,"~:source-map-json","{\n\"version\":3,\n\"file\":\"goog.object.object.js\",\n\"lineCount\":275,\n\"mappings\":\"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\",\n\"sources\":[\"goog/object/object.js\"],\n\"sourcesContent\":[\"// Copyright 2006 The Closure Library Authors. All Rights Reserved.\\n//\\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n// you may not use this file except in compliance with the License.\\n// You may obtain a copy of the License at\\n//\\n// http://www.apache.org/licenses/LICENSE-2.0\\n//\\n// Unless required by applicable law or agreed to in writing, software\\n// distributed under the License is distributed on an \\\"AS-IS\\\" BASIS,\\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n// See the License for the specific language governing permissions and\\n// limitations under the License.\\n\\n/**\\n * @fileoverview Utilities for manipulating objects/maps/hashes.\\n * @author arv@google.com (Erik Arvidsson)\\n */\\n\\ngoog.provide('goog.object');\\n\\n\\n/**\\n * Whether two values are not observably distinguishable. This\\n * correctly detects that 0 is not the same as -0 and two NaNs are\\n * practically equivalent.\\n *\\n * The implementation is as suggested by harmony:egal proposal.\\n *\\n * @param {*} v The first value to compare.\\n * @param {*} v2 The second value to compare.\\n * @return {boolean} Whether two values are not observably distinguishable.\\n * @see http://wiki.ecmascript.org/doku.php?id=harmony:egal\\n */\\ngoog.object.is = function(v, v2) {\\n if (v === v2) {\\n // 0 === -0, but they are not identical.\\n // We need the cast because the compiler requires that v2 is a\\n // number (although 1/v2 works with non-number). We cast to ? to\\n // stop the compiler from type-checking this statement.\\n return v !== 0 || 1 / v === 1 / /** @type {?} */ (v2);\\n }\\n\\n // NaN is non-reflexive: NaN !== NaN, although they are identical.\\n return v !== v && v2 !== v2;\\n};\\n\\n\\n/**\\n * Calls a function for each element in an object/map/hash.\\n *\\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\\n * for every element. This function takes 3 arguments (the value, the\\n * key and the object) and the return value is ignored.\\n * @param {T=} opt_obj This is used as the 'this' object within f.\\n * @template T,K,V\\n */\\ngoog.object.forEach = function(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/**\\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 *\\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\\n * for every element. This\\n * function takes 3 arguments (the value, the key and the object)\\n * 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\\n * element is not 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 */\\ngoog.object.filter = function(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/**\\n * For every element in an object/map/hash calls a function and inserts the\\n * result into a new object.\\n *\\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\\n * for every element. This function\\n * takes 3 arguments (the value, the key and the object)\\n * and should return something. The result will be inserted\\n * into a 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 */\\ngoog.object.map = function(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/**\\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 *\\n * @param {Object<K,V>} obj The object to check.\\n * @param {function(this:T,V,?,Object<K,V>):boolean} f The function to\\n * call for every element. This function\\n * takes 3 arguments (the value, the key and the object) and should\\n * 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 */\\ngoog.object.some = function(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/**\\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 *\\n * @param {Object<K,V>} obj The object to check.\\n * @param {?function(this:T,V,?,Object<K,V>):boolean} f The function to\\n * call for every element. This function\\n * takes 3 arguments (the value, the key and the object) and should\\n * 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 */\\ngoog.object.every = function(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/**\\n * Returns the number of key-value pairs in the object map.\\n *\\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 */\\ngoog.object.getCount = function(obj) {\\n let rv = 0;\\n for (const key in obj) {\\n rv++;\\n }\\n return rv;\\n};\\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 *\\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 */\\ngoog.object.getAnyKey = function(obj) {\\n for (const key in obj) {\\n return key;\\n }\\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 *\\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 */\\ngoog.object.getAnyValue = function(obj) {\\n for (const key in obj) {\\n return obj[key];\\n }\\n};\\n\\n\\n/**\\n * Whether the object/hash/map contains the given object as a value.\\n * An alias for goog.object.containsValue(obj, val).\\n *\\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 */\\ngoog.object.contains = function(obj, val) {\\n return goog.object.containsValue(obj, val);\\n};\\n\\n\\n/**\\n * Returns the values of the object/map/hash.\\n *\\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 */\\ngoog.object.getValues = function(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/**\\n * Returns the keys of the object/map/hash.\\n *\\n * @param {Object} obj The object from which to get the keys.\\n * @return {!Array<string>} Array of property keys.\\n */\\ngoog.object.getKeys = function(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/**\\n * Get a value from an object multiple levels deep. This is useful for\\n * pulling values from deeply nested objec