UNPKG

lodown-trishalianza

Version:

An npm functional programming library project

1 lines 26.9 kB
{"changed":true,"filter":false,"title":"index.js","tooltip":"/index.js","value":"// This makes the arguments variable behave the way we want it to and a few\n// other things. For more info:\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode\n'use strict';\n\nvar _ = {};\n\n\n/**\n* START OF OUR LIBRARY!\n* Implement each function below it's instructions\n*/\n\n/** _.typeOf\n* Arguments:\n* 1) Any value\n* Objectives:\n* 1) Return the type of <value> as a string\n* Types are one of:\n* - \"string\"\n* - \"array\"\n* - \"object\"\n* - \"undefined\"\n* - \"number\"\n* - \"boolean\"\n* - \"null\"\n* - \"function\"\n* Examples:\n* _.typeOf(134) -> \"number\"\n* _.typeOf(\"javascript\") -> \"string\"\n* _.typeOf([1,2,3]) -> \"array\"\n*/\n_.typeOf = function(value) {\n \n if(Array.isArray(value)) {\n return 'array';\n }else if(value === null) {\n return 'null';\n }else{\n return typeof value;\n }\n};\n\n/** _.first\n* Arguments:\n* 1) An array\n* 2) A number\n* Objectives:\n* 1) If <array> is not an array, return []\n* 2) If <number> is not given or not a number, return just the first element in <array>.\n* 3) Otherwise, return the first <number> items of <array>\n* Edge Cases:\n* 1) What if <number> is negative?\n* 2) What if <number> is greater than <array>.length?\n* Examples:\n* _.first(\"ponies\", 1) -> []\n* _.first([\"a\", \"b\", \"c\"], \"ponies\") -> \"a\"\n* _.first([\"a\", \"b\", \"c\"], 1) -> \"a\"\n* _.first([\"a\", \"b\", \"c\"], 2) -> [\"a\", \"b\"]\n*/\n_.first = function(array, number) {\n var arr = [];\n if(number > array.length) {\n number = array.length;\n }\n \n if(_.typeOf(number) === 'number') {\n if(Array.isArray(array)) {\n for(var i = 0; i <= number -1; i++){\n arr.push(array[i]);\n \n }\n } else { arr = array[0];\n } \n return arr;\n}\n\n};\n\n/** _.last\n* Arguments:\n* 1) An array\n* 2) A number\n* Objectives:\n* 1) If <array> is not an array, return []\n* 2) If <number> is not given or not a number, return just the last element in <array>.\n* 3) Otherwise, return the last <number> items of <array>\n* Edge Cases:\n* 1) What if <number> is negative?\n* 2) What if <number> is greater than <array>.length?\n* Examples:\n* _.last(\"ponies\", 2) -> []\n* _.last([\"a\", \"b\", \"c\"], \"ponies\") -> \"c\"\n* _.last([\"a\", \"b\", \"c\"], 1) -> \"c\"\n* _.last([\"a\", \"b\", \"c\"], 2) -> [\"b\", \"c\"]\n*/\n_.last = function(array, number) {\n var arr = [];\n if(number > array.length) {\n number = array.length;\n }\n if (Array.isArray(array) === true) {\n if (_.typeOf(number) === 'number') {\n for(var i = array.length - number; i < array.length; i++){\n arr.push(array[i]);\n }\n }else{\n return array[array.length -1];\n }\n }else{\n return [];\n }\n return arr;\n };\n\n\n/** _.indexOf\n* Arguments:\n* 1) An array\n* 2) A value\n* Objectives:\n* 1) Return the index of <array> that is the first occurrance of <value>\n* 2) Return -1 if <value> is not in <array>\n* 3) Do not use [].indexOf()!\n* Edge Cases:\n* 1) What if <array> has multiple occurances of val?\n* 2) What if <val> isn't in <array>?\n* Examples:\n* _.indexOf([\"a\",\"b\",\"c\"], \"c\") -> 2\n* _.indexOf([\"a\",\"b\",\"c\"], \"d\") -> -1\n*/\n_.indexOf = function(array, value) {\n for(var i = 0; i < array.length; i++){\n if(array[i] === value) {\n return i;\n }\n }\n \n return -1;\n};\n\n/** _.contains\n* Arguments:\n* 1) An array\n* 2) A value\n* Objectives:\n* 1) Return true if <array> contains <value>\n* 2) Return false otherwise\n* 3) You must use the ternary operator in your implementation.\n* Edge Cases:\n* 1) did you use === ?\n* 2) what if no <value> is given?\n* Examples:\n* _.contains([1,\"two\", 3.14], \"two\") -> true\n*/\n_.contains = function(array, value) {\n for(var i = 0; i < array.length; i++) {\n if(value === array[i]) {\n return true;\n }\n }\n return false;\n};\n\n/** _.each\n* Arguments:\n* 1) A collection\n* 2) A function\n* Objectives:\n* 1) if <collection> is an array, call <function> once for each element\n* with the arguments:\n* the element, it's index, <collection>\n* 2) if <collection> is an object, call <function> once for each property\n* with the arguments:\n* the property's value, it's key, <collection>\n* Examples:\n* _.each([\"a\",\"b\",\"c\"], function(e,i,a){ console.log(e)});\n* -> should log \"a\" \"b\" \"c\" to the console\n*/\n_.each = function(collection, funct) {\n if(typeof collection === 'object') {\n for (var entry in collection) {\n funct(collection[entry], entry, collection);\n }\n }\nreturn collection;\n};\n\n\n/** _.filter\n* Arguments:\n* 1) An array\n* 2) A function\n* Objectives:\n* 1) call <function> for each element in <array> passing the arguments:\n* the element, it's index, <array>\n* 2) return a new array of elements for which calling <function> returned true\n* Edge Cases:\n* 1) What if <function> returns something other than true or false?\n* Examples:\n* _.filter([1,2,3,4,5], function(x){return x%2 === 0}) -> [2,4]\n* Extra Credit:\n* use _.each in your implementation\n*/\n_.filter = function(array, funct) {\n var arr = [];\n for(var i = 0; i < array.length; i++) {\n if(funct(array[i], i, array)) {\n arr.push(array[i]);\n }\n }\n};\n \n\n/** _.map\n* Arguments:\n* 1) A collection\n* 2) a function\n* Objectives:\n* 1) call <function> for each element in <collection> passing the arguments:\n* if <collection> is an array:\n* the element, it's index, <collection>\n* if <collection> is an object:\n* the value, it's key, <collection>\n* 2) save the return value of each <function> call in a new array\n* 3) return the new array\n* Examples:\n* _.map([1,2,3,4], function(e){return e * 2}) -> [2,4,6,8]\n*/\n_.map = function(collection, funct) {\n var array = [];\n if(Array.isArray(collection)){\n for(var i = 0; i < collection.length; i++) {\n array.push(funct(collection[i], i, collection));\n }\n } else if(_.typeOf(collection) === 'object'){ \n for(var key in collection) {\n array.push(funct(collection[key], key, collection));\n }\n }\n \n return array;\n};\n\n\n/** _.reject\n* Arguments:\n* 1) An array\n* 2) A function\n* Objectives:\n* 1) call <function> for each element in <array> passing the arguments:\n* the element, it's index, <array>\n* 2) return a new array of elements for which calling <function> returned false\n* 3) This is the logical inverse if _.filter(), you must use _.filter() in your implementation\n* Examples:\n* _.reject([1,2,3,4,5], function(e){return e%2 === 0}) -> [1,3,5]\n*/\n\n_.reject = function(array, funct) {\n var newArray= [];\n var arr = _.filter(array, funct);\n for(var i = 0; i < array.length; i++) {\n if(arr.includes(array[i]) === false) {\n newArray.push(array[i]);\n }\n }\n \n return newArray;\n};\n\n\n/** _.partition\n* Arguments:\n* 1) An array\n* 2) A function\n* Objectives:\n* 1) Call <function> for each element in <array> passing it the arguments:\n* element, key, <array>\n* 2) Return an array that is made up of 2 sub arrays:\n* 0) An array that contains all the values for which <function> returned something truthy\n* 1) An array that contains all the values for which <function> returned something falsy\n* Edge Cases:\n* 1) This is going to return an array of arrays.\n* Examples:\n* _.partition([1,2,3,4,5], function(element,index,arr){\n* return element % 2 === 0;\n* }); -> [[2,4],[1,3,5]]\n}\n*/\n\n_.partition = function(array, funct) {\n return[_.filter(array, funct), _.reject(array, funct)];\n};\n\n\n/** _.every\n* Arguments:\n* 1) A collection\n* 2) A function\n* Objectives:\n* 1) Call <function> for every element of <collection> with the paramaters:\n* if <collection> is an array:\n* current element, it's index, <collection>\n* if <collection> is an object:\n* current value, current key, <collection>\n* 2) If the return value of calling <function> for every element is true, return true\n* 3) If even one of them returns false, return false\n* 4) If <function> is not provided, return true if every element is truthy, otherwise return false\n* Edge Cases:\n* 1) what if <function> doesn't return a boolean\n* 2) What if <function> is not given?\n* Examples:\n* _.every([2,4,6], function(e){return e % 2 === 0}) -> true\n* _.every([1,2,3], function(e){return e % 2 === 0}) -> false\n*/\n_.every = function (collection, funct) {\n if (funct === undefined) {\n funct = function (value, entry, collection) {\n return value;\n };\n } \n let res = true;\n let gather = function (value, entry, collection) {\n if(funct(value, entry, collection) === false) {\n res = false;\n }\n };\n \n _.each(collection, gather);\n return res;\n};\n\n/** _.some\n* Arguments:\n* 1) A collection\n* 2) A function\n* Objectives:\n* 1) Call <function> for every element of <collection> with the paramaters:\n* if <collection> is an array:\n* current element, it's index, <collection>\n* if <collection> is an object:\n* current value, current key, <collection>\n* 2) If the return value of calling <function> is true for at least one element, return true\n* 3) If it is false for all elements, return false\n* 4) If <function> is not provided return true if at least one element is truthy, otherwise return false\n* Edge Cases:\n* 1) what if <function> doesn't return a boolean\n* 2) What if <function> is not given?\n* Examples:\n* _.some([1,3,5], function(e){return e % 2 === 0}) -> false\n* _.some([1,2,3], function(e){return e % 2 === 0}) -> true\n*/\n\n_.some = function(collection, funct) {\n if(funct === undefined) {\n funct = function(value, entry, collection) {\n return value;\n };\n }\n \n let res = false;\n let gather = function(value, entry, collection) {\n if(funct(value, entry, collection)) {\n \n res = true;\n }\n };\n \n _.each(collection, gather);\n};\n\n\n/** _.pluck\n* Arguments:\n* 1) An array of objects\n* 2) A property\n* Objectives:\n* 1) Return an array containing the value of <property> for every element in <array>\n* 2) You must use _.map() in your implementation.\n* Examples:\n* _.pluck([{a: \"one\"}, {a: \"two\"}], \"a\") -> [\"one\", \"two\"]\n*/\n_.pluck = function(array, property) {\n var arr = [];\n arr = _.map(array, check);\n \n function check(value, i) {\n return array[i][property];\n }\nreturn arr;\n};\n\n//////////////////////////////////////////////////////////////////////\n// DON'T REMOVE THIS CODE ////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////\n\nif((typeof process !== 'undefined') &&\n (typeof process.versions.node !== 'undefined')) {\n // here, export any references you need for tests //\n module.exports = _;\n module.exports.identity = _.identity;\nmodule.exports.typeOf = _.typeOf;\nmodule.exports.first = _.first;\nmodule.exports.last = _.last;\nmodule.exports.indexOf = _.indexOf;\nmodule.exports.contains = _.contains;\nmodule.exports.each = _.each;\nmodule.exports.unique = _.unique;\nmodule.exports.filter = _.filter;\nmodule.exports.reject = _.reject;\nmodule.exports.partition = _.partition;\nmodule.exports.map = _.map;\nmodule.exports.pluck = _.pluck;\nmodule.exports.every = _.every;\nmodule.exports.some = _.some;\nmodule.exports.reduce = _.reduce;\nmodule.exports.extend = _.extend;\n}\n","undoManager":{"mark":-2,"position":3,"stack":[[{"start":{"row":23,"column":27},"end":{"row":24,"column":0},"action":"insert","lines":["",""],"id":3},{"start":{"row":24,"column":0},"end":{"row":25,"column":0},"action":"insert","lines":["",""]}],[{"start":{"row":0,"column":0},"end":{"row":26,"column":0},"action":"remove","lines":["'use strict';","","// YOU KNOW WHAT TO DO //","","/**"," * each: Designed to loop over a collection, Array or Object, and applies the "," * action Function to each value in the collection."," * "," * @param {Array or Object} collection: The collection over which to iterate."," * @param {Function} action: The Function to be applied to each value in the "," * collection"," */","function each(collection, action) {"," if(Array.isArray(collection)) {"," for(var i = 0; i < collection.length; i++) {"," action(collection[i], i, collection);"," }"," } else {"," for (var key in collection) {"," action(collection[key], key, collection);"," }"," }","}","module.exports.each = each;","","",""],"id":5},{"start":{"row":0,"column":0},"end":{"row":401,"column":0},"action":"insert","lines":["// This makes the arguments variable behave the way we want it to and a few","// other things. For more info:","// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode","'use strict';","","var _ = {};","","","/**","* START OF OUR LIBRARY!","* Implement each function below it's instructions","*/","","/** _.typeOf","* Arguments:","* 1) Any value","* Objectives:","* 1) Return the type of <value> as a string","* Types are one of:","* - \"string\"","* - \"array\"","* - \"object\"","* - \"undefined\"","* - \"number\"","* - \"boolean\"","* - \"null\"","* - \"function\"","* Examples:","* _.typeOf(134) -> \"number\"","* _.typeOf(\"javascript\") -> \"string\"","* _.typeOf([1,2,3]) -> \"array\"","*/","_.typeOf = function(value) {"," "," if(Array.isArray(value)) {"," return 'array';"," }else if(value === null) {"," return 'null';"," }else{"," return typeof value;"," }","};","","/** _.first","* Arguments:","* 1) An array","* 2) A number","* Objectives:","* 1) If <array> is not an array, return []","* 2) If <number> is not given or not a number, return just the first element in <array>.","* 3) Otherwise, return the first <number> items of <array>","* Edge Cases:","* 1) What if <number> is negative?","* 2) What if <number> is greater than <array>.length?","* Examples:","* _.first(\"ponies\", 1) -> []","* _.first([\"a\", \"b\", \"c\"], \"ponies\") -> \"a\"","* _.first([\"a\", \"b\", \"c\"], 1) -> \"a\"","* _.first([\"a\", \"b\", \"c\"], 2) -> [\"a\", \"b\"]","*/","_.first = function(array, number) {"," var arr = [];"," if(number > array.length) {"," number = array.length;"," }"," "," if(_.typeOf(number) === 'number') {"," if(Array.isArray(array)) {"," for(var i = 0; i <= number -1; i++){"," arr.push(array[i]);"," "," }"," } else { arr = array[0];"," } "," return arr;","}","","};","","/** _.last","* Arguments:","* 1) An array","* 2) A number","* Objectives:","* 1) If <array> is not an array, return []","* 2) If <number> is not given or not a number, return just the last element in <array>.","* 3) Otherwise, return the last <number> items of <array>","* Edge Cases:","* 1) What if <number> is negative?","* 2) What if <number> is greater than <array>.length?","* Examples:","* _.last(\"ponies\", 2) -> []","* _.last([\"a\", \"b\", \"c\"], \"ponies\") -> \"c\"","* _.last([\"a\", \"b\", \"c\"], 1) -> \"c\"","* _.last([\"a\", \"b\", \"c\"], 2) -> [\"b\", \"c\"]","*/","_.last = function(array, number) {"," var arr = [];"," if(number > array.length) {"," number = array.length;"," }"," if (Array.isArray(array) === true) {"," if (_.typeOf(number) === 'number') {"," for(var i = array.length - number; i < array.length; i++){"," arr.push(array[i]);"," }"," }else{"," return array[array.length -1];"," }"," }else{"," return [];"," }"," return arr;"," };","","","/** _.indexOf","* Arguments:","* 1) An array","* 2) A value","* Objectives:","* 1) Return the index of <array> that is the first occurrance of <value>","* 2) Return -1 if <value> is not in <array>","* 3) Do not use [].indexOf()!","* Edge Cases:","* 1) What if <array> has multiple occurances of val?","* 2) What if <val> isn't in <array>?","* Examples:","* _.indexOf([\"a\",\"b\",\"c\"], \"c\") -> 2","* _.indexOf([\"a\",\"b\",\"c\"], \"d\") -> -1","*/","_.indexOf = function(array, value) {"," for(var i = 0; i < array.length; i++){"," if(array[i] === value) {"," return i;"," }"," }"," "," return -1;","};","","/** _.contains","* Arguments:","* 1) An array","* 2) A value","* Objectives:","* 1) Return true if <array> contains <value>","* 2) Return false otherwise","* 3) You must use the ternary operator in your implementation.","* Edge Cases:","* 1) did you use === ?","* 2) what if no <value> is given?","* Examples:","* _.contains([1,\"two\", 3.14], \"two\") -> true","*/","_.contains = function(array, value) {"," for(var i = 0; i < array.length; i++) {"," if(value === array[i]) {"," return true;"," }"," }"," return false;","};","","/** _.each","* Arguments:","* 1) A collection","* 2) A function","* Objectives:","* 1) if <collection> is an array, call <function> once for each element","* with the arguments:","* the element, it's index, <collection>","* 2) if <collection> is an object, call <function> once for each property","* with the arguments:","* the property's value, it's key, <collection>","* Examples:","* _.each([\"a\",\"b\",\"c\"], function(e,i,a){ console.log(e)});","* -> should log \"a\" \"b\" \"c\" to the console","*/","_.each = function(collection, funct) {"," if(typeof collection === 'object') {"," for (var entry in collection) {"," funct(collection[entry], entry, collection);"," }"," }","return collection;","};","","","/** _.filter","* Arguments:","* 1) An array","* 2) A function","* Objectives:","* 1) call <function> for each element in <array> passing the arguments:","* the element, it's index, <array>","* 2) return a new array of elements for which calling <function> returned true","* Edge Cases:","* 1) What if <function> returns something other than true or false?","* Examples:","* _.filter([1,2,3,4,5], function(x){return x%2 === 0}) -> [2,4]","* Extra Credit:","* use _.each in your implementation","*/","_.filter = function(array, funct) {"," var arr = [];"," for(var i = 0; i < array.length; i++) {"," if(funct(array[i], i, array)) {"," arr.push(array[i]);"," }"," }","};"," ","","/** _.map","* Arguments:","* 1) A collection","* 2) a function","* Objectives:","* 1) call <function> for each element in <collection> passing the arguments:","* if <collection> is an array:","* the element, it's index, <collection>","* if <collection> is an object:","* the value, it's key, <collection>","* 2) save the return value of each <function> call in a new array","* 3) return the new array","* Examples:","* _.map([1,2,3,4], function(e){return e * 2}) -> [2,4,6,8]","*/","_.map = function(collection, funct) {"," var array = [];"," if(Array.isArray(collection)){"," for(var i = 0; i < collection.length; i++) {"," array.push(funct(collection[i], i, collection));"," }"," } else if(_.typeOf(collection) === 'object'){ "," for(var key in collection) {"," array.push(funct(collection[key], key, collection));"," }"," }"," "," return array;","};","","","/** _.reject","* Arguments:","* 1) An array","* 2) A function","* Objectives:","* 1) call <function> for each element in <array> passing the arguments:","* the element, it's index, <array>","* 2) return a new array of elements for which calling <function> returned false","* 3) This is the logical inverse if _.filter(), you must use _.filter() in your implementation","* Examples:","* _.reject([1,2,3,4,5], function(e){return e%2 === 0}) -> [1,3,5]","*/","","_.reject = function(array, funct) {"," var newArray= [];"," var arr = _.filter(array, funct);"," for(var i = 0; i < array.length; i++) {"," if(arr.includes(array[i]) === false) {"," newArray.push(array[i]);"," }"," }"," "," return newArray;","};","","","/** _.partition","* Arguments:","* 1) An array","* 2) A function","* Objectives:","* 1) Call <function> for each element in <array> passing it the arguments:","* element, key, <array>","* 2) Return an array that is made up of 2 sub arrays:","* 0) An array that contains all the values for which <function> returned something truthy","* 1) An array that contains all the values for which <function> returned something falsy","* Edge Cases:","* 1) This is going to return an array of arrays.","* Examples:","* _.partition([1,2,3,4,5], function(element,index,arr){","* return element % 2 === 0;","* }); -> [[2,4],[1,3,5]]","}","*/","","_.partition = function(array, funct) {"," return[_.filter(array, funct), _.reject(array, funct)];","};","","","/** _.every","* Arguments:","* 1) A collection","* 2) A function","* Objectives:","* 1) Call <function> for every element of <collection> with the paramaters:","* if <collection> is an array:","* current element, it's index, <collection>","* if <collection> is an object:","* current value, current key, <collection>","* 2) If the return value of calling <function> for every element is true, return true","* 3) If even one of them returns false, return false","* 4) If <function> is not provided, return true if every element is truthy, otherwise return false","* Edge Cases:","* 1) what if <function> doesn't return a boolean","* 2) What if <function> is not given?","* Examples:","* _.every([2,4,6], function(e){return e % 2 === 0}) -> true","* _.every([1,2,3], function(e){return e % 2 === 0}) -> false","*/","_.every = function (collection, funct) {"," if (funct === undefined) {"," funct = function (value, entry, collection) {"," return value;"," };"," } "," let res = true;"," let gather = function (value, entry, collection) {"," if(funct(value, entry, collection) === false) {"," res = false;"," }"," };"," "," _.each(collection, gather);"," return res;","};","","/** _.some","* Arguments:","* 1) A collection","* 2) A function","* Objectives:","* 1) Call <function> for every element of <collection> with the paramaters:","* if <collection> is an array:","* current element, it's index, <collection>","* if <collection> is an object:","* current value, current key, <collection>","* 2) If the return value of calling <function> is true for at least one element, return true","* 3) If it is false for all elements, return false","* 4) If <function> is not provided return true if at least one element is truthy, otherwise return false","* Edge Cases:","* 1) what if <function> doesn't return a boolean","* 2) What if <function> is not given?","* Examples:","* _.some([1,3,5], function(e){return e % 2 === 0}) -> false","* _.some([1,2,3], function(e){return e % 2 === 0}) -> true","*/","","_.some = function(collection, funct) {"," if(funct === undefined) {"," funct = function(value, entry, collection) {"," return value;"," };"," }"," "," let res = false;"," let gather = function(value, entry, collection) {"," if(funct(value, entry, collection)) {"," "," res = true;"," }"," };"," "," _.each(collection, gather);","};","","","/** _.pluck","* Arguments:","* 1) An array of objects","* 2) A property","* Objectives:","* 1) Return an array containing the value of <property> for every element in <array>","* 2) You must use _.map() in your implementation.","* Examples:","* _.pluck([{a: \"one\"}, {a: \"two\"}], \"a\") -> [\"one\", \"two\"]","*/","_.pluck = function(array, property) {"," var arr = [];"," arr = _.map(array, check);"," "," function check(value, i) {"," return array[i][property];"," }","return arr;","};","","//////////////////////////////////////////////////////////////////////","// DON'T REMOVE THIS CODE ////////////////////////////////////////////","//////////////////////////////////////////////////////////////////////","","if((typeof process !== 'undefined') &&"," (typeof process.versions.node !== 'undefined')) {"," // here, export any references you need for tests //"," module.exports = _;","}",""]}],[{"start":{"row":399,"column":23},"end":{"row":400,"column":0},"action":"insert","lines":["",""],"id":6},{"start":{"row":400,"column":0},"end":{"row":400,"column":4},"action":"insert","lines":[" "]}],[{"start":{"row":400,"column":4},"end":{"row":416,"column":33},"action":"insert","lines":["module.exports.identity = _.identity;","module.exports.typeOf = _.typeOf;","module.exports.first = _.first;","module.exports.last = _.last;","module.exports.indexOf = _.indexOf;","module.exports.contains = _.contains;","module.exports.each = _.each;","module.exports.unique = _.unique;","module.exports.filter = _.filter;","module.exports.reject = _.reject;","module.exports.partition = _.partition;","module.exports.map = _.map;","module.exports.pluck = _.pluck;","module.exports.every = _.every;","module.exports.some = _.some;","module.exports.reduce = _.reduce;","module.exports.extend = _.extend;"],"id":7}]]},"ace":{"folds":[],"scrolltop":5490,"scrollleft":0,"selection":{"start":{"row":416,"column":33},"end":{"row":416,"column":33},"isBackwards":false},"options":{"guessTabSize":true,"useWrapMode":false,"wrapToView":true},"firstLineState":{"row":391,"state":"start","mode":"ace/mode/javascript"}},"timestamp":1554762888394}