diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml
new file mode 100644
index 0000000..4fe3bdc
--- /dev/null
+++ b/.idea/jsLibraryMappings.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..e503d88
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..e7dc053
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vscode-react-sample.iml b/.idea/vscode-react-sample.iml
new file mode 100644
index 0000000..c06ae7f
--- /dev/null
+++ b/.idea/vscode-react-sample.iml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..99e205e
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,237 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ DEFINITION_ORDER
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1472667296530
+
+
+ 1472667296530
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.jsbeautifyrc b/.jsbeautifyrc
new file mode 100644
index 0000000..097d220
--- /dev/null
+++ b/.jsbeautifyrc
@@ -0,0 +1,5 @@
+{
+ "js": {
+ "space_around_selector_separator": true
+ }
+}
\ No newline at end of file
diff --git a/app/components/App.js b/app/components/App.js
index de2bf71..5dac408 100644
--- a/app/components/App.js
+++ b/app/components/App.js
@@ -4,6 +4,8 @@ import getMuiTheme from 'material-ui/lib/styles/getMuiTheme';
import IconButton from 'material-ui/lib/icon-button';
import StarIcon from 'material-ui/lib/svg-icons/toggle/star';
+
+
import Viewport from './Viewport';
diff --git a/app/components/NewTodo.js b/app/components/NewTodo.js
index bbdb60e..bf5be6f 100644
--- a/app/components/NewTodo.js
+++ b/app/components/NewTodo.js
@@ -12,7 +12,7 @@ class NewTodo extends React.Component {
this.styles = {
spacing: {
float: 'left',
- width: '30%',
+ width '30%',
margin: '3%'
},
prompt: {
diff --git a/app/components/Todos.js b/app/components/Todos.js
index e792409..8669f01 100644
--- a/app/components/Todos.js
+++ b/app/components/Todos.js
@@ -52,9 +52,17 @@ class Todos extends React.Component {
render() {
const todos = this.state.todos.map(this.create.bind(this));
return (
-
- {todos}
-
+
+
+ {todos}
+
+
+
);
}
}
diff --git a/jsconfig.json b/app/jsconfig.json
similarity index 100%
rename from jsconfig.json
rename to app/jsconfig.json
diff --git a/typings/globals/node/index.d.ts b/app/typings/globals/node/index.d.ts
similarity index 100%
rename from typings/globals/node/index.d.ts
rename to app/typings/globals/node/index.d.ts
diff --git a/typings/globals/node/typings.json b/app/typings/globals/node/typings.json
similarity index 100%
rename from typings/globals/node/typings.json
rename to app/typings/globals/node/typings.json
diff --git a/typings/globals/promise/index.d.ts b/app/typings/globals/promise/index.d.ts
similarity index 100%
rename from typings/globals/promise/index.d.ts
rename to app/typings/globals/promise/index.d.ts
diff --git a/typings/globals/promise/typings.json b/app/typings/globals/promise/typings.json
similarity index 100%
rename from typings/globals/promise/typings.json
rename to app/typings/globals/promise/typings.json
diff --git a/typings/index.d.ts b/app/typings/index.d.ts
similarity index 100%
rename from typings/index.d.ts
rename to app/typings/index.d.ts
diff --git a/typings/modules/lodash/index.d.ts b/app/typings/modules/lodash/index.d.ts
similarity index 100%
rename from typings/modules/lodash/index.d.ts
rename to app/typings/modules/lodash/index.d.ts
diff --git a/typings/modules/lodash/typings.json b/app/typings/modules/lodash/typings.json
similarity index 100%
rename from typings/modules/lodash/typings.json
rename to app/typings/modules/lodash/typings.json
diff --git a/server/database.js b/server/database.js
index 5e5724f..5a9632b 100644
--- a/server/database.js
+++ b/server/database.js
@@ -1,12 +1,15 @@
var fs = require('fs');
var _ = require('lodash');
+var promise = require('promise');
var DATA = 'data/todos.json';
var PRETTIFY_WS = 4;
-function getAll(resolve) {
- fs.readFile(DATA, function(err, data) {
- resolve(JSON.parse(data));
+function getAll() {
+ return new Promise((resolve, reject) => {
+ fs.readFile(DATA, function(err, data) {
+ resolve(JSON.parse(data));
+ });
});
}
diff --git a/server/server.js b/server/server.js
index c53e411..ffa8555 100644
--- a/server/server.js
+++ b/server/server.js
@@ -4,11 +4,9 @@ var _ = require('lodash');
var database = require('./database');
-// Create server
var server = express();
server.use(bodyParser.json());
-// Middleware
server.use(function (req, res, next) {
// allow origin for demo purposes
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8080');
@@ -18,9 +16,9 @@ server.use(function (req, res, next) {
});
// Routes
-server.get('/todos', function(req, res, next) {
- database.getAll(function(todos) {
- res.send(todos);
+server.get('/todos', function (req, res, next) {
+ database.getAll(function (todos) {
+ res.send(todos);
next();
});
});
diff --git a/server/typings/index.d.ts b/server/typings/index.d.ts
new file mode 100644
index 0000000..e953d96
--- /dev/null
+++ b/server/typings/index.d.ts
@@ -0,0 +1 @@
+///
diff --git a/server/typings/modules/lodash/index.d.ts b/server/typings/modules/lodash/index.d.ts
new file mode 100644
index 0000000..518a500
--- /dev/null
+++ b/server/typings/modules/lodash/index.d.ts
@@ -0,0 +1,18545 @@
+// Generated by typings
+// Source: https://raw.githubusercontent.com/types/npm-lodash/9b83559bbd3454f0cd9e4020c920e36eee80d5a3/index.d.ts
+declare module 'lodash' {
+/*
+### 4.0.0 Changelog (https://github.com/lodash/lodash/wiki/Changelog)
+
+#### TODO:
+removed:
+- [x] Removed _.support
+- [x] Removed _.findWhere in favor of _.find with iteratee shorthand
+- [x] Removed _.where in favor of _.filter with iteratee shorthand
+- [x] Removed _.pluck in favor of _.map with iteratee shorthand
+
+renamed:
+- [x] Renamed _.first to _.head
+- [x] Renamed _.indexBy to _.keyBy
+- [x] Renamed _.invoke to _.invokeMap
+- [x] Renamed _.overArgs to _.overArgs
+- [x] Renamed _.padLeft & _.padRight to _.padStart & _.padEnd
+- [x] Renamed _.pairs to _.toPairs
+- [x] Renamed _.rest to _.tail
+- [x] Renamed _.restParam to _.rest
+- [x] Renamed _.sortByOrder to _.orderBy
+- [x] Renamed _.trimLeft & _.trimRight to _.trimStart & _.trimEnd
+- [x] Renamed _.trunc to _.truncate
+
+split:
+- [x] Split _.indexOf & _.lastIndexOf into _.sortedIndexOf & _.sortedLastIndexOf
+- [x] Split _.max & _.min into _.maxBy & _.minBy
+- [x] Split _.omit & _.pick into _.omitBy & _.pickBy
+- [x] Split _.sample into _.sampleSize
+- [x] Split _.sortedIndex into _.sortedIndexBy
+- [x] Split _.sortedLastIndex into _.sortedLastIndexBy
+- [x] Split _.uniq into _.sortedUniq, _.sortedUniqBy, & _.uniqBy
+
+changes:
+- [x] Absorbed _.sortByAll into _.sortBy
+- [x] Changed the category of _.at to “Object”
+- [x] Changed the category of _.bindAll to “Utility”
+- [x] Made _.capitalize uppercase the first character & lowercase the rest
+- [x] Made _.functions return only own method names
+
+
+added 23 array methods:
+- [x] _.concat
+- [x] _.differenceBy
+- [x] _.differenceWith
+- [x] _.flatMap
+- [x] _.fromPairs
+- [x] _.intersectionBy
+- [x] _.intersectionWith
+- [x] _.join
+- [x] _.pullAll
+- [x] _.pullAllBy
+- [x] _.reverse
+- [x] _.sortedIndexBy
+- [x] _.sortedIndexOf
+- [x] _.sortedLastIndexBy
+- [x] _.sortedLastIndexOf
+- [x] _.sortedUniq
+- [x] _.sortedUniqBy
+- [x] _.unionBy
+- [x] _.unionWith
+- [x] _.uniqBy
+- [x] _.uniqWith
+- [x] _.xorBy
+- [x] _.xorWith
+
+added 18 lang methods:
+- [x] _.cloneDeepWith
+- [x] _.cloneWith
+- [x] _.eq
+- [x] _.isArrayLike
+- [x] _.isArrayLikeObject
+- [x] _.isEqualWith
+- [x] _.isInteger
+- [x] _.isLength
+- [x] _.isMatchWith
+- [x] _.isNil
+- [x] _.isObjectLike
+- [x] _.isSafeInteger
+- [x] _.isSymbol
+- [x] _.toInteger
+- [x] _.toLength
+- [x] _.toNumber
+- [x] _.toSafeInteger
+- [x] _.toString
+
+added 13 object methods:
+- [x] _.assignIn
+- [x] _.assignInWith
+- [x] _.assignWith
+- [x] _.functionsIn
+- [x] _.hasIn
+- [x] _.mergeWith
+- [x] _.omitBy
+- [x] _.pickBy
+
+
+added 8 string methods:
+- [x] _.lowerCase
+- [x] _.lowerFirst
+- [x] _.upperCase
+- [x] _.upperFirst
+- [x] _.toLower
+- [x] _.toUpper
+
+added 8 utility methods:
+- [x] _.toPath
+
+added 4 math methods:
+- [x] _.maxBy
+- [x] _.mean
+- [x] _.minBy
+- [x] _.sumBy
+
+added 2 function methods:
+- [x] _.flip
+- [x] _.unary
+
+added 2 number methods:
+- [x] _.clamp
+- [x] _.subtract
+
+added collection method:
+- [x] _.sampleSize
+
+Added 3 aliases
+
+- [x] _.first as an alias of _.head
+
+Removed 17 aliases
+- [x] Removed aliase _.all
+- [x] Removed aliase _.any
+- [x] Removed aliase _.backflow
+- [x] Removed aliase _.callback
+- [x] Removed aliase _.collect
+- [x] Removed aliase _.compose
+- [x] Removed aliase _.contains
+- [x] Removed aliase _.detect
+- [x] Removed aliase _.foldl
+- [x] Removed aliase _.foldr
+- [x] Removed aliase _.include
+- [x] Removed aliase _.inject
+- [x] Removed aliase _.methods
+- [x] Removed aliase _.object
+- [x] Removed aliase _.run
+- [x] Removed aliase _.select
+- [x] Removed aliase _.unique
+
+Other changes
+- [x] Added support for array buffers to _.isEqual
+- [x] Added support for converting iterators to _.toArray
+- [x] Added support for deep paths to _.zipObject
+- [x] Changed UMD to export to window or self when available regardless of other exports
+- [x] Ensured debounce cancel clears args & thisArg references
+- [x] Ensured _.add, _.subtract, & _.sum don’t skip NaN values
+- [x] Ensured _.clone treats generators like functions
+- [x] Ensured _.clone produces clones with the source’s [[Prototype]]
+- [x] Ensured _.defaults assigns properties that shadow Object.prototype
+- [x] Ensured _.defaultsDeep doesn’t merge a string into an array
+- [x] Ensured _.defaultsDeep & _.merge don’t modify sources
+- [x] Ensured _.defaultsDeep works with circular references
+- [x] Ensured _.keys skips “length” on strict mode arguments objects in Safari 9
+- [x] Ensured _.merge doesn’t convert strings to arrays
+- [x] Ensured _.merge merges plain-objects onto non plain-objects
+- [x] Ensured _#plant resets iterator data of cloned sequences
+- [x] Ensured _.random swaps min & max if min is greater than max
+- [x] Ensured _.range preserves the sign of start of -0
+- [x] Ensured _.reduce & _.reduceRight use getIteratee in their array branch
+- [x] Fixed rounding issue with the precision param of _.floor
+
+** LATER **
+Misc:
+- [ ] Made _.forEach, _.forIn, _.forOwn, & _.times implicitly end a chain sequence
+- [ ] Removed thisArg params from most methods
+- [ ] Made “By” methods provide a single param to iteratees
+- [ ] Made _.words chainable by default
+- [ ] Removed isDeep params from _.clone & _.flatten
+- [ ] Removed _.bindAll support for binding all methods when no names are provided
+- [ ] Removed func-first param signature from _.before & _.after
+- [ ] _.extend as an alias of _.assignIn
+- [ ] _.extendWith as an alias of _.assignInWith
+- [ ] Added clear method to _.memoize.Cache
+- [ ] Added flush method to debounced & throttled functions
+- [ ] Added support for ES6 maps, sets, & symbols to _.clone, _.isEqual, & _.toArray
+- [ ] Enabled _.flow & _.flowRight to accept an array of functions
+- [ ] Ensured “Collection” methods treat functions as objects
+- [ ] Ensured _.assign, _.defaults, & _.merge coerce object values to objects
+- [ ] Ensured _.bindKey bound functions call object[key] when called with the new operator
+- [ ] Ensured _.isFunction returns true for generator functions
+- [ ] Ensured _.merge assigns typed arrays directly
+- [ ] Made _(...) an iterator & iterable
+- [ ] Made _.drop, _.take, & right forms coerce n of undefined to 0
+
+Methods:
+- [ ] _.concat
+- [ ] _.differenceBy
+- [ ] _.differenceWith
+- [ ] _.flatMap
+- [x] _.fromPairs
+- [ ] _.intersectionBy
+- [ ] _.intersectionWith
+- [ ] _.join
+- [ ] _.pullAll
+- [ ] _.pullAllBy
+- [ ] _.reverse
+- [ ] _.sortedLastIndexOf
+- [ ] _.unionBy
+- [ ] _.unionWith
+- [ ] _.uniqWith
+- [ ] _.xorBy
+- [ ] _.xorWith
+- [ ] _.toString
+
+- [ ] _.invoke
+- [ ] _.setWith
+- [ ] _.toPairs
+- [ ] _.toPairsIn
+- [ ] _.unset
+
+- [ ] _.replace
+- [ ] _.split
+
+- [ ] _.cond
+- [ ] _.conforms
+- [ ] _.nthArg
+- [ ] _.over
+- [ ] _.overEvery
+- [ ] _.overSome
+- [ ] _.rangeRight
+
+- [ ] _.next
+*/
+
+var _: _.LoDashStatic;
+
+namespace _ {
+ interface LoDashStatic {
+ /**
+ * Creates a lodash object which wraps the given value to enable intuitive method chaining.
+ *
+ * In addition to Lo-Dash methods, wrappers also have the following Array methods:
+ * concat, join, pop, push, reverse, shift, slice, sort, splice, and unshift
+ *
+ * Chaining is supported in custom builds as long as the value method is implicitly or
+ * explicitly included in the build.
+ *
+ * The chainable wrapper functions are:
+ * after, assign, bind, bindAll, bindKey, chain, chunk, compact, compose, concat, countBy,
+ * createCallback, curry, debounce, defaults, defer, delay, difference, filter, flatten,
+ * forEach, forEachRight, forIn, forInRight, forOwn, forOwnRight, functions, groupBy,
+ * keyBy, initial, intersection, invert, invoke, keys, map, max, memoize, merge, min,
+ * object, omit, once, pairs, partial, partialRight, pick, pluck, pull, push, range, reject,
+ * remove, rest, reverse, sample, shuffle, slice, sort, sortBy, splice, tap, throttle, times,
+ * toArray, transform, union, uniq, unset, unshift, unzip, values, where, without, wrap, and zip
+ *
+ * The non-chainable wrapper functions are:
+ * clone, cloneDeep, contains, escape, every, find, findIndex, findKey, findLast,
+ * findLastIndex, findLastKey, has, identity, indexOf, isArguments, isArray, isBoolean,
+ * isDate, isElement, isEmpty, isEqual, isFinite, isFunction, isNaN, isNull, isNumber,
+ * isObject, isPlainObject, isRegExp, isString, isUndefined, join, lastIndexOf, mixin,
+ * noConflict, parseInt, pop, random, reduce, reduceRight, result, shift, size, some,
+ * sortedIndex, runInContext, template, unescape, uniqueId, and value
+ *
+ * The wrapper functions first and last return wrapped values when n is provided, otherwise
+ * they return unwrapped values.
+ *
+ * Explicit chaining can be enabled by using the _.chain method.
+ */
+ (value: number): LoDashImplicitWrapper;
+ (value: string): LoDashImplicitStringWrapper;
+ (value: boolean): LoDashImplicitWrapper;
+ (value: Array): LoDashImplicitNumberArrayWrapper;
+ (value: Array): LoDashImplicitArrayWrapper;
+ (value: T): LoDashImplicitObjectWrapper;
+ (value: any): LoDashImplicitWrapper;
+
+ /**
+ * The semantic version number.
+ */
+ VERSION: string;
+
+ /**
+ * By default, the template delimiters used by Lo-Dash are similar to those in embedded Ruby
+ * (ERB). Change the following template settings to use alternative delimiters.
+ */
+ templateSettings: TemplateSettings;
+ }
+
+ /**
+ * By default, the template delimiters used by Lo-Dash are similar to those in embedded Ruby
+ * (ERB). Change the following template settings to use alternative delimiters.
+ */
+ interface TemplateSettings {
+ /**
+ * The "escape" delimiter.
+ */
+ escape?: RegExp;
+
+ /**
+ * The "evaluate" delimiter.
+ */
+ evaluate?: RegExp;
+
+ /**
+ * An object to import into the template as local variables.
+ */
+ imports?: Dictionary;
+
+ /**
+ * The "interpolate" delimiter.
+ */
+ interpolate?: RegExp;
+
+ /**
+ * Used to reference the data object in the template text.
+ */
+ variable?: string;
+ }
+
+ /**
+ * Creates a cache object to store key/value pairs.
+ */
+ interface MapCache {
+ /**
+ * Removes `key` and its value from the cache.
+ * @param key The key of the value to remove.
+ * @return Returns `true` if the entry was removed successfully, else `false`.
+ */
+ delete(key: string): boolean;
+
+ /**
+ * Gets the cached value for `key`.
+ * @param key The key of the value to get.
+ * @return Returns the cached value.
+ */
+ get(key: string): any;
+
+ /**
+ * Checks if a cached value for `key` exists.
+ * @param key The key of the entry to check.
+ * @return Returns `true` if an entry for `key` exists, else `false`.
+ */
+ has(key: string): boolean;
+
+ /**
+ * Sets `value` to `key` of the cache.
+ * @param key The key of the value to cache.
+ * @param value The value to cache.
+ * @return Returns the cache object.
+ */
+ set(key: string, value: any): _.Dictionary;
+ }
+
+ interface LoDashWrapperBase { }
+
+ interface LoDashImplicitWrapperBase extends LoDashWrapperBase { }
+
+ interface LoDashExplicitWrapperBase extends LoDashWrapperBase { }
+
+ interface LoDashImplicitWrapper extends LoDashImplicitWrapperBase> { }
+
+ interface LoDashExplicitWrapper extends LoDashExplicitWrapperBase> { }
+
+ interface LoDashImplicitStringWrapper extends LoDashImplicitWrapper { }
+
+ interface LoDashExplicitStringWrapper extends LoDashExplicitWrapper { }
+
+ interface LoDashImplicitObjectWrapper extends LoDashImplicitWrapperBase> { }
+
+ interface LoDashExplicitObjectWrapper extends LoDashExplicitWrapperBase> { }
+
+ interface LoDashImplicitArrayWrapper extends LoDashImplicitWrapperBase> {
+ pop(): T;
+ push(...items: T[]): LoDashImplicitArrayWrapper;
+ shift(): T;
+ sort(compareFn?: (a: T, b: T) => number): LoDashImplicitArrayWrapper;
+ splice(start: number): LoDashImplicitArrayWrapper;
+ splice(start: number, deleteCount: number, ...items: any[]): LoDashImplicitArrayWrapper;
+ unshift(...items: T[]): LoDashImplicitArrayWrapper;
+ }
+
+ interface LoDashExplicitArrayWrapper extends LoDashExplicitWrapperBase> { }
+
+ interface LoDashImplicitNumberArrayWrapper extends LoDashImplicitArrayWrapper { }
+
+ interface LoDashExplicitNumberArrayWrapper extends LoDashExplicitArrayWrapper { }
+
+ /*********
+ * Array *
+ ********/
+
+ // _.chunk
+ interface LoDashStatic {
+ /**
+ * Creates an array of elements split into groups the length of size. If collection can’t be split evenly, the
+ * final chunk will be the remaining elements.
+ *
+ * @param array The array to process.
+ * @param size The length of each chunk.
+ * @return Returns the new array containing chunks.
+ */
+ chunk(
+ array: List,
+ size?: number
+ ): T[][];
+ }
+
+ interface LoDashImplicitArrayWrapper {
+ /**
+ * @see _.chunk
+ */
+ chunk(size?: number): LoDashImplicitArrayWrapper;
+ }
+
+ interface LoDashImplicitObjectWrapper {
+ /**
+ * @see _.chunk
+ */
+ chunk(size?: number): LoDashImplicitArrayWrapper;
+ }
+
+ interface LoDashExplicitArrayWrapper {
+ /**
+ * @see _.chunk
+ */
+ chunk(size?: number): LoDashExplicitArrayWrapper;
+ }
+
+ interface LoDashExplicitObjectWrapper {
+ /**
+ * @see _.chunk
+ */
+ chunk(size?: number): LoDashExplicitArrayWrapper;
+ }
+
+ // _.compact
+ interface LoDashStatic {
+ /**
+ * Creates an array with all falsey values removed. The values false, null, 0, "", undefined, and NaN are
+ * falsey.
+ *
+ * @param array The array to compact.
+ * @return (Array) Returns the new array of filtered values.
+ */
+ compact(array?: List): T[];
+ }
+
+ interface LoDashImplicitArrayWrapper {
+ /**
+ * @see _.compact
+ */
+ compact(): LoDashImplicitArrayWrapper;
+ }
+
+ interface LoDashImplicitObjectWrapper {
+ /**
+ * @see _.compact
+ */
+ compact(): LoDashImplicitArrayWrapper;
+ }
+
+ interface LoDashExplicitArrayWrapper {
+ /**
+ * @see _.compact
+ */
+ compact(): LoDashExplicitArrayWrapper;
+ }
+
+ interface LoDashExplicitObjectWrapper {
+ /**
+ * @see _.compact
+ */
+ compact(): LoDashExplicitArrayWrapper;
+ }
+
+ // _.concat DUMMY
+ interface LoDashStatic {
+ /**
+ * Creates a new array concatenating `array` with any additional arrays
+ * and/or values.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to concatenate.
+ * @param {...*} [values] The values to concatenate.
+ * @returns {Array} Returns the new concatenated array.
+ * @example
+ *
+ * var array = [1];
+ * var other = _.concat(array, 2, [3], [[4]]);
+ *
+ * console.log(other);
+ * // => [1, 2, 3, [4]]
+ *
+ * console.log(array);
+ * // => [1]
+ */
+ concat(...values: (T[] | List)[]): T[];
+ }
+
+ // _.difference
+ interface LoDashStatic {
+ /**
+ * Creates an array of unique array values not included in the other provided arrays using SameValueZero for
+ * equality comparisons.
+ *
+ * @param array The array to inspect.
+ * @param values The arrays of values to exclude.
+ * @return Returns the new array of filtered values.
+ */
+ difference(
+ array: T[] | List,
+ ...values: Array>
+ ): T[];
+ }
+
+ interface LoDashImplicitArrayWrapper {
+ /**
+ * @see _.difference
+ */
+ difference(...values: (T[] | List)[]): LoDashImplicitArrayWrapper;
+ }
+
+ interface LoDashImplicitObjectWrapper {
+ /**
+ * @see _.difference
+ */
+ difference(...values: (TValue[] | List)[]): LoDashImplicitArrayWrapper;
+ }
+
+ interface LoDashExplicitArrayWrapper {
+ /**
+ * @see _.difference
+ */
+ difference(...values: (T[] | List)[]): LoDashExplicitArrayWrapper;
+ }
+
+ interface LoDashExplicitObjectWrapper {
+ /**
+ * @see _.difference
+ */
+ difference(...values: (TValue[] | List)[]): LoDashExplicitArrayWrapper;
+ }
+
+ // _.differenceBy
+ interface LoDashStatic {
+ /**
+ * This method is like _.difference except that it accepts iteratee which is invoked for each element of array
+ * and values to generate the criterion by which uniqueness is computed. The iteratee is invoked with one
+ * argument: (value).
+ *
+ * @param array The array to inspect.
+ * @param values The values to exclude.
+ * @param iteratee The iteratee invoked per element.
+ * @returns Returns the new array of filtered values.
+ */
+ differenceBy(
+ array: T[] | List,
+ values?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): T[];
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ array: T[] | List,
+ values?: T[] | List,
+ iteratee?: W
+ ): T[];
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ array: T[] | List,
+ values1?: T[] | List,
+ values2?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): T[];
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ array: T[] | List,
+ values1?: T[] | List,
+ values2?: T[] | List,
+ iteratee?: W
+ ): T[];
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ array: T[] | List,
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): T[];
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ array: T[] | List,
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ iteratee?: W
+ ): T[];
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ array: T[] | List,
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ values4?: T[] | List,
+ iteratee?: W
+ ): T[];
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ array: T[] | List,
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ values4?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): T[];
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ array: T[] | List,
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ values4?: T[] | List,
+ values5?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): T[];
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ array: T[] | List,
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ values4?: T[] | List,
+ values5?: T[] | List,
+ iteratee?: W
+ ): T[];
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ array: T[] | List,
+ ...values: any[]
+ ): T[];
+ }
+
+ interface LoDashImplicitArrayWrapper {
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values?: T[] | List,
+ iteratee?: W
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ iteratee?: W
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ iteratee?: W
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ values4?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ values4?: T[] | List,
+ iteratee?: W
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ values4?: T[] | List,
+ values5?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ values4?: T[] | List,
+ values5?: T[] | List,
+ iteratee?: W
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ ...values: any[]
+ ): LoDashImplicitArrayWrapper;
+ }
+
+ interface LoDashImplicitObjectWrapper {
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values?: T[] | List,
+ iteratee?: W
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ iteratee?: W
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ iteratee?: W
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ values4?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ values4?: T[] | List,
+ iteratee?: W
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ values4?: T[] | List,
+ values5?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ values3?: T[] | List,
+ values4?: T[] | List,
+ values5?: T[] | List,
+ iteratee?: W
+ ): LoDashImplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ ...values: any[]
+ ): LoDashImplicitArrayWrapper;
+ }
+
+ interface LoDashExplicitArrayWrapper {
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): LoDashExplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values?: T[] | List,
+ iteratee?: W
+ ): LoDashExplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ iteratee?: ((value: T) => any) | string
+ ): LoDashExplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy(
+ values1?: T[] | List,
+ values2?: T[] | List,
+ iteratee?: W
+ ): LoDashExplicitArrayWrapper;
+
+ /**
+ * @see _.differenceBy
+ */
+ differenceBy