From 11a88b601ce4501f0354a8b27679778677212735 Mon Sep 17 00:00:00 2001 From: thewesker Date: Sat, 18 Jun 2016 17:22:45 -0400 Subject: [PATCH] lol --- id_rsa_pagoda | 54 + id_rsa_pagoda.pub | 1 + node_modules/fs/index.js | 1 - node_modules/fs/package.json | 32 - node_modules/lowdb/.babelrc | 6 - node_modules/lowdb/.npmignore | 3 - node_modules/lowdb/LICENSE | 20 - node_modules/lowdb/README.md | 404 - node_modules/lowdb/browser.js | 21 - node_modules/lowdb/dist/lowdb.js | 15173 -------------- node_modules/lowdb/dist/lowdb.min.js | 4 - node_modules/lowdb/file-async.js | 24 - node_modules/lowdb/file-sync.js | 39 - node_modules/lowdb/index.js | 142 - node_modules/lowdb/json.js | 10 - .../lowdb/node_modules/graceful-fs/LICENSE | 15 - .../lowdb/node_modules/graceful-fs/README.md | 133 - .../lowdb/node_modules/graceful-fs/fs.js | 21 - .../node_modules/graceful-fs/graceful-fs.js | 253 - .../graceful-fs/legacy-streams.js | 118 - .../node_modules/graceful-fs/package.json | 77 - .../node_modules/graceful-fs/polyfills.js | 252 - .../lowdb/node_modules/is-promise/.npmignore | 6 - .../lowdb/node_modules/is-promise/.travis.yml | 3 - .../lowdb/node_modules/is-promise/LICENSE | 19 - .../lowdb/node_modules/is-promise/index.js | 5 - .../node_modules/is-promise/package.json | 48 - .../lowdb/node_modules/is-promise/readme.md | 29 - .../json-parse-helpfulerror/.editorconfig | 14 - .../json-parse-helpfulerror/.editorconfig~ | 14 - .../json-parse-helpfulerror/.npmignore | 28 - .../json-parse-helpfulerror/LICENSE | 22 - .../json-parse-helpfulerror/README.md | 29 - .../json-parse-helpfulerror/index.js | 21 - .../json-parse-helpfulerror/index.js~ | 20 - .../node_modules/jju/.npmignore | 9 - .../node_modules/jju/LICENSE | 14 - .../node_modules/jju/README.md | 243 - .../node_modules/jju/index.js | 32 - .../node_modules/jju/lib/analyze.js | 92 - .../node_modules/jju/lib/document.js | 485 - .../node_modules/jju/lib/parse.js | 765 - .../node_modules/jju/lib/stringify.js | 383 - .../node_modules/jju/lib/unicode.js | 71 - .../node_modules/jju/lib/utils.js | 46 - .../node_modules/jju/package.json | 67 - .../node_modules/jju/package.yaml | 46 - .../json-parse-helpfulerror/package.json | 61 - .../json-parse-helpfulerror/test/test.js | 32 - .../json-parse-helpfulerror/test/test.js~ | 11 - .../lowdb/node_modules/lodash/LICENSE | 47 - .../lowdb/node_modules/lodash/README.md | 40 - .../lowdb/node_modules/lodash/_DataView.js | 7 - .../lowdb/node_modules/lodash/_Hash.js | 32 - .../lowdb/node_modules/lodash/_LazyWrapper.js | 28 - .../lowdb/node_modules/lodash/_ListCache.js | 32 - .../node_modules/lodash/_LodashWrapper.js | 22 - .../lowdb/node_modules/lodash/_Map.js | 7 - .../lowdb/node_modules/lodash/_MapCache.js | 32 - .../lowdb/node_modules/lodash/_Promise.js | 7 - .../lowdb/node_modules/lodash/_Reflect.js | 6 - .../lowdb/node_modules/lodash/_Set.js | 7 - .../lowdb/node_modules/lodash/_SetCache.js | 27 - .../lowdb/node_modules/lodash/_Stack.js | 26 - .../lowdb/node_modules/lodash/_Symbol.js | 6 - .../lowdb/node_modules/lodash/_Uint8Array.js | 6 - .../lowdb/node_modules/lodash/_WeakMap.js | 7 - .../lowdb/node_modules/lodash/_addMapEntry.js | 15 - .../lowdb/node_modules/lodash/_addSetEntry.js | 14 - .../lowdb/node_modules/lodash/_apply.js | 22 - .../node_modules/lodash/_arrayAggregator.js | 22 - .../lowdb/node_modules/lodash/_arrayEach.js | 22 - .../node_modules/lodash/_arrayEachRight.js | 21 - .../lowdb/node_modules/lodash/_arrayEvery.js | 23 - .../lowdb/node_modules/lodash/_arrayFilter.js | 25 - .../node_modules/lodash/_arrayIncludes.js | 17 - .../node_modules/lodash/_arrayIncludesWith.js | 22 - .../lowdb/node_modules/lodash/_arrayMap.js | 21 - .../lowdb/node_modules/lodash/_arrayPush.js | 20 - .../lowdb/node_modules/lodash/_arrayReduce.js | 26 - .../node_modules/lodash/_arrayReduceRight.js | 24 - .../lowdb/node_modules/lodash/_arraySome.js | 23 - .../node_modules/lodash/_assignInDefaults.js | 27 - .../node_modules/lodash/_assignMergeValue.js | 19 - .../lowdb/node_modules/lodash/_assignValue.js | 27 - .../node_modules/lodash/_assocIndexOf.js | 21 - .../node_modules/lodash/_baseAggregator.js | 21 - .../lowdb/node_modules/lodash/_baseAssign.js | 17 - .../lowdb/node_modules/lodash/_baseAt.js | 23 - .../lowdb/node_modules/lodash/_baseClamp.js | 22 - .../lowdb/node_modules/lodash/_baseClone.js | 139 - .../node_modules/lodash/_baseConforms.js | 33 - .../lowdb/node_modules/lodash/_baseCreate.js | 18 - .../lowdb/node_modules/lodash/_baseDelay.js | 21 - .../node_modules/lodash/_baseDifference.js | 67 - .../lowdb/node_modules/lodash/_baseEach.js | 14 - .../node_modules/lodash/_baseEachRight.js | 14 - .../lowdb/node_modules/lodash/_baseEvery.js | 21 - .../node_modules/lodash/_baseExtremum.js | 32 - .../lowdb/node_modules/lodash/_baseFill.js | 32 - .../lowdb/node_modules/lodash/_baseFilter.js | 21 - .../node_modules/lodash/_baseFindIndex.js | 24 - .../lowdb/node_modules/lodash/_baseFindKey.js | 23 - .../lowdb/node_modules/lodash/_baseFlatten.js | 38 - .../lowdb/node_modules/lodash/_baseFor.js | 16 - .../lowdb/node_modules/lodash/_baseForOwn.js | 16 - .../node_modules/lodash/_baseForOwnRight.js | 16 - .../node_modules/lodash/_baseForRight.js | 15 - .../node_modules/lodash/_baseFunctions.js | 19 - .../lowdb/node_modules/lodash/_baseGet.js | 25 - .../node_modules/lodash/_baseGetAllKeys.js | 20 - .../lowdb/node_modules/lodash/_baseGt.js | 14 - .../lowdb/node_modules/lodash/_baseHas.js | 26 - .../lowdb/node_modules/lodash/_baseHasIn.js | 13 - .../lowdb/node_modules/lodash/_baseInRange.js | 18 - .../lowdb/node_modules/lodash/_baseIndexOf.js | 27 - .../node_modules/lodash/_baseIndexOfWith.js | 23 - .../node_modules/lodash/_baseIntersection.js | 74 - .../node_modules/lodash/_baseInverter.js | 21 - .../lowdb/node_modules/lodash/_baseInvoke.js | 28 - .../lowdb/node_modules/lodash/_baseIsEqual.js | 30 - .../node_modules/lodash/_baseIsEqualDeep.js | 82 - .../lowdb/node_modules/lodash/_baseIsMatch.js | 62 - .../node_modules/lodash/_baseIsNative.js | 47 - .../node_modules/lodash/_baseIteratee.js | 31 - .../lowdb/node_modules/lodash/_baseKeys.js | 16 - .../lowdb/node_modules/lodash/_baseKeysIn.js | 36 - .../lowdb/node_modules/lodash/_baseLodash.js | 10 - .../lowdb/node_modules/lodash/_baseLt.js | 14 - .../lowdb/node_modules/lodash/_baseMap.js | 22 - .../lowdb/node_modules/lodash/_baseMatches.js | 22 - .../lodash/_baseMatchesProperty.js | 33 - .../lowdb/node_modules/lodash/_baseMean.js | 20 - .../lowdb/node_modules/lodash/_baseMerge.js | 50 - .../node_modules/lodash/_baseMergeDeep.js | 83 - .../lowdb/node_modules/lodash/_baseNth.js | 20 - .../lowdb/node_modules/lodash/_baseOrderBy.js | 34 - .../lowdb/node_modules/lodash/_basePick.js | 22 - .../lowdb/node_modules/lodash/_basePickBy.js | 28 - .../node_modules/lodash/_baseProperty.js | 14 - .../node_modules/lodash/_basePropertyDeep.js | 16 - .../lowdb/node_modules/lodash/_basePullAll.js | 51 - .../lowdb/node_modules/lodash/_basePullAt.js | 50 - .../lowdb/node_modules/lodash/_baseRandom.js | 18 - .../lowdb/node_modules/lodash/_baseRange.js | 28 - .../lowdb/node_modules/lodash/_baseReduce.js | 23 - .../lowdb/node_modules/lodash/_baseRepeat.js | 35 - .../lowdb/node_modules/lodash/_baseSet.js | 46 - .../lowdb/node_modules/lodash/_baseSetData.js | 17 - .../lowdb/node_modules/lodash/_baseSlice.js | 31 - .../lowdb/node_modules/lodash/_baseSome.js | 22 - .../lowdb/node_modules/lodash/_baseSortBy.js | 21 - .../node_modules/lodash/_baseSortedIndex.js | 42 - .../node_modules/lodash/_baseSortedIndexBy.js | 64 - .../node_modules/lodash/_baseSortedUniq.js | 30 - .../lowdb/node_modules/lodash/_baseSum.js | 24 - .../lowdb/node_modules/lodash/_baseTimes.js | 20 - .../node_modules/lodash/_baseToNumber.js | 24 - .../lowdb/node_modules/lodash/_baseToPairs.js | 18 - .../node_modules/lodash/_baseToString.js | 31 - .../lowdb/node_modules/lodash/_baseUnary.js | 14 - .../lowdb/node_modules/lodash/_baseUniq.js | 72 - .../lowdb/node_modules/lodash/_baseUnset.js | 24 - .../lowdb/node_modules/lodash/_baseUpdate.js | 18 - .../lowdb/node_modules/lodash/_baseValues.js | 19 - .../lowdb/node_modules/lodash/_baseWhile.js | 26 - .../node_modules/lodash/_baseWrapperValue.js | 25 - .../lowdb/node_modules/lodash/_baseXor.js | 30 - .../node_modules/lodash/_baseZipObject.js | 23 - .../lowdb/node_modules/lodash/_cacheHas.js | 13 - .../lodash/_castArrayLikeObject.js | 14 - .../node_modules/lodash/_castFunction.js | 14 - .../lowdb/node_modules/lodash/_castPath.js | 15 - .../lowdb/node_modules/lodash/_castSlice.js | 18 - .../node_modules/lodash/_charsEndIndex.js | 19 - .../node_modules/lodash/_charsStartIndex.js | 20 - .../lowdb/node_modules/lodash/_checkGlobal.js | 12 - .../node_modules/lodash/_cloneArrayBuffer.js | 16 - .../lowdb/node_modules/lodash/_cloneBuffer.js | 18 - .../node_modules/lodash/_cloneDataView.js | 16 - .../lowdb/node_modules/lodash/_cloneMap.js | 19 - .../lowdb/node_modules/lodash/_cloneRegExp.js | 17 - .../lowdb/node_modules/lodash/_cloneSet.js | 19 - .../lowdb/node_modules/lodash/_cloneSymbol.js | 18 - .../node_modules/lodash/_cloneTypedArray.js | 16 - .../node_modules/lodash/_compareAscending.js | 41 - .../node_modules/lodash/_compareMultiple.js | 44 - .../lowdb/node_modules/lodash/_composeArgs.js | 39 - .../node_modules/lodash/_composeArgsRight.js | 41 - .../lowdb/node_modules/lodash/_copyArray.js | 20 - .../lowdb/node_modules/lodash/_copyObject.js | 31 - .../lowdb/node_modules/lodash/_copySymbols.js | 16 - .../lowdb/node_modules/lodash/_coreJsData.js | 6 - .../node_modules/lodash/_countHolders.js | 21 - .../node_modules/lodash/_createAggregator.js | 23 - .../node_modules/lodash/_createAssigner.js | 37 - .../node_modules/lodash/_createBaseEach.js | 32 - .../node_modules/lodash/_createBaseFor.js | 25 - .../node_modules/lodash/_createBaseWrapper.js | 29 - .../node_modules/lodash/_createCaseFirst.js | 33 - .../node_modules/lodash/_createCompounder.js | 24 - .../node_modules/lodash/_createCtorWrapper.js | 37 - .../lodash/_createCurryWrapper.js | 47 - .../lowdb/node_modules/lodash/_createFind.js | 30 - .../lowdb/node_modules/lodash/_createFlow.js | 85 - .../lodash/_createHybridWrapper.js | 93 - .../node_modules/lodash/_createInverter.js | 17 - .../lodash/_createMathOperation.js | 37 - .../lowdb/node_modules/lodash/_createOver.js | 32 - .../node_modules/lodash/_createPadding.js | 33 - .../lodash/_createPartialWrapper.js | 44 - .../lowdb/node_modules/lodash/_createRange.js | 31 - .../lodash/_createRecurryWrapper.js | 56 - .../lodash/_createRelationalOperation.js | 20 - .../lowdb/node_modules/lodash/_createRound.js | 33 - .../lowdb/node_modules/lodash/_createSet.js | 19 - .../node_modules/lodash/_createToPairs.js | 30 - .../node_modules/lodash/_createWrapper.js | 106 - .../node_modules/lodash/_deburrLetter.js | 33 - .../lowdb/node_modules/lodash/_equalArrays.js | 81 - .../lowdb/node_modules/lodash/_equalByTag.js | 114 - .../node_modules/lodash/_equalObjects.js | 83 - .../node_modules/lodash/_escapeHtmlChar.js | 22 - .../node_modules/lodash/_escapeStringChar.js | 22 - .../lowdb/node_modules/lodash/_getAllKeys.js | 16 - .../node_modules/lodash/_getAllKeysIn.js | 17 - .../lowdb/node_modules/lodash/_getData.js | 15 - .../lowdb/node_modules/lodash/_getFuncName.js | 31 - .../lowdb/node_modules/lodash/_getHolder.js | 13 - .../lowdb/node_modules/lodash/_getLength.js | 16 - .../lowdb/node_modules/lodash/_getMapData.js | 18 - .../node_modules/lodash/_getMatchData.js | 24 - .../lowdb/node_modules/lodash/_getNative.js | 17 - .../node_modules/lodash/_getPrototype.js | 15 - .../lowdb/node_modules/lodash/_getSymbols.js | 24 - .../node_modules/lodash/_getSymbolsIn.js | 25 - .../lowdb/node_modules/lodash/_getTag.js | 70 - .../lowdb/node_modules/lodash/_getValue.js | 13 - .../lowdb/node_modules/lodash/_getView.js | 33 - .../lowdb/node_modules/lodash/_hasPath.js | 41 - .../lowdb/node_modules/lodash/_hashClear.js | 14 - .../lowdb/node_modules/lodash/_hashDelete.js | 15 - .../lowdb/node_modules/lodash/_hashGet.js | 30 - .../lowdb/node_modules/lodash/_hashHas.js | 23 - .../lowdb/node_modules/lodash/_hashSet.js | 22 - .../lowdb/node_modules/lodash/_indexKeys.js | 24 - .../lowdb/node_modules/lodash/_indexOfNaN.js | 23 - .../node_modules/lodash/_initCloneArray.js | 26 - .../node_modules/lodash/_initCloneByTag.js | 80 - .../node_modules/lodash/_initCloneObject.js | 18 - .../node_modules/lodash/_isFlattenable.js | 15 - .../lodash/_isFlattenableIteratee.js | 16 - .../node_modules/lodash/_isHostObject.js | 20 - .../lowdb/node_modules/lodash/_isIndex.js | 22 - .../node_modules/lodash/_isIterateeCall.js | 30 - .../lowdb/node_modules/lodash/_isKey.js | 29 - .../lowdb/node_modules/lodash/_isKeyable.js | 15 - .../lowdb/node_modules/lodash/_isLaziable.js | 28 - .../lowdb/node_modules/lodash/_isMaskable.js | 14 - .../lowdb/node_modules/lodash/_isMasked.js | 20 - .../lowdb/node_modules/lodash/_isPrototype.js | 18 - .../lodash/_isStrictComparable.js | 15 - .../node_modules/lodash/_iteratorToArray.js | 18 - .../lowdb/node_modules/lodash/_lazyClone.js | 23 - .../lowdb/node_modules/lodash/_lazyReverse.js | 23 - .../lowdb/node_modules/lodash/_lazyValue.js | 73 - .../node_modules/lodash/_listCacheClear.js | 12 - .../node_modules/lodash/_listCacheDelete.js | 34 - .../node_modules/lodash/_listCacheGet.js | 19 - .../node_modules/lodash/_listCacheHas.js | 16 - .../node_modules/lodash/_listCacheSet.js | 25 - .../node_modules/lodash/_mapCacheClear.js | 20 - .../node_modules/lodash/_mapCacheDelete.js | 16 - .../lowdb/node_modules/lodash/_mapCacheGet.js | 16 - .../lowdb/node_modules/lodash/_mapCacheHas.js | 16 - .../lowdb/node_modules/lodash/_mapCacheSet.js | 18 - .../lowdb/node_modules/lodash/_mapToArray.js | 18 - .../lodash/_matchesStrictComparable.js | 20 - .../lowdb/node_modules/lodash/_mergeData.js | 90 - .../node_modules/lodash/_mergeDefaults.js | 24 - .../lowdb/node_modules/lodash/_metaMap.js | 6 - .../node_modules/lodash/_nativeCreate.js | 6 - .../lowdb/node_modules/lodash/_parent.js | 16 - .../lowdb/node_modules/lodash/_reEscape.js | 4 - .../lowdb/node_modules/lodash/_reEvaluate.js | 4 - .../lodash/_reHasComplexSymbol.js | 13 - .../node_modules/lodash/_reInterpolate.js | 4 - .../lowdb/node_modules/lodash/_realNames.js | 4 - .../lowdb/node_modules/lodash/_reorder.js | 29 - .../node_modules/lodash/_replaceHolders.js | 29 - .../lowdb/node_modules/lodash/_root.js | 15 - .../lowdb/node_modules/lodash/_setCacheAdd.js | 19 - .../lowdb/node_modules/lodash/_setCacheHas.js | 14 - .../lowdb/node_modules/lodash/_setData.js | 42 - .../lowdb/node_modules/lodash/_setToArray.js | 18 - .../lowdb/node_modules/lodash/_setToPairs.js | 18 - .../lowdb/node_modules/lodash/_stackClear.js | 14 - .../lowdb/node_modules/lodash/_stackDelete.js | 14 - .../lowdb/node_modules/lodash/_stackGet.js | 14 - .../lowdb/node_modules/lodash/_stackHas.js | 14 - .../lowdb/node_modules/lodash/_stackSet.js | 26 - .../lowdb/node_modules/lodash/_stringSize.js | 47 - .../node_modules/lodash/_stringToArray.js | 38 - .../node_modules/lodash/_stringToPath.js | 25 - .../lowdb/node_modules/lodash/_toKey.js | 21 - .../lowdb/node_modules/lodash/_toSource.js | 23 - .../node_modules/lodash/_unescapeHtmlChar.js | 22 - .../node_modules/lodash/_wrapperClone.js | 23 - node_modules/lowdb/node_modules/lodash/add.js | 22 - .../lowdb/node_modules/lodash/after.js | 42 - .../lowdb/node_modules/lodash/array.js | 67 - node_modules/lowdb/node_modules/lodash/ary.js | 29 - .../lowdb/node_modules/lodash/assign.js | 64 - .../lowdb/node_modules/lodash/assignIn.js | 58 - .../lowdb/node_modules/lodash/assignInWith.js | 38 - .../lowdb/node_modules/lodash/assignWith.js | 37 - node_modules/lowdb/node_modules/lodash/at.js | 26 - .../lowdb/node_modules/lodash/attempt.js | 35 - .../lowdb/node_modules/lodash/before.js | 40 - .../lowdb/node_modules/lodash/bind.js | 57 - .../lowdb/node_modules/lodash/bindAll.js | 41 - .../lowdb/node_modules/lodash/bindKey.js | 68 - .../lowdb/node_modules/lodash/camelCase.js | 29 - .../lowdb/node_modules/lodash/capitalize.js | 23 - .../lowdb/node_modules/lodash/castArray.js | 44 - .../lowdb/node_modules/lodash/ceil.js | 26 - .../lowdb/node_modules/lodash/chain.js | 38 - .../lowdb/node_modules/lodash/chunk.js | 50 - .../lowdb/node_modules/lodash/clamp.js | 39 - .../lowdb/node_modules/lodash/clone.js | 33 - .../lowdb/node_modules/lodash/cloneDeep.js | 25 - .../node_modules/lodash/cloneDeepWith.js | 35 - .../lowdb/node_modules/lodash/cloneWith.js | 38 - .../lowdb/node_modules/lodash/collection.js | 31 - .../lowdb/node_modules/lodash/commit.js | 33 - .../lowdb/node_modules/lodash/compact.js | 31 - .../lowdb/node_modules/lodash/concat.js | 42 - .../lowdb/node_modules/lodash/cond.js | 60 - .../lowdb/node_modules/lodash/conforms.js | 29 - .../lowdb/node_modules/lodash/constant.js | 26 - .../lowdb/node_modules/lodash/core.js | 3830 ---- .../lowdb/node_modules/lodash/core.min.js | 28 - .../lowdb/node_modules/lodash/countBy.js | 36 - .../lowdb/node_modules/lodash/create.js | 43 - .../lowdb/node_modules/lodash/curry.js | 57 - .../lowdb/node_modules/lodash/curryRight.js | 54 - .../lowdb/node_modules/lodash/date.js | 3 - .../lowdb/node_modules/lodash/debounce.js | 181 - .../lowdb/node_modules/lodash/deburr.js | 42 - .../lowdb/node_modules/lodash/defaults.js | 32 - .../lowdb/node_modules/lodash/defaultsDeep.js | 31 - .../lowdb/node_modules/lodash/defer.js | 26 - .../lowdb/node_modules/lodash/delay.js | 28 - .../lowdb/node_modules/lodash/difference.js | 31 - .../lowdb/node_modules/lodash/differenceBy.js | 42 - .../node_modules/lodash/differenceWith.js | 38 - .../lowdb/node_modules/lodash/divide.js | 22 - .../lowdb/node_modules/lodash/drop.js | 38 - .../lowdb/node_modules/lodash/dropRight.js | 39 - .../node_modules/lodash/dropRightWhile.js | 46 - .../lowdb/node_modules/lodash/dropWhile.js | 46 - .../lowdb/node_modules/lodash/each.js | 1 - .../lowdb/node_modules/lodash/eachRight.js | 1 - .../lowdb/node_modules/lodash/endsWith.js | 42 - .../lowdb/node_modules/lodash/entries.js | 1 - .../lowdb/node_modules/lodash/entriesIn.js | 1 - node_modules/lowdb/node_modules/lodash/eq.js | 37 - .../lowdb/node_modules/lodash/escape.js | 49 - .../lowdb/node_modules/lodash/escapeRegExp.js | 32 - .../lowdb/node_modules/lodash/every.js | 52 - .../lowdb/node_modules/lodash/extend.js | 1 - .../lowdb/node_modules/lodash/extendWith.js | 1 - .../lowdb/node_modules/lodash/fill.js | 45 - .../lowdb/node_modules/lodash/filter.js | 47 - .../lowdb/node_modules/lodash/find.js | 43 - .../lowdb/node_modules/lodash/findIndex.js | 56 - .../lowdb/node_modules/lodash/findKey.js | 45 - .../lowdb/node_modules/lodash/findLast.js | 26 - .../node_modules/lodash/findLastIndex.js | 60 - .../lowdb/node_modules/lodash/findLastKey.js | 45 - .../lowdb/node_modules/lodash/first.js | 1 - .../lowdb/node_modules/lodash/flatMap.js | 30 - .../lowdb/node_modules/lodash/flatMapDeep.js | 32 - .../lowdb/node_modules/lodash/flatMapDepth.js | 32 - .../lowdb/node_modules/lodash/flatten.js | 22 - .../lowdb/node_modules/lodash/flattenDeep.js | 25 - .../lowdb/node_modules/lodash/flattenDepth.js | 33 - .../lowdb/node_modules/lodash/flip.js | 28 - .../lowdb/node_modules/lodash/floor.js | 26 - .../lowdb/node_modules/lodash/flow.js | 27 - .../lowdb/node_modules/lodash/flowRight.js | 26 - .../lowdb/node_modules/lodash/forEach.js | 41 - .../lowdb/node_modules/lodash/forEachRight.js | 31 - .../lowdb/node_modules/lodash/forIn.js | 39 - .../lowdb/node_modules/lodash/forInRight.js | 37 - .../lowdb/node_modules/lodash/forOwn.js | 36 - .../lowdb/node_modules/lodash/forOwnRight.js | 34 - node_modules/lowdb/node_modules/lodash/fp.js | 2 - .../lowdb/node_modules/lodash/fp/__.js | 1 - .../node_modules/lodash/fp/_baseConvert.js | 466 - .../node_modules/lodash/fp/_convertBrowser.js | 18 - .../node_modules/lodash/fp/_falseOptions.js | 7 - .../lowdb/node_modules/lodash/fp/_mapping.js | 309 - .../lowdb/node_modules/lodash/fp/_util.js | 14 - .../lowdb/node_modules/lodash/fp/add.js | 5 - .../lowdb/node_modules/lodash/fp/after.js | 5 - .../lowdb/node_modules/lodash/fp/all.js | 1 - .../lowdb/node_modules/lodash/fp/allPass.js | 1 - .../lowdb/node_modules/lodash/fp/always.js | 1 - .../lowdb/node_modules/lodash/fp/any.js | 1 - .../lowdb/node_modules/lodash/fp/anyPass.js | 1 - .../lowdb/node_modules/lodash/fp/apply.js | 1 - .../lowdb/node_modules/lodash/fp/array.js | 2 - .../lowdb/node_modules/lodash/fp/ary.js | 5 - .../lowdb/node_modules/lodash/fp/assign.js | 5 - .../lowdb/node_modules/lodash/fp/assignIn.js | 5 - .../node_modules/lodash/fp/assignInWith.js | 5 - .../node_modules/lodash/fp/assignWith.js | 5 - .../lowdb/node_modules/lodash/fp/assoc.js | 1 - .../lowdb/node_modules/lodash/fp/assocPath.js | 1 - .../lowdb/node_modules/lodash/fp/at.js | 5 - .../lowdb/node_modules/lodash/fp/attempt.js | 5 - .../lowdb/node_modules/lodash/fp/before.js | 5 - .../lowdb/node_modules/lodash/fp/bind.js | 5 - .../lowdb/node_modules/lodash/fp/bindAll.js | 5 - .../lowdb/node_modules/lodash/fp/bindKey.js | 5 - .../lowdb/node_modules/lodash/fp/camelCase.js | 5 - .../node_modules/lodash/fp/capitalize.js | 5 - .../lowdb/node_modules/lodash/fp/castArray.js | 5 - .../lowdb/node_modules/lodash/fp/ceil.js | 5 - .../lowdb/node_modules/lodash/fp/chain.js | 5 - .../lowdb/node_modules/lodash/fp/chunk.js | 5 - .../lowdb/node_modules/lodash/fp/clamp.js | 5 - .../lowdb/node_modules/lodash/fp/clone.js | 5 - .../lowdb/node_modules/lodash/fp/cloneDeep.js | 5 - .../node_modules/lodash/fp/cloneDeepWith.js | 5 - .../lowdb/node_modules/lodash/fp/cloneWith.js | 5 - .../node_modules/lodash/fp/collection.js | 2 - .../lowdb/node_modules/lodash/fp/commit.js | 5 - .../lowdb/node_modules/lodash/fp/compact.js | 5 - .../node_modules/lodash/fp/complement.js | 1 - .../lowdb/node_modules/lodash/fp/compose.js | 1 - .../lowdb/node_modules/lodash/fp/concat.js | 5 - .../lowdb/node_modules/lodash/fp/cond.js | 5 - .../lowdb/node_modules/lodash/fp/conforms.js | 5 - .../lowdb/node_modules/lodash/fp/constant.js | 5 - .../lowdb/node_modules/lodash/fp/contains.js | 1 - .../lowdb/node_modules/lodash/fp/convert.js | 18 - .../lowdb/node_modules/lodash/fp/countBy.js | 5 - .../lowdb/node_modules/lodash/fp/create.js | 5 - .../lowdb/node_modules/lodash/fp/curry.js | 5 - .../lowdb/node_modules/lodash/fp/curryN.js | 5 - .../node_modules/lodash/fp/curryRight.js | 5 - .../node_modules/lodash/fp/curryRightN.js | 5 - .../lowdb/node_modules/lodash/fp/date.js | 2 - .../lowdb/node_modules/lodash/fp/debounce.js | 5 - .../lowdb/node_modules/lodash/fp/deburr.js | 5 - .../lowdb/node_modules/lodash/fp/defaults.js | 5 - .../node_modules/lodash/fp/defaultsDeep.js | 5 - .../lowdb/node_modules/lodash/fp/defer.js | 5 - .../lowdb/node_modules/lodash/fp/delay.js | 5 - .../node_modules/lodash/fp/difference.js | 5 - .../node_modules/lodash/fp/differenceBy.js | 5 - .../node_modules/lodash/fp/differenceWith.js | 5 - .../lowdb/node_modules/lodash/fp/dissoc.js | 1 - .../node_modules/lodash/fp/dissocPath.js | 1 - .../lowdb/node_modules/lodash/fp/divide.js | 5 - .../lowdb/node_modules/lodash/fp/drop.js | 5 - .../lowdb/node_modules/lodash/fp/dropRight.js | 5 - .../node_modules/lodash/fp/dropRightWhile.js | 5 - .../lowdb/node_modules/lodash/fp/dropWhile.js | 5 - .../lowdb/node_modules/lodash/fp/each.js | 1 - .../lowdb/node_modules/lodash/fp/eachRight.js | 1 - .../lowdb/node_modules/lodash/fp/endsWith.js | 5 - .../lowdb/node_modules/lodash/fp/entries.js | 1 - .../lowdb/node_modules/lodash/fp/entriesIn.js | 1 - .../lowdb/node_modules/lodash/fp/eq.js | 5 - .../lowdb/node_modules/lodash/fp/equals.js | 1 - .../lowdb/node_modules/lodash/fp/escape.js | 5 - .../node_modules/lodash/fp/escapeRegExp.js | 5 - .../lowdb/node_modules/lodash/fp/every.js | 5 - .../lowdb/node_modules/lodash/fp/extend.js | 1 - .../node_modules/lodash/fp/extendWith.js | 1 - .../lowdb/node_modules/lodash/fp/fill.js | 5 - .../lowdb/node_modules/lodash/fp/filter.js | 5 - .../lowdb/node_modules/lodash/fp/find.js | 5 - .../lowdb/node_modules/lodash/fp/findFrom.js | 5 - .../lowdb/node_modules/lodash/fp/findIndex.js | 5 - .../node_modules/lodash/fp/findIndexFrom.js | 5 - .../lowdb/node_modules/lodash/fp/findKey.js | 5 - .../lowdb/node_modules/lodash/fp/findLast.js | 5 - .../node_modules/lodash/fp/findLastFrom.js | 5 - .../node_modules/lodash/fp/findLastIndex.js | 5 - .../lodash/fp/findLastIndexFrom.js | 5 - .../node_modules/lodash/fp/findLastKey.js | 5 - .../lowdb/node_modules/lodash/fp/first.js | 1 - .../lowdb/node_modules/lodash/fp/flatMap.js | 5 - .../node_modules/lodash/fp/flatMapDeep.js | 5 - .../node_modules/lodash/fp/flatMapDepth.js | 5 - .../lowdb/node_modules/lodash/fp/flatten.js | 5 - .../node_modules/lodash/fp/flattenDeep.js | 5 - .../node_modules/lodash/fp/flattenDepth.js | 5 - .../lowdb/node_modules/lodash/fp/flip.js | 5 - .../lowdb/node_modules/lodash/fp/floor.js | 5 - .../lowdb/node_modules/lodash/fp/flow.js | 5 - .../lowdb/node_modules/lodash/fp/flowRight.js | 5 - .../lowdb/node_modules/lodash/fp/forEach.js | 5 - .../node_modules/lodash/fp/forEachRight.js | 5 - .../lowdb/node_modules/lodash/fp/forIn.js | 5 - .../node_modules/lodash/fp/forInRight.js | 5 - .../lowdb/node_modules/lodash/fp/forOwn.js | 5 - .../node_modules/lodash/fp/forOwnRight.js | 5 - .../lowdb/node_modules/lodash/fp/fromPairs.js | 5 - .../lowdb/node_modules/lodash/fp/function.js | 2 - .../lowdb/node_modules/lodash/fp/functions.js | 5 - .../node_modules/lodash/fp/functionsIn.js | 5 - .../lowdb/node_modules/lodash/fp/get.js | 5 - .../lowdb/node_modules/lodash/fp/getOr.js | 5 - .../lowdb/node_modules/lodash/fp/groupBy.js | 5 - .../lowdb/node_modules/lodash/fp/gt.js | 5 - .../lowdb/node_modules/lodash/fp/gte.js | 5 - .../lowdb/node_modules/lodash/fp/has.js | 5 - .../lowdb/node_modules/lodash/fp/hasIn.js | 5 - .../lowdb/node_modules/lodash/fp/head.js | 5 - .../lowdb/node_modules/lodash/fp/identical.js | 1 - .../lowdb/node_modules/lodash/fp/identity.js | 5 - .../lowdb/node_modules/lodash/fp/inRange.js | 5 - .../lowdb/node_modules/lodash/fp/includes.js | 5 - .../node_modules/lodash/fp/includesFrom.js | 5 - .../lowdb/node_modules/lodash/fp/indexOf.js | 5 - .../node_modules/lodash/fp/indexOfFrom.js | 5 - .../lowdb/node_modules/lodash/fp/init.js | 1 - .../lowdb/node_modules/lodash/fp/initial.js | 5 - .../node_modules/lodash/fp/intersection.js | 5 - .../node_modules/lodash/fp/intersectionBy.js | 5 - .../lodash/fp/intersectionWith.js | 5 - .../lowdb/node_modules/lodash/fp/invert.js | 5 - .../lowdb/node_modules/lodash/fp/invertBy.js | 5 - .../lowdb/node_modules/lodash/fp/invertObj.js | 1 - .../lowdb/node_modules/lodash/fp/invoke.js | 5 - .../node_modules/lodash/fp/invokeArgs.js | 5 - .../node_modules/lodash/fp/invokeArgsMap.js | 5 - .../lowdb/node_modules/lodash/fp/invokeMap.js | 5 - .../node_modules/lodash/fp/isArguments.js | 5 - .../lowdb/node_modules/lodash/fp/isArray.js | 5 - .../node_modules/lodash/fp/isArrayBuffer.js | 5 - .../node_modules/lodash/fp/isArrayLike.js | 5 - .../lodash/fp/isArrayLikeObject.js | 5 - .../lowdb/node_modules/lodash/fp/isBoolean.js | 5 - .../lowdb/node_modules/lodash/fp/isBuffer.js | 5 - .../lowdb/node_modules/lodash/fp/isDate.js | 5 - .../lowdb/node_modules/lodash/fp/isElement.js | 5 - .../lowdb/node_modules/lodash/fp/isEmpty.js | 5 - .../lowdb/node_modules/lodash/fp/isEqual.js | 5 - .../node_modules/lodash/fp/isEqualWith.js | 5 - .../lowdb/node_modules/lodash/fp/isError.js | 5 - .../lowdb/node_modules/lodash/fp/isFinite.js | 5 - .../node_modules/lodash/fp/isFunction.js | 5 - .../lowdb/node_modules/lodash/fp/isInteger.js | 5 - .../lowdb/node_modules/lodash/fp/isLength.js | 5 - .../lowdb/node_modules/lodash/fp/isMap.js | 5 - .../lowdb/node_modules/lodash/fp/isMatch.js | 5 - .../node_modules/lodash/fp/isMatchWith.js | 5 - .../lowdb/node_modules/lodash/fp/isNaN.js | 5 - .../lowdb/node_modules/lodash/fp/isNative.js | 5 - .../lowdb/node_modules/lodash/fp/isNil.js | 5 - .../lowdb/node_modules/lodash/fp/isNull.js | 5 - .../lowdb/node_modules/lodash/fp/isNumber.js | 5 - .../lowdb/node_modules/lodash/fp/isObject.js | 5 - .../node_modules/lodash/fp/isObjectLike.js | 5 - .../node_modules/lodash/fp/isPlainObject.js | 5 - .../lowdb/node_modules/lodash/fp/isRegExp.js | 5 - .../node_modules/lodash/fp/isSafeInteger.js | 5 - .../lowdb/node_modules/lodash/fp/isSet.js | 5 - .../lowdb/node_modules/lodash/fp/isString.js | 5 - .../lowdb/node_modules/lodash/fp/isSymbol.js | 5 - .../node_modules/lodash/fp/isTypedArray.js | 5 - .../node_modules/lodash/fp/isUndefined.js | 5 - .../lowdb/node_modules/lodash/fp/isWeakMap.js | 5 - .../lowdb/node_modules/lodash/fp/isWeakSet.js | 5 - .../lowdb/node_modules/lodash/fp/iteratee.js | 5 - .../lowdb/node_modules/lodash/fp/join.js | 5 - .../lowdb/node_modules/lodash/fp/juxt.js | 1 - .../lowdb/node_modules/lodash/fp/kebabCase.js | 5 - .../lowdb/node_modules/lodash/fp/keyBy.js | 5 - .../lowdb/node_modules/lodash/fp/keys.js | 5 - .../lowdb/node_modules/lodash/fp/keysIn.js | 5 - .../lowdb/node_modules/lodash/fp/lang.js | 2 - .../lowdb/node_modules/lodash/fp/last.js | 5 - .../node_modules/lodash/fp/lastIndexOf.js | 5 - .../node_modules/lodash/fp/lastIndexOfFrom.js | 5 - .../lowdb/node_modules/lodash/fp/lowerCase.js | 5 - .../node_modules/lodash/fp/lowerFirst.js | 5 - .../lowdb/node_modules/lodash/fp/lt.js | 5 - .../lowdb/node_modules/lodash/fp/lte.js | 5 - .../lowdb/node_modules/lodash/fp/map.js | 5 - .../lowdb/node_modules/lodash/fp/mapKeys.js | 5 - .../lowdb/node_modules/lodash/fp/mapValues.js | 5 - .../lowdb/node_modules/lodash/fp/matches.js | 5 - .../node_modules/lodash/fp/matchesProperty.js | 5 - .../lowdb/node_modules/lodash/fp/math.js | 2 - .../lowdb/node_modules/lodash/fp/max.js | 5 - .../lowdb/node_modules/lodash/fp/maxBy.js | 5 - .../lowdb/node_modules/lodash/fp/mean.js | 5 - .../lowdb/node_modules/lodash/fp/meanBy.js | 5 - .../lowdb/node_modules/lodash/fp/memoize.js | 5 - .../lowdb/node_modules/lodash/fp/merge.js | 5 - .../lowdb/node_modules/lodash/fp/mergeWith.js | 5 - .../lowdb/node_modules/lodash/fp/method.js | 5 - .../lowdb/node_modules/lodash/fp/methodOf.js | 5 - .../lowdb/node_modules/lodash/fp/min.js | 5 - .../lowdb/node_modules/lodash/fp/minBy.js | 5 - .../lowdb/node_modules/lodash/fp/mixin.js | 5 - .../lowdb/node_modules/lodash/fp/multiply.js | 5 - .../lowdb/node_modules/lodash/fp/nAry.js | 1 - .../lowdb/node_modules/lodash/fp/negate.js | 5 - .../lowdb/node_modules/lodash/fp/next.js | 5 - .../lowdb/node_modules/lodash/fp/noop.js | 5 - .../lowdb/node_modules/lodash/fp/now.js | 5 - .../lowdb/node_modules/lodash/fp/nth.js | 5 - .../lowdb/node_modules/lodash/fp/nthArg.js | 5 - .../lowdb/node_modules/lodash/fp/number.js | 2 - .../lowdb/node_modules/lodash/fp/object.js | 2 - .../lowdb/node_modules/lodash/fp/omit.js | 5 - .../lowdb/node_modules/lodash/fp/omitAll.js | 1 - .../lowdb/node_modules/lodash/fp/omitBy.js | 5 - .../lowdb/node_modules/lodash/fp/once.js | 5 - .../lowdb/node_modules/lodash/fp/orderBy.js | 5 - .../lowdb/node_modules/lodash/fp/over.js | 5 - .../lowdb/node_modules/lodash/fp/overArgs.js | 5 - .../lowdb/node_modules/lodash/fp/overEvery.js | 5 - .../lowdb/node_modules/lodash/fp/overSome.js | 5 - .../lowdb/node_modules/lodash/fp/pad.js | 5 - .../lowdb/node_modules/lodash/fp/padChars.js | 5 - .../node_modules/lodash/fp/padCharsEnd.js | 5 - .../node_modules/lodash/fp/padCharsStart.js | 5 - .../lowdb/node_modules/lodash/fp/padEnd.js | 5 - .../lowdb/node_modules/lodash/fp/padStart.js | 5 - .../lowdb/node_modules/lodash/fp/parseInt.js | 5 - .../lowdb/node_modules/lodash/fp/partial.js | 5 - .../node_modules/lodash/fp/partialRight.js | 5 - .../lowdb/node_modules/lodash/fp/partition.js | 5 - .../lowdb/node_modules/lodash/fp/path.js | 1 - .../lowdb/node_modules/lodash/fp/pathEq.js | 1 - .../lowdb/node_modules/lodash/fp/pathOr.js | 1 - .../lowdb/node_modules/lodash/fp/paths.js | 1 - .../lowdb/node_modules/lodash/fp/pick.js | 5 - .../lowdb/node_modules/lodash/fp/pickAll.js | 1 - .../lowdb/node_modules/lodash/fp/pickBy.js | 5 - .../lowdb/node_modules/lodash/fp/pipe.js | 1 - .../node_modules/lodash/fp/placeholder.js | 6 - .../lowdb/node_modules/lodash/fp/plant.js | 5 - .../lowdb/node_modules/lodash/fp/pluck.js | 1 - .../lowdb/node_modules/lodash/fp/prop.js | 1 - .../lowdb/node_modules/lodash/fp/propEq.js | 1 - .../lowdb/node_modules/lodash/fp/propOr.js | 1 - .../lowdb/node_modules/lodash/fp/property.js | 5 - .../node_modules/lodash/fp/propertyOf.js | 5 - .../lowdb/node_modules/lodash/fp/props.js | 1 - .../lowdb/node_modules/lodash/fp/pull.js | 5 - .../lowdb/node_modules/lodash/fp/pullAll.js | 5 - .../lowdb/node_modules/lodash/fp/pullAllBy.js | 5 - .../node_modules/lodash/fp/pullAllWith.js | 5 - .../lowdb/node_modules/lodash/fp/pullAt.js | 5 - .../lowdb/node_modules/lodash/fp/random.js | 5 - .../lowdb/node_modules/lodash/fp/range.js | 5 - .../node_modules/lodash/fp/rangeRight.js | 5 - .../lowdb/node_modules/lodash/fp/rearg.js | 5 - .../lowdb/node_modules/lodash/fp/reduce.js | 5 - .../node_modules/lodash/fp/reduceRight.js | 5 - .../lowdb/node_modules/lodash/fp/reject.js | 5 - .../lowdb/node_modules/lodash/fp/remove.js | 5 - .../lowdb/node_modules/lodash/fp/repeat.js | 5 - .../lowdb/node_modules/lodash/fp/replace.js | 5 - .../lowdb/node_modules/lodash/fp/rest.js | 5 - .../lowdb/node_modules/lodash/fp/restFrom.js | 5 - .../lowdb/node_modules/lodash/fp/result.js | 5 - .../lowdb/node_modules/lodash/fp/reverse.js | 5 - .../lowdb/node_modules/lodash/fp/round.js | 5 - .../lowdb/node_modules/lodash/fp/sample.js | 5 - .../node_modules/lodash/fp/sampleSize.js | 5 - .../lowdb/node_modules/lodash/fp/seq.js | 2 - .../lowdb/node_modules/lodash/fp/set.js | 5 - .../lowdb/node_modules/lodash/fp/setWith.js | 5 - .../lowdb/node_modules/lodash/fp/shuffle.js | 5 - .../lowdb/node_modules/lodash/fp/size.js | 5 - .../lowdb/node_modules/lodash/fp/slice.js | 5 - .../lowdb/node_modules/lodash/fp/snakeCase.js | 5 - .../lowdb/node_modules/lodash/fp/some.js | 5 - .../lowdb/node_modules/lodash/fp/sortBy.js | 5 - .../node_modules/lodash/fp/sortedIndex.js | 5 - .../node_modules/lodash/fp/sortedIndexBy.js | 5 - .../node_modules/lodash/fp/sortedIndexOf.js | 5 - .../node_modules/lodash/fp/sortedLastIndex.js | 5 - .../lodash/fp/sortedLastIndexBy.js | 5 - .../lodash/fp/sortedLastIndexOf.js | 5 - .../node_modules/lodash/fp/sortedUniq.js | 5 - .../node_modules/lodash/fp/sortedUniqBy.js | 5 - .../lowdb/node_modules/lodash/fp/split.js | 5 - .../lowdb/node_modules/lodash/fp/spread.js | 5 - .../node_modules/lodash/fp/spreadFrom.js | 5 - .../lowdb/node_modules/lodash/fp/startCase.js | 5 - .../node_modules/lodash/fp/startsWith.js | 5 - .../lowdb/node_modules/lodash/fp/string.js | 2 - .../lowdb/node_modules/lodash/fp/stubArray.js | 5 - .../lowdb/node_modules/lodash/fp/stubFalse.js | 5 - .../node_modules/lodash/fp/stubObject.js | 5 - .../node_modules/lodash/fp/stubString.js | 5 - .../lowdb/node_modules/lodash/fp/stubTrue.js | 5 - .../lowdb/node_modules/lodash/fp/subtract.js | 5 - .../lowdb/node_modules/lodash/fp/sum.js | 5 - .../lowdb/node_modules/lodash/fp/sumBy.js | 5 - .../lowdb/node_modules/lodash/fp/tail.js | 5 - .../lowdb/node_modules/lodash/fp/take.js | 5 - .../lowdb/node_modules/lodash/fp/takeRight.js | 5 - .../node_modules/lodash/fp/takeRightWhile.js | 5 - .../lowdb/node_modules/lodash/fp/takeWhile.js | 5 - .../lowdb/node_modules/lodash/fp/tap.js | 5 - .../lowdb/node_modules/lodash/fp/template.js | 5 - .../lodash/fp/templateSettings.js | 5 - .../lowdb/node_modules/lodash/fp/throttle.js | 5 - .../lowdb/node_modules/lodash/fp/thru.js | 5 - .../lowdb/node_modules/lodash/fp/times.js | 5 - .../lowdb/node_modules/lodash/fp/toArray.js | 5 - .../lowdb/node_modules/lodash/fp/toFinite.js | 5 - .../lowdb/node_modules/lodash/fp/toInteger.js | 5 - .../node_modules/lodash/fp/toIterator.js | 5 - .../lowdb/node_modules/lodash/fp/toJSON.js | 5 - .../lowdb/node_modules/lodash/fp/toLength.js | 5 - .../lowdb/node_modules/lodash/fp/toLower.js | 5 - .../lowdb/node_modules/lodash/fp/toNumber.js | 5 - .../lowdb/node_modules/lodash/fp/toPairs.js | 5 - .../lowdb/node_modules/lodash/fp/toPairsIn.js | 5 - .../lowdb/node_modules/lodash/fp/toPath.js | 5 - .../node_modules/lodash/fp/toPlainObject.js | 5 - .../node_modules/lodash/fp/toSafeInteger.js | 5 - .../lowdb/node_modules/lodash/fp/toString.js | 5 - .../lowdb/node_modules/lodash/fp/toUpper.js | 5 - .../lowdb/node_modules/lodash/fp/transform.js | 5 - .../lowdb/node_modules/lodash/fp/trim.js | 5 - .../lowdb/node_modules/lodash/fp/trimChars.js | 5 - .../node_modules/lodash/fp/trimCharsEnd.js | 5 - .../node_modules/lodash/fp/trimCharsStart.js | 5 - .../lowdb/node_modules/lodash/fp/trimEnd.js | 5 - .../lowdb/node_modules/lodash/fp/trimStart.js | 5 - .../lowdb/node_modules/lodash/fp/truncate.js | 5 - .../lowdb/node_modules/lodash/fp/unapply.js | 1 - .../lowdb/node_modules/lodash/fp/unary.js | 5 - .../lowdb/node_modules/lodash/fp/unescape.js | 5 - .../lowdb/node_modules/lodash/fp/union.js | 5 - .../lowdb/node_modules/lodash/fp/unionBy.js | 5 - .../lowdb/node_modules/lodash/fp/unionWith.js | 5 - .../lowdb/node_modules/lodash/fp/uniq.js | 5 - .../lowdb/node_modules/lodash/fp/uniqBy.js | 5 - .../lowdb/node_modules/lodash/fp/uniqWith.js | 5 - .../lowdb/node_modules/lodash/fp/uniqueId.js | 5 - .../lowdb/node_modules/lodash/fp/unnest.js | 1 - .../lowdb/node_modules/lodash/fp/unset.js | 5 - .../lowdb/node_modules/lodash/fp/unzip.js | 5 - .../lowdb/node_modules/lodash/fp/unzipWith.js | 5 - .../lowdb/node_modules/lodash/fp/update.js | 5 - .../node_modules/lodash/fp/updateWith.js | 5 - .../lowdb/node_modules/lodash/fp/upperCase.js | 5 - .../node_modules/lodash/fp/upperFirst.js | 5 - .../lowdb/node_modules/lodash/fp/useWith.js | 1 - .../lowdb/node_modules/lodash/fp/util.js | 2 - .../lowdb/node_modules/lodash/fp/value.js | 5 - .../lowdb/node_modules/lodash/fp/valueOf.js | 5 - .../lowdb/node_modules/lodash/fp/values.js | 5 - .../lowdb/node_modules/lodash/fp/valuesIn.js | 5 - .../lowdb/node_modules/lodash/fp/whereEq.js | 1 - .../lowdb/node_modules/lodash/fp/without.js | 5 - .../lowdb/node_modules/lodash/fp/words.js | 5 - .../lowdb/node_modules/lodash/fp/wrap.js | 5 - .../lowdb/node_modules/lodash/fp/wrapperAt.js | 5 - .../node_modules/lodash/fp/wrapperChain.js | 5 - .../node_modules/lodash/fp/wrapperLodash.js | 5 - .../node_modules/lodash/fp/wrapperReverse.js | 5 - .../node_modules/lodash/fp/wrapperValue.js | 5 - .../lowdb/node_modules/lodash/fp/xor.js | 5 - .../lowdb/node_modules/lodash/fp/xorBy.js | 5 - .../lowdb/node_modules/lodash/fp/xorWith.js | 5 - .../lowdb/node_modules/lodash/fp/zip.js | 5 - .../lowdb/node_modules/lodash/fp/zipObj.js | 1 - .../lowdb/node_modules/lodash/fp/zipObject.js | 5 - .../node_modules/lodash/fp/zipObjectDeep.js | 5 - .../lowdb/node_modules/lodash/fp/zipWith.js | 5 - .../lowdb/node_modules/lodash/fromPairs.js | 28 - .../lowdb/node_modules/lodash/function.js | 25 - .../lowdb/node_modules/lodash/functions.js | 31 - .../lowdb/node_modules/lodash/functionsIn.js | 31 - node_modules/lowdb/node_modules/lodash/get.js | 33 - .../lowdb/node_modules/lodash/groupBy.js | 41 - node_modules/lowdb/node_modules/lodash/gt.js | 29 - node_modules/lowdb/node_modules/lodash/gte.js | 30 - node_modules/lowdb/node_modules/lodash/has.js | 35 - .../lowdb/node_modules/lodash/hasIn.js | 34 - .../lowdb/node_modules/lodash/head.js | 23 - .../lowdb/node_modules/lodash/identity.js | 21 - .../lowdb/node_modules/lodash/inRange.js | 54 - .../lowdb/node_modules/lodash/includes.js | 53 - .../lowdb/node_modules/lodash/index.js | 1 - .../lowdb/node_modules/lodash/indexOf.js | 42 - .../lowdb/node_modules/lodash/initial.js | 21 - .../lowdb/node_modules/lodash/intersection.js | 30 - .../node_modules/lodash/intersectionBy.js | 45 - .../node_modules/lodash/intersectionWith.js | 42 - .../lowdb/node_modules/lodash/invert.js | 27 - .../lowdb/node_modules/lodash/invertBy.js | 45 - .../lowdb/node_modules/lodash/invoke.js | 24 - .../lowdb/node_modules/lodash/invokeMap.js | 44 - .../lowdb/node_modules/lodash/isArguments.js | 46 - .../lowdb/node_modules/lodash/isArray.js | 28 - .../node_modules/lodash/isArrayBuffer.js | 37 - .../lowdb/node_modules/lodash/isArrayLike.js | 34 - .../node_modules/lodash/isArrayLikeObject.js | 33 - .../lowdb/node_modules/lodash/isBoolean.js | 39 - .../lowdb/node_modules/lodash/isBuffer.js | 37 - .../lowdb/node_modules/lodash/isDate.js | 38 - .../lowdb/node_modules/lodash/isElement.js | 26 - .../lowdb/node_modules/lodash/isEmpty.js | 80 - .../lowdb/node_modules/lodash/isEqual.js | 36 - .../lowdb/node_modules/lodash/isEqualWith.js | 42 - .../lowdb/node_modules/lodash/isError.js | 43 - .../lowdb/node_modules/lodash/isFinite.js | 37 - .../lowdb/node_modules/lodash/isFunction.js | 43 - .../lowdb/node_modules/lodash/isInteger.js | 33 - .../lowdb/node_modules/lodash/isLength.js | 36 - .../lowdb/node_modules/lodash/isMap.js | 29 - .../lowdb/node_modules/lodash/isMatch.js | 32 - .../lowdb/node_modules/lodash/isMatchWith.js | 41 - .../lowdb/node_modules/lodash/isNaN.js | 38 - .../lowdb/node_modules/lodash/isNative.js | 37 - .../lowdb/node_modules/lodash/isNil.js | 25 - .../lowdb/node_modules/lodash/isNull.js | 22 - .../lowdb/node_modules/lodash/isNumber.js | 48 - .../lowdb/node_modules/lodash/isObject.js | 31 - .../lowdb/node_modules/lodash/isObjectLike.js | 29 - .../node_modules/lodash/isPlainObject.js | 70 - .../lowdb/node_modules/lodash/isRegExp.js | 38 - .../node_modules/lodash/isSafeInteger.js | 38 - .../lowdb/node_modules/lodash/isSet.js | 29 - .../lowdb/node_modules/lodash/isString.js | 40 - .../lowdb/node_modules/lodash/isSymbol.js | 39 - .../lowdb/node_modules/lodash/isTypedArray.js | 80 - .../lowdb/node_modules/lodash/isUndefined.js | 22 - .../lowdb/node_modules/lodash/isWeakMap.js | 29 - .../lowdb/node_modules/lodash/isWeakSet.js | 38 - .../lowdb/node_modules/lodash/iteratee.js | 50 - .../lowdb/node_modules/lodash/join.js | 26 - .../lowdb/node_modules/lodash/kebabCase.js | 28 - .../lowdb/node_modules/lodash/keyBy.js | 36 - .../lowdb/node_modules/lodash/keys.js | 56 - .../lowdb/node_modules/lodash/keysIn.js | 55 - .../lowdb/node_modules/lodash/lang.js | 57 - .../lowdb/node_modules/lodash/last.js | 20 - .../lowdb/node_modules/lodash/lastIndexOf.js | 54 - .../lowdb/node_modules/lodash/lodash.js | 16404 ---------------- .../lowdb/node_modules/lodash/lodash.min.js | 127 - .../lowdb/node_modules/lodash/lowerCase.js | 27 - .../lowdb/node_modules/lodash/lowerFirst.js | 22 - node_modules/lowdb/node_modules/lodash/lt.js | 29 - node_modules/lowdb/node_modules/lodash/lte.js | 30 - node_modules/lowdb/node_modules/lodash/map.js | 54 - .../lowdb/node_modules/lodash/mapKeys.js | 36 - .../lowdb/node_modules/lodash/mapValues.js | 43 - .../lowdb/node_modules/lodash/matches.js | 32 - .../node_modules/lodash/matchesProperty.js | 32 - .../lowdb/node_modules/lodash/math.js | 17 - node_modules/lowdb/node_modules/lodash/max.js | 29 - .../lowdb/node_modules/lodash/maxBy.js | 35 - .../lowdb/node_modules/lodash/mean.js | 22 - .../lowdb/node_modules/lodash/meanBy.js | 32 - .../lowdb/node_modules/lodash/memoize.js | 73 - .../lowdb/node_modules/lodash/merge.js | 39 - .../lowdb/node_modules/lodash/mergeWith.js | 46 - .../lowdb/node_modules/lodash/method.js | 34 - .../lowdb/node_modules/lodash/methodOf.js | 33 - node_modules/lowdb/node_modules/lodash/min.js | 29 - .../lowdb/node_modules/lodash/minBy.js | 35 - .../lowdb/node_modules/lodash/mixin.js | 74 - .../lowdb/node_modules/lodash/multiply.js | 22 - .../lowdb/node_modules/lodash/negate.js | 33 - .../lowdb/node_modules/lodash/next.js | 35 - .../lowdb/node_modules/lodash/noop.js | 17 - node_modules/lowdb/node_modules/lodash/now.js | 21 - node_modules/lowdb/node_modules/lodash/nth.js | 29 - .../lowdb/node_modules/lodash/nthArg.js | 32 - .../lowdb/node_modules/lodash/number.js | 5 - .../lowdb/node_modules/lodash/object.js | 48 - .../lowdb/node_modules/lodash/omit.js | 36 - .../lowdb/node_modules/lodash/omitBy.js | 32 - .../lowdb/node_modules/lodash/once.js | 25 - .../lowdb/node_modules/lodash/orderBy.js | 47 - .../lowdb/node_modules/lodash/over.js | 24 - .../lowdb/node_modules/lodash/overArgs.js | 62 - .../lowdb/node_modules/lodash/overEvery.js | 30 - .../lowdb/node_modules/lodash/overSome.js | 30 - .../lowdb/node_modules/lodash/package.json | 80 - node_modules/lowdb/node_modules/lodash/pad.js | 49 - .../lowdb/node_modules/lodash/padEnd.js | 39 - .../lowdb/node_modules/lodash/padStart.js | 39 - .../lowdb/node_modules/lodash/parseInt.js | 49 - .../lowdb/node_modules/lodash/partial.js | 50 - .../lowdb/node_modules/lodash/partialRight.js | 49 - .../lowdb/node_modules/lodash/partition.js | 44 - .../lowdb/node_modules/lodash/pick.js | 28 - .../lowdb/node_modules/lodash/pickBy.js | 27 - .../lowdb/node_modules/lodash/plant.js | 48 - .../lowdb/node_modules/lodash/property.js | 32 - .../lowdb/node_modules/lodash/propertyOf.js | 30 - .../lowdb/node_modules/lodash/pull.js | 29 - .../lowdb/node_modules/lodash/pullAll.js | 29 - .../lowdb/node_modules/lodash/pullAllBy.js | 34 - .../lowdb/node_modules/lodash/pullAllWith.js | 32 - .../lowdb/node_modules/lodash/pullAt.js | 46 - .../lowdb/node_modules/lodash/random.js | 82 - .../lowdb/node_modules/lodash/range.js | 46 - .../lowdb/node_modules/lodash/rangeRight.js | 41 - .../lowdb/node_modules/lodash/rearg.js | 34 - .../lowdb/node_modules/lodash/reduce.js | 51 - .../lowdb/node_modules/lodash/reduceRight.js | 36 - .../lowdb/node_modules/lodash/reject.js | 49 - .../lowdb/node_modules/lodash/remove.js | 54 - .../lowdb/node_modules/lodash/repeat.js | 37 - .../lowdb/node_modules/lodash/replace.js | 35 - .../lowdb/node_modules/lodash/rest.js | 64 - .../lowdb/node_modules/lodash/result.js | 57 - .../lowdb/node_modules/lodash/reverse.js | 34 - .../lowdb/node_modules/lodash/round.js | 26 - .../lowdb/node_modules/lodash/sample.js | 26 - .../lowdb/node_modules/lodash/sampleSize.js | 49 - node_modules/lowdb/node_modules/lodash/seq.js | 16 - node_modules/lowdb/node_modules/lodash/set.js | 35 - .../lowdb/node_modules/lodash/setWith.js | 32 - .../lowdb/node_modules/lodash/shuffle.js | 25 - .../lowdb/node_modules/lodash/size.js | 50 - .../lowdb/node_modules/lodash/slice.js | 37 - .../lowdb/node_modules/lodash/snakeCase.js | 28 - .../lowdb/node_modules/lodash/some.js | 52 - .../lowdb/node_modules/lodash/sortBy.js | 59 - .../lowdb/node_modules/lodash/sortedIndex.js | 24 - .../node_modules/lodash/sortedIndexBy.js | 34 - .../node_modules/lodash/sortedIndexOf.js | 31 - .../node_modules/lodash/sortedLastIndex.js | 25 - .../node_modules/lodash/sortedLastIndexBy.js | 34 - .../node_modules/lodash/sortedLastIndexOf.js | 31 - .../lowdb/node_modules/lodash/sortedUniq.js | 24 - .../lowdb/node_modules/lodash/sortedUniqBy.js | 26 - .../lowdb/node_modules/lodash/split.js | 58 - .../lowdb/node_modules/lodash/spread.js | 63 - .../lowdb/node_modules/lodash/startCase.js | 29 - .../lowdb/node_modules/lodash/startsWith.js | 35 - .../lowdb/node_modules/lodash/string.js | 33 - .../lowdb/node_modules/lodash/stubArray.js | 23 - .../lowdb/node_modules/lodash/stubFalse.js | 18 - .../lowdb/node_modules/lodash/stubObject.js | 23 - .../lowdb/node_modules/lodash/stubString.js | 18 - .../lowdb/node_modules/lodash/stubTrue.js | 18 - .../lowdb/node_modules/lodash/subtract.js | 22 - node_modules/lowdb/node_modules/lodash/sum.js | 24 - .../lowdb/node_modules/lodash/sumBy.js | 34 - .../lowdb/node_modules/lodash/tail.js | 21 - .../lowdb/node_modules/lodash/take.js | 37 - .../lowdb/node_modules/lodash/takeRight.js | 39 - .../node_modules/lodash/takeRightWhile.js | 46 - .../lowdb/node_modules/lodash/takeWhile.js | 46 - node_modules/lowdb/node_modules/lodash/tap.js | 29 - .../lowdb/node_modules/lodash/template.js | 237 - .../node_modules/lodash/templateSettings.js | 67 - .../lowdb/node_modules/lodash/throttle.js | 66 - .../lowdb/node_modules/lodash/thru.js | 28 - .../lowdb/node_modules/lodash/times.js | 51 - .../lowdb/node_modules/lodash/toArray.js | 58 - .../lowdb/node_modules/lodash/toFinite.js | 42 - .../lowdb/node_modules/lodash/toInteger.js | 36 - .../lowdb/node_modules/lodash/toIterator.js | 23 - .../lowdb/node_modules/lodash/toJSON.js | 1 - .../lowdb/node_modules/lodash/toLength.js | 38 - .../lowdb/node_modules/lodash/toLower.js | 28 - .../lowdb/node_modules/lodash/toNumber.js | 67 - .../lowdb/node_modules/lodash/toPairs.js | 30 - .../lowdb/node_modules/lodash/toPairsIn.js | 30 - .../lowdb/node_modules/lodash/toPath.js | 32 - .../node_modules/lodash/toPlainObject.js | 32 - .../node_modules/lodash/toSafeInteger.js | 35 - .../lowdb/node_modules/lodash/toString.js | 28 - .../lowdb/node_modules/lodash/toUpper.js | 28 - .../lowdb/node_modules/lodash/transform.js | 63 - .../lowdb/node_modules/lodash/trim.js | 49 - .../lowdb/node_modules/lodash/trimEnd.js | 43 - .../lowdb/node_modules/lodash/trimStart.js | 43 - .../lowdb/node_modules/lodash/truncate.js | 111 - .../lowdb/node_modules/lodash/unary.js | 22 - .../lowdb/node_modules/lodash/unescape.js | 34 - .../lowdb/node_modules/lodash/union.js | 26 - .../lowdb/node_modules/lodash/unionBy.js | 39 - .../lowdb/node_modules/lodash/unionWith.js | 35 - .../lowdb/node_modules/lodash/uniq.js | 26 - .../lowdb/node_modules/lodash/uniqBy.js | 32 - .../lowdb/node_modules/lodash/uniqWith.js | 28 - .../lowdb/node_modules/lodash/uniqueId.js | 28 - .../lowdb/node_modules/lodash/unset.js | 34 - .../lowdb/node_modules/lodash/unzip.js | 45 - .../lowdb/node_modules/lodash/unzipWith.js | 39 - .../lowdb/node_modules/lodash/update.js | 35 - .../lowdb/node_modules/lodash/updateWith.js | 33 - .../lowdb/node_modules/lodash/upperCase.js | 27 - .../lowdb/node_modules/lodash/upperFirst.js | 22 - .../lowdb/node_modules/lodash/util.js | 33 - .../lowdb/node_modules/lodash/value.js | 1 - .../lowdb/node_modules/lodash/valueOf.js | 1 - .../lowdb/node_modules/lodash/values.js | 34 - .../lowdb/node_modules/lodash/valuesIn.js | 32 - .../lowdb/node_modules/lodash/without.js | 29 - .../lowdb/node_modules/lodash/words.js | 89 - .../lowdb/node_modules/lodash/wrap.js | 31 - .../lowdb/node_modules/lodash/wrapperAt.js | 50 - .../lowdb/node_modules/lodash/wrapperChain.js | 34 - .../node_modules/lodash/wrapperLodash.js | 147 - .../node_modules/lodash/wrapperReverse.js | 44 - .../lowdb/node_modules/lodash/wrapperValue.js | 21 - node_modules/lowdb/node_modules/lodash/xor.js | 28 - .../lowdb/node_modules/lodash/xorBy.js | 39 - .../lowdb/node_modules/lodash/xorWith.js | 35 - node_modules/lowdb/node_modules/lodash/zip.js | 22 - .../lowdb/node_modules/lodash/zipObject.js | 24 - .../node_modules/lodash/zipObjectDeep.js | 23 - .../lowdb/node_modules/lodash/zipWith.js | 31 - .../lowdb/node_modules/steno/.npmignore | 1 - .../lowdb/node_modules/steno/.travis.yml | 3 - node_modules/lowdb/node_modules/steno/LICENSE | 22 - .../lowdb/node_modules/steno/README.md | 79 - .../lowdb/node_modules/steno/index.js | 80 - .../lowdb/node_modules/steno/package.json | 71 - node_modules/lowdb/package.json | 97 - node_modules/lowdb/webpack.config.js | 18 - node_modules/twit/.npmignore | 3 - node_modules/twit/README.md | 647 - node_modules/twit/examples/bot.js | 127 - node_modules/twit/examples/rtd2.js | 77 - node_modules/twit/lib/endpoints.js | 11 - node_modules/twit/lib/file_uploader.js | 143 - node_modules/twit/lib/helpers.js | 128 - node_modules/twit/lib/parser.js | 56 - node_modules/twit/lib/settings.js | 2 - .../twit/lib/streaming-api-connection.js | 358 - node_modules/twit/lib/twitter.js | 485 - node_modules/twit/node_modules/.bin/mime | 1 - .../twit/node_modules/bluebird/LICENSE | 21 - .../twit/node_modules/bluebird/README.md | 51 - .../twit/node_modules/bluebird/changelog.md | 1 - .../bluebird/js/browser/bluebird.core.js | 3654 ---- .../bluebird/js/browser/bluebird.core.min.js | 31 - .../bluebird/js/browser/bluebird.js | 5476 ------ .../bluebird/js/browser/bluebird.min.js | 31 - .../node_modules/bluebird/js/release/any.js | 21 - .../bluebird/js/release/assert.js | 55 - .../node_modules/bluebird/js/release/async.js | 166 - .../node_modules/bluebird/js/release/bind.js | 67 - .../bluebird/js/release/bluebird.js | 11 - .../bluebird/js/release/call_get.js | 123 - .../bluebird/js/release/cancel.js | 125 - .../bluebird/js/release/catch_filter.js | 42 - .../bluebird/js/release/context.js | 69 - .../bluebird/js/release/debuggability.js | 855 - .../bluebird/js/release/direct_resolve.js | 46 - .../node_modules/bluebird/js/release/each.js | 29 - .../bluebird/js/release/errors.js | 116 - .../node_modules/bluebird/js/release/es5.js | 80 - .../bluebird/js/release/filter.js | 12 - .../bluebird/js/release/finally.js | 111 - .../bluebird/js/release/generators.js | 219 - .../node_modules/bluebird/js/release/join.js | 149 - .../node_modules/bluebird/js/release/map.js | 164 - .../bluebird/js/release/method.js | 55 - .../bluebird/js/release/nodeback.js | 51 - .../bluebird/js/release/nodeify.js | 58 - .../bluebird/js/release/promise.js | 767 - .../bluebird/js/release/promise_array.js | 184 - .../bluebird/js/release/promisify.js | 314 - .../node_modules/bluebird/js/release/props.js | 118 - .../node_modules/bluebird/js/release/queue.js | 90 - .../node_modules/bluebird/js/release/race.js | 49 - .../bluebird/js/release/reduce.js | 162 - .../bluebird/js/release/schedule.js | 60 - .../bluebird/js/release/settle.js | 43 - .../node_modules/bluebird/js/release/some.js | 148 - .../js/release/synchronous_inspection.js | 96 - .../bluebird/js/release/thenables.js | 86 - .../bluebird/js/release/timers.js | 92 - .../node_modules/bluebird/js/release/using.js | 226 - .../node_modules/bluebird/js/release/util.js | 370 - .../twit/node_modules/bluebird/package.json | 102 - .../twit/node_modules/mime/.npmignore | 0 node_modules/twit/node_modules/mime/LICENSE | 19 - node_modules/twit/node_modules/mime/README.md | 90 - .../twit/node_modules/mime/build/build.js | 11 - .../twit/node_modules/mime/build/test.js | 57 - node_modules/twit/node_modules/mime/cli.js | 8 - node_modules/twit/node_modules/mime/mime.js | 108 - .../twit/node_modules/mime/package.json | 73 - .../twit/node_modules/mime/types.json | 1 - .../twit/node_modules/request/.eslintrc | 45 - .../twit/node_modules/request/.npmignore | 3 - .../twit/node_modules/request/.travis.yml | 14 - .../twit/node_modules/request/CHANGELOG.md | 499 - .../twit/node_modules/request/CONTRIBUTING.md | 44 - .../twit/node_modules/request/LICENSE | 55 - .../twit/node_modules/request/README.md | 1059 - .../request/disabled.appveyor.yml | 36 - .../node_modules/request/examples/README.md | 115 - .../twit/node_modules/request/index.js | 152 - .../twit/node_modules/request/lib/auth.js | 153 - .../twit/node_modules/request/lib/cookies.js | 39 - .../request/lib/getProxyFromURI.js | 79 - .../twit/node_modules/request/lib/har.js | 205 - .../twit/node_modules/request/lib/helpers.js | 64 - .../node_modules/request/lib/multipart.js | 109 - .../twit/node_modules/request/lib/oauth.js | 147 - .../node_modules/request/lib/querystring.js | 51 - .../twit/node_modules/request/lib/redirect.js | 153 - .../twit/node_modules/request/lib/tunnel.js | 183 - .../request/node_modules/.bin/har-validator | 1 - .../request/node_modules/.bin/uuid | 1 - .../request/node_modules/aws-sign2/LICENSE | 55 - .../request/node_modules/aws-sign2/README.md | 4 - .../request/node_modules/aws-sign2/index.js | 202 - .../node_modules/aws-sign2/package.json | 45 - .../request/node_modules/bl/.jshintrc | 59 - .../request/node_modules/bl/.npmignore | 1 - .../request/node_modules/bl/.travis.yml | 11 - .../request/node_modules/bl/LICENSE.md | 13 - .../request/node_modules/bl/README.md | 198 - .../request/node_modules/bl/bl.js | 221 - .../node_modules/readable-stream/.npmignore | 5 - .../bl/node_modules/readable-stream/LICENSE | 18 - .../bl/node_modules/readable-stream/README.md | 15 - .../bl/node_modules/readable-stream/duplex.js | 1 - .../readable-stream/lib/_stream_duplex.js | 89 - .../lib/_stream_passthrough.js | 46 - .../readable-stream/lib/_stream_readable.js | 982 - .../readable-stream/lib/_stream_transform.js | 210 - .../readable-stream/lib/_stream_writable.js | 386 - .../node_modules/core-util-is/LICENSE | 19 - .../node_modules/core-util-is/README.md | 3 - .../node_modules/core-util-is/float.patch | 604 - .../node_modules/core-util-is/lib/util.js | 107 - .../node_modules/core-util-is/package.json | 60 - .../node_modules/core-util-is/test.js | 68 - .../node_modules/inherits/LICENSE | 16 - .../node_modules/inherits/README.md | 42 - .../node_modules/inherits/inherits.js | 1 - .../node_modules/inherits/inherits_browser.js | 23 - .../node_modules/inherits/package.json | 50 - .../node_modules/inherits/test.js | 25 - .../node_modules/isarray/README.md | 54 - .../node_modules/isarray/build/build.js | 209 - .../node_modules/isarray/component.json | 19 - .../node_modules/isarray/index.js | 3 - .../node_modules/isarray/package.json | 53 - .../node_modules/string_decoder/.npmignore | 2 - .../node_modules/string_decoder/LICENSE | 20 - .../node_modules/string_decoder/README.md | 7 - .../node_modules/string_decoder/index.js | 221 - .../node_modules/string_decoder/package.json | 54 - .../node_modules/readable-stream/package.json | 79 - .../readable-stream/passthrough.js | 1 - .../node_modules/readable-stream/readable.js | 11 - .../node_modules/readable-stream/transform.js | 1 - .../node_modules/readable-stream/writable.js | 1 - .../request/node_modules/bl/package.json | 61 - .../node_modules/bl/test/basic-test.js | 557 - .../request/node_modules/bl/test/sauce.js | 38 - .../request/node_modules/bl/test/test.js | 9 - .../request/node_modules/caseless/README.md | 45 - .../request/node_modules/caseless/index.js | 65 - .../node_modules/caseless/package.json | 57 - .../request/node_modules/caseless/test.js | 40 - .../node_modules/combined-stream/License | 19 - .../node_modules/combined-stream/Readme.md | 138 - .../combined-stream/lib/combined_stream.js | 188 - .../node_modules/delayed-stream/.npmignore | 1 - .../node_modules/delayed-stream/License | 19 - .../node_modules/delayed-stream/Makefile | 7 - .../node_modules/delayed-stream/Readme.md | 141 - .../delayed-stream/lib/delayed_stream.js | 107 - .../node_modules/delayed-stream/package.json | 64 - .../node_modules/combined-stream/package.json | 67 - .../request/node_modules/extend/.jscs.json | 68 - .../request/node_modules/extend/.npmignore | 1 - .../request/node_modules/extend/.travis.yml | 36 - .../request/node_modules/extend/CHANGELOG.md | 61 - .../request/node_modules/extend/LICENSE | 23 - .../request/node_modules/extend/README.md | 62 - .../node_modules/extend/component.json | 32 - .../request/node_modules/extend/index.js | 89 - .../request/node_modules/extend/package.json | 70 - .../node_modules/forever-agent/LICENSE | 55 - .../node_modules/forever-agent/README.md | 4 - .../node_modules/forever-agent/index.js | 138 - .../node_modules/forever-agent/package.json | 56 - .../node_modules/form-data/.dockerignore | 7 - .../node_modules/form-data/.editorconfig | 10 - .../node_modules/form-data/.eslintignore | 1 - .../request/node_modules/form-data/.eslintrc | 64 - .../request/node_modules/form-data/License | 19 - .../request/node_modules/form-data/README.md | 218 - .../node_modules/form-data/lib/browser.js | 2 - .../node_modules/form-data/lib/form_data.js | 411 - .../node_modules/form-data/lib/populate.js | 9 - .../form-data/node_modules/async/CHANGELOG.md | 125 - .../form-data/node_modules/async/LICENSE | 19 - .../form-data/node_modules/async/README.md | 1877 -- .../node_modules/async/dist/async.js | 1265 -- .../node_modules/async/dist/async.min.js | 2 - .../form-data/node_modules/async/lib/async.js | 1265 -- .../form-data/node_modules/async/package.json | 123 - .../node_modules/mime-types/HISTORY.md | 197 - .../form-data/node_modules/mime-types/LICENSE | 23 - .../node_modules/mime-types/README.md | 103 - .../node_modules/mime-types/index.js | 188 - .../node_modules/mime-db/HISTORY.md | 341 - .../mime-types/node_modules/mime-db/LICENSE | 22 - .../mime-types/node_modules/mime-db/README.md | 82 - .../mime-types/node_modules/mime-db/db.json | 6627 ------- .../mime-types/node_modules/mime-db/index.js | 11 - .../node_modules/mime-db/package.json | 99 - .../node_modules/mime-types/package.json | 89 - .../node_modules/form-data/package.json | 104 - .../node_modules/form-data/wercker.yml | 36 - .../node_modules/har-validator/LICENSE | 13 - .../node_modules/har-validator/README.md | 362 - .../har-validator/bin/har-validator | 45 - .../node_modules/har-validator/lib/error.js | 10 - .../node_modules/har-validator/lib/index.js | 39 - .../har-validator/lib/schemas/cache.json | 13 - .../har-validator/lib/schemas/cacheEntry.json | 31 - .../har-validator/lib/schemas/content.json | 27 - .../har-validator/lib/schemas/cookie.json | 34 - .../har-validator/lib/schemas/creator.json | 18 - .../har-validator/lib/schemas/entry.json | 51 - .../har-validator/lib/schemas/har.json | 11 - .../har-validator/lib/schemas/index.js | 49 - .../har-validator/lib/schemas/log.json | 34 - .../har-validator/lib/schemas/page.json | 30 - .../lib/schemas/pageTimings.json | 16 - .../har-validator/lib/schemas/postData.json | 41 - .../har-validator/lib/schemas/record.json | 18 - .../har-validator/lib/schemas/request.json | 55 - .../har-validator/lib/schemas/response.json | 52 - .../har-validator/lib/schemas/timings.json | 40 - .../node_modules/bluebird/LICENSE | 21 - .../node_modules/bluebird/README.md | 679 - .../node_modules/bluebird/changelog.md | 1723 -- .../bluebird/js/browser/bluebird.js | 4887 ----- .../bluebird/js/browser/bluebird.min.js | 31 - .../node_modules/bluebird/js/main/any.js | 21 - .../node_modules/bluebird/js/main/assert.js | 55 - .../node_modules/bluebird/js/main/async.js | 150 - .../node_modules/bluebird/js/main/bind.js | 72 - .../node_modules/bluebird/js/main/bluebird.js | 11 - .../node_modules/bluebird/js/main/call_get.js | 123 - .../node_modules/bluebird/js/main/cancel.js | 48 - .../bluebird/js/main/captured_trace.js | 493 - .../bluebird/js/main/catch_filter.js | 66 - .../node_modules/bluebird/js/main/context.js | 38 - .../bluebird/js/main/debuggability.js | 162 - .../bluebird/js/main/direct_resolve.js | 63 - .../node_modules/bluebird/js/main/each.js | 12 - .../node_modules/bluebird/js/main/errors.js | 111 - .../node_modules/bluebird/js/main/es5.js | 80 - .../node_modules/bluebird/js/main/filter.js | 12 - .../node_modules/bluebird/js/main/finally.js | 98 - .../bluebird/js/main/generators.js | 136 - .../node_modules/bluebird/js/main/join.js | 107 - .../node_modules/bluebird/js/main/map.js | 133 - .../node_modules/bluebird/js/main/method.js | 44 - .../node_modules/bluebird/js/main/nodeify.js | 59 - .../node_modules/bluebird/js/main/progress.js | 76 - .../node_modules/bluebird/js/main/promise.js | 754 - .../bluebird/js/main/promise_array.js | 142 - .../bluebird/js/main/promise_resolver.js | 123 - .../bluebird/js/main/promisify.js | 307 - .../node_modules/bluebird/js/main/props.js | 79 - .../node_modules/bluebird/js/main/queue.js | 90 - .../node_modules/bluebird/js/main/race.js | 47 - .../node_modules/bluebird/js/main/reduce.js | 148 - .../node_modules/bluebird/js/main/schedule.js | 35 - .../node_modules/bluebird/js/main/settle.js | 40 - .../node_modules/bluebird/js/main/some.js | 125 - .../js/main/synchronous_inspection.js | 94 - .../bluebird/js/main/thenables.js | 84 - .../node_modules/bluebird/js/main/timers.js | 64 - .../node_modules/bluebird/js/main/using.js | 213 - .../node_modules/bluebird/js/main/util.js | 321 - .../node_modules/bluebird/package.json | 101 - .../har-validator/node_modules/chalk/index.js | 116 - .../har-validator/node_modules/chalk/license | 21 - .../chalk/node_modules/ansi-styles/index.js | 65 - .../chalk/node_modules/ansi-styles/license | 21 - .../node_modules/ansi-styles/package.json | 80 - .../chalk/node_modules/ansi-styles/readme.md | 86 - .../escape-string-regexp/index.js | 11 - .../node_modules/escape-string-regexp/license | 21 - .../escape-string-regexp/package.json | 75 - .../escape-string-regexp/readme.md | 27 - .../chalk/node_modules/has-ansi/index.js | 4 - .../chalk/node_modules/has-ansi/license | 21 - .../has-ansi/node_modules/ansi-regex/index.js | 4 - .../has-ansi/node_modules/ansi-regex/license | 21 - .../node_modules/ansi-regex/package.json | 86 - .../node_modules/ansi-regex/readme.md | 31 - .../chalk/node_modules/has-ansi/package.json | 85 - .../chalk/node_modules/has-ansi/readme.md | 36 - .../chalk/node_modules/strip-ansi/index.js | 6 - .../chalk/node_modules/strip-ansi/license | 21 - .../node_modules/ansi-regex/index.js | 4 - .../node_modules/ansi-regex/license | 21 - .../node_modules/ansi-regex/package.json | 86 - .../node_modules/ansi-regex/readme.md | 31 - .../node_modules/strip-ansi/package.json | 90 - .../chalk/node_modules/strip-ansi/readme.md | 33 - .../node_modules/supports-color/index.js | 50 - .../chalk/node_modules/supports-color/license | 21 - .../node_modules/supports-color/package.json | 79 - .../node_modules/supports-color/readme.md | 36 - .../node_modules/chalk/package.json | 107 - .../node_modules/chalk/readme.md | 213 - .../node_modules/commander/History.md | 261 - .../node_modules/commander/LICENSE | 22 - .../node_modules/commander/Readme.md | 351 - .../node_modules/commander/index.js | 1110 -- .../node_modules/graceful-readlink/.npmignore | 3 - .../graceful-readlink/.travis.yml | 5 - .../node_modules/graceful-readlink/LICENSE | 22 - .../node_modules/graceful-readlink/README.md | 17 - .../node_modules/graceful-readlink/index.js | 12 - .../graceful-readlink/package.json | 48 - .../node_modules/commander/package.json | 71 - .../node_modules/is-my-json-valid/.npmignore | 2 - .../node_modules/is-my-json-valid/.travis.yml | 3 - .../node_modules/is-my-json-valid/LICENSE | 21 - .../node_modules/is-my-json-valid/README.md | 173 - .../node_modules/is-my-json-valid/example.js | 18 - .../node_modules/is-my-json-valid/formats.js | 14 - .../node_modules/is-my-json-valid/index.js | 584 - .../node_modules/generate-function/.npmignore | 1 - .../generate-function/.travis.yml | 3 - .../node_modules/generate-function/README.md | 72 - .../node_modules/generate-function/example.js | 27 - .../node_modules/generate-function/index.js | 61 - .../generate-function/package.json | 53 - .../node_modules/generate-function/test.js | 33 - .../generate-object-property/.npmignore | 1 - .../generate-object-property/.travis.yml | 3 - .../generate-object-property/LICENSE | 21 - .../generate-object-property/README.md | 19 - .../generate-object-property/index.js | 12 - .../node_modules/is-property/.npmignore | 17 - .../node_modules/is-property/LICENSE | 22 - .../node_modules/is-property/README.md | 28 - .../node_modules/is-property/is-property.js | 5 - .../node_modules/is-property/package.json | 59 - .../generate-object-property/package.json | 51 - .../generate-object-property/test.js | 12 - .../node_modules/jsonpointer/.travis.yml | 10 - .../node_modules/jsonpointer/README.md | 32 - .../node_modules/jsonpointer/jsonpointer.js | 76 - .../node_modules/jsonpointer/package.json | 64 - .../node_modules/jsonpointer/test.js | 98 - .../node_modules/xtend/.jshintrc | 30 - .../node_modules/xtend/.npmignore | 1 - .../node_modules/xtend/LICENCE | 19 - .../node_modules/xtend/Makefile | 4 - .../node_modules/xtend/README.md | 32 - .../node_modules/xtend/immutable.js | 19 - .../node_modules/xtend/mutable.js | 17 - .../node_modules/xtend/package.json | 84 - .../node_modules/xtend/test.js | 83 - .../is-my-json-valid/package.json | 75 - .../node_modules/is-my-json-valid/require.js | 12 - .../is-my-json-valid/test/fixtures/cosmic.js | 84 - .../json-schema-draft4/additionalItems.json | 82 - .../additionalProperties.json | 88 - .../test/json-schema-draft4/allOf.json | 112 - .../test/json-schema-draft4/anyOf.json | 68 - .../test/json-schema-draft4/bignum.json | 107 - .../test/json-schema-draft4/default.json | 49 - .../test/json-schema-draft4/definitions.json | 32 - .../test/json-schema-draft4/dependencies.json | 113 - .../test/json-schema-draft4/enum.json | 72 - .../test/json-schema-draft4/format.json | 143 - .../test/json-schema-draft4/items.json | 46 - .../test/json-schema-draft4/maxItems.json | 28 - .../test/json-schema-draft4/maxLength.json | 28 - .../json-schema-draft4/maxProperties.json | 28 - .../test/json-schema-draft4/maximum.json | 42 - .../test/json-schema-draft4/minItems.json | 28 - .../test/json-schema-draft4/minLength.json | 28 - .../json-schema-draft4/minProperties.json | 28 - .../test/json-schema-draft4/minimum.json | 42 - .../test/json-schema-draft4/multipleOf.json | 96 - .../test/json-schema-draft4/not.json | 96 - .../json-schema-draft4/nullAndFormat.json | 18 - .../json-schema-draft4/nullAndObject.json | 18 - .../test/json-schema-draft4/oneOf.json | 68 - .../test/json-schema-draft4/pattern.json | 23 - .../json-schema-draft4/patternProperties.json | 110 - .../test/json-schema-draft4/properties.json | 92 - .../test/json-schema-draft4/ref.json | 128 - .../test/json-schema-draft4/refRemote.json | 74 - .../test/json-schema-draft4/required.json | 39 - .../test/json-schema-draft4/type.json | 330 - .../test/json-schema-draft4/uniqueItems.json | 79 - .../is-my-json-valid/test/json-schema.js | 23 - .../is-my-json-valid/test/misc.js | 447 - .../node_modules/har-validator/package.json | 87 - .../request/node_modules/hawk/.npmignore | 20 - .../request/node_modules/hawk/.travis.yml | 5 - .../request/node_modules/hawk/LICENSE | 28 - .../request/node_modules/hawk/Makefile | 8 - .../request/node_modules/hawk/README.md | 635 - .../request/node_modules/hawk/bower.json | 24 - .../request/node_modules/hawk/component.json | 19 - .../node_modules/hawk/example/usage.js | 78 - .../request/node_modules/hawk/images/hawk.png | Bin 6945 -> 0 bytes .../request/node_modules/hawk/images/logo.png | Bin 71732 -> 0 bytes .../request/node_modules/hawk/index.js | 1 - .../request/node_modules/hawk/lib/browser.js | 641 - .../request/node_modules/hawk/lib/client.js | 369 - .../request/node_modules/hawk/lib/crypto.js | 126 - .../request/node_modules/hawk/lib/index.js | 15 - .../request/node_modules/hawk/lib/server.js | 534 - .../request/node_modules/hawk/lib/utils.js | 164 - .../hawk/node_modules/boom/.npmignore | 18 - .../hawk/node_modules/boom/.travis.yml | 8 - .../hawk/node_modules/boom/CONTRIBUTING.md | 1 - .../hawk/node_modules/boom/LICENSE | 28 - .../hawk/node_modules/boom/README.md | 652 - .../hawk/node_modules/boom/images/boom.png | Bin 29479 -> 0 bytes .../hawk/node_modules/boom/lib/index.js | 318 - .../hawk/node_modules/boom/package.json | 64 - .../hawk/node_modules/boom/test/index.js | 654 - .../hawk/node_modules/cryptiles/.npmignore | 18 - .../hawk/node_modules/cryptiles/.travis.yml | 8 - .../hawk/node_modules/cryptiles/LICENSE | 28 - .../hawk/node_modules/cryptiles/README.md | 16 - .../hawk/node_modules/cryptiles/lib/index.js | 68 - .../hawk/node_modules/cryptiles/package.json | 61 - .../hawk/node_modules/cryptiles/test/index.js | 102 - .../hawk/node_modules/hoek/.npmignore | 18 - .../hawk/node_modules/hoek/.travis.yml | 7 - .../hawk/node_modules/hoek/CONTRIBUTING.md | 1 - .../hawk/node_modules/hoek/LICENSE | 31 - .../hawk/node_modules/hoek/README.md | 584 - .../hawk/node_modules/hoek/images/hoek.png | Bin 37939 -> 0 bytes .../hawk/node_modules/hoek/lib/escape.js | 132 - .../hawk/node_modules/hoek/lib/index.js | 993 - .../hawk/node_modules/hoek/package.json | 61 - .../hawk/node_modules/hoek/test/escaper.js | 88 - .../hawk/node_modules/hoek/test/index.js | 2513 --- .../node_modules/hoek/test/modules/ignore.txt | 0 .../node_modules/hoek/test/modules/test1.js | 1 - .../node_modules/hoek/test/modules/test2.js | 1 - .../node_modules/hoek/test/modules/test3.js | 1 - .../hawk/node_modules/sntp/.npmignore | 18 - .../hawk/node_modules/sntp/.travis.yml | 5 - .../hawk/node_modules/sntp/LICENSE | 28 - .../hawk/node_modules/sntp/Makefile | 9 - .../hawk/node_modules/sntp/README.md | 68 - .../hawk/node_modules/sntp/examples/offset.js | 16 - .../hawk/node_modules/sntp/examples/time.js | 25 - .../hawk/node_modules/sntp/index.js | 1 - .../hawk/node_modules/sntp/lib/index.js | 412 - .../hawk/node_modules/sntp/package.json | 65 - .../hawk/node_modules/sntp/test/index.js | 435 - .../request/node_modules/hawk/package.json | 71 - .../request/node_modules/hawk/test/browser.js | 1453 -- .../request/node_modules/hawk/test/client.js | 443 - .../request/node_modules/hawk/test/crypto.js | 86 - .../request/node_modules/hawk/test/index.js | 378 - .../request/node_modules/hawk/test/message.js | 261 - .../request/node_modules/hawk/test/readme.js | 98 - .../request/node_modules/hawk/test/server.js | 985 - .../request/node_modules/hawk/test/uri.js | 590 - .../request/node_modules/hawk/test/utils.js | 120 - .../http-signature/.dir-locals.el | 6 - .../node_modules/http-signature/.npmignore | 7 - .../node_modules/http-signature/LICENSE | 18 - .../node_modules/http-signature/README.md | 79 - .../http-signature/http_signing.md | 296 - .../node_modules/http-signature/lib/index.js | 27 - .../node_modules/http-signature/lib/parser.js | 304 - .../node_modules/http-signature/lib/signer.js | 178 - .../node_modules/http-signature/lib/util.js | 306 - .../node_modules/http-signature/lib/verify.js | 56 - .../node_modules/asn1/.npmignore | 2 - .../http-signature/node_modules/asn1/LICENSE | 19 - .../node_modules/asn1/README.md | 50 - .../node_modules/asn1/lib/ber/errors.js | 13 - .../node_modules/asn1/lib/ber/index.js | 27 - .../node_modules/asn1/lib/ber/reader.js | 267 - .../node_modules/asn1/lib/ber/types.js | 36 - .../node_modules/asn1/lib/ber/writer.js | 317 - .../node_modules/asn1/lib/index.js | 20 - .../node_modules/asn1/package.json | 58 - .../node_modules/asn1/tst/ber/reader.test.js | 172 - .../node_modules/asn1/tst/ber/writer.test.js | 296 - .../node_modules/assert-plus/README.md | 126 - .../node_modules/assert-plus/assert.js | 245 - .../node_modules/assert-plus/package.json | 45 - .../node_modules/ctype/.npmignore | 1 - .../node_modules/ctype/CHANGELOG | 78 - .../http-signature/node_modules/ctype/LICENSE | 24 - .../http-signature/node_modules/ctype/README | 82 - .../node_modules/ctype/README.old | 298 - .../http-signature/node_modules/ctype/ctf.js | 245 - .../http-signature/node_modules/ctype/ctio.js | 1485 -- .../node_modules/ctype/ctype.js | 944 - .../ctype/man/man3ctype/ctio.3ctype | 241 - .../node_modules/ctype/package.json | 42 - .../node_modules/ctype/tools/jsl.conf | 129 - .../node_modules/ctype/tools/jsstyle | 839 - .../node_modules/http-signature/package.json | 77 - .../request/node_modules/isstream/.jshintrc | 59 - .../request/node_modules/isstream/.npmignore | 1 - .../request/node_modules/isstream/.travis.yml | 12 - .../request/node_modules/isstream/LICENSE.md | 11 - .../request/node_modules/isstream/README.md | 66 - .../request/node_modules/isstream/isstream.js | 27 - .../node_modules/isstream/package.json | 59 - .../request/node_modules/isstream/test.js | 168 - .../json-stringify-safe/.npmignore | 1 - .../json-stringify-safe/CHANGELOG.md | 14 - .../node_modules/json-stringify-safe/LICENSE | 15 - .../node_modules/json-stringify-safe/Makefile | 35 - .../json-stringify-safe/README.md | 52 - .../json-stringify-safe/package.json | 68 - .../json-stringify-safe/stringify.js | 27 - .../json-stringify-safe/test/mocha.opts | 2 - .../test/stringify_test.js | 246 - .../node_modules/mime-types/HISTORY.md | 115 - .../request/node_modules/mime-types/LICENSE | 22 - .../request/node_modules/mime-types/README.md | 102 - .../request/node_modules/mime-types/index.js | 63 - .../node_modules/mime-db/HISTORY.md | 212 - .../mime-types/node_modules/mime-db/LICENSE | 22 - .../mime-types/node_modules/mime-db/README.md | 76 - .../mime-types/node_modules/mime-db/db.json | 6359 ------ .../mime-types/node_modules/mime-db/index.js | 11 - .../node_modules/mime-db/package.json | 94 - .../node_modules/mime-types/package.json | 84 - .../request/node_modules/node-uuid/.npmignore | 4 - .../request/node_modules/node-uuid/LICENSE.md | 21 - .../request/node_modules/node-uuid/README.md | 254 - .../node-uuid/benchmark/README.md | 53 - .../node-uuid/benchmark/bench.gnu | 174 - .../node_modules/node-uuid/benchmark/bench.sh | 34 - .../node-uuid/benchmark/benchmark-native.c | 34 - .../node-uuid/benchmark/benchmark.js | 84 - .../request/node_modules/node-uuid/bin/uuid | 26 - .../request/node_modules/node-uuid/bower.json | 23 - .../node_modules/node-uuid/component.json | 25 - .../node_modules/node-uuid/package.json | 81 - .../node_modules/node-uuid/test/compare_v1.js | 63 - .../node_modules/node-uuid/test/test.html | 17 - .../node_modules/node-uuid/test/test.js | 231 - .../request/node_modules/node-uuid/uuid.js | 272 - .../request/node_modules/oauth-sign/LICENSE | 55 - .../request/node_modules/oauth-sign/README.md | 4 - .../request/node_modules/oauth-sign/index.js | 136 - .../node_modules/oauth-sign/package.json | 66 - .../request/node_modules/qs/.eslintignore | 1 - .../request/node_modules/qs/.jshintignore | 1 - .../request/node_modules/qs/.jshintrc | 10 - .../request/node_modules/qs/.npmignore | 19 - .../request/node_modules/qs/.travis.yml | 6 - .../request/node_modules/qs/CHANGELOG.md | 88 - .../request/node_modules/qs/CONTRIBUTING.md | 1 - .../request/node_modules/qs/LICENSE | 28 - .../request/node_modules/qs/Makefile | 8 - .../request/node_modules/qs/README.md | 303 - .../request/node_modules/qs/bower.json | 22 - .../request/node_modules/qs/index.js | 1 - .../request/node_modules/qs/lib/index.js | 15 - .../request/node_modules/qs/lib/parse.js | 166 - .../request/node_modules/qs/lib/stringify.js | 121 - .../request/node_modules/qs/lib/utils.js | 190 - .../request/node_modules/qs/package.json | 56 - .../request/node_modules/qs/test/parse.js | 455 - .../request/node_modules/qs/test/stringify.js | 259 - .../request/node_modules/qs/test/utils.js | 28 - .../node_modules/stringstream/.npmignore | 15 - .../node_modules/stringstream/.travis.yml | 4 - .../node_modules/stringstream/LICENSE.txt | 22 - .../node_modules/stringstream/README.md | 38 - .../node_modules/stringstream/example.js | 27 - .../node_modules/stringstream/package.json | 50 - .../node_modules/stringstream/stringstream.js | 102 - .../request/node_modules/tough-cookie/LICENSE | 27 - .../node_modules/tough-cookie/README.md | 492 - .../node_modules/tough-cookie/lib/cookie.js | 1342 -- .../node_modules/tough-cookie/lib/memstore.js | 170 - .../tough-cookie/lib/pathMatch.js | 61 - .../tough-cookie/lib/permuteDomain.js | 56 - .../tough-cookie/lib/pubsuffix.js | 98 - .../node_modules/tough-cookie/lib/store.js | 71 - .../node_modules/tough-cookie/package.json | 94 - .../request/node_modules/tunnel-agent/LICENSE | 55 - .../node_modules/tunnel-agent/README.md | 4 - .../node_modules/tunnel-agent/index.js | 243 - .../node_modules/tunnel-agent/package.json | 68 - .../twit/node_modules/request/package.json | 112 - .../twit/node_modules/request/release.sh | 45 - .../twit/node_modules/request/request.js | 1399 -- node_modules/twit/package.json | 72 - node_modules/twit/tests/helpers.js | 46 - node_modules/twit/tests/img/bigbird.jpg | Bin 2864 -> 0 bytes node_modules/twit/tests/img/cutebird.png | Bin 28131 -> 0 bytes .../twit/tests/img/snoopy-animated.gif | Bin 693 -> 0 bytes node_modules/twit/tests/img/twitterbird.gif | Bin 1295 -> 0 bytes node_modules/twit/tests/multiple-conn.js | 74 - node_modules/twit/tests/rest.js | 823 - node_modules/twit/tests/rest_app_only_auth.js | 55 - .../twit/tests/rest_chunked_upload.js | 90 - node_modules/twit/tests/streaming.js | 646 - node_modules/twit/tests/test_helpers.js | 13 - node_modules/twit/tests/twit.js | 105 - node_modules/twit/tests/user_stream.js | 38 - node_modules/twit/tests/video/station.mp4 | Bin 483626 -> 0 bytes 1631 files changed, 55 insertions(+), 164199 deletions(-) create mode 100644 id_rsa_pagoda create mode 100644 id_rsa_pagoda.pub delete mode 100644 node_modules/fs/index.js delete mode 100644 node_modules/fs/package.json delete mode 100644 node_modules/lowdb/.babelrc delete mode 100644 node_modules/lowdb/.npmignore delete mode 100644 node_modules/lowdb/LICENSE delete mode 100644 node_modules/lowdb/README.md delete mode 100644 node_modules/lowdb/browser.js delete mode 100644 node_modules/lowdb/dist/lowdb.js delete mode 100644 node_modules/lowdb/dist/lowdb.min.js delete mode 100644 node_modules/lowdb/file-async.js delete mode 100644 node_modules/lowdb/file-sync.js delete mode 100644 node_modules/lowdb/index.js delete mode 100644 node_modules/lowdb/json.js delete mode 100644 node_modules/lowdb/node_modules/graceful-fs/LICENSE delete mode 100644 node_modules/lowdb/node_modules/graceful-fs/README.md delete mode 100644 node_modules/lowdb/node_modules/graceful-fs/fs.js delete mode 100644 node_modules/lowdb/node_modules/graceful-fs/graceful-fs.js delete mode 100644 node_modules/lowdb/node_modules/graceful-fs/legacy-streams.js delete mode 100644 node_modules/lowdb/node_modules/graceful-fs/package.json delete mode 100644 node_modules/lowdb/node_modules/graceful-fs/polyfills.js delete mode 100644 node_modules/lowdb/node_modules/is-promise/.npmignore delete mode 100644 node_modules/lowdb/node_modules/is-promise/.travis.yml delete mode 100644 node_modules/lowdb/node_modules/is-promise/LICENSE delete mode 100644 node_modules/lowdb/node_modules/is-promise/index.js delete mode 100644 node_modules/lowdb/node_modules/is-promise/package.json delete mode 100644 node_modules/lowdb/node_modules/is-promise/readme.md delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/.editorconfig delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/.editorconfig~ delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/.npmignore delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/LICENSE delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/README.md delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/index.js delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/index.js~ delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/.npmignore delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/LICENSE delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/README.md delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/index.js delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/lib/analyze.js delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/lib/document.js delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/lib/parse.js delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/lib/stringify.js delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/lib/unicode.js delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/lib/utils.js delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/package.json delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/package.yaml delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/package.json delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/test/test.js delete mode 100644 node_modules/lowdb/node_modules/json-parse-helpfulerror/test/test.js~ delete mode 100644 node_modules/lowdb/node_modules/lodash/LICENSE delete mode 100644 node_modules/lowdb/node_modules/lodash/README.md delete mode 100644 node_modules/lowdb/node_modules/lodash/_DataView.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_Hash.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_LazyWrapper.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_ListCache.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_LodashWrapper.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_Map.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_MapCache.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_Promise.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_Reflect.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_Set.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_SetCache.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_Stack.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_Symbol.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_Uint8Array.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_WeakMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_addMapEntry.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_addSetEntry.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_apply.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_arrayAggregator.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_arrayEach.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_arrayEachRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_arrayEvery.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_arrayFilter.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_arrayIncludes.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_arrayIncludesWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_arrayMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_arrayPush.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_arrayReduce.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_arrayReduceRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_arraySome.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_assignInDefaults.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_assignMergeValue.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_assignValue.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_assocIndexOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseAggregator.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseAssign.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseAt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseClamp.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseClone.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseConforms.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseCreate.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseDelay.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseDifference.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseEach.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseEachRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseEvery.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseExtremum.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseFill.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseFilter.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseFindIndex.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseFindKey.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseFlatten.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseFor.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseForOwn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseForOwnRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseForRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseFunctions.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseGet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseGetAllKeys.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseGt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseHas.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseHasIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseInRange.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseIndexOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseIndexOfWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseIntersection.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseInverter.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseInvoke.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseIsEqual.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseIsEqualDeep.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseIsMatch.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseIsNative.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseIteratee.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseKeys.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseKeysIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseLodash.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseLt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseMatches.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseMatchesProperty.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseMean.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseMerge.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseMergeDeep.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseNth.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseOrderBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_basePick.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_basePickBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseProperty.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_basePropertyDeep.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_basePullAll.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_basePullAt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseRandom.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseRange.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseReduce.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseRepeat.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseSet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseSetData.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseSlice.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseSome.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseSortBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseSortedIndex.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseSortedIndexBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseSortedUniq.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseSum.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseTimes.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseToNumber.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseToPairs.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseToString.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseUnary.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseUniq.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseUnset.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseUpdate.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseValues.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseWhile.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseWrapperValue.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseXor.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_baseZipObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_cacheHas.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_castArrayLikeObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_castFunction.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_castPath.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_castSlice.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_charsEndIndex.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_charsStartIndex.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_checkGlobal.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_cloneArrayBuffer.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_cloneBuffer.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_cloneDataView.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_cloneMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_cloneRegExp.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_cloneSet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_cloneSymbol.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_cloneTypedArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_compareAscending.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_compareMultiple.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_composeArgs.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_composeArgsRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_copyArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_copyObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_copySymbols.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_coreJsData.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_countHolders.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createAggregator.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createAssigner.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createBaseEach.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createBaseFor.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createBaseWrapper.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createCaseFirst.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createCompounder.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createCtorWrapper.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createCurryWrapper.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createFind.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createFlow.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createHybridWrapper.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createInverter.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createMathOperation.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createOver.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createPadding.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createPartialWrapper.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createRange.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createRecurryWrapper.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createRelationalOperation.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createRound.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createSet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createToPairs.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_createWrapper.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_deburrLetter.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_equalArrays.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_equalByTag.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_equalObjects.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_escapeHtmlChar.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_escapeStringChar.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getAllKeys.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getAllKeysIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getData.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getFuncName.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getHolder.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getLength.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getMapData.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getMatchData.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getNative.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getPrototype.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getSymbols.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getSymbolsIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getTag.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getValue.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_getView.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_hasPath.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_hashClear.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_hashDelete.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_hashGet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_hashHas.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_hashSet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_indexKeys.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_indexOfNaN.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_initCloneArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_initCloneByTag.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_initCloneObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_isFlattenable.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_isFlattenableIteratee.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_isHostObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_isIndex.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_isIterateeCall.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_isKey.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_isKeyable.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_isLaziable.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_isMaskable.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_isMasked.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_isPrototype.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_isStrictComparable.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_iteratorToArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_lazyClone.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_lazyReverse.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_lazyValue.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_listCacheClear.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_listCacheDelete.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_listCacheGet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_listCacheHas.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_listCacheSet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_mapCacheClear.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_mapCacheDelete.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_mapCacheGet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_mapCacheHas.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_mapCacheSet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_mapToArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_matchesStrictComparable.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_mergeData.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_mergeDefaults.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_metaMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_nativeCreate.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_parent.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_reEscape.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_reEvaluate.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_reHasComplexSymbol.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_reInterpolate.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_realNames.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_reorder.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_replaceHolders.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_root.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_setCacheAdd.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_setCacheHas.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_setData.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_setToArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_setToPairs.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_stackClear.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_stackDelete.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_stackGet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_stackHas.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_stackSet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_stringSize.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_stringToArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_stringToPath.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_toKey.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_toSource.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_unescapeHtmlChar.js delete mode 100644 node_modules/lowdb/node_modules/lodash/_wrapperClone.js delete mode 100644 node_modules/lowdb/node_modules/lodash/add.js delete mode 100644 node_modules/lowdb/node_modules/lodash/after.js delete mode 100644 node_modules/lowdb/node_modules/lodash/array.js delete mode 100644 node_modules/lowdb/node_modules/lodash/ary.js delete mode 100644 node_modules/lowdb/node_modules/lodash/assign.js delete mode 100644 node_modules/lowdb/node_modules/lodash/assignIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/assignInWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/assignWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/at.js delete mode 100644 node_modules/lowdb/node_modules/lodash/attempt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/before.js delete mode 100644 node_modules/lowdb/node_modules/lodash/bind.js delete mode 100644 node_modules/lowdb/node_modules/lodash/bindAll.js delete mode 100644 node_modules/lowdb/node_modules/lodash/bindKey.js delete mode 100644 node_modules/lowdb/node_modules/lodash/camelCase.js delete mode 100644 node_modules/lowdb/node_modules/lodash/capitalize.js delete mode 100644 node_modules/lowdb/node_modules/lodash/castArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/ceil.js delete mode 100644 node_modules/lowdb/node_modules/lodash/chain.js delete mode 100644 node_modules/lowdb/node_modules/lodash/chunk.js delete mode 100644 node_modules/lowdb/node_modules/lodash/clamp.js delete mode 100644 node_modules/lowdb/node_modules/lodash/clone.js delete mode 100644 node_modules/lowdb/node_modules/lodash/cloneDeep.js delete mode 100644 node_modules/lowdb/node_modules/lodash/cloneDeepWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/cloneWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/collection.js delete mode 100644 node_modules/lowdb/node_modules/lodash/commit.js delete mode 100644 node_modules/lowdb/node_modules/lodash/compact.js delete mode 100644 node_modules/lowdb/node_modules/lodash/concat.js delete mode 100644 node_modules/lowdb/node_modules/lodash/cond.js delete mode 100644 node_modules/lowdb/node_modules/lodash/conforms.js delete mode 100644 node_modules/lowdb/node_modules/lodash/constant.js delete mode 100644 node_modules/lowdb/node_modules/lodash/core.js delete mode 100644 node_modules/lowdb/node_modules/lodash/core.min.js delete mode 100644 node_modules/lowdb/node_modules/lodash/countBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/create.js delete mode 100644 node_modules/lowdb/node_modules/lodash/curry.js delete mode 100644 node_modules/lowdb/node_modules/lodash/curryRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/date.js delete mode 100644 node_modules/lowdb/node_modules/lodash/debounce.js delete mode 100644 node_modules/lowdb/node_modules/lodash/deburr.js delete mode 100644 node_modules/lowdb/node_modules/lodash/defaults.js delete mode 100644 node_modules/lowdb/node_modules/lodash/defaultsDeep.js delete mode 100644 node_modules/lowdb/node_modules/lodash/defer.js delete mode 100644 node_modules/lowdb/node_modules/lodash/delay.js delete mode 100644 node_modules/lowdb/node_modules/lodash/difference.js delete mode 100644 node_modules/lowdb/node_modules/lodash/differenceBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/differenceWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/divide.js delete mode 100644 node_modules/lowdb/node_modules/lodash/drop.js delete mode 100644 node_modules/lowdb/node_modules/lodash/dropRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/dropRightWhile.js delete mode 100644 node_modules/lowdb/node_modules/lodash/dropWhile.js delete mode 100644 node_modules/lowdb/node_modules/lodash/each.js delete mode 100644 node_modules/lowdb/node_modules/lodash/eachRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/endsWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/entries.js delete mode 100644 node_modules/lowdb/node_modules/lodash/entriesIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/eq.js delete mode 100644 node_modules/lowdb/node_modules/lodash/escape.js delete mode 100644 node_modules/lowdb/node_modules/lodash/escapeRegExp.js delete mode 100644 node_modules/lowdb/node_modules/lodash/every.js delete mode 100644 node_modules/lowdb/node_modules/lodash/extend.js delete mode 100644 node_modules/lowdb/node_modules/lodash/extendWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fill.js delete mode 100644 node_modules/lowdb/node_modules/lodash/filter.js delete mode 100644 node_modules/lowdb/node_modules/lodash/find.js delete mode 100644 node_modules/lowdb/node_modules/lodash/findIndex.js delete mode 100644 node_modules/lowdb/node_modules/lodash/findKey.js delete mode 100644 node_modules/lowdb/node_modules/lodash/findLast.js delete mode 100644 node_modules/lowdb/node_modules/lodash/findLastIndex.js delete mode 100644 node_modules/lowdb/node_modules/lodash/findLastKey.js delete mode 100644 node_modules/lowdb/node_modules/lodash/first.js delete mode 100644 node_modules/lowdb/node_modules/lodash/flatMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/flatMapDeep.js delete mode 100644 node_modules/lowdb/node_modules/lodash/flatMapDepth.js delete mode 100644 node_modules/lowdb/node_modules/lodash/flatten.js delete mode 100644 node_modules/lowdb/node_modules/lodash/flattenDeep.js delete mode 100644 node_modules/lowdb/node_modules/lodash/flattenDepth.js delete mode 100644 node_modules/lowdb/node_modules/lodash/flip.js delete mode 100644 node_modules/lowdb/node_modules/lodash/floor.js delete mode 100644 node_modules/lowdb/node_modules/lodash/flow.js delete mode 100644 node_modules/lowdb/node_modules/lodash/flowRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/forEach.js delete mode 100644 node_modules/lowdb/node_modules/lodash/forEachRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/forIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/forInRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/forOwn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/forOwnRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/__.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/_baseConvert.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/_convertBrowser.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/_falseOptions.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/_mapping.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/_util.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/add.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/after.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/all.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/allPass.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/always.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/any.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/anyPass.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/apply.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/array.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/ary.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/assign.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/assignIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/assignInWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/assignWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/assoc.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/assocPath.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/at.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/attempt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/before.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/bind.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/bindAll.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/bindKey.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/camelCase.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/capitalize.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/castArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/ceil.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/chain.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/chunk.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/clamp.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/clone.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/cloneDeep.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/cloneDeepWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/cloneWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/collection.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/commit.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/compact.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/complement.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/compose.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/concat.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/cond.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/conforms.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/constant.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/contains.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/convert.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/countBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/create.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/curry.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/curryN.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/curryRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/curryRightN.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/date.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/debounce.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/deburr.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/defaults.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/defaultsDeep.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/defer.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/delay.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/difference.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/differenceBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/differenceWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/dissoc.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/dissocPath.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/divide.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/drop.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/dropRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/dropRightWhile.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/dropWhile.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/each.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/eachRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/endsWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/entries.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/entriesIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/eq.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/equals.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/escape.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/escapeRegExp.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/every.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/extend.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/extendWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/fill.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/filter.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/find.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/findFrom.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/findIndex.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/findIndexFrom.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/findKey.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/findLast.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/findLastFrom.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/findLastIndex.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/findLastIndexFrom.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/findLastKey.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/first.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/flatMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/flatMapDeep.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/flatMapDepth.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/flatten.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/flattenDeep.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/flattenDepth.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/flip.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/floor.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/flow.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/flowRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/forEach.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/forEachRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/forIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/forInRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/forOwn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/forOwnRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/fromPairs.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/function.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/functions.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/functionsIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/get.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/getOr.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/groupBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/gt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/gte.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/has.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/hasIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/head.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/identical.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/identity.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/inRange.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/includes.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/includesFrom.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/indexOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/indexOfFrom.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/init.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/initial.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/intersection.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/intersectionBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/intersectionWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/invert.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/invertBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/invertObj.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/invoke.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/invokeArgs.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/invokeArgsMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/invokeMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isArguments.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isArrayBuffer.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isArrayLike.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isArrayLikeObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isBoolean.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isBuffer.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isDate.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isElement.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isEmpty.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isEqual.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isEqualWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isError.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isFinite.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isFunction.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isInteger.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isLength.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isMatch.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isMatchWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isNaN.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isNative.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isNil.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isNull.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isNumber.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isObjectLike.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isPlainObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isRegExp.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isSafeInteger.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isSet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isString.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isSymbol.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isTypedArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isUndefined.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isWeakMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/isWeakSet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/iteratee.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/join.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/juxt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/kebabCase.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/keyBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/keys.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/keysIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/lang.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/last.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/lastIndexOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/lastIndexOfFrom.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/lowerCase.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/lowerFirst.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/lt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/lte.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/map.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/mapKeys.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/mapValues.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/matches.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/matchesProperty.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/math.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/max.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/maxBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/mean.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/meanBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/memoize.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/merge.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/mergeWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/method.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/methodOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/min.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/minBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/mixin.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/multiply.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/nAry.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/negate.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/next.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/noop.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/now.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/nth.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/nthArg.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/number.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/object.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/omit.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/omitAll.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/omitBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/once.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/orderBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/over.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/overArgs.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/overEvery.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/overSome.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/pad.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/padChars.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/padCharsEnd.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/padCharsStart.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/padEnd.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/padStart.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/parseInt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/partial.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/partialRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/partition.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/path.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/pathEq.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/pathOr.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/paths.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/pick.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/pickAll.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/pickBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/pipe.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/placeholder.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/plant.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/pluck.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/prop.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/propEq.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/propOr.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/property.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/propertyOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/props.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/pull.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/pullAll.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/pullAllBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/pullAllWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/pullAt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/random.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/range.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/rangeRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/rearg.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/reduce.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/reduceRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/reject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/remove.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/repeat.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/replace.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/rest.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/restFrom.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/result.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/reverse.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/round.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/sample.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/sampleSize.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/seq.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/set.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/setWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/shuffle.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/size.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/slice.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/snakeCase.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/some.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/sortBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/sortedIndex.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/sortedIndexBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/sortedIndexOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/sortedLastIndex.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/sortedLastIndexBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/sortedLastIndexOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/sortedUniq.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/sortedUniqBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/split.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/spread.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/spreadFrom.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/startCase.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/startsWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/string.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/stubArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/stubFalse.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/stubObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/stubString.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/stubTrue.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/subtract.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/sum.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/sumBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/tail.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/take.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/takeRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/takeRightWhile.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/takeWhile.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/tap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/template.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/templateSettings.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/throttle.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/thru.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/times.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toFinite.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toInteger.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toIterator.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toJSON.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toLength.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toLower.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toNumber.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toPairs.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toPairsIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toPath.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toPlainObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toSafeInteger.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toString.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/toUpper.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/transform.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/trim.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/trimChars.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/trimCharsEnd.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/trimCharsStart.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/trimEnd.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/trimStart.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/truncate.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/unapply.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/unary.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/unescape.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/union.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/unionBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/unionWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/uniq.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/uniqBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/uniqWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/uniqueId.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/unnest.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/unset.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/unzip.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/unzipWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/update.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/updateWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/upperCase.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/upperFirst.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/useWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/util.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/value.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/valueOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/values.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/valuesIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/whereEq.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/without.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/words.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/wrap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/wrapperAt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/wrapperChain.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/wrapperLodash.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/wrapperReverse.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/wrapperValue.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/xor.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/xorBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/xorWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/zip.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/zipObj.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/zipObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/zipObjectDeep.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fp/zipWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/fromPairs.js delete mode 100644 node_modules/lowdb/node_modules/lodash/function.js delete mode 100644 node_modules/lowdb/node_modules/lodash/functions.js delete mode 100644 node_modules/lowdb/node_modules/lodash/functionsIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/get.js delete mode 100644 node_modules/lowdb/node_modules/lodash/groupBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/gt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/gte.js delete mode 100644 node_modules/lowdb/node_modules/lodash/has.js delete mode 100644 node_modules/lowdb/node_modules/lodash/hasIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/head.js delete mode 100644 node_modules/lowdb/node_modules/lodash/identity.js delete mode 100644 node_modules/lowdb/node_modules/lodash/inRange.js delete mode 100644 node_modules/lowdb/node_modules/lodash/includes.js delete mode 100644 node_modules/lowdb/node_modules/lodash/index.js delete mode 100644 node_modules/lowdb/node_modules/lodash/indexOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/initial.js delete mode 100644 node_modules/lowdb/node_modules/lodash/intersection.js delete mode 100644 node_modules/lowdb/node_modules/lodash/intersectionBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/intersectionWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/invert.js delete mode 100644 node_modules/lowdb/node_modules/lodash/invertBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/invoke.js delete mode 100644 node_modules/lowdb/node_modules/lodash/invokeMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isArguments.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isArrayBuffer.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isArrayLike.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isArrayLikeObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isBoolean.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isBuffer.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isDate.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isElement.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isEmpty.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isEqual.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isEqualWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isError.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isFinite.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isFunction.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isInteger.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isLength.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isMatch.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isMatchWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isNaN.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isNative.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isNil.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isNull.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isNumber.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isObjectLike.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isPlainObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isRegExp.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isSafeInteger.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isSet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isString.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isSymbol.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isTypedArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isUndefined.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isWeakMap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/isWeakSet.js delete mode 100644 node_modules/lowdb/node_modules/lodash/iteratee.js delete mode 100644 node_modules/lowdb/node_modules/lodash/join.js delete mode 100644 node_modules/lowdb/node_modules/lodash/kebabCase.js delete mode 100644 node_modules/lowdb/node_modules/lodash/keyBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/keys.js delete mode 100644 node_modules/lowdb/node_modules/lodash/keysIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/lang.js delete mode 100644 node_modules/lowdb/node_modules/lodash/last.js delete mode 100644 node_modules/lowdb/node_modules/lodash/lastIndexOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/lodash.js delete mode 100644 node_modules/lowdb/node_modules/lodash/lodash.min.js delete mode 100644 node_modules/lowdb/node_modules/lodash/lowerCase.js delete mode 100644 node_modules/lowdb/node_modules/lodash/lowerFirst.js delete mode 100644 node_modules/lowdb/node_modules/lodash/lt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/lte.js delete mode 100644 node_modules/lowdb/node_modules/lodash/map.js delete mode 100644 node_modules/lowdb/node_modules/lodash/mapKeys.js delete mode 100644 node_modules/lowdb/node_modules/lodash/mapValues.js delete mode 100644 node_modules/lowdb/node_modules/lodash/matches.js delete mode 100644 node_modules/lowdb/node_modules/lodash/matchesProperty.js delete mode 100644 node_modules/lowdb/node_modules/lodash/math.js delete mode 100644 node_modules/lowdb/node_modules/lodash/max.js delete mode 100644 node_modules/lowdb/node_modules/lodash/maxBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/mean.js delete mode 100644 node_modules/lowdb/node_modules/lodash/meanBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/memoize.js delete mode 100644 node_modules/lowdb/node_modules/lodash/merge.js delete mode 100644 node_modules/lowdb/node_modules/lodash/mergeWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/method.js delete mode 100644 node_modules/lowdb/node_modules/lodash/methodOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/min.js delete mode 100644 node_modules/lowdb/node_modules/lodash/minBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/mixin.js delete mode 100644 node_modules/lowdb/node_modules/lodash/multiply.js delete mode 100644 node_modules/lowdb/node_modules/lodash/negate.js delete mode 100644 node_modules/lowdb/node_modules/lodash/next.js delete mode 100644 node_modules/lowdb/node_modules/lodash/noop.js delete mode 100644 node_modules/lowdb/node_modules/lodash/now.js delete mode 100644 node_modules/lowdb/node_modules/lodash/nth.js delete mode 100644 node_modules/lowdb/node_modules/lodash/nthArg.js delete mode 100644 node_modules/lowdb/node_modules/lodash/number.js delete mode 100644 node_modules/lowdb/node_modules/lodash/object.js delete mode 100644 node_modules/lowdb/node_modules/lodash/omit.js delete mode 100644 node_modules/lowdb/node_modules/lodash/omitBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/once.js delete mode 100644 node_modules/lowdb/node_modules/lodash/orderBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/over.js delete mode 100644 node_modules/lowdb/node_modules/lodash/overArgs.js delete mode 100644 node_modules/lowdb/node_modules/lodash/overEvery.js delete mode 100644 node_modules/lowdb/node_modules/lodash/overSome.js delete mode 100644 node_modules/lowdb/node_modules/lodash/package.json delete mode 100644 node_modules/lowdb/node_modules/lodash/pad.js delete mode 100644 node_modules/lowdb/node_modules/lodash/padEnd.js delete mode 100644 node_modules/lowdb/node_modules/lodash/padStart.js delete mode 100644 node_modules/lowdb/node_modules/lodash/parseInt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/partial.js delete mode 100644 node_modules/lowdb/node_modules/lodash/partialRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/partition.js delete mode 100644 node_modules/lowdb/node_modules/lodash/pick.js delete mode 100644 node_modules/lowdb/node_modules/lodash/pickBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/plant.js delete mode 100644 node_modules/lowdb/node_modules/lodash/property.js delete mode 100644 node_modules/lowdb/node_modules/lodash/propertyOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/pull.js delete mode 100644 node_modules/lowdb/node_modules/lodash/pullAll.js delete mode 100644 node_modules/lowdb/node_modules/lodash/pullAllBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/pullAllWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/pullAt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/random.js delete mode 100644 node_modules/lowdb/node_modules/lodash/range.js delete mode 100644 node_modules/lowdb/node_modules/lodash/rangeRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/rearg.js delete mode 100644 node_modules/lowdb/node_modules/lodash/reduce.js delete mode 100644 node_modules/lowdb/node_modules/lodash/reduceRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/reject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/remove.js delete mode 100644 node_modules/lowdb/node_modules/lodash/repeat.js delete mode 100644 node_modules/lowdb/node_modules/lodash/replace.js delete mode 100644 node_modules/lowdb/node_modules/lodash/rest.js delete mode 100644 node_modules/lowdb/node_modules/lodash/result.js delete mode 100644 node_modules/lowdb/node_modules/lodash/reverse.js delete mode 100644 node_modules/lowdb/node_modules/lodash/round.js delete mode 100644 node_modules/lowdb/node_modules/lodash/sample.js delete mode 100644 node_modules/lowdb/node_modules/lodash/sampleSize.js delete mode 100644 node_modules/lowdb/node_modules/lodash/seq.js delete mode 100644 node_modules/lowdb/node_modules/lodash/set.js delete mode 100644 node_modules/lowdb/node_modules/lodash/setWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/shuffle.js delete mode 100644 node_modules/lowdb/node_modules/lodash/size.js delete mode 100644 node_modules/lowdb/node_modules/lodash/slice.js delete mode 100644 node_modules/lowdb/node_modules/lodash/snakeCase.js delete mode 100644 node_modules/lowdb/node_modules/lodash/some.js delete mode 100644 node_modules/lowdb/node_modules/lodash/sortBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/sortedIndex.js delete mode 100644 node_modules/lowdb/node_modules/lodash/sortedIndexBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/sortedIndexOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/sortedLastIndex.js delete mode 100644 node_modules/lowdb/node_modules/lodash/sortedLastIndexBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/sortedLastIndexOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/sortedUniq.js delete mode 100644 node_modules/lowdb/node_modules/lodash/sortedUniqBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/split.js delete mode 100644 node_modules/lowdb/node_modules/lodash/spread.js delete mode 100644 node_modules/lowdb/node_modules/lodash/startCase.js delete mode 100644 node_modules/lowdb/node_modules/lodash/startsWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/string.js delete mode 100644 node_modules/lowdb/node_modules/lodash/stubArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/stubFalse.js delete mode 100644 node_modules/lowdb/node_modules/lodash/stubObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/stubString.js delete mode 100644 node_modules/lowdb/node_modules/lodash/stubTrue.js delete mode 100644 node_modules/lowdb/node_modules/lodash/subtract.js delete mode 100644 node_modules/lowdb/node_modules/lodash/sum.js delete mode 100644 node_modules/lowdb/node_modules/lodash/sumBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/tail.js delete mode 100644 node_modules/lowdb/node_modules/lodash/take.js delete mode 100644 node_modules/lowdb/node_modules/lodash/takeRight.js delete mode 100644 node_modules/lowdb/node_modules/lodash/takeRightWhile.js delete mode 100644 node_modules/lowdb/node_modules/lodash/takeWhile.js delete mode 100644 node_modules/lowdb/node_modules/lodash/tap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/template.js delete mode 100644 node_modules/lowdb/node_modules/lodash/templateSettings.js delete mode 100644 node_modules/lowdb/node_modules/lodash/throttle.js delete mode 100644 node_modules/lowdb/node_modules/lodash/thru.js delete mode 100644 node_modules/lowdb/node_modules/lodash/times.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toArray.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toFinite.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toInteger.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toIterator.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toJSON.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toLength.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toLower.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toNumber.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toPairs.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toPairsIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toPath.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toPlainObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toSafeInteger.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toString.js delete mode 100644 node_modules/lowdb/node_modules/lodash/toUpper.js delete mode 100644 node_modules/lowdb/node_modules/lodash/transform.js delete mode 100644 node_modules/lowdb/node_modules/lodash/trim.js delete mode 100644 node_modules/lowdb/node_modules/lodash/trimEnd.js delete mode 100644 node_modules/lowdb/node_modules/lodash/trimStart.js delete mode 100644 node_modules/lowdb/node_modules/lodash/truncate.js delete mode 100644 node_modules/lowdb/node_modules/lodash/unary.js delete mode 100644 node_modules/lowdb/node_modules/lodash/unescape.js delete mode 100644 node_modules/lowdb/node_modules/lodash/union.js delete mode 100644 node_modules/lowdb/node_modules/lodash/unionBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/unionWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/uniq.js delete mode 100644 node_modules/lowdb/node_modules/lodash/uniqBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/uniqWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/uniqueId.js delete mode 100644 node_modules/lowdb/node_modules/lodash/unset.js delete mode 100644 node_modules/lowdb/node_modules/lodash/unzip.js delete mode 100644 node_modules/lowdb/node_modules/lodash/unzipWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/update.js delete mode 100644 node_modules/lowdb/node_modules/lodash/updateWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/upperCase.js delete mode 100644 node_modules/lowdb/node_modules/lodash/upperFirst.js delete mode 100644 node_modules/lowdb/node_modules/lodash/util.js delete mode 100644 node_modules/lowdb/node_modules/lodash/value.js delete mode 100644 node_modules/lowdb/node_modules/lodash/valueOf.js delete mode 100644 node_modules/lowdb/node_modules/lodash/values.js delete mode 100644 node_modules/lowdb/node_modules/lodash/valuesIn.js delete mode 100644 node_modules/lowdb/node_modules/lodash/without.js delete mode 100644 node_modules/lowdb/node_modules/lodash/words.js delete mode 100644 node_modules/lowdb/node_modules/lodash/wrap.js delete mode 100644 node_modules/lowdb/node_modules/lodash/wrapperAt.js delete mode 100644 node_modules/lowdb/node_modules/lodash/wrapperChain.js delete mode 100644 node_modules/lowdb/node_modules/lodash/wrapperLodash.js delete mode 100644 node_modules/lowdb/node_modules/lodash/wrapperReverse.js delete mode 100644 node_modules/lowdb/node_modules/lodash/wrapperValue.js delete mode 100644 node_modules/lowdb/node_modules/lodash/xor.js delete mode 100644 node_modules/lowdb/node_modules/lodash/xorBy.js delete mode 100644 node_modules/lowdb/node_modules/lodash/xorWith.js delete mode 100644 node_modules/lowdb/node_modules/lodash/zip.js delete mode 100644 node_modules/lowdb/node_modules/lodash/zipObject.js delete mode 100644 node_modules/lowdb/node_modules/lodash/zipObjectDeep.js delete mode 100644 node_modules/lowdb/node_modules/lodash/zipWith.js delete mode 100644 node_modules/lowdb/node_modules/steno/.npmignore delete mode 100644 node_modules/lowdb/node_modules/steno/.travis.yml delete mode 100644 node_modules/lowdb/node_modules/steno/LICENSE delete mode 100644 node_modules/lowdb/node_modules/steno/README.md delete mode 100644 node_modules/lowdb/node_modules/steno/index.js delete mode 100644 node_modules/lowdb/node_modules/steno/package.json delete mode 100644 node_modules/lowdb/package.json delete mode 100644 node_modules/lowdb/webpack.config.js delete mode 100644 node_modules/twit/.npmignore delete mode 100644 node_modules/twit/README.md delete mode 100644 node_modules/twit/examples/bot.js delete mode 100644 node_modules/twit/examples/rtd2.js delete mode 100644 node_modules/twit/lib/endpoints.js delete mode 100644 node_modules/twit/lib/file_uploader.js delete mode 100644 node_modules/twit/lib/helpers.js delete mode 100644 node_modules/twit/lib/parser.js delete mode 100644 node_modules/twit/lib/settings.js delete mode 100644 node_modules/twit/lib/streaming-api-connection.js delete mode 100644 node_modules/twit/lib/twitter.js delete mode 120000 node_modules/twit/node_modules/.bin/mime delete mode 100644 node_modules/twit/node_modules/bluebird/LICENSE delete mode 100644 node_modules/twit/node_modules/bluebird/README.md delete mode 100644 node_modules/twit/node_modules/bluebird/changelog.md delete mode 100644 node_modules/twit/node_modules/bluebird/js/browser/bluebird.core.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/browser/bluebird.core.min.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/browser/bluebird.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/browser/bluebird.min.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/any.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/assert.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/async.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/bind.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/bluebird.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/call_get.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/cancel.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/catch_filter.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/context.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/debuggability.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/direct_resolve.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/each.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/errors.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/es5.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/filter.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/finally.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/generators.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/join.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/map.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/method.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/nodeback.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/nodeify.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/promise.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/promise_array.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/promisify.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/props.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/queue.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/race.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/reduce.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/schedule.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/settle.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/some.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/synchronous_inspection.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/thenables.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/timers.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/using.js delete mode 100644 node_modules/twit/node_modules/bluebird/js/release/util.js delete mode 100644 node_modules/twit/node_modules/bluebird/package.json delete mode 100644 node_modules/twit/node_modules/mime/.npmignore delete mode 100644 node_modules/twit/node_modules/mime/LICENSE delete mode 100644 node_modules/twit/node_modules/mime/README.md delete mode 100644 node_modules/twit/node_modules/mime/build/build.js delete mode 100644 node_modules/twit/node_modules/mime/build/test.js delete mode 100755 node_modules/twit/node_modules/mime/cli.js delete mode 100644 node_modules/twit/node_modules/mime/mime.js delete mode 100644 node_modules/twit/node_modules/mime/package.json delete mode 100644 node_modules/twit/node_modules/mime/types.json delete mode 100644 node_modules/twit/node_modules/request/.eslintrc delete mode 100644 node_modules/twit/node_modules/request/.npmignore delete mode 100644 node_modules/twit/node_modules/request/.travis.yml delete mode 100644 node_modules/twit/node_modules/request/CHANGELOG.md delete mode 100644 node_modules/twit/node_modules/request/CONTRIBUTING.md delete mode 100644 node_modules/twit/node_modules/request/LICENSE delete mode 100644 node_modules/twit/node_modules/request/README.md delete mode 100644 node_modules/twit/node_modules/request/disabled.appveyor.yml delete mode 100644 node_modules/twit/node_modules/request/examples/README.md delete mode 100755 node_modules/twit/node_modules/request/index.js delete mode 100644 node_modules/twit/node_modules/request/lib/auth.js delete mode 100644 node_modules/twit/node_modules/request/lib/cookies.js delete mode 100644 node_modules/twit/node_modules/request/lib/getProxyFromURI.js delete mode 100644 node_modules/twit/node_modules/request/lib/har.js delete mode 100644 node_modules/twit/node_modules/request/lib/helpers.js delete mode 100644 node_modules/twit/node_modules/request/lib/multipart.js delete mode 100644 node_modules/twit/node_modules/request/lib/oauth.js delete mode 100644 node_modules/twit/node_modules/request/lib/querystring.js delete mode 100644 node_modules/twit/node_modules/request/lib/redirect.js delete mode 100644 node_modules/twit/node_modules/request/lib/tunnel.js delete mode 120000 node_modules/twit/node_modules/request/node_modules/.bin/har-validator delete mode 120000 node_modules/twit/node_modules/request/node_modules/.bin/uuid delete mode 100644 node_modules/twit/node_modules/request/node_modules/aws-sign2/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/aws-sign2/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/aws-sign2/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/aws-sign2/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/.jshintrc delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/.travis.yml delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/LICENSE.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/bl.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/float.patch delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/lib/util.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/inherits/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/inherits/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/inherits/inherits.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/inherits/inherits_browser.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/inherits/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/inherits/test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/build/build.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/component.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/readable.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/transform.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/node_modules/readable-stream/writable.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/test/basic-test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/test/sauce.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/bl/test/test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/caseless/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/caseless/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/caseless/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/caseless/test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/combined-stream/License delete mode 100644 node_modules/twit/node_modules/request/node_modules/combined-stream/Readme.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/combined-stream/lib/combined_stream.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/License delete mode 100644 node_modules/twit/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/Makefile delete mode 100644 node_modules/twit/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/Readme.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/combined-stream/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/extend/.jscs.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/extend/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/extend/.travis.yml delete mode 100644 node_modules/twit/node_modules/request/node_modules/extend/CHANGELOG.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/extend/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/extend/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/extend/component.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/extend/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/extend/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/forever-agent/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/forever-agent/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/forever-agent/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/forever-agent/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/.dockerignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/.editorconfig delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/.eslintignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/.eslintrc delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/License delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/lib/browser.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/lib/form_data.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/lib/populate.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/async/CHANGELOG.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/async/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/async/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/async/dist/async.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/async/dist/async.min.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/async/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/mime-types/HISTORY.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/mime-types/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/mime-types/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/mime-types/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/HISTORY.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/db.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/node_modules/mime-types/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/form-data/wercker.yml delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/README.md delete mode 100755 node_modules/twit/node_modules/request/node_modules/har-validator/bin/har-validator delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/error.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/cache.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/cacheEntry.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/content.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/cookie.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/creator.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/entry.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/har.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/log.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/page.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/pageTimings.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/postData.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/record.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/request.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/response.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/lib/schemas/timings.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/changelog.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/browser/bluebird.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/browser/bluebird.min.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/any.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/assert.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/async.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/bind.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/bluebird.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/call_get.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/cancel.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/captured_trace.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/catch_filter.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/context.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/debuggability.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/direct_resolve.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/each.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/errors.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/es5.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/filter.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/finally.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/generators.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/join.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/map.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/method.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/nodeify.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/progress.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/promise.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/promise_array.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/promise_resolver.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/promisify.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/props.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/queue.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/race.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/reduce.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/schedule.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/settle.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/some.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/synchronous_inspection.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/thenables.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/timers.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/using.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/js/main/util.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/bluebird/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/license delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/ansi-styles/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/ansi-styles/license delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/ansi-styles/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/escape-string-regexp/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/escape-string-regexp/license delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/escape-string-regexp/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/escape-string-regexp/readme.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/license delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/license delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/readme.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/readme.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/license delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/license delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/readme.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/supports-color/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/supports-color/license delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/supports-color/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/supports-color/readme.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/chalk/readme.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/commander/History.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/commander/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/commander/Readme.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/commander/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/commander/node_modules/graceful-readlink/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/commander/node_modules/graceful-readlink/.travis.yml delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/commander/node_modules/graceful-readlink/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/commander/node_modules/graceful-readlink/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/commander/node_modules/graceful-readlink/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/commander/node_modules/graceful-readlink/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/commander/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/.travis.yml delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/example.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/formats.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-function/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-function/.travis.yml delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-function/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-function/example.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-function/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-function/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-function/test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property/.travis.yml delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property/node_modules/is-property/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property/node_modules/is-property/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property/node_modules/is-property/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property/node_modules/is-property/is-property.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property/node_modules/is-property/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property/test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/jsonpointer/.travis.yml delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/jsonpointer/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/jsonpointer/jsonpointer.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/jsonpointer/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/jsonpointer/test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend/.jshintrc delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend/LICENCE delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend/Makefile delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend/immutable.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend/mutable.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend/test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/require.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/fixtures/cosmic.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/additionalItems.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/additionalProperties.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/allOf.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/anyOf.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/bignum.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/default.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/definitions.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/dependencies.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/enum.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/format.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/items.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/maxItems.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/maxLength.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/maxProperties.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/maximum.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/minItems.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/minLength.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/minProperties.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/minimum.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/multipleOf.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/not.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/nullAndFormat.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/nullAndObject.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/oneOf.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/pattern.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/patternProperties.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/properties.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/ref.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/refRemote.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/required.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/type.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema-draft4/uniqueItems.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/json-schema.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/test/misc.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/har-validator/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/.npmignore delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/.travis.yml delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/LICENSE delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/Makefile delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/bower.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/component.json delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/example/usage.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/images/hawk.png delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/images/logo.png delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/index.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/lib/browser.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/lib/client.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/lib/crypto.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/lib/index.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/lib/server.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/lib/utils.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/boom/CONTRIBUTING.md delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/boom/README.md delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/boom/images/boom.png delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/boom/package.json delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/CONTRIBUTING.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/images/hoek.png delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/ignore.txt delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/sntp/README.md delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/sntp/index.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/sntp/package.json delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/hawk/package.json delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/test/browser.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/test/client.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/test/crypto.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/test/index.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/test/message.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/test/readme.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/test/server.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/test/uri.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/hawk/test/utils.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/.dir-locals.el delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/http_signing.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/lib/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/lib/parser.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/lib/signer.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/lib/util.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/lib/verify.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/ctype/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/ctype/README delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json delete mode 100755 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf delete mode 100755 node_modules/twit/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle delete mode 100644 node_modules/twit/node_modules/request/node_modules/http-signature/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/isstream/.jshintrc delete mode 100644 node_modules/twit/node_modules/request/node_modules/isstream/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/isstream/.travis.yml delete mode 100644 node_modules/twit/node_modules/request/node_modules/isstream/LICENSE.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/isstream/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/isstream/isstream.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/isstream/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/isstream/test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/json-stringify-safe/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/json-stringify-safe/CHANGELOG.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/json-stringify-safe/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/json-stringify-safe/Makefile delete mode 100644 node_modules/twit/node_modules/request/node_modules/json-stringify-safe/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/json-stringify-safe/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/json-stringify-safe/stringify.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/json-stringify-safe/test/mocha.opts delete mode 100644 node_modules/twit/node_modules/request/node_modules/json-stringify-safe/test/stringify_test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/mime-types/HISTORY.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/mime-types/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/mime-types/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/mime-types/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/mime-types/node_modules/mime-db/HISTORY.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/mime-types/node_modules/mime-db/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/mime-types/node_modules/mime-db/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/mime-types/node_modules/mime-db/db.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/mime-types/node_modules/mime-db/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/mime-types/node_modules/mime-db/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/mime-types/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/LICENSE.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu delete mode 100755 node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/bench.sh delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js delete mode 100755 node_modules/twit/node_modules/request/node_modules/node-uuid/bin/uuid delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/bower.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/component.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/test/compare_v1.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/test/test.html delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/test/test.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/node-uuid/uuid.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/oauth-sign/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/oauth-sign/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/oauth-sign/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/oauth-sign/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/.eslintignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/.jshintignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/.jshintrc delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/.travis.yml delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/CHANGELOG.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/CONTRIBUTING.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/Makefile delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/bower.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/lib/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/lib/parse.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/lib/stringify.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/lib/utils.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/test/parse.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/test/stringify.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/qs/test/utils.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/stringstream/.npmignore delete mode 100644 node_modules/twit/node_modules/request/node_modules/stringstream/.travis.yml delete mode 100644 node_modules/twit/node_modules/request/node_modules/stringstream/LICENSE.txt delete mode 100644 node_modules/twit/node_modules/request/node_modules/stringstream/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/stringstream/example.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/stringstream/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/stringstream/stringstream.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/tough-cookie/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/tough-cookie/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/tough-cookie/lib/cookie.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/tough-cookie/lib/memstore.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/tough-cookie/lib/pathMatch.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/tough-cookie/lib/permuteDomain.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/tough-cookie/lib/store.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/tough-cookie/package.json delete mode 100644 node_modules/twit/node_modules/request/node_modules/tunnel-agent/LICENSE delete mode 100644 node_modules/twit/node_modules/request/node_modules/tunnel-agent/README.md delete mode 100644 node_modules/twit/node_modules/request/node_modules/tunnel-agent/index.js delete mode 100644 node_modules/twit/node_modules/request/node_modules/tunnel-agent/package.json delete mode 100644 node_modules/twit/node_modules/request/package.json delete mode 100755 node_modules/twit/node_modules/request/release.sh delete mode 100644 node_modules/twit/node_modules/request/request.js delete mode 100644 node_modules/twit/package.json delete mode 100644 node_modules/twit/tests/helpers.js delete mode 100644 node_modules/twit/tests/img/bigbird.jpg delete mode 100644 node_modules/twit/tests/img/cutebird.png delete mode 100644 node_modules/twit/tests/img/snoopy-animated.gif delete mode 100644 node_modules/twit/tests/img/twitterbird.gif delete mode 100644 node_modules/twit/tests/multiple-conn.js delete mode 100644 node_modules/twit/tests/rest.js delete mode 100644 node_modules/twit/tests/rest_app_only_auth.js delete mode 100644 node_modules/twit/tests/rest_chunked_upload.js delete mode 100644 node_modules/twit/tests/streaming.js delete mode 100644 node_modules/twit/tests/test_helpers.js delete mode 100644 node_modules/twit/tests/twit.js delete mode 100644 node_modules/twit/tests/user_stream.js delete mode 100644 node_modules/twit/tests/video/station.mp4 diff --git a/id_rsa_pagoda b/id_rsa_pagoda new file mode 100644 index 0000000..c800a2b --- /dev/null +++ b/id_rsa_pagoda @@ -0,0 +1,54 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,A907E1F0C46F90328FEB773DA16BB035 + +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 +-----END RSA PRIVATE KEY----- diff --git a/id_rsa_pagoda.pub b/id_rsa_pagoda.pub new file mode 100644 index 0000000..8ec815e --- /dev/null +++ b/id_rsa_pagoda.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDL4DS4icbVaQTeL5MhF8n7At/N0NGVHZZHl0Yzlltnf4NBm3NDHa/y7XpHCpQH9qe8f+VgJ0c7DdbP9/6vaYSog7VWcRw2eyY9WqpUBQH62TwanhZEo//sHPPv+XYQVvjerrVZPtvY13s6ZjMu7HoTo8l6/TW8QGHN+luipW0GG+w/2KrfBvPpYOEm9AaS1zb3QmEmjmNqcLD5DTf/xg+gbwW7rVhDOlgbBfohDdm6Kippcn3YP4Vw1+0K9vxaqL0A39R4G+q+9wsliFG3jybTqtcO4QLp7Orb6IBQ5PGQ2f8hu6rzp5dC5r4VZpl+eiIhnvjPvUgei0j/oSafrNaGX/ZhD22AEKL/4ab9j2Wj2Sq1JIbG+2PHSL7RnL6MG++4TtYQA2NbBdFOqB2wdpZq/7555ET4ftGOUI8G3qIAS1jiKftMa2ejTK5Xbcx1IqF+IZsyGP0FMgnHijGe6p8ME9CAbS9rIzdC7p6VE9m0Nk3ESmSnWPGn/6fbeWDoKoGy3CnviZqncZJO/IPS1/D2rP/NLX4PEFd3h/YthQE3SMY2ojY+EDysXIGltbPig9qpUU4zULDESwDPEUfJxUCw1+PPCEGQenEeOBD/lQgpEen9B2JaTNAWJwqAV5DTAUl4BGnkpR8rSH7canHtU87ndpZNffUS/tWM1kbCsyDQmQ== talorb@outlook.com diff --git a/node_modules/fs/index.js b/node_modules/fs/index.js deleted file mode 100644 index 5f29280..0000000 --- a/node_modules/fs/index.js +++ /dev/null @@ -1 +0,0 @@ -console.log("I'm `fs` modules"); diff --git a/node_modules/fs/package.json b/node_modules/fs/package.json deleted file mode 100644 index 3ae697a..0000000 --- a/node_modules/fs/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "fs", - "version": "0.0.2", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "MIT", - "_id": "fs@0.0.2", - "_shasum": "e1f244ef3933c1b2a64bd4799136060d0f5914f8", - "_from": "fs@>=0.0.2 <0.0.3", - "_npmVersion": "1.4.14", - "_npmUser": { - "name": "alsotang", - "email": "alsotang@gmail.com" - }, - "maintainers": [ - { - "name": "alsotang", - "email": "alsotang@gmail.com" - } - ], - "dist": { - "shasum": "e1f244ef3933c1b2a64bd4799136060d0f5914f8", - "tarball": "https://registry.npmjs.org/fs/-/fs-0.0.2.tgz" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/fs/-/fs-0.0.2.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/lowdb/.babelrc b/node_modules/lowdb/.babelrc deleted file mode 100644 index e36182a..0000000 --- a/node_modules/lowdb/.babelrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "presets": [ - "es2015", - "stage-3" - ] -} diff --git a/node_modules/lowdb/.npmignore b/node_modules/lowdb/.npmignore deleted file mode 100644 index 47c680c..0000000 --- a/node_modules/lowdb/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -.travis.yml -src -test diff --git a/node_modules/lowdb/LICENSE b/node_modules/lowdb/LICENSE deleted file mode 100644 index 3a2b740..0000000 --- a/node_modules/lowdb/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 typicode - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/lowdb/README.md b/node_modules/lowdb/README.md deleted file mode 100644 index b424b40..0000000 --- a/node_modules/lowdb/README.md +++ /dev/null @@ -1,404 +0,0 @@ -# lowdb [![NPM version](https://badge.fury.io/js/lowdb.svg)](http://badge.fury.io/js/lowdb) [![Build Status](https://travis-ci.org/typicode/lowdb.svg?branch=master)](https://travis-ci.org/typicode/lowdb) - -> Need a quick way to get a local database for a CLI, an Electron app, a small server or the browser? - -## Example - -```js -const low = require('lowdb') -const storage = require('lowdb/file-sync') - -const db = low('db.json', { storage }) - -db('posts').push({ title: 'lowdb is awesome'}) -``` - -Database is __automatically__ saved to `db.json`. - -```js -{ - "posts": [ - { "title": "lowdb is awesome" } - ] -} -``` - -You can query and manipulate it using __any__ [lodash](https://lodash.com/docs) __method__. - -```js -db('posts').find({ title: 'lowdb is awesome' }) -``` - -And access underlying database object any time. - -```js -db.object.posts -``` - -__[Click here to try lowdb in the browser.](http://typicode.github.io/lowdb/)__ - -## ES2015 - -Examples use ES2015 syntax for convenience, but you can use ES5 syntax too. For example: - -```js -var db = low('db.json', { storage: storage }) -``` - -Please note also that lowdb can only be run in one instance of Node, it doesn't support Cluster. - -## Installation - -Using npm: - -```bash -npm install lowdb --save -``` - -A standalone UMD build is also available on [npmcdn](https://npmcdn.com/): - -```html - - -``` - -## Features - -* Very small (~100 lines for core) -* lodash API -* Extendable: - * __Custom storage__ (file, browser, in-memory, ...) - * __Custom format__ (JSON, BSON, YAML, ...) - * __Mixins__ (id support, ...) - * __Encryption__ - -Lowdb is also very easy to learn since it has __only a few methods and properties__. - -_lowdb powers [json-server](https://github.com/typicode/json-server) package, [jsonplaceholder](http://jsonplaceholder.typicode.com/) website and [many other great projects](https://www.npmjs.com/browse/depended/lowdb)._ - -## Usage examples - -Depending on the context, you can use different storages and formats. - -Lowdb comes bundled with `file-sync`, `file-async` and `browser` storages, but you can also write your own if needed. - -### CLI - -For CLIs, it's easier to use `lowdb/file-sync` synchronous file storage . - -```js -const low = require('lowdb') -const storage = require('lowdb/file-sync') - -const db = low('db.json', { storage }) - -db('users').push({ name: 'typicode' }) -const user = db('users').find({ name: 'typicode' }) -``` - -### Server - -For servers, it's better to avoid blocking requests. Use `lowdb/file-async` asynchronous file storage. - -__Important__ - -* When you modify the database, a Promise is returned. -* When you read from the database, the result is immediately returned. - -```js -const low = require('lowdb'). -const storage = require('lowdb/file-async') - -const db = low('db.json', { storage }) - -app.get('/posts/:id', (req, res) => { - // Returns a post - const post = db('posts').find({ id: req.params.id }) - res.send(post) -}) - -app.post('/posts', (req, res) => { - // Returns a Promise that resolves to a post - db('posts') - .push(req.body) - .then(post => res.send(post)) -}) -``` - -### Browser - -In the browser, `lowdb/browser` will add `localStorage` support. - -```js -const low = require('lowdb') -const storage = require('lowdb/browser') - -const db = low('db', { storage }) - -db('users').push({ name: 'typicode' }) -const user = db('users').find({ name: 'typicode' }) -``` - -### In-memory - -For the best performance, use lowdb in-memory storage. - -```js -const low = require('lowdb') -const db = low() - -db('users').push({ name: 'typicode' }) -const user = db('users').find({ name: 'typicode' }) -``` - -Please note that, as an alternative, you can also disable `writeOnChange` if you want to control when data is written. - -## API - -__low([filename, [storage, [writeOnChange = true]]])__ - -Creates a new database instance. Here are some examples: - -```js -low() // in-memory -low('db.json', { storage: /* */ }) // persisted -low('db.json', { storage: /* */ }, false) // auto write disabled - -// To create read-only or write-only database, -// set only storage.read or storage.write -const fileSync = require('lowdb/file-sync') - -// write-only -low('db.json', { - storage: { write: fileSync.write } -}) - -// read-only -low('db.json', { - storage: { read: fileSync.read } -}) -``` - -You can also define custom storages and formats: - -```js -const myStorage = { - read: (source, deserialize) => // obj or a Promise - write: (dest, obj, serialize) => // undefined or a Promise -} - -const myFormat = { - format: { - deserialize: (data) => // obj - serialize: (obj) => // data - } -} - -low(source, { storage: myStorage, format: myFormat }, writeOnChange) -``` - -__db.___ - -Database lodash instance. Use it to add your own utility functions or third-party mixins like [underscore-contrib](https://github.com/documentcloud/underscore-contrib) or [underscore-db](https://github.com/typicode/underscore-db). - -```js -db._.mixin({ - second: function(array) { - return array[1] - } -}) - -const post1 = db('posts').first() -const post2 = db('posts').second() -``` - -__db.object__ - -Use whenever you want to access or modify the underlying database object. - -```js -db.object // { posts: [ ... ] } -``` - -If you directly modify the content of the database object, you will need to manually call `write` to persist changes. - -```js -// Delete an array -delete db.object.posts -db.write() - -// Drop database -db.object = {} -db.write() -``` - -__db.write([source])__ - -Persists database using `storage.write` method. Depending on the storage, it may return a promise. - -Note: by default, lowdb automatically calls it when database changes. - -```js -const db = low('db.json', { storage }) -db.write() // writes to db.json -db.write('copy.json') // writes to copy.json -``` - -__db.read([source])__ - -Reads source using `storage.read` method. Depending on the storage, it may return a promise. - -```js -const db = low('db.json', { storage }) -db.read() // re-reads db.json -db.read('copy.json') // reads copy.json -``` - -## Guide - -### How to query - -With lowdb, you get access to the entire [lodash API](http://lodash.com/), so there is many ways to query and manipulate data. Here are a few examples to get you started. - -Please note that data is returned by reference, this means that modifications to returned objects may change the database. To avoid such behaviour, you need to use `.cloneDeep()`. - -Also, the execution of chained methods is lazy, that is, execution is deferred until `.value()` is called. - -#### Examples - -Sort the top five posts. - -```js -db('posts') - .chain() - .filter({published: true}) - .sortBy('views') - .take(5) - .value() -``` - -Retrieve post titles. - -```js -db('posts').map('title') -``` - -Get the number of posts. - -```js -db('posts').size() -``` - -Make a deep clone of posts. - -```js -db('posts').cloneDeep() -``` - -Update a post. - -```js -db('posts') - .chain() - .find({ title: 'low!' }) - .assign({ title: 'hi!'}) - .value() -``` - -Remove posts. - -```js -db('posts').remove({ title: 'low!' }) -``` - -### How to use id based resources - -Being able to retrieve data using an id can be quite useful, particularly in servers. To add id-based resources support to lowdb, you have 2 options. - -[underscore-db](https://github.com/typicode/underscore-db) provides a set of helpers for creating and manipulating id-based resources. - -```js -const db = low('db.json') - -db._.mixin(require('underscore-db')) - -const postId = db('posts').insert({ title: 'low!' }).id -const post = db('posts').getById(postId) -``` - -[uuid](https://github.com/broofa/node-uuid) is more minimalist and returns a unique id that you can use when creating resources. - -```js -const uuid = require('uuid') - -const postId = db('posts').push({ id: uuid(), title: 'low!' }).id -const post = db('posts').find({ id: postId }) -``` - -### How to use custom format - -By default, lowdb storages will use `JSON` to `parse` and `stringify` database object. - -But it's also possible to specify custom `format.serializer` and `format.deserializer` methods that will be passed by lowdb to `storage.read` and `storage.write` methods. - -For example, if you want to store database in `.bson` files ([MongoDB file format](https://github.com/mongodb/js-bson)): - -```js -const low = require('lowdb') -const storage = require('lowdb/file-sync') -const bson = require('bson') -const BSON = new bson.BSONPure.BSON() - -low('db.bson', { storage, format: { - serialize: BSON.serialize, - deserialize: BSON.deserialize -}}) - -// Alternative ES2015 short syntax -const bson = require('bson') -const format = new bson.BSONPure.BSON() -low('db.bson', { storage, format }) -``` - -### How to encrypt data - -Simply `encrypt` and `decrypt` data in `format.serialize` and `format.deserialize` methods. - -For example, using [cryptr](https://github.com/MauriceButler/cryptr): - -```js -const Cryptr = require("./cryptr"), -const cryptr = new Cryptr('my secret key') - -const db = low('db.json', { - format: { - deserialize: (str) => { - const decrypted = cryptr.decrypt(str) - const obj = JSON.parse(decrypted) - return obj - }, - serialize: (obj) => { - const str = JSON.stringify(obj) - const encrypted = cryptr.encrypt(str) - return encrypted - } - } -}) -``` - -## Changelog - -See changes for each version in the [release notes](https://github.com/typicode/lowdb/releases). - -## Limits - -lowdb is a convenient method for storing data without setting up a database server. It is fast enough and safe to be used as an embedded database. - -However, if you seek high performance and scalability more than simplicity, you should probably stick to traditional databases like MongoDB. - -## License - -MIT - [Typicode](https://github.com/typicode) diff --git a/node_modules/lowdb/browser.js b/node_modules/lowdb/browser.js deleted file mode 100644 index d231c5c..0000000 --- a/node_modules/lowdb/browser.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -/* global localStorage */ - -module.exports = { - read: function read(source) { - var deserialize = arguments.length <= 1 || arguments[1] === undefined ? JSON.parse : arguments[1]; - - var data = localStorage.getItem(source); - if (data) { - return deserialize(data); - } else { - localStorage.setItem(source, '{}'); - return {}; - } - }, - write: function write(dest, obj) { - var serialize = arguments.length <= 2 || arguments[2] === undefined ? JSON.stringify : arguments[2]; - return localStorage.setItem(dest, serialize(obj)); - } -}; \ No newline at end of file diff --git a/node_modules/lowdb/dist/lowdb.js b/node_modules/lowdb/dist/lowdb.js deleted file mode 100644 index 8b49a68..0000000 --- a/node_modules/lowdb/dist/lowdb.js +++ /dev/null @@ -1,15173 +0,0 @@ -/*! lowdb v0.12.5 */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["low"] = factory(); - else - root["low"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; - -/******/ // The require function -/******/ function __webpack_require__(moduleId) { - -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; - -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; - -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - -/******/ // Flag the module as loaded -/******/ module.loaded = true; - -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } - - -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; - -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; - -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; - -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - // Entry point for standalone build - var index = __webpack_require__(1); - index.localStorage = __webpack_require__(5); - module.exports = index; - -/***/ }, -/* 1 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var lodash = __webpack_require__(2); - var isPromise = __webpack_require__(4); - - // Returns a lodash chain that calls .value() - // automatically after the first .method() - // - // It also returns a promise or value - // - // For example: - // lowChain(_, array, save).method() - // - // is the same as: - // _.chain(array).method().value() - function lowChain(_, array, save) { - var chain = _.chain(array); - - _.functionsIn(chain).forEach(function (method) { - chain[method] = _.flow(chain[method], function (arg) { - var v = undefined; - if (arg) { - v = _.isFunction(arg.value) ? arg.value() : arg; - } - - var s = save(); - - if (s) return s.then(function () { - return Promise.resolve(v); - }); - return v; - }); - }); - - return chain; - } - - function low(source) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var writeOnChange = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2]; - - // Create a fresh copy of lodash - var _ = lodash.runInContext(); - - if (source) { - if (options.storage) { - (function () { - var storage = options.storage; - - - if (storage.read) { - db.read = function () { - var s = arguments.length <= 0 || arguments[0] === undefined ? source : arguments[0]; - - var res = storage.read(s, db.deserialize); - - if (isPromise(res)) { - return res.then(function (obj) { - db.object = obj; - db._checksum = JSON.stringify(db.object); - - return db; - }); - } - - db.object = res; - db._checksum = JSON.stringify(db.object); - - return db; - }; - } - - if (storage.write) { - db.write = function () { - var dest = arguments.length <= 0 || arguments[0] === undefined ? source : arguments[0]; - return storage.write(dest, db.object, db.serialize); - }; - } - })(); - } - - if (options.format) { - var format = options.format; - - db.serialize = format.serialize; - db.deserialize = format.deserialize; - } - } - - // Modify value function to call save before returning result - _.prototype.value = _.wrap(_.prototype.value, function (value) { - var v = value.apply(this); - var s = _save(); - - if (s) return s.then(function () { - return Promise.resolve(v); - }); - return v; - }); - - // Return a promise or nothing in sync mode or if the database hasn't changed - function _save() { - if (db.source && db.write && writeOnChange) { - var str = JSON.stringify(db.object); - - if (str !== db._checksum) { - db._checksum = str; - return db.write(db.source, db.object); - } - } - } - - function db(key) { - if (typeof db.object[key] === 'undefined') { - db.object[key] = []; - } - var array = db.object[key]; - var short = lowChain(_, array, _save); - short.chain = function () { - return _.chain(array); - }; - // Prevents db.write being called when just calling db('foo').value() - short.value = function () { - return db.object[key]; - }; - return short; - } - - // Expose - db._ = _; - db.object = {}; - db.source = source; - - // Init - if (db.read) { - return db.read(); - } else { - return db; - } - } - - module.exports = low; - -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/** - * @license - * lodash 4.5.0 (Custom Build) - * Build: `lodash -d -o ./foo/lodash.js` - * Copyright 2012-2016 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - ;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.5.0'; - - /** Used to compose bitmasks for wrapper metadata. */ - var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_BOUND_FLAG = 4, - CURRY_FLAG = 8, - CURRY_RIGHT_FLAG = 16, - PARTIAL_FLAG = 32, - PARTIAL_RIGHT_FLAG = 64, - ARY_FLAG = 128, - REARG_FLAG = 256, - FLIP_FLAG = 512; - - /** Used to compose bitmasks for comparison styles. */ - var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - - /** Used as default options for `_.truncate`. */ - var DEFAULT_TRUNC_LENGTH = 30, - DEFAULT_TRUNC_OMISSION = '...'; - - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 150, - HOT_SPAN = 16; - - /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200; - - /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2, - LAZY_WHILE_FLAG = 3; - - /** Used as the `TypeError` message for "Functions" methods. */ - var FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__lodash_hash_undefined__'; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991, - MAX_INTEGER = 1.7976931348623157e+308, - NAN = 0 / 0; - - /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - - /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__'; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]', - weakSetTag = '[object WeakSet]'; - - var arrayBufferTag = '[object ArrayBuffer]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - /** Used to match empty string literals in compiled template source. */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - - /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, - reUnescapedHtml = /[&<>"'`]/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to match template delimiters. */ - var reEscape = /<%-([\s\S]+?)%>/g, - reEvaluate = /<%([\s\S]+?)%>/g, - reInterpolate = /<%=([\s\S]+?)%>/g; - - /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g; - - /** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); - - /** Used to match leading and trailing whitespace. */ - var reTrim = /^\s+|\s+$/g, - reTrimStart = /^\s+/, - reTrimEnd = /\s+$/; - - /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g; - - /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - - /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; - - /** Used to detect hexadecimal string values. */ - var reHasHexPrefix = /^0x/i; - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; - - /** Used to detect host constructors (Safari > 5). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** Used to match latin-1 supplementary letters (excluding mathematical operators). */ - var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; - - /** Used to ensure capturing order of template delimiters. */ - var reNoMatch = /($^)/; - - /** Used to match unescaped characters in compiled string literals. */ - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0', - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsQuoteRange = '\\u2018\\u2019\\u201c\\u201d', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsQuoteRange + rsSpaceRange; - - /** Used to compose unicode capture groups. */ - var rsAstral = '[' + rsAstralRange + ']', - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; - - /** Used to compose unicode regexes. */ - var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')', - rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - - /** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ - var reComboMark = RegExp(rsCombo, 'g'); - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); - - /** Used to match non-compound words composed of alphanumeric characters. */ - var reBasicWord = /[a-zA-Z0-9]+/g; - - /** Used to match complex or compound words. */ - var reComplexWord = RegExp([ - rsUpper + '?' + rsLower + '+(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsUpperMisc + '+(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', - rsUpper + '?' + rsLowerMisc + '+', - rsUpper + '+', - rsDigits, - rsEmoji - ].join('|'), 'g'); - - /** Used to detect strings that need a more robust regexp to match words. */ - var reHasComplexWord = /[a-z][A-Z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - - /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', 'Buffer', 'Date', 'Error', 'Float32Array', 'Float64Array', - 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', - 'Reflect', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', - 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', '_', - 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' - ]; - - /** Used to make template sourceURLs easier to identify. */ - var templateCounter = -1; - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dateTag] = typedArrayTags[errorTag] = - typedArrayTags[funcTag] = typedArrayTags[mapTag] = - typedArrayTags[numberTag] = typedArrayTags[objectTag] = - typedArrayTags[regexpTag] = typedArrayTags[setTag] = - typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; - - /** Used to identify `toStringTag` values supported by `_.clone`. */ - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = - cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = - cloneableTags[dateTag] = cloneableTags[float32Tag] = - cloneableTags[float64Tag] = cloneableTags[int8Tag] = - cloneableTags[int16Tag] = cloneableTags[int32Tag] = - cloneableTags[mapTag] = cloneableTags[numberTag] = - cloneableTags[objectTag] = cloneableTags[regexpTag] = - cloneableTags[setTag] = cloneableTags[stringTag] = - cloneableTags[symbolTag] = cloneableTags[uint8Tag] = - cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = - cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = - cloneableTags[weakMapTag] = false; - - /** Used to map latin-1 supplementary letters to basic latin letters. */ - var deburredLetters = { - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss' - }; - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - - /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'", - '`': '`' - }; - - /** Used to determine if values are of the language type `Object`. */ - var objectTypes = { - 'function': true, - 'object': true - }; - - /** Used to escape characters for inclusion in compiled string literals. */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat, - freeParseInt = parseInt; - - /** Detect free variable `exports`. */ - var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) - ? exports - : undefined; - - /** Detect free variable `module`. */ - var freeModule = (objectTypes[typeof module] && module && !module.nodeType) - ? module - : undefined; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = (freeModule && freeModule.exports === freeExports) - ? freeExports - : undefined; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global); - - /** Detect free variable `self`. */ - var freeSelf = checkGlobal(objectTypes[typeof self] && self); - - /** Detect free variable `window`. */ - var freeWindow = checkGlobal(objectTypes[typeof window] && window); - - /** Detect `this` as the global object. */ - var thisGlobal = checkGlobal(objectTypes[typeof this] && this); - - /** - * Used as a reference to the global object. - * - * The `this` value is used if it's the global object to avoid Greasemonkey's - * restricted `window` object, otherwise the `window` object is used. - */ - var root = freeGlobal || - ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || - freeSelf || thisGlobal || Function('return this')(); - - /*--------------------------------------------------------------------------*/ - - /** - * Adds the key-value `pair` to `map`. - * - * @private - * @param {Object} map The map to modify. - * @param {Array} pair The key-value pair to add. - * @returns {Object} Returns `map`. - */ - function addMapEntry(map, pair) { - map.set(pair[0], pair[1]); - return map; - } - - /** - * Adds `value` to `set`. - * - * @private - * @param {Object} set The set to modify. - * @param {*} value The value to add. - * @returns {Object} Returns `set`. - */ - function addSetEntry(set, value) { - set.add(value); - return set; - } - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - var length = args.length; - switch (length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - - /** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; - } - - /** - * Creates a new array concatenating `array` with `other`. - * - * @private - * @param {Array} array The first array to concatenate. - * @param {Array} other The second array to concatenate. - * @returns {Array} Returns the new concatenated array. - */ - function arrayConcat(array, other) { - var index = -1, - length = array.length, - othIndex = -1, - othLength = other.length, - result = Array(length + othLength); - - while (++index < length) { - result[index] = array[index]; - } - while (++othIndex < othLength) { - result[index++] = other[othIndex]; - } - return result; - } - - /** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEach(array, iteratee) { - var index = -1, - length = array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEachRight(array, iteratee) { - var length = array.length; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`. - */ - function arrayEvery(array, predicate) { - var index = -1, - length = array.length; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; - } - - /** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function arrayFilter(array, predicate) { - var index = -1, - length = array.length, - resIndex = -1, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[++resIndex] = value; - } - } - return result; - } - - /** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} array The array to search. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludes(array, value) { - return !!array.length && baseIndexOf(array, value, 0) > -1; - } - - /** - * A specialized version of `_.includesWith` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} array The array to search. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; - } - - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } - - /** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } - - /** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array.length; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; - } - - /** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. - */ - function arraySome(array, predicate) { - var index = -1, - length = array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? current === current - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; - } - - /** - * The base implementation of methods like `_.find` and `_.findKey`, without - * support for iteratee shorthands, which iterates over `collection` using - * `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to search. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @param {boolean} [retKey] Specify returning the key of the found element instead of the element itself. - * @returns {*} Returns the found element or its key, else `undefined`. - */ - function baseFind(collection, predicate, eachFunc, retKey) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = retKey ? key : value; - return false; - } - }); - return result; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to search. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - if (value !== value) { - return indexOfNaN(array, fromIndex); - } - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.sortBy` which uses `comparer` to define - * the sort order of `array` and replaces criteria objects with their - * corresponding values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ - function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; - } - - /** - * The base implementation of `_.sum` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ - function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; - - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : (result + current); - } - } - return result; - } - - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - - /** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the new array of key-value pairs. - */ - function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); - } - - /** - * The base implementation of `_.unary` without support for storing wrapper metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new function. - */ - function baseUnary(func) { - return function(value) { - return func(value); - }; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - - /** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; - - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Checks if `value` is a global object. - * - * @private - * @param {*} value The value to check. - * @returns {null|Object} Returns `value` if it's a global object, else `null`. - */ - function checkGlobal(value) { - return (value && value.Object === Object) ? value : null; - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsNull = value === null, - valIsUndef = value === undefined, - valIsReflexive = value === value; - - var othIsNull = other === null, - othIsUndef = other === undefined, - othIsReflexive = other === other; - - if ((value > other && !othIsNull) || !valIsReflexive || - (valIsNull && !othIsUndef && othIsReflexive) || - (valIsUndef && othIsReflexive)) { - return 1; - } - if ((value < other && !valIsNull) || !othIsReflexive || - (othIsNull && !valIsUndef && valIsReflexive) || - (othIsUndef && valIsReflexive)) { - return -1; - } - } - return 0; - } - - /** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://code.google.com/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; - } - - /** - * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ - function deburrLetter(letter) { - return deburredLetters[letter]; - } - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeHtmlChar(chr) { - return htmlEscapes[chr]; - } - - /** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; - } - - /** - * Gets the index at which the first occurrence of `NaN` is found in `array`. - * - * @private - * @param {Array} array The array to search. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched `NaN`, else `-1`. - */ - function indexOfNaN(array, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 0 : -1); - - while ((fromRight ? index-- : ++index < length)) { - var other = array[index]; - if (other !== other) { - return index; - } - } - return -1; - } - - /** - * Checks if `value` is a host object in IE < 9. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a host object, else `false`. - */ - function isHostObject(value) { - // Many host objects are `Object` objects that can coerce to strings - // despite having improperly defined `toString` methods. - var result = false; - if (value != null && typeof value.toString != 'function') { - try { - result = !!(value + ''); - } catch (e) {} - } - return result; - } - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; - length = length == null ? MAX_SAFE_INTEGER : length; - return value > -1 && value % 1 == 0 && value < length; - } - - /** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ - function iteratorToArray(iterator) { - var data, - result = []; - - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; - } - - /** - * Converts `map` to an array. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the converted array. - */ - function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; - } - - /** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = -1, - result = []; - - while (++index < length) { - if (array[index] === placeholder) { - array[index] = PLACEHOLDER; - result[++resIndex] = index; - } - } - return result; - } - - /** - * Converts `set` to an array. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the converted array. - */ - function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; - } - - /** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ - function stringSize(string) { - if (!(string && reHasComplexSymbol.test(string))) { - return string.length; - } - var result = reComplexSymbol.lastIndex = 0; - while (reComplexSymbol.test(string)) { - result++; - } - return result; - } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return string.match(reComplexSymbol); - } - - /** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - function unescapeHtmlChar(chr) { - return htmlUnescapes[chr]; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new pristine `lodash` function using the `context` object. - * - * @static - * @memberOf _ - * @category Util - * @param {Object} [context=root] The context object. - * @returns {Function} Returns a new `lodash` function. - * @example - * - * _.mixin({ 'foo': _.constant('foo') }); - * - * var lodash = _.runInContext(); - * lodash.mixin({ 'bar': lodash.constant('bar') }); - * - * _.isFunction(_.foo); - * // => true - * _.isFunction(_.bar); - * // => false - * - * lodash.isFunction(lodash.foo); - * // => false - * lodash.isFunction(lodash.bar); - * // => true - * - * // Use `context` to mock `Date#getTime` use in `_.now`. - * var mock = _.runInContext({ - * 'Date': function() { - * return { 'getTime': getTimeMock }; - * } - * }); - * - * // Create a suped-up `defer` in Node.js. - * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; - */ - function runInContext(context) { - context = context ? _.defaults({}, context, _.pick(root, contextProps)) : root; - - /** Built-in constructor references. */ - var Date = context.Date, - Error = context.Error, - Math = context.Math, - RegExp = context.RegExp, - TypeError = context.TypeError; - - /** Used for built-in method references. */ - var arrayProto = context.Array.prototype, - objectProto = context.Object.prototype; - - /** Used to resolve the decompiled source of functions. */ - var funcToString = context.Function.prototype.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** Used to infer the `Object` constructor. */ - var objectCtorString = funcToString.call(Object); - - /** - * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - /** Built-in value references. */ - var Buffer = moduleExports ? context.Buffer : undefined, - Reflect = context.Reflect, - Symbol = context.Symbol, - Uint8Array = context.Uint8Array, - clearTimeout = context.clearTimeout, - enumerate = Reflect ? Reflect.enumerate : undefined, - getPrototypeOf = Object.getPrototypeOf, - getOwnPropertySymbols = Object.getOwnPropertySymbols, - iteratorSymbol = typeof (iteratorSymbol = Symbol && Symbol.iterator) == 'symbol' ? iteratorSymbol : undefined, - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - setTimeout = context.setTimeout, - splice = arrayProto.splice; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeFloor = Math.floor, - nativeIsFinite = context.isFinite, - nativeJoin = arrayProto.join, - nativeKeys = Object.keys, - nativeMax = Math.max, - nativeMin = Math.min, - nativeParseInt = context.parseInt, - nativeRandom = Math.random, - nativeReverse = arrayProto.reverse; - - /* Built-in method references that are verified to be native. */ - var Map = getNative(context, 'Map'), - Set = getNative(context, 'Set'), - WeakMap = getNative(context, 'WeakMap'), - nativeCreate = getNative(Object, 'create'); - - /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap; - - /** Used to detect maps, sets, and weakmaps. */ - var mapCtorString = Map ? funcToString.call(Map) : '', - setCtorString = Set ? funcToString.call(Set) : '', - weakMapCtorString = WeakMap ? funcToString.call(WeakMap) : ''; - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = Symbol ? symbolProto.valueOf : undefined, - symbolToString = Symbol ? symbolProto.toString : undefined; - - /** Used to lookup unminified function names. */ - var realNames = {}; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chaining. Methods that operate on and return arrays, collections, and - * functions can be chained together. Methods that retrieve a single value or - * may return a primitive value will automatically end the chain sequence and - * return the unwrapped value. Otherwise, the value must be unwrapped with - * `_#value`. - * - * Explicit chaining, which must be unwrapped with `_#value` in all cases, - * may be enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. Shortcut - * fusion is an optimization to merge iteratee calls; this avoids the creation - * of intermediate arrays and can greatly reduce the number of iteratee executions. - * Sections of a chain sequence qualify for shortcut fusion if the section is - * applied to an array of at least two hundred elements and any iteratees - * accept only one argument. The heuristic for whether a section qualifies - * for shortcut fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, `difference`, - * `differenceBy`, `differenceWith`, `drop`, `dropRight`, `dropRightWhile`, - * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flattenDepth`, - * `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, `functionsIn`, - * `groupBy`, `initial`, `intersection`, `intersectionBy`, `intersectionWith`, - * `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, `keys`, `keysIn`, - * `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, `memoize`, - * `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, `nthArg`, - * `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, `overEvery`, - * `overSome`, `partial`, `partialRight`, `partition`, `pick`, `pickBy`, `plant`, - * `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, `pullAt`, `push`, - * `range`, `rangeRight`, `rearg`, `reject`, `remove`, `rest`, `reverse`, - * `sampleSize`, `set`, `setWith`, `shuffle`, `slice`, `sort`, `sortBy`, - * `splice`, `spread`, `tail`, `take`, `takeRight`, `takeRightWhile`, - * `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, `toPairs`, `toPairsIn`, - * `toPath`, `toPlainObject`, `transform`, `unary`, `union`, `unionBy`, - * `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, `unshift`, `unzip`, - * `unzipWith`, `values`, `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, - * `xorWith`, `zip`, `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `deburr`, `endsWith`, `eq`, - * `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `floor`, `forEach`, `forEachRight`, `forIn`, - * `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, `hasIn`, - * `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, `isArguments`, - * `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, `isBoolean`, - * `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, `isEqualWith`, - * `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, `isMap`, - * `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, `isNumber`, - * `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, `isSafeInteger`, - * `isSet`, `isString`, `isUndefined`, `isTypedArray`, `isWeakMap`, `isWeakSet`, - * `join`, `kebabCase`, `last`, `lastIndexOf`, `lowerCase`, `lowerFirst`, - * `lt`, `lte`, `max`, `maxBy`, `mean`, `min`, `minBy`, `noConflict`, `noop`, - * `now`, `pad`, `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, - * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `sample`, - * `shift`, `size`, `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, - * `sortedLastIndex`, `sortedLastIndexBy`, `startCase`, `startsWith`, `subtract`, - * `sum`, `sumBy`, `template`, `times`, `toLower`, `toInteger`, `toLength`, - * `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, `trimEnd`, - * `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, `upperFirst`, - * `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, '__wrapped__')) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); - } - - /** - * The function whose prototype all chaining wrappers inherit from. - * - * @private - */ - function baseLodash() { - // No operation performed. - } - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable chaining for all wrapper methods. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; - } - - /** - * By default, the template delimiters used by lodash are like those in - * embedded Ruby (ERB). Change the following template settings to use - * alternative delimiters. - * - * @static - * @memberOf _ - * @type {Object} - */ - lodash.templateSettings = { - - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'escape': reEscape, - - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'evaluate': reEvaluate, - - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'interpolate': reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type {string} - */ - 'variable': '', - - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type {Object} - */ - 'imports': { - - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type {Function} - */ - '_': lodash - } - }; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } - - /** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; - } - - /** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; - } - - /** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || arrLength < LARGE_ARRAY_SIZE || - (arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - - outer: - while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an hash object. - * - * @private - * @constructor - * @returns {Object} Returns the new hash object. - */ - function Hash() {} - - /** - * Removes `key` and its value from the hash. - * - * @private - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function hashDelete(hash, key) { - return hashHas(hash, key) && delete hash[key]; - } - - /** - * Gets the hash value for `key`. - * - * @private - * @param {Object} hash The hash to query. - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function hashGet(hash, key) { - if (nativeCreate) { - var result = hash[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(hash, key) ? hash[key] : undefined; - } - - /** - * Checks if a hash value for `key` exists. - * - * @private - * @param {Object} hash The hash to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function hashHas(hash, key) { - return nativeCreate ? hash[key] !== undefined : hasOwnProperty.call(hash, key); - } - - /** - * Sets the hash `key` to `value`. - * - * @private - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - */ - function hashSet(hash, key, value) { - hash[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ - function MapCache(values) { - var index = -1, - length = values ? values.length : 0; - - this.clear(); - while (++index < length) { - var entry = values[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ - function mapClear() { - this.__data__ = { - 'hash': new Hash, - 'map': Map ? new Map : [], - 'string': new Hash - }; - } - - /** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function mapDelete(key) { - var data = this.__data__; - if (isKeyable(key)) { - return hashDelete(typeof key == 'string' ? data.string : data.hash, key); - } - return Map ? data.map['delete'](key) : assocDelete(data.map, key); - } - - /** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function mapGet(key) { - var data = this.__data__; - if (isKeyable(key)) { - return hashGet(typeof key == 'string' ? data.string : data.hash, key); - } - return Map ? data.map.get(key) : assocGet(data.map, key); - } - - /** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function mapHas(key) { - var data = this.__data__; - if (isKeyable(key)) { - return hashHas(typeof key == 'string' ? data.string : data.hash, key); - } - return Map ? data.map.has(key) : assocHas(data.map, key); - } - - /** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache object. - */ - function mapSet(key, value) { - var data = this.__data__; - if (isKeyable(key)) { - hashSet(typeof key == 'string' ? data.string : data.hash, key, value); - } else if (Map) { - data.map.set(key, value); - } else { - assocSet(data.map, key, value); - } - return this; - } - - /*------------------------------------------------------------------------*/ - - /** - * - * Creates a set cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ - function SetCache(values) { - var index = -1, - length = values ? values.length : 0; - - this.__data__ = new MapCache; - while (++index < length) { - this.push(values[index]); - } - } - - /** - * Checks if `value` is in `cache`. - * - * @private - * @param {Object} cache The set cache to search. - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ - function cacheHas(cache, value) { - var map = cache.__data__; - if (isKeyable(value)) { - var data = map.__data__, - hash = typeof value == 'string' ? data.string : data.hash; - - return hash[value] === HASH_UNDEFINED; - } - return map.has(value); - } - - /** - * Adds `value` to the set cache. - * - * @private - * @name push - * @memberOf SetCache - * @param {*} value The value to cache. - */ - function cachePush(value) { - var map = this.__data__; - if (isKeyable(value)) { - var data = map.__data__, - hash = typeof value == 'string' ? data.string : data.hash; - - hash[value] = HASH_UNDEFINED; - } - else { - map.set(value, HASH_UNDEFINED); - } - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ - function Stack(values) { - var index = -1, - length = values ? values.length : 0; - - this.clear(); - while (++index < length) { - var entry = values[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ - function stackClear() { - this.__data__ = { 'array': [], 'map': null }; - } - - /** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function stackDelete(key) { - var data = this.__data__, - array = data.array; - - return array ? assocDelete(array, key) : data.map['delete'](key); - } - - /** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function stackGet(key) { - var data = this.__data__, - array = data.array; - - return array ? assocGet(array, key) : data.map.get(key); - } - - /** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function stackHas(key) { - var data = this.__data__, - array = data.array; - - return array ? assocHas(array, key) : data.map.has(key); - } - - /** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache object. - */ - function stackSet(key, value) { - var data = this.__data__, - array = data.array; - - if (array) { - if (array.length < (LARGE_ARRAY_SIZE - 1)) { - assocSet(array, key, value); - } else { - data.array = null; - data.map = new MapCache(array); - } - } - var map = data.map; - if (map) { - map.set(key, value); - } - return this; - } - - /*------------------------------------------------------------------------*/ - - /** - * Removes `key` and its value from the associative array. - * - * @private - * @param {Array} array The array to query. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function assocDelete(array, key) { - var index = assocIndexOf(array, key); - if (index < 0) { - return false; - } - var lastIndex = array.length - 1; - if (index == lastIndex) { - array.pop(); - } else { - splice.call(array, index, 1); - } - return true; - } - - /** - * Gets the associative array value for `key`. - * - * @private - * @param {Array} array The array to query. - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function assocGet(array, key) { - var index = assocIndexOf(array, key); - return index < 0 ? undefined : array[index][1]; - } - - /** - * Checks if an associative array value for `key` exists. - * - * @private - * @param {Array} array The array to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function assocHas(array, key) { - return assocIndexOf(array, key) > -1; - } - - /** - * Gets the index at which the first occurrence of `key` is found in `array` - * of key-value pairs. - * - * @private - * @param {Array} array The array to search. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; - } - - /** - * Sets the associative array `key` to `value`. - * - * @private - * @param {Array} array The array to modify. - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - */ - function assocSet(array, key, value) { - var index = assocIndexOf(array, key); - if (index < 0) { - array.push([key, value]); - } else { - array[index][1] = value; - } - } - - /*------------------------------------------------------------------------*/ - - /** - * Used by `_.defaults` to customize its `_.assignIn` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ - function assignInDefaults(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; - } - - /** - * This function is like `assignValue` except that it doesn't assign `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (typeof key == 'number' && value === undefined && !(key in object))) { - object[key] = value; - } - } - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if ((!eq(objValue, value) || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) || - (value === undefined && !(key in object))) { - object[key] = value; - } - } - - /** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } - - /** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths of elements to pick. - * @returns {Array} Returns the new array of picked elements. - */ - function baseAt(object, paths) { - var index = -1, - isNil = object == null, - length = paths.length, - result = Array(length); - - while (++index < length) { - result[index] = isNil ? undefined : get(object, paths[index]); - } - return result; - } - - /** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the array-like object. - */ - function baseCastArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } - - /** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the array-like object. - */ - function baseCastFunction(value) { - return typeof value == 'function' ? value : identity; - } - - /** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast property path array. - */ - function baseCastPath(value) { - return isArray(value) ? value : stringToPath(value); - } - - /** - * The base implementation of `_.clamp` which doesn't coerce arguments to numbers. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; - } - - /** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, isDeep, customizer, key, object, stack) { - var result; - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - if (isHostObject(value)) { - return object ? value : {}; - } - result = initCloneObject(isFunc ? {} : value); - if (!isDeep) { - return copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - // Recursively populate clone (susceptible to call stack limits). - (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { - assignValue(result, key, baseClone(subValue, isDeep, customizer, key, value, stack)); - }); - return isArr ? result : copySymbols(value, result); - } - - /** - * The base implementation of `_.conforms` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new function. - */ - function baseConforms(source) { - var props = keys(source), - length = props.length; - - return function(object) { - if (object == null) { - return !length; - } - var index = length; - while (index--) { - var key = props[index], - predicate = source[key], - value = object[key]; - - if ((value === undefined && !(key in Object(object))) || !predicate(value)) { - return false; - } - } - return true; - }; - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} prototype The object to inherit from. - * @returns {Object} Returns the new object. - */ - function baseCreate(proto) { - return isObject(proto) ? objectCreate(proto) : {}; - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts an array - * of `func` arguments. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Object} args The arguments to provide to `func`. - * @returns {number} Returns the timer id. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * The base implementation of methods like `_.difference` without support for - * excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ - function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEachRight = createBaseEach(baseForOwnRight, true); - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } - - /** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ - function baseFill(array, value, start, end) { - var length = array.length; - - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, isStrict, result) { - result || (result = []); - - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index]; - if (depth > 0 && isArrayLikeObject(value) && - (isStrict || isArray(value) || isArguments(value))) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForIn` and `baseForOwn` which iterates - * over `object` properties returned by `keysFunc` invoking `iteratee` for - * each property. Iteratee functions may exit iteration early by explicitly - * returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseForRight = createBaseFor(true); - - /** - * The base implementation of `_.forIn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForIn(object, iteratee) { - return object == null ? object : baseFor(object, iteratee, keysIn); - } - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the new array of filtered property names. - */ - function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); - } - - /** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ - function baseGet(object, path) { - path = isKey(path, object) ? [path + ''] : baseCastPath(path); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[path[index++]]; - } - return (index && index == length) ? object : undefined; - } - - /** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHas(object, key) { - // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`, - // that are composed entirely of index properties, return `false` for - // `hasOwnProperty` checks of them. - return hasOwnProperty.call(object, key) || - (typeof object == 'object' && key in object && getPrototypeOf(object) === null); - } - - /** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHasIn(object, key) { - return key in Object(object); - } - - /** - * The base implementation of `_.inRange` which doesn't coerce arguments to numbers. - * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ - function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); - } - - /** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ - function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - caches[othIndex] = !comparator && (iteratee || array.length >= 120) - ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; - - var index = -1, - length = array.length, - seen = caches[0]; - - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - var othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ - function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; - } - - /** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ - function baseInvoke(object, path, args) { - if (!isKey(path, object)) { - path = baseCastPath(path); - object = parent(object, path); - path = last(path); - } - var func = object == null ? object : object[path]; - return func == null ? undefined : apply(func, object, args); - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @param {boolean} [bitmask] The bitmask of comparison flags. - * The bitmask may be composed of the following flags: - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, customizer, bitmask, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparisons. - * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = getTag(object); - if (objTag == argsTag) { - objTag = objectTag; - } else if (objTag != objectTag) { - objIsArr = isTypedArray(object); - } - } - if (!othIsArr) { - othTag = getTag(other); - if (othTag == argsTag) { - othTag = objectTag; - } else if (othTag != objectTag) { - othIsArr = isTypedArray(other); - } - } - var objIsObj = objTag == objectTag && !isHostObject(object), - othIsObj = othTag == objectTag && !isHostObject(other), - isSameTag = objTag == othTag; - - if (isSameTag && !(objIsArr || objIsObj)) { - return equalByTag(object, other, objTag, equalFunc, customizer, bitmask); - } - var isPartial = bitmask & PARTIAL_COMPARE_FLAG; - if (!isPartial) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, bitmask, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, bitmask, stack); - } - - /** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack, - result = customizer ? customizer(objValue, srcValue, key, object, source, stack) : undefined; - - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) - : result - )) { - return false; - } - } - } - return true; - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(value) { - var type = typeof value; - if (type == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (type == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); - } - - /** - * The base implementation of `_.keys` which doesn't skip the constructor - * property of prototypes or treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - return nativeKeys(Object(object)); - } - - /** - * The base implementation of `_.keysIn` which doesn't skip the constructor - * property of prototypes or treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - object = object == null ? object : Object(object); - - var result = []; - for (var key in object) { - result.push(key); - } - return result; - } - - // Fallback for IE < 9 with es6-shim. - if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) { - baseKeysIn = function(object) { - return iteratorToArray(enumerate(object)); - }; - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new function. - */ - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - var key = matchData[0][0], - value = matchData[0][1]; - - return function(object) { - if (object == null) { - return false; - } - return object[key] === value && - (value !== undefined || (key in Object(object))); - }; - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } - - /** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new function. - */ - function baseMatchesProperty(path, srcValue) { - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); - }; - } - - /** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged counterparts. - */ - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - var props = (isArray(source) || isTypedArray(source)) - ? undefined - : keysIn(source); - - arrayEach(props || source, function(srcValue, key) { - if (props) { - key = srcValue; - srcValue = source[key]; - } - if (isObject(srcValue)) { - stack || (stack = new Stack); - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(object[key], srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }); - } - - /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged counterparts. - */ - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = object[key], - srcValue = source[key], - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - newValue = srcValue; - if (isArray(srcValue) || isTypedArray(srcValue)) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else { - isCommon = false; - newValue = baseClone(srcValue, true); - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { - isCommon = false; - newValue = baseClone(srcValue, true); - } - else { - newValue = objValue; - } - } - else { - isCommon = false; - } - } - stack.set(srcValue, newValue); - - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - } - assignMergeValue(object, key, newValue); - } - - /** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ - function baseOrderBy(collection, iteratees, orders) { - var index = -1, - toIteratee = getIteratee(); - - iteratees = arrayMap(iteratees.length ? iteratees : Array(1), function(iteratee) { - return toIteratee(iteratee); - }); - - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); - } - - /** - * The base implementation of `_.pick` without support for individual - * property names. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property names to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, props) { - object = Object(object); - return arrayReduce(props, function(result, key) { - if (key in object) { - result[key] = object[key]; - } - return result; - }, {}); - } - - /** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ - function basePickBy(object, predicate) { - var result = {}; - baseForIn(object, function(value, key) { - if (predicate(value, key)) { - result[key] = value; - } - }); - return result; - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } - - /** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new function. - */ - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; - } - - /** - * The base implementation of `_.pullAll`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @returns {Array} Returns `array`. - */ - function basePullAll(array, values) { - return basePullAllBy(array, values); - } - - /** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns `array`. - */ - function basePullAllBy(array, values, iteratee) { - var index = -1, - length = values.length, - seen = array; - - if (iteratee) { - seen = arrayMap(array, function(value) { return iteratee(value); }); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; - - while ((fromIndex = baseIndexOf(seen, computed, fromIndex)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; - } - - /** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; - - while (length--) { - var index = indexes[length]; - if (lastIndex == length || index != previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } - else if (!isKey(index, array)) { - var path = baseCastPath(index), - object = parent(array, path); - - if (object != null) { - delete object[last(path)]; - } - } - else { - delete array[index]; - } - } - } - return array; - } - - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } - - /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments to numbers. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the new array of numbers. - */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } - - /** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseSet(object, path, value, customizer) { - path = isKey(path, object) ? [path + ''] : baseCastPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = path[index]; - if (isObject(nested)) { - var newValue = value; - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = objValue == null - ? (isIndex(path[index + 1]) ? [] : {}) - : objValue; - } - } - assignValue(nested, key, newValue); - } - nested = nested[key]; - } - return object; - } - - /** - * The base implementation of `setData` without support for hot loop detection. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array ? array.length : low; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); - } - - /** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted into `array`. - */ - function baseSortedIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array ? array.length : 0, - valIsNaN = value !== value, - valIsNull = value === null, - valIsUndef = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - isDef = computed !== undefined, - isReflexive = computed === computed; - - if (valIsNaN) { - var setLow = isReflexive || retHighest; - } else if (valIsNull) { - setLow = isReflexive && isDef && (retHighest || computed != null); - } else if (valIsUndef) { - setLow = isReflexive && (retHighest || isDef); - } else if (computed == null) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } - - /** - * The base implementation of `_.sortedUniq`. - * - * @private - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - */ - function baseSortedUniq(array) { - return baseSortedUniqBy(array); - } - - /** - * The base implementation of `_.sortedUniqBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseSortedUniqBy(array, iteratee) { - var index = 0, - length = array.length, - value = array[0], - computed = iteratee ? iteratee(value) : value, - seen = computed, - resIndex = 0, - result = [value]; - - while (++index < length) { - value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (!eq(computed, seen)) { - seen = computed; - result[++resIndex] = value; - } - } - return result; - } - - /** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ - function baseUnset(object, path) { - path = isKey(path, object) ? [path + ''] : baseCastPath(path); - object = parent(object, path); - var key = last(path); - return (object != null && has(object, key)) ? delete object[key] : true; - } - - /** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length) && - predicate(array[index], index, array)) {} - - return isDrop - ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } - - /** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ - function baseXor(arrays, iteratee, comparator) { - var index = -1, - length = arrays.length; - - while (++index < length) { - var result = result - ? arrayPush( - baseDifference(result, arrays[index], iteratee, comparator), - baseDifference(arrays[index], result, iteratee, comparator) - ) - : arrays[index]; - } - return (result && result.length) ? baseUniq(result, iteratee, comparator) : []; - } - - /** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property names. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ - function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - assignFunc(result, props[index], index < valsLength ? values[index] : undefined); - } - return result; - } - - /** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var Ctor = buffer.constructor, - result = new Ctor(buffer.length); - - buffer.copy(result); - return result; - } - - /** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ - function cloneArrayBuffer(arrayBuffer) { - var Ctor = arrayBuffer.constructor, - result = new Ctor(arrayBuffer.byteLength), - view = new Uint8Array(result); - - view.set(new Uint8Array(arrayBuffer)); - return result; - } - - /** - * Creates a clone of `map`. - * - * @private - * @param {Object} map The map to clone. - * @returns {Object} Returns the cloned map. - */ - function cloneMap(map) { - var Ctor = map.constructor; - return arrayReduce(mapToArray(map), addMapEntry, new Ctor); - } - - /** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ - function cloneRegExp(regexp) { - var Ctor = regexp.constructor, - result = new Ctor(regexp.source, reFlags.exec(regexp)); - - result.lastIndex = regexp.lastIndex; - return result; - } - - /** - * Creates a clone of `set`. - * - * @private - * @param {Object} set The set to clone. - * @returns {Object} Returns the cloned set. - */ - function cloneSet(set) { - var Ctor = set.constructor; - return arrayReduce(setToArray(set), addSetEntry, new Ctor); - } - - /** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ - function cloneSymbol(symbol) { - return Symbol ? Object(symbolValueOf.call(symbol)) : {}; - } - - /** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ - function cloneTypedArray(typedArray, isDeep) { - var arrayBuffer = typedArray.buffer, - buffer = isDeep ? cloneArrayBuffer(arrayBuffer) : arrayBuffer, - Ctor = typedArray.constructor; - - return new Ctor(buffer, typedArray.byteOffset, typedArray.length); - } - - /** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array|Object} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgs(args, partials, holders) { - var holdersLength = holders.length, - argsIndex = -1, - argsLength = nativeMax(args.length - holdersLength, 0), - leftIndex = -1, - leftLength = partials.length, - result = Array(leftLength + argsLength); - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - while (argsLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; - } - - /** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array|Object} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgsRight(args, partials, holders) { - var holdersIndex = -1, - holdersLength = holders.length, - argsIndex = -1, - argsLength = nativeMax(args.length - holdersLength, 0), - rightIndex = -1, - rightLength = partials.length, - result = Array(argsLength + rightLength); - - while (++argsIndex < argsLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property names to copy. - * @param {Object} [object={}] The object to copy properties to. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object) { - return copyObjectWith(source, props, object); - } - - /** - * This function is like `copyObject` except that it accepts a function to - * customize copied values. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property names to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObjectWith(source, props, object, customizer) { - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : source[key]; - - assignValue(object, key, newValue); - } - return object; - } - - /** - * Copies own symbol properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); - } - - /** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ - function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func(collection, setter, getIteratee(iteratee), accumulator); - }; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return rest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = typeof customizer == 'function' - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for methods like `_.forIn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createBaseWrapper(func, bitmask, thisArg) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtorWrapper(func); - - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } - - /** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new function. - */ - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = reHasComplexSymbol.test(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols ? strSymbols[0] : string.charAt(0), - trailing = strSymbols ? strSymbols.slice(1).join('') : string.slice(1); - - return chr[methodName]() + trailing; - }; - } - - /** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ - function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string)), callback, ''); - }; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtorWrapper(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. - // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createCurryWrapper(func, bitmask, arity) { - var Ctor = createCtorWrapper(func); - - function wrapper() { - var length = arguments.length, - index = length, - args = Array(length), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func, - placeholder = lodash.placeholder || wrapper.placeholder; - - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); - - length -= holders.length; - return length < arity - ? createRecurryWrapper(func, bitmask, createHybridWrapper, placeholder, undefined, args, holders, undefined, undefined, arity - length) - : apply(fn, this, args); - } - return wrapper; - } - - /** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ - function createFlow(fromRight) { - return rest(function(funcs) { - funcs = baseFlatten(funcs, 1); - - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; - - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if (data && isLaziable(data[0]) && - data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && - !data[4].length && data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && - isArray(value) && value.length >= LARGE_ARRAY_SIZE) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }); - } - - /** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & ARY_FLAG, - isBind = bitmask & BIND_FLAG, - isBindKey = bitmask & BIND_KEY_FLAG, - isCurry = bitmask & CURRY_FLAG, - isCurryRight = bitmask & CURRY_RIGHT_FLAG, - isFlip = bitmask & FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtorWrapper(func); - - function wrapper() { - var length = arguments.length, - index = length, - args = Array(length); - - while (index--) { - args[index] = arguments[index]; - } - if (partials) { - args = composeArgs(args, partials, holders); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight); - } - if (isCurry || isCurryRight) { - var placeholder = lodash.placeholder || wrapper.placeholder, - argsHolders = replaceHolders(args, placeholder); - - length -= argsHolders.length; - if (length < arity) { - return createRecurryWrapper( - func, bitmask, createHybridWrapper, placeholder, thisArg, args, - argsHolders, argPos, ary, arity - length - ); - } - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && args.length > 1) { - args.reverse(); - } - if (isAry && ary < args.length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtorWrapper(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } - - /** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ - function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; - } - - /** - * Creates a function like `_.over`. - * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new invoker function. - */ - function createOver(arrayFunc) { - return rest(function(iteratees) { - iteratees = arrayMap(baseFlatten(iteratees, 1), getIteratee()); - return rest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); - } - - /** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. - * - * @private - * @param {string} string The string to create padding for. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. - */ - function createPadding(string, length, chars) { - length = toInteger(length); - - var strLength = stringSize(string); - if (!length || strLength >= length) { - return ''; - } - var padLength = length - strLength; - chars = chars === undefined ? ' ' : (chars + ''); - - var result = repeat(chars, nativeCeil(padLength / stringSize(chars))); - return reHasComplexSymbol.test(chars) - ? stringToArray(result).slice(0, padLength).join('') - : result.slice(0, padLength); - } - - /** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg` and the `partials` prepended to those provided to - * the wrapper. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartialWrapper(func, bitmask, thisArg, partials) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtorWrapper(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toNumber(start); - start = start === start ? start : 0; - if (end === undefined) { - end = start; - start = 0; - } else { - end = toNumber(end) || 0; - } - step = step === undefined ? (start < end ? 1 : -1) : (toNumber(step) || 0); - return baseRange(start, end, step, fromRight); - }; - } - - /** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder to replace. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createRecurryWrapper(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & CURRY_FLAG, - newArgPos = argPos ? copyArray(argPos) : undefined, - newsHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); - - if (!(bitmask & CURRY_BOUND_FLAG)) { - bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, - newHoldersRight, newArgPos, ary, arity - ]; - - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return result; - } - - /** - * Creates a function like `_.round`. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ - function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = toInteger(precision); - if (precision) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); - - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; - } - - /** - * Creates a set of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ - var createSet = !(Set && new Set([1, 2]).size === 2) ? noop : function(values) { - return new Set(values); - }; - - /** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask of wrapper flags. - * The bitmask may be composed of the following flags: - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; - - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] == null - ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); - - if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { - bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == BIND_FLAG) { - var result = createBaseWrapper(func, bitmask, thisArg); - } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { - result = createCurryWrapper(func, bitmask, arity); - } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { - result = createPartialWrapper(func, bitmask, thisArg, partials); - } else { - result = createHybridWrapper.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setter(result, newData); - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparisons. - * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details. - * @param {Object} [stack] Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { - var index = -1, - isPartial = bitmask & PARTIAL_COMPARE_FLAG, - isUnordered = bitmask & UNORDERED_COMPARE_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked) { - return stacked == other; - } - var result = true; - stack.set(array, other); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (isUnordered) { - if (!arraySome(other, function(othValue) { - return arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack); - })) { - result = false; - break; - } - } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { - result = false; - break; - } - } - stack['delete'](array); - return result; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparisons. - * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag, equalFunc, customizer, bitmask) { - switch (tag) { - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - // Coerce dates and booleans to numbers, dates to milliseconds and booleans - // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. - return +object == +other; - - case errorTag: - return object.name == other.name && object.message == other.message; - - case numberTag: - // Treat `NaN` vs. `NaN` as equal. - return (object != +object) ? other != +other : object == +other; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings primitives and string - // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. - return object == (other + ''); - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & PARTIAL_COMPARE_FLAG; - convert || (convert = setToArray); - - // Recursively compare objects (susceptible to call stack limits). - return (isPartial || object.size == other.size) && - equalFunc(convert(object), convert(other), customizer, bitmask | UNORDERED_COMPARE_FLAG); - - case symbolTag: - return !!Symbol && (symbolValueOf.call(object) == symbolValueOf.call(other)); - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparisons. - * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : baseHas(other, key))) { - return false; - } - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - var result = true; - stack.set(object, other); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - return result; - } - - /** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; - - /** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ - function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; - } - - /** - * Gets the appropriate "iteratee" function. If the `_.iteratee` method is - * customized this function returns the custom method, otherwise it returns - * `baseIteratee`. If arguments are provided the chosen function is invoked - * with them and its result is returned. - * - * @private - * @param {*} [value] The value to convert to an iteratee. - * @param {number} [arity] The arity of the created iteratee. - * @returns {Function} Returns the chosen function or its result. - */ - function getIteratee() { - var result = lodash.iteratee || iteratee; - result = result === iteratee ? baseIteratee : result; - return arguments.length ? result(arguments[0], arguments[1]) : result; - } - - /** - * Gets the "length" property value of `object`. - * - * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) - * that affects Safari on at least iOS 8.1-8.3 ARM64. - * - * @private - * @param {Object} object The object to query. - * @returns {*} Returns the "length" value. - */ - var getLength = baseProperty('length'); - - /** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ - function getMatchData(object) { - var result = toPairs(object), - length = result.length; - - while (length--) { - result[length][2] = isStrictComparable(result[length][1]); - } - return result; - } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = object == null ? undefined : object[key]; - return isNative(value) ? value : undefined; - } - - /** - * Creates an array of the own symbol properties of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbols = getOwnPropertySymbols || function() { - return []; - }; - - /** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function getTag(value) { - return objectToString.call(value); - } - - // Fallback for IE 11 providing `toStringTag` values for maps, sets, and weakmaps. - if ((Map && getTag(new Map) != mapTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = objectToString.call(value), - Ctor = result == objectTag ? value.constructor : null, - ctorString = typeof Ctor == 'function' ? funcToString.call(Ctor) : ''; - - if (ctorString) { - switch (ctorString) { - case mapCtorString: return mapTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; - } - - /** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++index < length) { - var data = transforms[index], - size = data.size; - - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; - } - - /** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ - function hasPath(object, path, hasFunc) { - if (object == null) { - return false; - } - var result = hasFunc(object, path); - if (!result && !isKey(path)) { - path = baseCastPath(path); - object = parent(object, path); - if (object != null) { - path = last(path); - result = hasFunc(object, path); - } - } - var length = object ? object.length : undefined; - return result || ( - !!length && isLength(length) && isIndex(path, length) && - (isArray(object) || isString(object) || isArguments(object)) - ); - } - - /** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ - function initCloneArray(array) { - var length = array.length, - result = array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } - - /** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneObject(object) { - if (isPrototype(object)) { - return {}; - } - var Ctor = object.constructor; - return baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined); - } - - /** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return cloneTypedArray(object, isDeep); - - case mapTag: - return cloneMap(object); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return cloneRegExp(object); - - case setTag: - return cloneSet(object); - - case symbolTag: - return cloneSymbol(object); - } - } - - /** - * Creates an array of index keys for `object` values of arrays, - * `arguments` objects, and strings, otherwise `null` is returned. - * - * @private - * @param {Object} object The object to query. - * @returns {Array|null} Returns index keys, else `null`. - */ - function indexKeys(object) { - var length = object ? object.length : undefined; - if (isLength(length) && - (isArray(object) || isString(object) || isArguments(object))) { - return baseTimes(length, String); - } - return null; - } - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object)) { - return eq(object[index], value); - } - return false; - } - - /** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ - function isKey(value, object) { - if (typeof value == 'number') { - return true; - } - return !isArray(value) && - (reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object))); - } - - /** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ - function isKeyable(value) { - var type = typeof value; - return type == 'number' || type == 'boolean' || - (type == 'string' && value != '__proto__') || value == null; - } - - /** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`. - */ - function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; - - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } - - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; - } - - /** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ - function isStrictComparable(value) { - return value === value && !isObject(value); - } - - /** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg` - * modify function arguments, making the order in which they are executed important, - * preventing the merging of metadata. However, we make an exception for a safe - * combined case where curried functions have `_.ary` and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ - function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG); - - var isCombo = - (srcBitmask == ARY_FLAG && (bitmask == CURRY_FLAG)) || - (srcBitmask == ARY_FLAG && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || - (srcBitmask == (ARY_FLAG | REARG_FLAG) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : copyArray(value); - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : copyArray(source[4]); - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : copyArray(value); - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : copyArray(source[6]); - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = copyArray(value); - } - // Use source `ary` if it's smaller. - if (srcBitmask & ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; - } - - /** - * Used by `_.defaultsDeep` to customize its `_.merge` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged counterparts. - * @returns {*} Returns the value to assign. - */ - function mergeDefaults(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined, mergeDefaults, stack); - } - return objValue; - } - - /** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ - function parent(object, path) { - return path.length == 1 ? object : get(object, baseSlice(path, 0, -1)); - } - - /** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ - function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; - } - - /** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity function - * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var setData = (function() { - var count = 0, - lastCalled = 0; - - return function(key, value) { - var stamp = now(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return key; - } - } else { - count = 0; - } - return baseSetData(key, value); - }; - }()); - - /** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ - function stringToPath(string) { - var result = []; - toString(string).replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; - } - - /** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=0] The length of each chunk. - * @returns {Array} Returns the new array containing chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ - function chunk(array, size) { - size = nativeMax(toInteger(size), 0); - - var length = array ? array.length : 0; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = -1, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[++resIndex] = baseSlice(array, index, (index += size)); - } - return result; - } - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array ? array.length : 0, - resIndex = -1, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[++resIndex] = value; - } - } - return result; - } - - /** - * 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] - */ - var concat = rest(function(array, values) { - if (!isArray(array)) { - array = array == null ? [] : [Object(array)]; - } - values = baseFlatten(values, 1); - return arrayConcat(array, values); - }); - - /** - * Creates an array of unique `array` values not included in the other - * given arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.difference([3, 2, 1], [4, 2]); - * // => [3, 1] - */ - var difference = rest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, true)) - : []; - }); - - /** - * 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). - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor); - * // => [3.1, 1.3] - * - * // The `_.property` iteratee shorthand. - * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var differenceBy = rest(function(array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, true), getIteratee(iteratee)) - : []; - }); - - /** - * This method is like `_.difference` except that it accepts `comparator` - * which is invoked to compare elements of `array` to `values`. The comparator - * is invoked with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * - * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); - * // => [{ 'x': 2, 'y': 1 }] - */ - var differenceWith = rest(function(array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, true), undefined, comparator) - : []; - }); - - /** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function drop(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function dropRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.dropRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney'] - * - * // The `_.matches` iteratee shorthand. - * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropRightWhile(users, ['active', false]); - * // => objects for ['barney'] - * - * // The `_.property` iteratee shorthand. - * _.dropRightWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true, true) - : []; - } - - /** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true) - : []; - } - - /** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ - function fill(array, value, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to search. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate) { - return (array && array.length) - ? baseFindIndex(array, getIteratee(predicate, 3)) - : -1; - } - - /** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to search. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ - function findLastIndex(array, predicate) { - return (array && array.length) - ? baseFindIndex(array, getIteratee(predicate, 3), true) - : -1; - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, 1) : []; - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, INFINITY) : []; - } - - /** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ - function flattenDepth(array, depth) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); - } - - /** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['fred', 30], ['barney', 40]]); - * // => { 'fred': 30, 'barney': 40 } - */ - function fromPairs(pairs) { - var index = -1, - length = pairs ? pairs.length : 0, - result = {}; - - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return array ? array[0] : undefined; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the offset - * from the end of `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - fromIndex = toInteger(fromIndex); - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return baseIndexOf(array, value, fromIndex); - } - - /** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ - function initial(array) { - return dropRight(array, 1); - } - - /** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of shared values. - * @example - * - * _.intersection([2, 1], [4, 2], [1, 2]); - * // => [2] - */ - var intersection = rest(function(arrays) { - var mapped = arrayMap(arrays, baseCastArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `iteratee` - * which is invoked for each element of each `arrays` to generate the criterion - * by which uniqueness is computed. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of shared values. - * @example - * - * _.intersectionBy([2.1, 1.2], [4.3, 2.4], Math.floor); - * // => [2.1] - * - * // The `_.property` iteratee shorthand. - * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }] - */ - var intersectionBy = rest(function(arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, baseCastArrayLikeObject); - - if (iteratee === last(mapped)) { - iteratee = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, getIteratee(iteratee)) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ - var intersectionWith = rest(function(arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, baseCastArrayLikeObject); - - if (comparator === last(mapped)) { - comparator = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, undefined, comparator) - : []; - }); - - /** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ - function join(array, separator) { - return array ? nativeJoin.call(array, separator) : ''; - } - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; - } - - /** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ - function lastIndexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = (index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1)) + 1; - } - if (value !== value) { - return indexOfNaN(array, index, true); - } - while (index--) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * Removes all given values from `array` using - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.without`, this method mutates `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to modify. - * @param {...*} [values] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3, 1, 2, 3]; - * - * _.pull(array, 2, 3); - * console.log(array); - * // => [1, 1] - */ - var pull = rest(pullAll); - - /** - * This method is like `_.pull` except that it accepts an array of values to remove. - * - * **Note:** Unlike `_.difference`, this method mutates `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3, 1, 2, 3]; - * - * _.pullAll(array, [2, 3]); - * console.log(array); - * // => [1, 1] - */ - function pullAll(array, values) { - return (array && array.length && values && values.length) - ? basePullAll(array, values) - : array; - } - - /** - * This method is like `_.pullAll` 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). - * - * **Note:** Unlike `_.differenceBy`, this method mutates `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; - * - * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); - * console.log(array); - * // => [{ 'x': 2 }] - */ - function pullAllBy(array, values, iteratee) { - return (array && array.length && values && values.length) - ? basePullAllBy(array, values, getIteratee(iteratee)) - : array; - } - - /** - * Removes elements from `array` corresponding to `indexes` and returns an - * array of removed elements. - * - * **Note:** Unlike `_.at`, this method mutates `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to modify. - * @param {...(number|number[])} [indexes] The indexes of elements to remove, - * specified individually or in arrays. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = [5, 10, 15, 20]; - * var evens = _.pullAt(array, 1, 3); - * - * console.log(array); - * // => [5, 15] - * - * console.log(evens); - * // => [10, 20] - */ - var pullAt = rest(function(array, indexes) { - indexes = arrayMap(baseFlatten(indexes, 1), String); - - var result = baseAt(array, indexes); - basePullAt(array, indexes.sort(compareAscending)); - return result; - }); - - /** - * Removes all elements from `array` that `predicate` returns truthy for - * and returns an array of the removed elements. The predicate is invoked with - * three arguments: (value, index, array). - * - * **Note:** Unlike `_.filter`, this method mutates `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to modify. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4]; - * var evens = _.remove(array, function(n) { - * return n % 2 == 0; - * }); - * - * console.log(array); - * // => [1, 3] - * - * console.log(evens); - * // => [2, 4] - */ - function remove(array, predicate) { - var result = []; - if (!(array && array.length)) { - return result; - } - var index = -1, - indexes = [], - length = array.length; - - predicate = getIteratee(predicate, 3); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result; - } - - /** - * Reverses `array` so that the first element becomes the last, the second - * element becomes the second to last, and so on. - * - * **Note:** This method mutates `array` and is based on - * [`Array#reverse`](https://mdn.io/Array/reverse). - * - * @static - * @memberOf _ - * @category Array - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.reverse(array); - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function reverse(array) { - return array ? nativeReverse.call(array) : array; - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of [`Array#slice`](https://mdn.io/Array/slice) - * to ensure dense arrays are returned. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } - else { - start = start == null ? 0 : toInteger(start); - end = end === undefined ? length : toInteger(end); - } - return baseSlice(array, start, end); - } - - /** - * Uses a binary search to determine the lowest index at which `value` should - * be inserted into `array` in order to maintain its sort order. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted into `array`. - * @example - * - * _.sortedIndex([30, 50], 40); - * // => 1 - * - * _.sortedIndex([4, 5], 4); - * // => 0 - */ - function sortedIndex(array, value) { - return baseSortedIndex(array, value); - } - - /** - * This method is like `_.sortedIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted into `array`. - * @example - * - * var dict = { 'thirty': 30, 'forty': 40, 'fifty': 50 }; - * - * _.sortedIndexBy(['thirty', 'fifty'], 'forty', _.propertyOf(dict)); - * // => 1 - * - * // The `_.property` iteratee shorthand. - * _.sortedIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x'); - * // => 0 - */ - function sortedIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee)); - } - - /** - * This method is like `_.indexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedIndexOf([1, 1, 2, 2], 2); - * // => 2 - */ - function sortedIndexOf(array, value) { - var length = array ? array.length : 0; - if (length) { - var index = baseSortedIndex(array, value); - if (index < length && eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.sortedIndex` except that it returns the highest - * index at which `value` should be inserted into `array` in order to - * maintain its sort order. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted into `array`. - * @example - * - * _.sortedLastIndex([4, 5], 4); - * // => 1 - */ - function sortedLastIndex(array, value) { - return baseSortedIndex(array, value, true); - } - - /** - * This method is like `_.sortedLastIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted into `array`. - * @example - * - * // The `_.property` iteratee shorthand. - * _.sortedLastIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x'); - * // => 1 - */ - function sortedLastIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee), true); - } - - /** - * This method is like `_.lastIndexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedLastIndexOf([1, 1, 2, 2], 2); - * // => 3 - */ - function sortedLastIndexOf(array, value) { - var length = array ? array.length : 0; - if (length) { - var index = baseSortedIndex(array, value, true) - 1; - if (eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.uniq` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniq([1, 1, 2]); - * // => [1, 2] - */ - function sortedUniq(array) { - return (array && array.length) - ? baseSortedUniq(array) - : []; - } - - /** - * This method is like `_.uniqBy` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); - * // => [1.1, 2.3] - */ - function sortedUniqBy(array, iteratee) { - return (array && array.length) - ? baseSortedUniqBy(array, getIteratee(iteratee)) - : []; - } - - /** - * Gets all but the first element of `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.tail([1, 2, 3]); - * // => [2, 3] - */ - function tail(array) { - return drop(array, 1); - } - - /** - * Creates a slice of `array` with `n` elements taken from the beginning. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.take([1, 2, 3]); - * // => [1] - * - * _.take([1, 2, 3], 2); - * // => [1, 2] - * - * _.take([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.take([1, 2, 3], 0); - * // => [] - */ - function take(array, n, guard) { - if (!(array && array.length)) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` with `n` elements taken from the end. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.takeRight([1, 2, 3]); - * // => [3] - * - * _.takeRight([1, 2, 3], 2); - * // => [2, 3] - * - * _.takeRight([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.takeRight([1, 2, 3], 0); - * // => [] - */ - function takeRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with elements taken from the end. Elements are - * taken until `predicate` returns falsey. The predicate is invoked with three - * arguments: (value, index, array). - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.takeRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeRightWhile(users, ['active', false]); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.takeRightWhile(users, 'active'); - * // => [] - */ - function takeRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), false, true) - : []; - } - - /** - * Creates a slice of `array` with elements taken from the beginning. Elements - * are taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false}, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.takeWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matches` iteratee shorthand. - * _.takeWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeWhile(users, ['active', false]); - * // => objects for ['barney', 'fred'] - * - * // The `_.property` iteratee shorthand. - * _.takeWhile(users, 'active'); - * // => [] - */ - function takeWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3)) - : []; - } - - /** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2, 1], [4, 2], [1, 2]); - * // => [2, 1, 4] - */ - var union = rest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, true)); - }); - - /** - * This method is like `_.union` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by which - * uniqueness is computed. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.unionBy([2.1, 1.2], [4.3, 2.4], Math.floor); - * // => [2.1, 1.2, 4.3] - * - * // The `_.property` iteratee shorthand. - * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - var unionBy = rest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseUniq(baseFlatten(arrays, 1, true), getIteratee(iteratee)); - }); - - /** - * This method is like `_.union` except that it accepts `comparator` which - * is invoked to compare elements of `arrays`. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.unionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var unionWith = rest(function(arrays) { - var comparator = last(arrays); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return baseUniq(baseFlatten(arrays, 1, true), undefined, comparator); - }); - - /** - * Creates a duplicate-free version of an array, using - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons, in which only the first occurrence of each element - * is kept. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniq([2, 1, 2]); - * // => [2, 1] - */ - function uniq(array) { - return (array && array.length) - ? baseUniq(array) - : []; - } - - /** - * This method is like `_.uniq` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * uniqueness is computed. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to inspect. - * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniqBy([2.1, 1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniqBy(array, iteratee) { - return (array && array.length) - ? baseUniq(array, getIteratee(iteratee)) - : []; - } - - /** - * This method is like `_.uniq` except that it accepts `comparator` which - * is invoked to compare elements of `array`. The comparator is invoked with - * two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.uniqWith(objects, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] - */ - function uniqWith(array, comparator) { - return (array && array.length) - ? baseUniq(array, undefined, comparator) - : []; - } - - /** - * This method is like `_.zip` except that it accepts an array of grouped - * elements and creates an array regrouping the elements to their pre-zip - * configuration. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array of grouped elements to process. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]); - * // => [['fred', 30, true], ['barney', 40, false]] - * - * _.unzip(zipped); - * // => [['fred', 'barney'], [30, 40], [true, false]] - */ - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var length = 0; - array = arrayFilter(array, function(group) { - if (isArrayLikeObject(group)) { - length = nativeMax(group.length, length); - return true; - } - }); - return baseTimes(length, function(index) { - return arrayMap(array, baseProperty(index)); - }); - } - - /** - * This method is like `_.unzip` except that it accepts `iteratee` to specify - * how regrouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array of grouped elements to process. - * @param {Function} [iteratee=_.identity] The function to combine regrouped values. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip([1, 2], [10, 20], [100, 200]); - * // => [[1, 10, 100], [2, 20, 200]] - * - * _.unzipWith(zipped, _.add); - * // => [3, 30, 300] - */ - function unzipWith(array, iteratee) { - if (!(array && array.length)) { - return []; - } - var result = unzip(array); - if (iteratee == null) { - return result; - } - return arrayMap(result, function(group) { - return apply(iteratee, undefined, group); - }); - } - - /** - * Creates an array excluding all given values using - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to filter. - * @param {...*} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.without([1, 2, 1, 3], 1, 2); - * // => [3] - */ - var without = rest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, values) - : []; - }); - - /** - * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) - * of the given arrays. - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of values. - * @example - * - * _.xor([2, 1], [4, 2]); - * // => [1, 4] - */ - var xor = rest(function(arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)); - }); - - /** - * This method is like `_.xor` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by which - * uniqueness is computed. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of values. - * @example - * - * _.xorBy([2.1, 1.2], [4.3, 2.4], Math.floor); - * // => [1.2, 4.3] - * - * // The `_.property` iteratee shorthand. - * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var xorBy = rest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee)); - }); - - /** - * This method is like `_.xor` except that it accepts `comparator` which is - * invoked to compare elements of `arrays`. The comparator is invoked with - * two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.xorWith(objects, others, _.isEqual); - * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var xorWith = rest(function(arrays) { - var comparator = last(arrays); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); - }); - - /** - * Creates an array of grouped elements, the first of which contains the first - * elements of the given arrays, the second of which contains the second elements - * of the given arrays, and so on. - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zip(['fred', 'barney'], [30, 40], [true, false]); - * // => [['fred', 30, true], ['barney', 40, false]] - */ - var zip = rest(unzip); - - /** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property names and one of corresponding values. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} [props=[]] The property names. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ - function zipObject(props, values) { - return baseZipObject(props || [], values || [], assignValue); - } - - /** - * This method is like `_.zipObject` except that it supports property paths. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} [props=[]] The property names. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); - * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } - */ - function zipObjectDeep(props, values) { - return baseZipObject(props || [], values || [], baseSet); - } - - /** - * This method is like `_.zip` except that it accepts `iteratee` to specify - * how grouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @param {Function} [iteratee=_.identity] The function to combine grouped values. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { - * return a + b + c; - * }); - * // => [111, 222] - */ - var zipWith = rest(function(arrays) { - var length = arrays.length, - iteratee = length > 1 ? arrays[length - 1] : undefined; - - iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; - return unzipWith(arrays, iteratee); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object that wraps `value` with explicit method chaining enabled. - * The result of such method chaining must be unwrapped with `_#value`. - * - * @static - * @memberOf _ - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain in order to modify intermediate results. - * - * @static - * @memberOf _ - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain. - * - * @static - * @memberOf _ - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } - - /** - * This method is the wrapper version of `_.at`. - * - * @name at - * @memberOf _ - * @category Seq - * @param {...(string|string[])} [paths] The property paths of elements to pick, - * specified individually or in arrays. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _(object).at(['a[0].b.c', 'a[1]']).value(); - * // => [3, 4] - * - * _(['a', 'b', 'c']).at(0, 2).value(); - * // => ['a', 'c'] - */ - var wrapperAt = rest(function(paths) { - paths = baseFlatten(paths, 1); - var length = paths.length, - start = length ? paths[0] : 0, - value = this.__wrapped__, - interceptor = function(object) { return baseAt(object, paths); }; - - if (length > 1 || this.__actions__.length || - !(value instanceof LazyWrapper) || !isIndex(start)) { - return this.thru(interceptor); - } - value = value.slice(start, +start + (length ? 1 : 0)); - value.__actions__.push({ - 'func': thru, - 'args': [interceptor], - 'thisArg': undefined - }); - return new LodashWrapper(value, this.__chain__).thru(function(array) { - if (length && !array.length) { - array.push(undefined); - } - return array; - }); - }); - - /** - * Enables explicit method chaining on the wrapper object. - * - * @name chain - * @memberOf _ - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chained sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } - - /** - * This method is the wrapper version of `_.flatMap`. - * - * @name flatMap - * @memberOf _ - * @category Seq - * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _([1, 2]).flatMap(duplicate).value(); - * // => [1, 1, 2, 2] - */ - function wrapperFlatMap(iteratee) { - return this.map(iteratee).flatten(); - } - - /** - * Gets the next value on a wrapped object following the - * [iterator protocol](https://mdn.io/iteration_protocols#iterator). - * - * @name next - * @memberOf _ - * @category Seq - * @returns {Object} Returns the next iterator value. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped.next(); - * // => { 'done': false, 'value': 1 } - * - * wrapped.next(); - * // => { 'done': false, 'value': 2 } - * - * wrapped.next(); - * // => { 'done': true, 'value': undefined } - */ - function wrapperNext() { - if (this.__values__ === undefined) { - this.__values__ = toArray(this.value()); - } - var done = this.__index__ >= this.__values__.length, - value = done ? undefined : this.__values__[this.__index__++]; - - return { 'done': done, 'value': value }; - } - - /** - * Enables the wrapper to be iterable. - * - * @name Symbol.iterator - * @memberOf _ - * @category Seq - * @returns {Object} Returns the wrapper object. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped[Symbol.iterator]() === wrapped; - * // => true - * - * Array.from(wrapped); - * // => [1, 2] - */ - function wrapperToIterator() { - return this; - } - - /** - * Creates a clone of the chained sequence planting `value` as the wrapped value. - * - * @name plant - * @memberOf _ - * @category Seq - * @param {*} value The value to plant. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2]).map(square); - * var other = wrapped.plant([3, 4]); - * - * other.value(); - * // => [9, 16] - * - * wrapped.value(); - * // => [1, 4] - */ - function wrapperPlant(value) { - var result, - parent = this; - - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent); - clone.__index__ = 0; - clone.__values__ = undefined; - if (result) { - previous.__wrapped__ = clone; - } else { - result = clone; - } - var previous = clone; - parent = parent.__wrapped__; - } - previous.__wrapped__ = value; - return result; - } - - /** - * This method is the wrapper version of `_.reverse`. - * - * **Note:** This method mutates the wrapped array. - * - * @name reverse - * @memberOf _ - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2, 3]; - * - * _(array).reverse().value() - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function wrapperReverse() { - var value = this.__wrapped__; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - 'func': thru, - 'args': [reverse], - 'thisArg': undefined - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } - - /** - * Executes the chained sequence to extract the unwrapped value. - * - * @name value - * @memberOf _ - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` through `iteratee`. The corresponding value - * of each key is the number of times the key was returned by `iteratee`. - * The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': 1, '6': 2 } - * - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function(result, value, key) { - hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); - }); - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three arguments: - * (value, index|key, collection). - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three arguments: - * (value, index|key, collection). - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to search. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - function find(collection, predicate) { - predicate = getIteratee(predicate, 3); - if (isArray(collection)) { - var index = baseFindIndex(collection, predicate); - return index > -1 ? collection[index] : undefined; - } - return baseFind(collection, predicate, baseEach); - } - - /** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to search. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ - function findLast(collection, predicate) { - predicate = getIteratee(predicate, 3); - if (isArray(collection)) { - var index = baseFindIndex(collection, predicate, true); - return index > -1 ? collection[index] : undefined; - } - return baseFind(collection, predicate, baseEachRight); - } - - /** - * Creates an array of flattened values by running each element in `collection` - * through `iteratee` and concating its result to the other mapped values. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); - } - - /** - * Iterates over elements of `collection` invoking `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" property - * are iterated like arrays. To avoid this behavior use `_.forIn` or `_.forOwn` - * for object iteration. - * - * @static - * @memberOf _ - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @example - * - * _([1, 2]).forEach(function(value) { - * console.log(value); - * }); - * // => logs `1` then `2` - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => logs 'a' then 'b' (iteration order is not guaranteed) - */ - function forEach(collection, iteratee) { - return (typeof iteratee == 'function' && isArray(collection)) - ? arrayEach(collection, iteratee) - : baseEach(collection, baseCastFunction(iteratee)); - } - - /** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => logs `2` then `1` - */ - function forEachRight(collection, iteratee) { - return (typeof iteratee == 'function' && isArray(collection)) - ? arrayEachRight(collection, iteratee) - : baseEachRight(collection, baseCastFunction(iteratee)); - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` through `iteratee`. The corresponding value - * of each key is an array of elements responsible for generating the key. - * The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - result[key] = [value]; - } - }); - - /** - * Checks if `value` is in `collection`. If `collection` is a string it's checked - * for a substring of `value`, otherwise [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for functions like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); - * // => true - * - * _.includes('pebbles', 'eb'); - * // => true - */ - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) - ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) - : (!!length && baseIndexOf(collection, value, fromIndex) > -1); - } - - /** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `methodName` is a function it's - * invoked for, and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke each method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invokeMap([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - var invokeMap = rest(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - isProp = isKey(path), - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value) { - var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); - result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args); - }); - return result; - }); - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` through `iteratee`. The corresponding value - * of each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ - var keyBy = createAggregator(function(result, value, key) { - result[key] = value; - }); - - /** - * Creates an array of values by running each element in `collection` through - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, `fill`, - * `invert`, `parseInt`, `random`, `range`, `rangeRight`, `slice`, `some`, - * `sortBy`, `take`, `takeRight`, `template`, `trim`, `trimEnd`, `trimStart`, - * and `words` - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.sortBy` except that it allows specifying the sort - * orders of the iteratees to sort by. If `orders` is unspecified, all values - * are sorted in ascending order. Otherwise, specify an order of "desc" for - * descending or "asc" for ascending sort order of corresponding values. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} [iteratees=[_.identity]] The iteratees to sort by. - * @param {string[]} [orders] The sort orders of `iteratees`. - * @param- {Object} [guard] Enables use as an iteratee for functions like `_.reduce`. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 34 }, - * { 'user': 'fred', 'age': 42 }, - * { 'user': 'barney', 'age': 36 } - * ]; - * - * // Sort by `user` in ascending order and by `age` in descending order. - * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] - */ - function orderBy(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - orders = guard ? undefined : orders; - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseOrderBy(collection, iteratees, orders); - } - - /** - * Creates an array of elements split into two groups, the first of which - * contains elements `predicate` returns truthy for, the second of which - * contains elements `predicate` returns falsey for. The predicate is - * invoked with one argument: (value). - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the array of grouped elements. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true }, - * { 'user': 'pebbles', 'age': 1, 'active': false } - * ]; - * - * _.partition(users, function(o) { return o.active; }); - * // => objects for [['fred'], ['barney', 'pebbles']] - * - * // The `_.matches` iteratee shorthand. - * _.partition(users, { 'age': 1, 'active': false }); - * // => objects for [['pebbles'], ['barney', 'fred']] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.partition(users, ['active', false]); - * // => objects for [['barney', 'pebbles'], ['fred']] - * - * // The `_.property` iteratee shorthand. - * _.partition(users, 'active'); - * // => objects for [['fred'], ['barney', 'pebbles']] - */ - var partition = createAggregator(function(result, value, key) { - result[key ? 0 : 1].push(value); - }, function() { return [[], []]; }); - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` through `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); - } - - /** - * This method is like `_.reduce` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @example - * - * var array = [[0, 1], [2, 3], [4, 5]]; - * - * _.reduceRight(array, function(flattened, other) { - * return flattened.concat(other); - * }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - function reduceRight(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduceRight : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); - } - - /** - * The opposite of `_.filter`; this method returns the elements of `collection` - * that `predicate` does **not** return truthy for. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true } - * ]; - * - * _.reject(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.reject(users, { 'age': 40, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.reject(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.reject(users, 'active'); - * // => objects for ['barney'] - */ - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - predicate = getIteratee(predicate, 3); - return func(collection, function(value, index, collection) { - return !predicate(value, index, collection); - }); - } - - /** - * Gets a random element from `collection`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - */ - function sample(collection) { - var array = isArrayLike(collection) ? collection : values(collection), - length = array.length; - - return length > 0 ? array[baseRandom(0, length - 1)] : undefined; - } - - /** - * Gets `n` random elements at unique keys from `collection` up to the - * size of `collection`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @param {number} [n=0] The number of elements to sample. - * @returns {Array} Returns the random elements. - * @example - * - * _.sampleSize([1, 2, 3], 2); - * // => [3, 1] - * - * _.sampleSize([1, 2, 3], 4); - * // => [2, 3, 1] - */ - function sampleSize(collection, n) { - var index = -1, - result = toArray(collection), - length = result.length, - lastIndex = length - 1; - - n = baseClamp(toInteger(n), 0, length); - while (++index < n) { - var rand = baseRandom(index, lastIndex), - value = result[rand]; - - result[rand] = result[index]; - result[index] = value; - } - result.length = n; - return result; - } - - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle(collection) { - return sampleSize(collection, MAX_ARRAY_LENGTH); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable properties for objects. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - var result = collection.length; - return (result && isString(collection)) ? stringSize(collection) : result; - } - return keys(collection).length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection through each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[]|Object|Object[]|string|string[])} [iteratees=[_.identity]] - * The iteratees to sort by, specified individually or in arrays. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 42 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, function(o) { return o.user; }); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]] - * - * _.sortBy(users, 'user', function(o) { - * return Math.floor(o.age / 10); - * }); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] - */ - var sortBy = rest(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees.length = 1; - } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @type {Function} - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => logs the number of milliseconds it took for the deferred function to be invoked - */ - var now = Date.now; - - /*------------------------------------------------------------------------*/ - - /** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => logs 'done saving!' after the two async saves have completed - */ - function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - /** - * Creates a function that accepts up to `n` arguments, ignoring any - * additional arguments. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. - * @returns {Function} Returns the new function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ - function ary(func, n, guard) { - n = guard ? undefined : n; - n = (func && n == null) ? func.length : n; - return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); - } - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => allows adding up to 4 contacts to the list - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and prepends any additional `_.bind` arguments to those provided to the - * bound function. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind` this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var greet = function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * }; - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = rest(function(func, thisArg, partials) { - var bitmask = BIND_FLAG; - if (partials.length) { - var placeholder = lodash.placeholder || bind.placeholder, - holders = replaceHolders(partials, placeholder); - - bitmask |= PARTIAL_FLAG; - } - return createWrapper(func, bitmask, thisArg, partials, holders); - }); - - /** - * Creates a function that invokes the method at `object[key]` and prepends - * any additional `_.bindKey` arguments to those provided to the bound function. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. - * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @category Function - * @param {Object} object The object to invoke the method on. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // Bound with placeholders. - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ - var bindKey = rest(function(object, key, partials) { - var bitmask = BIND_FLAG | BIND_KEY_FLAG; - if (partials.length) { - var placeholder = lodash.placeholder || bindKey.placeholder, - holders = replaceHolders(partials, placeholder); - - bitmask |= PARTIAL_FLAG; - } - return createWrapper(key, bitmask, object, partials, holders); - }); - - /** - * Creates a function that accepts arguments of `func` and either invokes - * `func` returning its result, if at least `arity` number of arguments have - * been provided, or returns a function that accepts the remaining `func` - * arguments, and so on. The arity of `func` may be specified if `func.length` - * is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ - function curry(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrapper(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = lodash.placeholder || curry.placeholder; - return result; - } - - /** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ - function curryRight(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrapper(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = lodash.placeholder || curryRight.placeholder; - return result; - } - - /** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide an options object to indicate whether `func` should be invoked on - * the leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent calls - * to the debounced function return the result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked - * on the trailing edge of the timeout only if the debounced function is - * invoked more than once during the `wait` timeout. - * - * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options] The options object. - * @param {boolean} [options.leading=false] Specify invoking on the leading - * edge of the timeout. - * @param {number} [options.maxWait] The maximum time `func` is allowed to be - * delayed before it's invoked. - * @param {boolean} [options.trailing=true] Specify invoking on the trailing - * edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ - function debounce(func, wait, options) { - var args, - maxTimeoutId, - result, - stamp, - thisArg, - timeoutId, - trailingCall, - lastCalled = 0, - leading = false, - maxWait = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxWait = 'maxWait' in options && nativeMax(toNumber(options.maxWait) || 0, wait); - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function cancel() { - if (timeoutId) { - clearTimeout(timeoutId); - } - if (maxTimeoutId) { - clearTimeout(maxTimeoutId); - } - lastCalled = 0; - args = maxTimeoutId = thisArg = timeoutId = trailingCall = undefined; - } - - function complete(isCalled, id) { - if (id) { - clearTimeout(id); - } - maxTimeoutId = timeoutId = trailingCall = undefined; - if (isCalled) { - lastCalled = now(); - result = func.apply(thisArg, args); - if (!timeoutId && !maxTimeoutId) { - args = thisArg = undefined; - } - } - } - - function delayed() { - var remaining = wait - (now() - stamp); - if (remaining <= 0 || remaining > wait) { - complete(trailingCall, maxTimeoutId); - } else { - timeoutId = setTimeout(delayed, remaining); - } - } - - function flush() { - if ((timeoutId && trailingCall) || (maxTimeoutId && trailing)) { - result = func.apply(thisArg, args); - } - cancel(); - return result; - } - - function maxDelayed() { - complete(trailing, timeoutId); - } - - function debounced() { - args = arguments; - stamp = now(); - thisArg = this; - trailingCall = trailing && (timeoutId || !leading); - - if (maxWait === false) { - var leadingCall = leading && !timeoutId; - } else { - if (!lastCalled && !maxTimeoutId && !leading) { - lastCalled = stamp; - } - var remaining = maxWait - (stamp - lastCalled); - - var isCalled = (remaining <= 0 || remaining > maxWait) && - (leading || maxTimeoutId); - - if (isCalled) { - if (maxTimeoutId) { - maxTimeoutId = clearTimeout(maxTimeoutId); - } - lastCalled = stamp; - result = func.apply(thisArg, args); - } - else if (!maxTimeoutId) { - maxTimeoutId = setTimeout(maxDelayed, remaining); - } - } - if (isCalled && timeoutId) { - timeoutId = clearTimeout(timeoutId); - } - else if (!timeoutId && wait !== maxWait) { - timeoutId = setTimeout(delayed, wait); - } - if (leadingCall) { - isCalled = true; - result = func.apply(thisArg, args); - } - if (isCalled && !timeoutId && !maxTimeoutId) { - args = thisArg = undefined; - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => logs 'deferred' after one or more milliseconds - */ - var defer = rest(function(func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => logs 'later' after one second - */ - var delay = rest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - /** - * Creates a function that invokes `func` with arguments reversed. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to flip arguments for. - * @returns {Function} Returns the new function. - * @example - * - * var flipped = _.flip(function() { - * return _.toArray(arguments); - * }); - * - * flipped('a', 'b', 'c', 'd'); - * // => ['d', 'c', 'b', 'a'] - */ - function flip(func) { - return createWrapper(func, FLIP_FLAG); - } - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object) - * method interface of `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoizing function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ - function memoize(func, resolver) { - if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result); - return result; - }; - memoized.cache = new memoize.Cache; - return memoized; - } - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - return !predicate.apply(this, arguments); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // `initialize` invokes `createApplication` once - */ - function once(func) { - return before(2, func); - } - - /** - * Creates a function that invokes `func` with arguments transformed by - * corresponding `transforms`. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to wrap. - * @param {...(Function|Function[])} [transforms] The functions to transform - * arguments, specified individually or in arrays. - * @returns {Function} Returns the new function. - * @example - * - * function doubled(n) { - * return n * 2; - * } - * - * function square(n) { - * return n * n; - * } - * - * var func = _.overArgs(function(x, y) { - * return [x, y]; - * }, square, doubled); - * - * func(9, 3); - * // => [81, 6] - * - * func(10, 5); - * // => [100, 10] - */ - var overArgs = rest(function(func, transforms) { - transforms = arrayMap(baseFlatten(transforms, 1), getIteratee()); - - var funcsLength = transforms.length; - return rest(function(args) { - var index = -1, - length = nativeMin(args.length, funcsLength); - - while (++index < length) { - args[index] = transforms[index].call(this, args[index]); - } - return apply(func, this, args); - }); - }); - - /** - * Creates a function that invokes `func` with `partial` arguments prepended - * to those provided to the new function. This method is like `_.bind` except - * it does **not** alter the `this` binding. - * - * The `_.partial.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * var greet = function(greeting, name) { - * return greeting + ' ' + name; - * }; - * - * var sayHelloTo = _.partial(greet, 'hello'); - * sayHelloTo('fred'); - * // => 'hello fred' - * - * // Partially applied with placeholders. - * var greetFred = _.partial(greet, _, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - */ - var partial = rest(function(func, partials) { - var placeholder = lodash.placeholder || partial.placeholder, - holders = replaceHolders(partials, placeholder); - - return createWrapper(func, PARTIAL_FLAG, undefined, partials, holders); - }); - - /** - * This method is like `_.partial` except that partially applied arguments - * are appended to those provided to the new function. - * - * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * var greet = function(greeting, name) { - * return greeting + ' ' + name; - * }; - * - * var greetFred = _.partialRight(greet, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - * - * // Partially applied with placeholders. - * var sayHelloTo = _.partialRight(greet, 'hello', _); - * sayHelloTo('fred'); - * // => 'hello fred' - */ - var partialRight = rest(function(func, partials) { - var placeholder = lodash.placeholder || partialRight.placeholder, - holders = replaceHolders(partials, placeholder); - - return createWrapper(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders); - }); - - /** - * Creates a function that invokes `func` with arguments arranged according - * to the specified indexes where the argument value at the first index is - * provided as the first argument, the argument value at the second index is - * provided as the second argument, and so on. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to rearrange arguments for. - * @param {...(number|number[])} indexes The arranged argument indexes, - * specified individually or in arrays. - * @returns {Function} Returns the new function. - * @example - * - * var rearged = _.rearg(function(a, b, c) { - * return [a, b, c]; - * }, 2, 0, 1); - * - * rearged('b', 'c', 'a') - * // => ['a', 'b', 'c'] - */ - var rearg = rest(function(func, indexes) { - return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes, 1)); - }); - - /** - * Creates a function that invokes `func` with the `this` binding of the - * created function and arguments from `start` and beyond provided as an array. - * - * **Note:** This method is based on the [rest parameter](https://mdn.io/rest_parameters). - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.rest(function(what, names) { - * return what + ' ' + _.initial(names).join(', ') + - * (_.size(names) > 1 ? ', & ' : '') + _.last(names); - * }); - * - * say('hello', 'fred', 'barney', 'pebbles'); - * // => 'hello fred, barney, & pebbles' - */ - function rest(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = nativeMax(start === undefined ? (func.length - 1) : toInteger(start), 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - switch (start) { - case 0: return func.call(this, array); - case 1: return func.call(this, args[0], array); - case 2: return func.call(this, args[0], args[1], array); - } - var otherArgs = Array(start + 1); - index = -1; - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = array; - return apply(func, this, otherArgs); - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of the created - * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3). - * - * **Note:** This method is based on the [spread operator](https://mdn.io/spread_operator). - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to spread arguments over. - * @param {number} [start=0] The start position of the spread. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.spread(function(who, what) { - * return who + ' says ' + what; - * }); - * - * say(['fred', 'hello']); - * // => 'fred says hello' - * - * var numbers = Promise.all([ - * Promise.resolve(40), - * Promise.resolve(36) - * ]); - * - * numbers.then(_.spread(function(x, y) { - * return x + y; - * })); - * // => a Promise of 76 - */ - function spread(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start === undefined ? 0 : nativeMax(toInteger(start), 0); - return rest(function(args) { - var array = args[start], - otherArgs = args.slice(0, start); - - if (array) { - arrayPush(otherArgs, array); - } - return apply(func, this, otherArgs); - }); - } - - /** - * Creates a throttled function that only invokes `func` at most once per - * every `wait` milliseconds. The throttled function comes with a `cancel` - * method to cancel delayed `func` invocations and a `flush` method to - * immediately invoke them. Provide an options object to indicate whether - * `func` should be invoked on the leading and/or trailing edge of the `wait` - * timeout. The `func` is invoked with the last arguments provided to the - * throttled function. Subsequent calls to the throttled function return the - * result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked - * on the trailing edge of the timeout only if the throttled function is - * invoked more than once during the `wait` timeout. - * - * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) - * for details over the differences between `_.throttle` and `_.debounce`. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to throttle. - * @param {number} [wait=0] The number of milliseconds to throttle invocations to. - * @param {Object} [options] The options object. - * @param {boolean} [options.leading=true] Specify invoking on the leading - * edge of the timeout. - * @param {boolean} [options.trailing=true] Specify invoking on the trailing - * edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // Avoid excessively updating the position while scrolling. - * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); - * - * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. - * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); - * jQuery(element).on('click', throttled); - * - * // Cancel the trailing throttled invocation. - * jQuery(window).on('popstate', throttled.cancel); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - 'leading': leading, - 'maxWait': wait, - 'trailing': trailing - }); - } - - /** - * Creates a function that accepts up to one argument, ignoring any - * additional arguments. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new function. - * @example - * - * _.map(['6', '8', '10'], _.unary(parseInt)); - * // => [6, 8, 10] - */ - function unary(func) { - return ary(func, 1); - } - - /** - * Creates a function that provides `value` to the wrapper function as its - * first argument. Any additional arguments provided to the function are - * appended to those provided to the wrapper function. The wrapper is invoked - * with the `this` binding of the created function. - * - * @static - * @memberOf _ - * @category Function - * @param {*} value The value to wrap. - * @param {Function} [wrapper=identity] The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var p = _.wrap(_.escape, function(func, text) { - * return '

' + func(text) + '

'; - * }); - * - * p('fred, barney, & pebbles'); - * // => '

fred, barney, & pebbles

' - */ - function wrap(value, wrapper) { - wrapper = wrapper == null ? identity : wrapper; - return partial(wrapper, value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ - function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; - } - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - return baseClone(value); - } - - /** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined` - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ - function cloneWith(value, customizer) { - return baseClone(value, false, customizer); - } - - /** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ - function cloneDeep(value) { - return baseClone(value, true); - } - - /** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ - function cloneDeepWith(value, customizer) { - return baseClone(value, true, customizer); - } - - /** - * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'user': 'fred' }; - * var other = { 'user': 'fred' }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`. - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ - function gt(value, other) { - return value > other; - } - - /** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`. - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ - function gte(value, other) { - return value >= other; - } - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - function isArguments(value) { - // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode. - return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && - (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); - } - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @type {Function} - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ - function isArrayBuffer(value) { - return isObjectLike(value) && objectToString.call(value) == arrayBufferTag; - } - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && - !(typeof value == 'function' && isFunction(value)) && isLength(getLength(value)); - } - - /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && objectToString.call(value) == boolTag); - } - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = !Buffer ? constant(false) : function(value) { - return value instanceof Buffer; - }; - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - function isDate(value) { - return isObjectLike(value) && objectToString.call(value) == dateTag; - } - - /** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ - function isElement(value) { - return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); - } - - /** - * Checks if `value` is empty. A value is considered empty unless it's an - * `arguments` object, array, string, or jQuery-like collection with a length - * greater than `0` or an object with own enumerable properties. - * - * @static - * @memberOf _ - * @category Lang - * @param {Array|Object|string} value The value to inspect. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (isArrayLike(value) && - (isArray(value) || isString(value) || - isFunction(value.splice) || isArguments(value))) { - return !value.length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are **not** supported. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'user': 'fred' }; - * var other = { 'user': 'fred' }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined` comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ - function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, customizer) : !!result; - } - - /** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ - function isError(value) { - if (!isObjectLike(value)) { - return false; - } - var Ctor = value.constructor; - return (objectToString.call(value) == errorTag) || - (typeof Ctor == 'function' && objectToString.call(Ctor.prototype) == errorTag); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MAX_VALUE); - * // => true - * - * _.isFinite(3.14); - * // => true - * - * _.isFinite(Infinity); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8 which returns 'object' for typed array constructors, and - // PhantomJS 1.9 which returns 'function' for `NodeList` instances. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; - } - - /** - * Checks if `value` is an integer. - * - * **Note:** This method is based on [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ - function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This function is loosely based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return !!value && typeof value == 'object'; - } - - /** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ - function isMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; - } - - /** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. This method is - * equivalent to a `_.matches` function when `source` is partially applied. - * - * **Note:** This method supports comparing the same values as `_.isEqual`. - * - * @static - * @memberOf _ - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'user': 'fred', 'age': 40 }; - * - * _.isMatch(object, { 'age': 40 }); - * // => true - * - * _.isMatch(object, { 'age': 36 }); - * // => false - */ - function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); - } - - /** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined` comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ - function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch(object, source, getMatchData(source), customizer); - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4) - * which returns `true` for `undefined` and other non-numeric values. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is a native function. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ - function isNative(value) { - if (value == null) { - return false; - } - if (isFunction(value)) { - return reIsNative.test(funcToString.call(value)); - } - return isObjectLike(value) && - (isHostObject(value) ? reIsNative : reIsHostCtor).test(value); - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ - function isNil(value) { - return value == null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified - * as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && objectToString.call(value) == numberTag); - } - - /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ - function isPlainObject(value) { - if (!isObjectLike(value) || - objectToString.call(value) != objectTag || isHostObject(value)) { - return false; - } - var proto = objectProto; - if (typeof value.constructor == 'function') { - proto = getPrototypeOf(value); - } - if (proto === null) { - return true; - } - var Ctor = proto.constructor; - return (typeof Ctor == 'function' && - Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - function isRegExp(value) { - return isObject(value) && objectToString.call(value) == regexpTag; - } - - /** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ - function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ - function isSet(value) { - return isObjectLike(value) && getTag(value) == setTag; - } - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); - } - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); - } - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - function isTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; - } - - /** - * Checks if `value` is `undefined`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ - function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; - } - - /** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ - function isWeakSet(value) { - return isObjectLike(value) && objectToString.call(value) == weakSetTag; - } - - /** - * Checks if `value` is less than `other`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`. - * @example - * - * _.lt(1, 3); - * // => true - * - * _.lt(3, 3); - * // => false - * - * _.lt(3, 1); - * // => false - */ - function lt(value, other) { - return value < other; - } - - /** - * Checks if `value` is less than or equal to `other`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`. - * @example - * - * _.lte(1, 3); - * // => true - * - * _.lte(3, 3); - * // => true - * - * _.lte(3, 1); - * // => false - */ - function lte(value, other) { - return value <= other; - } - - /** - * Converts `value` to an array. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value); - } - if (iteratorSymbol && value[iteratorSymbol]) { - return iteratorToArray(value[iteratorSymbol]()); - } - var tag = getTag(value), - func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); - - return func(value); - } - - /** - * Converts `value` to an integer. - * - * **Note:** This function is loosely based on [`ToInteger`](http://www.ecma-international.org/ecma-262/6.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3'); - * // => 3 - */ - function toInteger(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - var remainder = value % 1; - return value === value ? (remainder ? value - remainder : value) : 0; - } - - /** - * Converts `value` to an integer suitable for use as the length of an - * array-like object. - * - * **Note:** This method is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toLength(3); - * // => 3 - * - * _.toLength(Number.MIN_VALUE); - * // => 0 - * - * _.toLength(Infinity); - * // => 4294967295 - * - * _.toLength('3'); - * // => 3 - */ - function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; - } - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3); - * // => 3 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3'); - * // => 3 - */ - function toNumber(value) { - if (isObject(value)) { - var other = isFunction(value.valueOf) ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = value.replace(reTrim, ''); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); - } - - /** - * Converts `value` to a plain object flattening inherited enumerable - * properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } - - /** - * Converts `value` to a safe integer. A safe integer can be compared and - * represented correctly. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toSafeInteger(3); - * // => 3 - * - * _.toSafeInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toSafeInteger(Infinity); - * // => 9007199254740991 - * - * _.toSafeInteger('3'); - * // => 3 - */ - function toSafeInteger(value) { - return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); - } - - /** - * Converts `value` to a string if it's not one. An empty string is returned - * for `null` and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to process. - * @returns {string} Returns the string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (value == null) { - return ''; - } - if (isSymbol(value)) { - return Symbol ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable properties of source objects to the destination - * object. Source objects are applied from left to right. Subsequent sources - * overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * function Foo() { - * this.c = 3; - * } - * - * function Bar() { - * this.e = 5; - * } - * - * Foo.prototype.d = 4; - * Bar.prototype.f = 6; - * - * _.assign({ 'a': 1 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3, 'e': 5 } - */ - var assign = createAssigner(function(object, source) { - copyObject(source, keys(source), object); - }); - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * function Bar() { - * this.d = 4; - * } - * - * Foo.prototype.c = 3; - * Bar.prototype.e = 5; - * - * _.assignIn({ 'a': 1 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - - /** - * This method is like `_.assignIn` except that it accepts `customizer` which - * is invoked to produce the assigned values. If `customizer` returns `undefined` - * assignment is handled by the method instead. The `customizer` is invoked - * with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObjectWith(source, keysIn(source), object, customizer); - }); - - /** - * This method is like `_.assign` except that it accepts `customizer` which - * is invoked to produce the assigned values. If `customizer` returns `undefined` - * assignment is handled by the method instead. The `customizer` is invoked - * with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObjectWith(source, keys(source), object, customizer); - }); - - /** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths of elements to pick, - * specified individually or in arrays. - * @returns {Array} Returns the new array of picked elements. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - * - * _.at(['a', 'b', 'c'], 0, 2); - * // => ['a', 'c'] - */ - var at = rest(function(object, paths) { - return baseAt(object, baseFlatten(paths, 1)); - }); - - /** - * Creates an object that inherits from the `prototype` object. If a `properties` - * object is given its own enumerable properties are assigned to the created object. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? baseAssign(result, properties) : result; - } - - /** - * Assigns own and inherited enumerable properties of source objects to the - * destination object for all destination properties that resolve to `undefined`. - * Source objects are applied from left to right. Once a property is set, - * additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); - * // => { 'user': 'barney', 'age': 36 } - */ - var defaults = rest(function(args) { - args.push(undefined, assignInDefaults); - return apply(assignInWith, undefined, args); - }); - - /** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } }); - * // => { 'user': { 'name': 'barney', 'age': 36 } } - * - */ - var defaultsDeep = rest(function(args) { - args.push(undefined, mergeDefaults); - return apply(mergeWith, undefined, args); - }); - - /** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to search. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ - function findKey(object, predicate) { - return baseFind(object, getIteratee(predicate, 3), baseForOwn, true); - } - - /** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to search. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ - function findLastKey(object, predicate) { - return baseFind(object, getIteratee(predicate, 3), baseForOwnRight, true); - } - - /** - * Iterates over own and inherited enumerable properties of an object invoking - * `iteratee` for each property. The iteratee is invoked with three arguments: - * (value, key, object). Iteratee functions may exit iteration early by explicitly - * returning `false`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => logs 'a', 'b', then 'c' (iteration order is not guaranteed) - */ - function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, baseCastFunction(iteratee), keysIn); - } - - /** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c' - */ - function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, baseCastFunction(iteratee), keysIn); - } - - /** - * Iterates over own enumerable properties of an object invoking `iteratee` - * for each property. The iteratee is invoked with three arguments: - * (value, key, object). Iteratee functions may exit iteration early by - * explicitly returning `false`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => logs 'a' then 'b' (iteration order is not guaranteed) - */ - function forOwn(object, iteratee) { - return object && baseForOwn(object, baseCastFunction(iteratee)); - } - - /** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b' - */ - function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, baseCastFunction(iteratee)); - } - - /** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the new array of property names. - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ - function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); - } - - /** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the new array of property names. - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ - function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); - } - - /** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined` the `defaultValue` is used in its place. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ - function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; - } - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': { 'c': 3 } } }; - * var other = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b.c'); - * // => true - * - * _.has(object, ['a', 'b', 'c']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return hasPath(object, path, baseHas); - } - - /** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b.c'); - * // => true - * - * _.hasIn(object, ['a', 'b', 'c']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ - function hasIn(object, path) { - return hasPath(object, path, baseHasIn); - } - - /** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite property - * assignments of previous values. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ - var invert = createInverter(function(result, value, key) { - result[value] = key; - }, constant(identity)); - - /** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` through `iteratee`. - * The corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to invert. - * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ - var invertBy = createInverter(function(result, value, key) { - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - }, getIteratee); - - /** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ - var invoke = rest(baseInvoke); - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) - * for more details. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys(object) { - var isProto = isPrototype(object); - if (!(isProto || isArrayLike(object))) { - return baseKeys(object); - } - var indexes = indexKeys(object), - skipIndexes = !!indexes, - result = indexes || [], - length = result.length; - - for (var key in object) { - if (baseHas(object, key) && - !(skipIndexes && (key == 'length' || isIndex(key, length))) && - !(isProto && key == 'constructor')) { - result.push(key); - } - } - return result; - } - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - var index = -1, - isProto = isPrototype(object), - props = baseKeysIn(object), - propsLength = props.length, - indexes = indexKeys(object), - skipIndexes = !!indexes, - result = indexes || [], - length = result.length; - - while (++index < propsLength) { - var key = props[index]; - if (!(skipIndexes && (key == 'length' || isIndex(key, length))) && - !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } - - /** - * The opposite of `_.mapValues`; this method creates an object with the - * same values as `object` and keys generated by running each own enumerable - * property of `object` through `iteratee`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @example - * - * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { - * return key + value; - * }); - * // => { 'a1': 1, 'b2': 2 } - */ - function mapKeys(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - result[iteratee(value, key, object)] = value; - }); - return result; - } - - /** - * Creates an object with the same keys as `object` and values generated by - * running each own enumerable property of `object` through `iteratee`. The - * iteratee function is invoked with three arguments: (value, key, object). - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ - function mapValues(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - result[key] = iteratee(value, key, object); - }); - return result; - } - - /** - * Recursively merges own and inherited enumerable properties of source objects - * into the destination object. Source properties that resolve to `undefined` - * are skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var users = { - * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }] - * }; - * - * var ages = { - * 'data': [{ 'age': 36 }, { 'age': 40 }] - * }; - * - * _.merge(users, ages); - * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } - */ - var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); - - /** - * This method is like `_.merge` except that it accepts `customizer` which - * is invoked to produce the merged values of the destination and source - * properties. If `customizer` returns `undefined` merging is handled by the - * method instead. The `customizer` is invoked with seven arguments: - * (objValue, srcValue, key, object, source, stack). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * if (_.isArray(objValue)) { - * return objValue.concat(srcValue); - * } - * } - * - * var object = { - * 'fruits': ['apple'], - * 'vegetables': ['beet'] - * }; - * - * var other = { - * 'fruits': ['banana'], - * 'vegetables': ['carrot'] - * }; - * - * _.mergeWith(object, other, customizer); - * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] } - */ - var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { - baseMerge(object, source, srcIndex, customizer); - }); - - /** - * The opposite of `_.pick`; this method creates an object composed of the - * own and inherited enumerable properties of `object` that are not omitted. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property names to omit, specified - * individually or in arrays. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omit(object, ['a', 'c']); - * // => { 'b': '2' } - */ - var omit = rest(function(object, props) { - if (object == null) { - return {}; - } - props = arrayMap(baseFlatten(props, 1), String); - return basePick(object, baseDifference(keysIn(object), props)); - }); - - /** - * The opposite of `_.pickBy`; this method creates an object composed of the - * own and inherited enumerable properties of `object` that `predicate` - * doesn't return truthy for. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omitBy(object, _.isNumber); - * // => { 'b': '2' } - */ - function omitBy(object, predicate) { - predicate = getIteratee(predicate, 2); - return basePickBy(object, function(value, key) { - return !predicate(value, key); - }); - } - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property names to pick, specified - * individually or in arrays. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = rest(function(object, props) { - return object == null ? {} : basePick(object, baseFlatten(props, 1)); - }); - - /** - * Creates an object composed of the `object` properties `predicate` returns - * truthy for. The predicate is invoked with two arguments: (value, key). - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {Function|Object|string} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pickBy(object, _.isNumber); - * // => { 'a': 1, 'c': 3 } - */ - function pickBy(object, predicate) { - return object == null ? {} : basePickBy(object, getIteratee(predicate, 2)); - } - - /** - * This method is like `_.get` except that if the resolved value is a function - * it's invoked with the `this` binding of its parent object and its result - * is returned. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - if (!isKey(path, object)) { - path = baseCastPath(path); - var result = get(object, path); - object = parent(object, path); - } else { - result = object == null ? undefined : object[path]; - } - if (result === undefined) { - result = defaultValue; - } - return isFunction(result) ? result.call(object) : result; - } - - /** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, 'x[0].y.z', 5); - * console.log(object.x[0].y.z); - * // => 5 - */ - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); - } - - /** - * This method is like `_.set` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * _.setWith({ '0': { 'length': 2 } }, '[0][1][2]', 3, Object); - * // => { '0': { '1': { '2': 3 }, 'length': 2 } } - */ - function setWith(object, path, value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseSet(object, path, value, customizer); - } - - /** - * Creates an array of own enumerable key-value pairs for `object` which - * can be consumed by `_.fromPairs`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the new array of key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairs(new Foo); - * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) - */ - function toPairs(object) { - return baseToPairs(object, keys(object)); - } - - /** - * Creates an array of own and inherited enumerable key-value pairs for - * `object` which can be consumed by `_.fromPairs`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the new array of key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairsIn(new Foo); - * // => [['a', 1], ['b', 2], ['c', 1]] (iteration order is not guaranteed) - */ - function toPairsIn(object) { - return baseToPairs(object, keysIn(object)); - } - - /** - * An alternative to `_.reduce`; this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own enumerable - * properties through `iteratee`, with each invocation potentially mutating - * the `accumulator` object. The iteratee is invoked with four arguments: - * (accumulator, value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @category Object - * @param {Array|Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @returns {*} Returns the accumulated value. - * @example - * - * _.transform([2, 3, 4], function(result, n) { - * result.push(n *= n); - * return n % 2 == 0; - * }, []); - * // => [4, 9] - * - * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } - */ - function transform(object, iteratee, accumulator) { - var isArr = isArray(object) || isTypedArray(object); - iteratee = getIteratee(iteratee, 4); - - if (accumulator == null) { - if (isArr || isObject(object)) { - var Ctor = object.constructor; - if (isArr) { - accumulator = isArray(object) ? new Ctor : []; - } else { - accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined); - } - } else { - accumulator = {}; - } - } - (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) { - return iteratee(accumulator, value, index, object); - }); - return accumulator; - } - - /** - * Removes the property at `path` of `object`. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 7 } }] }; - * _.unset(object, 'a[0].b.c'); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - * - * _.unset(object, 'a[0].b.c'); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - */ - function unset(object, path) { - return object == null ? true : baseUnset(object, path); - } - - /** - * Creates an array of the own enumerable property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object ? baseValues(object, keys(object)) : []; - } - - /** - * Creates an array of the own and inherited enumerable property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.valuesIn(new Foo); - * // => [1, 2, 3] (iteration order is not guaranteed) - */ - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ - function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); - } - - /** - * Checks if `n` is between `start` and up to but not including, `end`. If - * `end` is not specified it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ - function inRange(number, start, end) { - start = toNumber(start) || 0; - if (end === undefined) { - end = start; - start = 0; - } else { - end = toNumber(end) || 0; - } - number = toNumber(number); - return baseInRange(number, start, end); - } - - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are floats, - * a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toNumber(lower) || 0; - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toNumber(upper) || 0; - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar'); - * // => 'fooBar' - * - * _.camelCase('__foo_bar__'); - * // => 'fooBar' - */ - var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); - }); - - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } - - /** - * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ - function deburr(string) { - string = toString(string); - return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); - } - - /** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to search. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search from. - * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ - function endsWith(string, target, position) { - string = toString(string); - target = typeof target == 'string' ? target : (target + ''); - - var length = string.length; - position = position === undefined - ? length - : baseClamp(toInteger(position), 0, length); - - position -= target.length; - return position >= 0 && string.indexOf(target, position) == position; - } - - /** - * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to - * their corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. - * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * Backticks are escaped because in IE < 9, they can break out of - * attribute values or HTML comments. See [#59](https://html5sec.org/#59), - * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and - * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/) - * for more details. - * - * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping) - * to reduce XSS vectors. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ - function escapeRegExp(string) { - string = toString(string); - return (string && reHasRegExpChar.test(string)) - ? string.replace(reRegExpChar, '\\$&') - : string; - } - - /** - * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__foo_bar__'); - * // => 'foo-bar' - */ - var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); - }); - - /** - * Converts `string`, as space separated words, to lower case. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the lower cased string. - * @example - * - * _.lowerCase('--Foo-Bar'); - * // => 'foo bar' - * - * _.lowerCase('fooBar'); - * // => 'foo bar' - * - * _.lowerCase('__FOO_BAR__'); - * // => 'foo bar' - */ - var lowerCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + word.toLowerCase(); - }); - - /** - * Converts the first character of `string` to lower case. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.lowerFirst('Fred'); - * // => 'fred' - * - * _.lowerFirst('FRED'); - * // => 'fRED' - */ - var lowerFirst = createCaseFirst('toLowerCase'); - - /** - * Converts the first character of `string` to upper case. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.upperFirst('fred'); - * // => 'Fred' - * - * _.upperFirst('FRED'); - * // => 'FRED' - */ - var upperFirst = createCaseFirst('toUpperCase'); - - /** - * Pads `string` on the left and right sides if it's shorter than `length`. - * Padding characters are truncated if they can't be evenly divided by `length`. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.pad('abc', 8); - * // => ' abc ' - * - * _.pad('abc', 8, '_-'); - * // => '_-abc_-_' - * - * _.pad('abc', 3); - * // => 'abc' - */ - function pad(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = stringSize(string); - if (!length || strLength >= length) { - return string; - } - var mid = (length - strLength) / 2, - leftLength = nativeFloor(mid), - rightLength = nativeCeil(mid); - - return createPadding('', leftLength, chars) + string + createPadding('', rightLength, chars); - } - - /** - * Pads `string` on the right side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padEnd('abc', 6); - * // => 'abc ' - * - * _.padEnd('abc', 6, '_-'); - * // => 'abc_-_' - * - * _.padEnd('abc', 3); - * // => 'abc' - */ - function padEnd(string, length, chars) { - string = toString(string); - return string + createPadding(string, length, chars); - } - - /** - * Pads `string` on the left side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padStart('abc', 6); - * // => ' abc' - * - * _.padStart('abc', 6, '_-'); - * // => '_-_abc' - * - * _.padStart('abc', 3); - * // => 'abc' - */ - function padStart(string, length, chars) { - string = toString(string); - return createPadding(string, length, chars) + string; - } - - /** - * Converts `string` to an integer of the specified radix. If `radix` is - * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal, - * in which case a `radix` of `16` is used. - * - * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#x15.1.2.2) - * of `parseInt`. - * - * @static - * @memberOf _ - * @category String - * @param {string} string The string to convert. - * @param {number} [radix=10] The radix to interpret `value` by. - * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. - * @returns {number} Returns the converted integer. - * @example - * - * _.parseInt('08'); - * // => 8 - * - * _.map(['6', '08', '10'], _.parseInt); - * // => [6, 8, 10] - */ - function parseInt(string, radix, guard) { - // Chrome fails to trim leading whitespace characters. - // See https://code.google.com/p/v8/issues/detail?id=3109 for more details. - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - string = toString(string).replace(reTrim, ''); - return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10)); - } - - /** - * Repeats the given string `n` times. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to repeat. - * @param {number} [n=0] The number of times to repeat the string. - * @returns {string} Returns the repeated string. - * @example - * - * _.repeat('*', 3); - * // => '***' - * - * _.repeat('abc', 2); - * // => 'abcabc' - * - * _.repeat('abc', 0); - * // => '' - */ - function repeat(string, n) { - string = toString(string); - n = toInteger(n); - - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - string += string; - } while (n); - - return result; - } - - /** - * Replaces matches for `pattern` in `string` with `replacement`. - * - * **Note:** This method is based on [`String#replace`](https://mdn.io/String/replace). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to modify. - * @param {RegExp|string} pattern The pattern to replace. - * @param {Function|string} replacement The match replacement. - * @returns {string} Returns the modified string. - * @example - * - * _.replace('Hi Fred', 'Fred', 'Barney'); - * // => 'Hi Barney' - */ - function replace() { - var args = arguments, - string = toString(args[0]); - - return args.length < 3 ? string : string.replace(args[1], args[2]); - } - - /** - * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the snake cased string. - * @example - * - * _.snakeCase('Foo Bar'); - * // => 'foo_bar' - * - * _.snakeCase('fooBar'); - * // => 'foo_bar' - * - * _.snakeCase('--foo-bar'); - * // => 'foo_bar' - */ - var snakeCase = createCompounder(function(result, word, index) { - return result + (index ? '_' : '') + word.toLowerCase(); - }); - - /** - * Splits `string` by `separator`. - * - * **Note:** This method is based on [`String#split`](https://mdn.io/String/split). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to split. - * @param {RegExp|string} separator The separator pattern to split by. - * @param {number} [limit] The length to truncate results to. - * @returns {Array} Returns the new array of string segments. - * @example - * - * _.split('a-b-c', '-', 2); - * // => ['a', 'b'] - */ - function split(string, separator, limit) { - return toString(string).split(separator, limit); - } - - /** - * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the start cased string. - * @example - * - * _.startCase('--foo-bar'); - * // => 'Foo Bar' - * - * _.startCase('fooBar'); - * // => 'Foo Bar' - * - * _.startCase('__foo_bar__'); - * // => 'Foo Bar' - */ - var startCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + capitalize(word); - }); - - /** - * Checks if `string` starts with the given target string. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to search. - * @param {string} [target] The string to search for. - * @param {number} [position=0] The position to search from. - * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`. - * @example - * - * _.startsWith('abc', 'a'); - * // => true - * - * _.startsWith('abc', 'b'); - * // => false - * - * _.startsWith('abc', 'b', 1); - * // => true - */ - function startsWith(string, target, position) { - string = toString(string); - position = baseClamp(toInteger(position), 0, string.length); - return string.lastIndexOf(target, position) == position; - } - - /** - * Creates a compiled template function that can interpolate data properties - * in "interpolate" delimiters, HTML-escape interpolated data properties in - * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data - * properties may be accessed as free variables in the template. If a setting - * object is given it takes precedence over `_.templateSettings` values. - * - * **Note:** In the development build `_.template` utilizes - * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) - * for easier debugging. - * - * For more information on precompiling templates see - * [lodash's custom builds documentation](https://lodash.com/custom-builds). - * - * For more information on Chrome extension sandboxes see - * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The template string. - * @param {Object} [options] The options object. - * @param {RegExp} [options.escape] The HTML "escape" delimiter. - * @param {RegExp} [options.evaluate] The "evaluate" delimiter. - * @param {Object} [options.imports] An object to import into the template as free variables. - * @param {RegExp} [options.interpolate] The "interpolate" delimiter. - * @param {string} [options.sourceURL] The sourceURL of the template's compiled source. - * @param {string} [options.variable] The data object variable name. - * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. - * @returns {Function} Returns the compiled template function. - * @example - * - * // Use the "interpolate" delimiter to create a compiled template. - * var compiled = _.template('hello <%= user %>!'); - * compiled({ 'user': 'fred' }); - * // => 'hello fred!' - * - * // Use the HTML "escape" delimiter to escape data property values. - * var compiled = _.template('<%- value %>'); - * compiled({ 'value': ' - result += '\\' + key[i] - - } else if (chr === 92) { - result += '\\\\' - - } else if (chr === quoteChr) { - result += '\\' + quote - - } else { - result += key[i] - } - - } else if (options.ascii || Uni.isLineTerminator(key[i]) || escapable.exec(key[i])) { - if (chr < 0x100) { - if (json5) { - result += '\\x' + chr.toString(16) - } else { - result += '\\u00' + chr.toString(16) - } - - } else if (chr < 0x1000) { - result += '\\u0' + chr.toString(16) - - } else if (chr < 0x10000) { - result += '\\u' + chr.toString(16) - - } else { - throw Error('weird codepoint') - } - } else { - result += key[i] - } - } - return quote + result + quote - } - - function _stringify_object() { - if (object === null) return 'null' - var result = [] - , len = 0 - , braces - - if (Array.isArray(object)) { - braces = '[]' - for (var i=0; i options._splitMax - recursiveLvl * options.indent.length || len > options._splitMin) ) { - // remove trailing comma in multiline if asked to - if (options.no_trailing_comma && result.length) { - result[result.length-1] = result[result.length-1].substring(0, result[result.length-1].length-1) - } - - var innerStuff = result.map(function(x) {return indent(x, 1)}).join('') - return braces[0] - + (options.indent ? '\n' : '') - + innerStuff - + indent(braces[1]) - } else { - // always remove trailing comma in one-lined arrays - if (result.length) { - result[result.length-1] = result[result.length-1].substring(0, result[result.length-1].length-1) - } - - var innerStuff = result.join(options.indent ? ' ' : '') - return braces[0] - + innerStuff - + braces[1] - } - } - - function _stringify_nonobject(object) { - if (typeof(options.replacer) === 'function') { - object = options.replacer.call(null, currentKey, object) - } - - switch(typeof(object)) { - case 'string': - return _stringify_str(object) - - case 'number': - if (object === 0 && 1/object < 0) { - // Opinionated decision warning: - // - // I want cross-platform negative zero in all js engines - // I know they're equal, but why lose that tiny bit of - // information needlessly? - return '-0' - } - if (!json5 && !Number.isFinite(object)) { - // json don't support infinity (= sucks) - return 'null' - } - return object.toString() - - case 'boolean': - return object.toString() - - case 'undefined': - return undefined - - case 'function': -// return custom_type() - - default: - // fallback for something weird - return JSON.stringify(object) - } - } - - if (options._stringify_key) { - return _stringify_key(object) - } - - if (typeof(object) === 'object') { - if (object === null) return 'null' - - var str - if (typeof(str = object.toJSON5) === 'function' && options.mode !== 'json') { - object = str.call(object, currentKey) - - } else if (typeof(str = object.toJSON) === 'function') { - object = str.call(object, currentKey) - } - - if (object === null) return 'null' - if (typeof(object) !== 'object') return _stringify_nonobject(object) - - if (object.constructor === Number || object.constructor === Boolean || object.constructor === String) { - object = object.valueOf() - return _stringify_nonobject(object) - - } else if (object.constructor === Date) { - // only until we can't do better - return _stringify_nonobject(object.toISOString()) - - } else { - if (typeof(options.replacer) === 'function') { - object = options.replacer.call(null, currentKey, object) - if (typeof(object) !== 'object') return _stringify_nonobject(object) - } - - return _stringify_object(object) - } - } else { - return _stringify_nonobject(object) - } -} - -/* - * stringify(value, options) - * or - * stringify(value, replacer, space) - * - * where: - * value - anything - * options - object - * replacer - function or array - * space - boolean or number or string - */ -module.exports.stringify = function stringifyJSON(object, options, _space) { - // support legacy syntax - if (typeof(options) === 'function' || Array.isArray(options)) { - options = { - replacer: options - } - } else if (typeof(options) === 'object' && options !== null) { - // nothing to do - } else { - options = {} - } - if (_space != null) options.indent = _space - - if (options.indent == null) options.indent = '\t' - if (options.quote == null) options.quote = "'" - if (options.ascii == null) options.ascii = false - if (options.mode == null) options.mode = 'json5' - - if (options.mode === 'json' || options.mode === 'cjson') { - // json only supports double quotes (= sucks) - options.quote = '"' - - // json don't support trailing commas (= sucks) - options.no_trailing_comma = true - - // json don't support unquoted property names (= sucks) - options.quote_keys = true - } - - // why would anyone use such objects? - if (typeof(options.indent) === 'object') { - if (options.indent.constructor === Number - || options.indent.constructor === Boolean - || options.indent.constructor === String) - options.indent = options.indent.valueOf() - } - - // gap is capped at 10 characters - if (typeof(options.indent) === 'number') { - if (options.indent >= 0) { - options.indent = Array(Math.min(~~options.indent, 10) + 1).join(' ') - } else { - options.indent = false - } - } else if (typeof(options.indent) === 'string') { - options.indent = options.indent.substr(0, 10) - } - - if (options._splitMin == null) options._splitMin = 50 - if (options._splitMax == null) options._splitMax = 70 - - return _stringify(object, options, 0, '') -} - diff --git a/node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/lib/unicode.js b/node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/lib/unicode.js deleted file mode 100644 index 1a29143..0000000 --- a/node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/lib/unicode.js +++ /dev/null @@ -1,71 +0,0 @@ - -// This is autogenerated with esprima tools, see: -// https://github.com/ariya/esprima/blob/master/esprima.js -// -// PS: oh God, I hate Unicode - -// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierStart: - -var Uni = module.exports - -module.exports.isWhiteSpace = function isWhiteSpace(x) { - // section 7.2, table 2 - return x === '\u0020' - || x === '\u00A0' - || x === '\uFEFF' // <-- this is not a Unicode WS, only a JS one - || (x >= '\u0009' && x <= '\u000D') // 9 A B C D - - // + whitespace characters from unicode, category Zs - || x === '\u1680' - || x === '\u180E' - || (x >= '\u2000' && x <= '\u200A') // 0 1 2 3 4 5 6 7 8 9 A - || x === '\u2028' - || x === '\u2029' - || x === '\u202F' - || x === '\u205F' - || x === '\u3000' -} - -module.exports.isWhiteSpaceJSON = function isWhiteSpaceJSON(x) { - return x === '\u0020' - || x === '\u0009' - || x === '\u000A' - || x === '\u000D' -} - -module.exports.isLineTerminator = function isLineTerminator(x) { - // ok, here is the part when JSON is wrong - // section 7.3, table 3 - return x === '\u000A' - || x === '\u000D' - || x === '\u2028' - || x === '\u2029' -} - -module.exports.isLineTerminatorJSON = function isLineTerminatorJSON(x) { - return x === '\u000A' - || x === '\u000D' -} - -module.exports.isIdentifierStart = function isIdentifierStart(x) { - return x === '$' - || x === '_' - || (x >= 'A' && x <= 'Z') - || (x >= 'a' && x <= 'z') - || (x >= '\u0080' && Uni.NonAsciiIdentifierStart.test(x)) -} - -module.exports.isIdentifierPart = function isIdentifierPart(x) { - return x === '$' - || x === '_' - || (x >= 'A' && x <= 'Z') - || (x >= 'a' && x <= 'z') - || (x >= '0' && x <= '9') // <-- addition to Start - || (x >= '\u0080' && Uni.NonAsciiIdentifierPart.test(x)) -} - -module.exports.NonAsciiIdentifierStart = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/ - -// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierPart: - -module.exports.NonAsciiIdentifierPart = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/ diff --git a/node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/lib/utils.js b/node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/lib/utils.js deleted file mode 100644 index a8476b6..0000000 --- a/node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/lib/utils.js +++ /dev/null @@ -1,46 +0,0 @@ -var FS = require('fs') -var jju = require('../') - -// this function registers json5 extension, so you -// can do `require("./config.json5")` kind of thing -module.exports.register = function() { - var r = require, e = 'extensions' - r[e]['.json5'] = function(m, f) { - /*eslint no-sync:0*/ - m.exports = jju.parse(FS.readFileSync(f, 'utf8')) - } -} - -// this function monkey-patches JSON.parse, so it -// will return an exact position of error in case -// of parse failure -module.exports.patch_JSON_parse = function() { - var _parse = JSON.parse - JSON.parse = function(text, rev) { - try { - return _parse(text, rev) - } catch(err) { - // this call should always throw - require('jju').parse(text, { - mode: 'json', - legacy: true, - reviver: rev, - reserved_keys: 'replace', - null_prototype: false, - }) - - // if it didn't throw, but original parser did, - // this is an error in this library and should be reported - throw err - } - } -} - -// this function is an express/connect middleware -// that accepts uploads in application/json5 format -module.exports.middleware = function() { - return function(req, res, next) { - throw Error('this function is removed, use express-json5 instead') - } -} - diff --git a/node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/package.json b/node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/package.json deleted file mode 100644 index 1edba5e..0000000 --- a/node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "jju", - "version": "1.3.0", - "description": "a set of utilities to work with JSON / JSON5 documents", - "author": { - "name": "Alex Kocharin", - "email": "alex@kocharin.ru" - }, - "repository": { - "type": "git", - "url": "git://github.com/rlidwka/jju.git" - }, - "bugs": { - "url": "https://github.com/rlidwka/jju/issues" - }, - "homepage": "http://rlidwka.github.io/jju/", - "devDependencies": { - "mocha": ">=1.21.0", - "js-yaml": ">=3.1.0", - "eslint": "~0.4.2" - }, - "scripts": { - "test": "mocha test/*.js", - "lint": "eslint -c ./.eslint.yaml ./lib" - }, - "keywords": [ - "json", - "json5", - "parser", - "serializer", - "data" - ], - "publishConfig": { - "registry": "https://registry.npmjs.org/" - }, - "license": { - "type": "WTFPL", - "url": "http://www.wtfpl.net/txt/copying/" - }, - "gitHead": "6a1248fc29abb3f418fa143e31ee548cd5a2477c", - "_id": "jju@1.3.0", - "_shasum": "dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa", - "_from": "jju@>=1.1.0 <2.0.0", - "_npmVersion": "2.0.1", - "_nodeVersion": "2.2.1", - "_npmUser": { - "name": "rlidwka", - "email": "alex@kocharin.ru" - }, - "maintainers": [ - { - "name": "rlidwka", - "email": "alex@kocharin.ru" - } - ], - "dist": { - "shasum": "dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa", - "tarball": "https://registry.npmjs.org/jju/-/jju-1.3.0.tgz" - }, - "_npmOperationalInternal": { - "host": "packages-6-west.internal.npmjs.com", - "tmp": "tmp/jju-1.3.0.tgz_1455989902144_0.8787874563131481" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/jju/-/jju-1.3.0.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/package.yaml b/node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/package.yaml deleted file mode 100644 index fdbb537..0000000 --- a/node_modules/lowdb/node_modules/json-parse-helpfulerror/node_modules/jju/package.yaml +++ /dev/null @@ -1,46 +0,0 @@ -# use "yapm install ." if you're installing this from git repository - -# "jju" stands for "json/json5 utils" -name: jju - -version: 1.3.0 -description: a set of utilities to work with JSON / JSON5 documents - -author: - name: Alex Kocharin - email: alex@kocharin.ru - -repository: - type: git - url: git://github.com/rlidwka/jju - -bugs: - url: https://github.com/rlidwka/jju/issues - -homepage: http://rlidwka.github.io/jju/ - -devDependencies: - mocha: '>=1.21.0' - js-yaml: '>=3.1.0' - - # linting tools - eslint: '~0.4.2' - -scripts: - test: 'mocha test/*.js' - lint: 'eslint -c ./.eslint.yaml ./lib' - -keywords: - - json - - json5 - - parser - - serializer - - data - -publishConfig: - registry: https://registry.npmjs.org/ - -license: - type: WTFPL - url: http://www.wtfpl.net/txt/copying/ - diff --git a/node_modules/lowdb/node_modules/json-parse-helpfulerror/package.json b/node_modules/lowdb/node_modules/json-parse-helpfulerror/package.json deleted file mode 100644 index aac9453..0000000 --- a/node_modules/lowdb/node_modules/json-parse-helpfulerror/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "json-parse-helpfulerror", - "version": "1.0.3", - "description": "A drop-in replacement for JSON.parse that uses `jju` to give helpful errors", - "main": "index.js", - "scripts": { - "test": "lab -c", - "lint": "jslint --edition=latest --terse *.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/smikes/json-parse-helpfulerror.git" - }, - "keywords": [ - "json", - "parse", - "line", - "doublequote", - "error" - ], - "author": { - "name": "Sam Mikes", - "email": "smikes@cubane.com" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/smikes/json-parse-helpfulerror/issues" - }, - "homepage": "https://github.com/smikes/json-parse-helpfulerror", - "devDependencies": { - "code": "^1.2.1", - "jslint": "^0.7.1", - "lab": "^5.1.1" - }, - "dependencies": { - "jju": "^1.1.0" - }, - "gitHead": "eedb116ec96b5c479be3919b526d6de0a521be5e", - "_id": "json-parse-helpfulerror@1.0.3", - "_shasum": "13f14ce02eed4e981297b64eb9e3b932e2dd13dc", - "_from": "json-parse-helpfulerror@>=1.0.3 <2.0.0", - "_npmVersion": "2.1.16", - "_nodeVersion": "0.10.35", - "_npmUser": { - "name": "smikes", - "email": "smikes@cubane.com" - }, - "maintainers": [ - { - "name": "smikes", - "email": "smikes@cubane.com" - } - ], - "dist": { - "shasum": "13f14ce02eed4e981297b64eb9e3b932e2dd13dc", - "tarball": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/lowdb/node_modules/json-parse-helpfulerror/test/test.js b/node_modules/lowdb/node_modules/json-parse-helpfulerror/test/test.js deleted file mode 100644 index fca458a..0000000 --- a/node_modules/lowdb/node_modules/json-parse-helpfulerror/test/test.js +++ /dev/null @@ -1,32 +0,0 @@ -var Code = require('code'), - Lab = require('lab'), - lab = Lab.script(), - jph = require('..'); // 'json-parse-helpfulerror' - -exports.lab = lab; - -lab.test('can parse', function (done) { - var o = jph.parse('{"foo": "bar"}'); - - Code.expect(o.foo).to.equal('bar'); - done(); -}); - -lab.test('helpful error for bad JSON', function (done) { - - var bad = "{'foo': 'bar'}"; - - Code.expect(function () { JSON.parse(bad) }).to.throw(); - - Code.expect(function () { jph.parse(bad) }).to.throw(SyntaxError, "Unexpected token '\\'' at 1:2\n" + bad + '\n ^'); - - done(); -}); - -lab.test('fails if reviver throws', function (done) { - function badReviver() { throw new ReferenceError('silly'); } - - Code.expect(function () { jph.parse('3', badReviver) }).to.throw(ReferenceError, 'silly'); - - done(); -}); \ No newline at end of file diff --git a/node_modules/lowdb/node_modules/json-parse-helpfulerror/test/test.js~ b/node_modules/lowdb/node_modules/json-parse-helpfulerror/test/test.js~ deleted file mode 100644 index 5a11546..0000000 --- a/node_modules/lowdb/node_modules/json-parse-helpfulerror/test/test.js~ +++ /dev/null @@ -1,11 +0,0 @@ -var Code = require('code'), - Lab = require('lab'), - lab = lab.script; - -exports.lab = lab; - -lab.test('tests run and work', function (done) { - Code.expect(1+1).to.equal(2); - - done(); -}); diff --git a/node_modules/lowdb/node_modules/lodash/LICENSE b/node_modules/lowdb/node_modules/lodash/LICENSE deleted file mode 100644 index e0c69d5..0000000 --- a/node_modules/lowdb/node_modules/lodash/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. diff --git a/node_modules/lowdb/node_modules/lodash/README.md b/node_modules/lowdb/node_modules/lodash/README.md deleted file mode 100644 index 59cc860..0000000 --- a/node_modules/lowdb/node_modules/lodash/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# lodash v4.13.1 - -The [Lodash](https://lodash.com/) library exported as [Node.js](https://nodejs.org/) modules. - -## Installation - -Using npm: -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash -``` - -In Node.js: -```js -// Load the full build. -var _ = require('lodash'); -// Load the core build. -var _ = require('lodash/core'); -// Load the fp build for immutable auto-curried iteratee-first data-last methods. -var fp = require('lodash/fp'); - -// Load a method category. -var array = require('lodash/array'); -var object = require('lodash/fp/object'); - -// Load a single method for smaller builds with browserify/rollup/webpack. -var chunk = require('lodash/chunk'); -var extend = require('lodash/fp/extend'); -``` - -See the [package source](https://github.com/lodash/lodash/tree/4.13.1-npm) for more details. - -**Note:**
-Don’t assign values to the [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` in the Node.js < 6 REPL.
-Install [n_](https://www.npmjs.com/package/n_) for a REPL that includes `lodash` by default. - -## Support - -Tested in Chrome 49-50, Firefox 45-46, IE 9-11, Edge 13, Safari 8-9, Node.js 0.10-6, & PhantomJS 1.9.8.
-Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. diff --git a/node_modules/lowdb/node_modules/lodash/_DataView.js b/node_modules/lowdb/node_modules/lodash/_DataView.js deleted file mode 100644 index ac2d57c..0000000 --- a/node_modules/lowdb/node_modules/lodash/_DataView.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var DataView = getNative(root, 'DataView'); - -module.exports = DataView; diff --git a/node_modules/lowdb/node_modules/lodash/_Hash.js b/node_modules/lowdb/node_modules/lodash/_Hash.js deleted file mode 100644 index 667d5ab..0000000 --- a/node_modules/lowdb/node_modules/lodash/_Hash.js +++ /dev/null @@ -1,32 +0,0 @@ -var hashClear = require('./_hashClear'), - hashDelete = require('./_hashDelete'), - hashGet = require('./_hashGet'), - hashHas = require('./_hashHas'), - hashSet = require('./_hashSet'); - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -module.exports = Hash; diff --git a/node_modules/lowdb/node_modules/lodash/_LazyWrapper.js b/node_modules/lowdb/node_modules/lodash/_LazyWrapper.js deleted file mode 100644 index 81786c7..0000000 --- a/node_modules/lowdb/node_modules/lodash/_LazyWrapper.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseCreate = require('./_baseCreate'), - baseLodash = require('./_baseLodash'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295; - -/** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ -function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; -} - -// Ensure `LazyWrapper` is an instance of `baseLodash`. -LazyWrapper.prototype = baseCreate(baseLodash.prototype); -LazyWrapper.prototype.constructor = LazyWrapper; - -module.exports = LazyWrapper; diff --git a/node_modules/lowdb/node_modules/lodash/_ListCache.js b/node_modules/lowdb/node_modules/lodash/_ListCache.js deleted file mode 100644 index 73f4645..0000000 --- a/node_modules/lowdb/node_modules/lodash/_ListCache.js +++ /dev/null @@ -1,32 +0,0 @@ -var listCacheClear = require('./_listCacheClear'), - listCacheDelete = require('./_listCacheDelete'), - listCacheGet = require('./_listCacheGet'), - listCacheHas = require('./_listCacheHas'), - listCacheSet = require('./_listCacheSet'); - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; - -module.exports = ListCache; diff --git a/node_modules/lowdb/node_modules/lodash/_LodashWrapper.js b/node_modules/lowdb/node_modules/lodash/_LodashWrapper.js deleted file mode 100644 index c1e4d9d..0000000 --- a/node_modules/lowdb/node_modules/lodash/_LodashWrapper.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseCreate = require('./_baseCreate'), - baseLodash = require('./_baseLodash'); - -/** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ -function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; -} - -LodashWrapper.prototype = baseCreate(baseLodash.prototype); -LodashWrapper.prototype.constructor = LodashWrapper; - -module.exports = LodashWrapper; diff --git a/node_modules/lowdb/node_modules/lodash/_Map.js b/node_modules/lowdb/node_modules/lodash/_Map.js deleted file mode 100644 index b73f29a..0000000 --- a/node_modules/lowdb/node_modules/lodash/_Map.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Map = getNative(root, 'Map'); - -module.exports = Map; diff --git a/node_modules/lowdb/node_modules/lodash/_MapCache.js b/node_modules/lowdb/node_modules/lodash/_MapCache.js deleted file mode 100644 index 69f03a4..0000000 --- a/node_modules/lowdb/node_modules/lodash/_MapCache.js +++ /dev/null @@ -1,32 +0,0 @@ -var mapCacheClear = require('./_mapCacheClear'), - mapCacheDelete = require('./_mapCacheDelete'), - mapCacheGet = require('./_mapCacheGet'), - mapCacheHas = require('./_mapCacheHas'), - mapCacheSet = require('./_mapCacheSet'); - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; - -module.exports = MapCache; diff --git a/node_modules/lowdb/node_modules/lodash/_Promise.js b/node_modules/lowdb/node_modules/lodash/_Promise.js deleted file mode 100644 index 247b9e1..0000000 --- a/node_modules/lowdb/node_modules/lodash/_Promise.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Promise = getNative(root, 'Promise'); - -module.exports = Promise; diff --git a/node_modules/lowdb/node_modules/lodash/_Reflect.js b/node_modules/lowdb/node_modules/lodash/_Reflect.js deleted file mode 100644 index 1de7475..0000000 --- a/node_modules/lowdb/node_modules/lodash/_Reflect.js +++ /dev/null @@ -1,6 +0,0 @@ -var root = require('./_root'); - -/** Built-in value references. */ -var Reflect = root.Reflect; - -module.exports = Reflect; diff --git a/node_modules/lowdb/node_modules/lodash/_Set.js b/node_modules/lowdb/node_modules/lodash/_Set.js deleted file mode 100644 index b3c8dcb..0000000 --- a/node_modules/lowdb/node_modules/lodash/_Set.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Set = getNative(root, 'Set'); - -module.exports = Set; diff --git a/node_modules/lowdb/node_modules/lodash/_SetCache.js b/node_modules/lowdb/node_modules/lodash/_SetCache.js deleted file mode 100644 index a80efd5..0000000 --- a/node_modules/lowdb/node_modules/lodash/_SetCache.js +++ /dev/null @@ -1,27 +0,0 @@ -var MapCache = require('./_MapCache'), - setCacheAdd = require('./_setCacheAdd'), - setCacheHas = require('./_setCacheHas'); - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values ? values.length : 0; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; -SetCache.prototype.has = setCacheHas; - -module.exports = SetCache; diff --git a/node_modules/lowdb/node_modules/lodash/_Stack.js b/node_modules/lowdb/node_modules/lodash/_Stack.js deleted file mode 100644 index b9ba1af..0000000 --- a/node_modules/lowdb/node_modules/lodash/_Stack.js +++ /dev/null @@ -1,26 +0,0 @@ -var ListCache = require('./_ListCache'), - stackClear = require('./_stackClear'), - stackDelete = require('./_stackDelete'), - stackGet = require('./_stackGet'), - stackHas = require('./_stackHas'), - stackSet = require('./_stackSet'); - -/** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Stack(entries) { - this.__data__ = new ListCache(entries); -} - -// Add methods to `Stack`. -Stack.prototype.clear = stackClear; -Stack.prototype['delete'] = stackDelete; -Stack.prototype.get = stackGet; -Stack.prototype.has = stackHas; -Stack.prototype.set = stackSet; - -module.exports = Stack; diff --git a/node_modules/lowdb/node_modules/lodash/_Symbol.js b/node_modules/lowdb/node_modules/lodash/_Symbol.js deleted file mode 100644 index a013f7c..0000000 --- a/node_modules/lowdb/node_modules/lodash/_Symbol.js +++ /dev/null @@ -1,6 +0,0 @@ -var root = require('./_root'); - -/** Built-in value references. */ -var Symbol = root.Symbol; - -module.exports = Symbol; diff --git a/node_modules/lowdb/node_modules/lodash/_Uint8Array.js b/node_modules/lowdb/node_modules/lodash/_Uint8Array.js deleted file mode 100644 index 2fb30e1..0000000 --- a/node_modules/lowdb/node_modules/lodash/_Uint8Array.js +++ /dev/null @@ -1,6 +0,0 @@ -var root = require('./_root'); - -/** Built-in value references. */ -var Uint8Array = root.Uint8Array; - -module.exports = Uint8Array; diff --git a/node_modules/lowdb/node_modules/lodash/_WeakMap.js b/node_modules/lowdb/node_modules/lodash/_WeakMap.js deleted file mode 100644 index 567f86c..0000000 --- a/node_modules/lowdb/node_modules/lodash/_WeakMap.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var WeakMap = getNative(root, 'WeakMap'); - -module.exports = WeakMap; diff --git a/node_modules/lowdb/node_modules/lodash/_addMapEntry.js b/node_modules/lowdb/node_modules/lodash/_addMapEntry.js deleted file mode 100644 index 0112ef7..0000000 --- a/node_modules/lowdb/node_modules/lodash/_addMapEntry.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Adds the key-value `pair` to `map`. - * - * @private - * @param {Object} map The map to modify. - * @param {Array} pair The key-value pair to add. - * @returns {Object} Returns `map`. - */ -function addMapEntry(map, pair) { - // Don't return `Map#set` because it doesn't return the map instance in IE 11. - map.set(pair[0], pair[1]); - return map; -} - -module.exports = addMapEntry; diff --git a/node_modules/lowdb/node_modules/lodash/_addSetEntry.js b/node_modules/lowdb/node_modules/lodash/_addSetEntry.js deleted file mode 100644 index 7b75c13..0000000 --- a/node_modules/lowdb/node_modules/lodash/_addSetEntry.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Adds `value` to `set`. - * - * @private - * @param {Object} set The set to modify. - * @param {*} value The value to add. - * @returns {Object} Returns `set`. - */ -function addSetEntry(set, value) { - set.add(value); - return set; -} - -module.exports = addSetEntry; diff --git a/node_modules/lowdb/node_modules/lodash/_apply.js b/node_modules/lowdb/node_modules/lodash/_apply.js deleted file mode 100644 index d000f04..0000000 --- a/node_modules/lowdb/node_modules/lodash/_apply.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - var length = args.length; - switch (length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -module.exports = apply; diff --git a/node_modules/lowdb/node_modules/lodash/_arrayAggregator.js b/node_modules/lowdb/node_modules/lodash/_arrayAggregator.js deleted file mode 100644 index 7ca498a..0000000 --- a/node_modules/lowdb/node_modules/lodash/_arrayAggregator.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ -function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; -} - -module.exports = arrayAggregator; diff --git a/node_modules/lowdb/node_modules/lodash/_arrayEach.js b/node_modules/lowdb/node_modules/lodash/_arrayEach.js deleted file mode 100644 index 5f770bc..0000000 --- a/node_modules/lowdb/node_modules/lodash/_arrayEach.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -module.exports = arrayEach; diff --git a/node_modules/lowdb/node_modules/lodash/_arrayEachRight.js b/node_modules/lowdb/node_modules/lodash/_arrayEachRight.js deleted file mode 100644 index 72e780c..0000000 --- a/node_modules/lowdb/node_modules/lodash/_arrayEachRight.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEachRight(array, iteratee) { - var length = array ? array.length : 0; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; -} - -module.exports = arrayEachRight; diff --git a/node_modules/lowdb/node_modules/lodash/_arrayEvery.js b/node_modules/lowdb/node_modules/lodash/_arrayEvery.js deleted file mode 100644 index f4fb425..0000000 --- a/node_modules/lowdb/node_modules/lodash/_arrayEvery.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ -function arrayEvery(array, predicate) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; -} - -module.exports = arrayEvery; diff --git a/node_modules/lowdb/node_modules/lodash/_arrayFilter.js b/node_modules/lowdb/node_modules/lodash/_arrayFilter.js deleted file mode 100644 index b904fda..0000000 --- a/node_modules/lowdb/node_modules/lodash/_arrayFilter.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -module.exports = arrayFilter; diff --git a/node_modules/lowdb/node_modules/lodash/_arrayIncludes.js b/node_modules/lowdb/node_modules/lodash/_arrayIncludes.js deleted file mode 100644 index cf9c1f0..0000000 --- a/node_modules/lowdb/node_modules/lodash/_arrayIncludes.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'); - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to search. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array ? array.length : 0; - return !!length && baseIndexOf(array, value, 0) > -1; -} - -module.exports = arrayIncludes; diff --git a/node_modules/lowdb/node_modules/lodash/_arrayIncludesWith.js b/node_modules/lowdb/node_modules/lodash/_arrayIncludesWith.js deleted file mode 100644 index d08356a..0000000 --- a/node_modules/lowdb/node_modules/lodash/_arrayIncludesWith.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to search. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -module.exports = arrayIncludesWith; diff --git a/node_modules/lowdb/node_modules/lodash/_arrayMap.js b/node_modules/lowdb/node_modules/lodash/_arrayMap.js deleted file mode 100644 index 748bdbe..0000000 --- a/node_modules/lowdb/node_modules/lodash/_arrayMap.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array ? array.length : 0, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -module.exports = arrayMap; diff --git a/node_modules/lowdb/node_modules/lodash/_arrayPush.js b/node_modules/lowdb/node_modules/lodash/_arrayPush.js deleted file mode 100644 index 7d742b3..0000000 --- a/node_modules/lowdb/node_modules/lodash/_arrayPush.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -module.exports = arrayPush; diff --git a/node_modules/lowdb/node_modules/lodash/_arrayReduce.js b/node_modules/lowdb/node_modules/lodash/_arrayReduce.js deleted file mode 100644 index 57c8727..0000000 --- a/node_modules/lowdb/node_modules/lodash/_arrayReduce.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array ? array.length : 0; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -module.exports = arrayReduce; diff --git a/node_modules/lowdb/node_modules/lodash/_arrayReduceRight.js b/node_modules/lowdb/node_modules/lodash/_arrayReduceRight.js deleted file mode 100644 index 4c85ee6..0000000 --- a/node_modules/lowdb/node_modules/lodash/_arrayReduceRight.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array ? array.length : 0; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; -} - -module.exports = arrayReduceRight; diff --git a/node_modules/lowdb/node_modules/lodash/_arraySome.js b/node_modules/lowdb/node_modules/lodash/_arraySome.js deleted file mode 100644 index 9b6e5d1..0000000 --- a/node_modules/lowdb/node_modules/lodash/_arraySome.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -module.exports = arraySome; diff --git a/node_modules/lowdb/node_modules/lodash/_assignInDefaults.js b/node_modules/lowdb/node_modules/lodash/_assignInDefaults.js deleted file mode 100644 index ea6b0e3..0000000 --- a/node_modules/lowdb/node_modules/lodash/_assignInDefaults.js +++ /dev/null @@ -1,27 +0,0 @@ -var eq = require('./eq'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used by `_.defaults` to customize its `_.assignIn` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ -function assignInDefaults(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; -} - -module.exports = assignInDefaults; diff --git a/node_modules/lowdb/node_modules/lodash/_assignMergeValue.js b/node_modules/lowdb/node_modules/lodash/_assignMergeValue.js deleted file mode 100644 index 61dd583..0000000 --- a/node_modules/lowdb/node_modules/lodash/_assignMergeValue.js +++ /dev/null @@ -1,19 +0,0 @@ -var eq = require('./eq'); - -/** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (typeof key == 'number' && value === undefined && !(key in object))) { - object[key] = value; - } -} - -module.exports = assignMergeValue; diff --git a/node_modules/lowdb/node_modules/lodash/_assignValue.js b/node_modules/lowdb/node_modules/lodash/_assignValue.js deleted file mode 100644 index 35d49f0..0000000 --- a/node_modules/lowdb/node_modules/lodash/_assignValue.js +++ /dev/null @@ -1,27 +0,0 @@ -var eq = require('./eq'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - object[key] = value; - } -} - -module.exports = assignValue; diff --git a/node_modules/lowdb/node_modules/lodash/_assocIndexOf.js b/node_modules/lowdb/node_modules/lodash/_assocIndexOf.js deleted file mode 100644 index 8f2c41f..0000000 --- a/node_modules/lowdb/node_modules/lodash/_assocIndexOf.js +++ /dev/null @@ -1,21 +0,0 @@ -var eq = require('./eq'); - -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to search. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; -} - -module.exports = assocIndexOf; diff --git a/node_modules/lowdb/node_modules/lodash/_baseAggregator.js b/node_modules/lowdb/node_modules/lodash/_baseAggregator.js deleted file mode 100644 index 4bc9e91..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseAggregator.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ -function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; -} - -module.exports = baseAggregator; diff --git a/node_modules/lowdb/node_modules/lodash/_baseAssign.js b/node_modules/lowdb/node_modules/lodash/_baseAssign.js deleted file mode 100644 index e5c4a1a..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseAssign.js +++ /dev/null @@ -1,17 +0,0 @@ -var copyObject = require('./_copyObject'), - keys = require('./keys'); - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); -} - -module.exports = baseAssign; diff --git a/node_modules/lowdb/node_modules/lodash/_baseAt.js b/node_modules/lowdb/node_modules/lodash/_baseAt.js deleted file mode 100644 index ed67d9b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseAt.js +++ /dev/null @@ -1,23 +0,0 @@ -var get = require('./get'); - -/** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths of elements to pick. - * @returns {Array} Returns the picked elements. - */ -function baseAt(object, paths) { - var index = -1, - isNil = object == null, - length = paths.length, - result = Array(length); - - while (++index < length) { - result[index] = isNil ? undefined : get(object, paths[index]); - } - return result; -} - -module.exports = baseAt; diff --git a/node_modules/lowdb/node_modules/lodash/_baseClamp.js b/node_modules/lowdb/node_modules/lodash/_baseClamp.js deleted file mode 100644 index ceadeef..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseClamp.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * The base implementation of `_.clamp` which doesn't coerce arguments to numbers. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ -function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; -} - -module.exports = baseClamp; diff --git a/node_modules/lowdb/node_modules/lodash/_baseClone.js b/node_modules/lowdb/node_modules/lodash/_baseClone.js deleted file mode 100644 index b1079ed..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseClone.js +++ /dev/null @@ -1,139 +0,0 @@ -var Stack = require('./_Stack'), - arrayEach = require('./_arrayEach'), - assignValue = require('./_assignValue'), - baseAssign = require('./_baseAssign'), - cloneBuffer = require('./_cloneBuffer'), - copyArray = require('./_copyArray'), - copySymbols = require('./_copySymbols'), - getAllKeys = require('./_getAllKeys'), - getTag = require('./_getTag'), - initCloneArray = require('./_initCloneArray'), - initCloneByTag = require('./_initCloneByTag'), - initCloneObject = require('./_initCloneObject'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isHostObject = require('./_isHostObject'), - isObject = require('./isObject'), - keys = require('./keys'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = -cloneableTags[boolTag] = cloneableTags[dateTag] = -cloneableTags[float32Tag] = cloneableTags[float64Tag] = -cloneableTags[int8Tag] = cloneableTags[int16Tag] = -cloneableTags[int32Tag] = cloneableTags[mapTag] = -cloneableTags[numberTag] = cloneableTags[objectTag] = -cloneableTags[regexpTag] = cloneableTags[setTag] = -cloneableTags[stringTag] = cloneableTags[symbolTag] = -cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = -cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @param {boolean} [isFull] Specify a clone including symbols. - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, isDeep, isFull, customizer, key, object, stack) { - var result; - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - if (isHostObject(value)) { - return object ? value : {}; - } - result = initCloneObject(isFunc ? {} : value); - if (!isDeep) { - return copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, baseClone, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (!isArr) { - var props = isFull ? getAllKeys(value) : keys(value); - } - // Recursively populate clone (susceptible to call stack limits). - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); - }); - return result; -} - -module.exports = baseClone; diff --git a/node_modules/lowdb/node_modules/lodash/_baseConforms.js b/node_modules/lowdb/node_modules/lodash/_baseConforms.js deleted file mode 100644 index 396727c..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseConforms.js +++ /dev/null @@ -1,33 +0,0 @@ -var keys = require('./keys'); - -/** - * The base implementation of `_.conforms` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - */ -function baseConforms(source) { - var props = keys(source), - length = props.length; - - return function(object) { - if (object == null) { - return !length; - } - var index = length; - while (index--) { - var key = props[index], - predicate = source[key], - value = object[key]; - - if ((value === undefined && - !(key in Object(object))) || !predicate(value)) { - return false; - } - } - return true; - }; -} - -module.exports = baseConforms; diff --git a/node_modules/lowdb/node_modules/lodash/_baseCreate.js b/node_modules/lowdb/node_modules/lodash/_baseCreate.js deleted file mode 100644 index 4372cad..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseCreate.js +++ /dev/null @@ -1,18 +0,0 @@ -var isObject = require('./isObject'); - -/** Built-in value references. */ -var objectCreate = Object.create; - -/** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} prototype The object to inherit from. - * @returns {Object} Returns the new object. - */ -function baseCreate(proto) { - return isObject(proto) ? objectCreate(proto) : {}; -} - -module.exports = baseCreate; diff --git a/node_modules/lowdb/node_modules/lodash/_baseDelay.js b/node_modules/lowdb/node_modules/lodash/_baseDelay.js deleted file mode 100644 index c397562..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseDelay.js +++ /dev/null @@ -1,21 +0,0 @@ -/** Used as the `TypeError` message for "Functions" methods. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * The base implementation of `_.delay` and `_.defer` which accepts an array - * of `func` arguments. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Object} args The arguments to provide to `func`. - * @returns {number} Returns the timer id. - */ -function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); -} - -module.exports = baseDelay; diff --git a/node_modules/lowdb/node_modules/lodash/_baseDifference.js b/node_modules/lowdb/node_modules/lodash/_baseDifference.js deleted file mode 100644 index dcccad3..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseDifference.js +++ /dev/null @@ -1,67 +0,0 @@ -var SetCache = require('./_SetCache'), - arrayIncludes = require('./_arrayIncludes'), - arrayIncludesWith = require('./_arrayIncludesWith'), - arrayMap = require('./_arrayMap'), - baseUnary = require('./_baseUnary'), - cacheHas = require('./_cacheHas'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ -function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; -} - -module.exports = baseDifference; diff --git a/node_modules/lowdb/node_modules/lodash/_baseEach.js b/node_modules/lowdb/node_modules/lodash/_baseEach.js deleted file mode 100644 index 512c067..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseEach.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseForOwn = require('./_baseForOwn'), - createBaseEach = require('./_createBaseEach'); - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = createBaseEach(baseForOwn); - -module.exports = baseEach; diff --git a/node_modules/lowdb/node_modules/lodash/_baseEachRight.js b/node_modules/lowdb/node_modules/lodash/_baseEachRight.js deleted file mode 100644 index 0a8feec..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseEachRight.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseForOwnRight = require('./_baseForOwnRight'), - createBaseEach = require('./_createBaseEach'); - -/** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEachRight = createBaseEach(baseForOwnRight, true); - -module.exports = baseEachRight; diff --git a/node_modules/lowdb/node_modules/lodash/_baseEvery.js b/node_modules/lowdb/node_modules/lodash/_baseEvery.js deleted file mode 100644 index fa52f7b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseEvery.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ -function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; -} - -module.exports = baseEvery; diff --git a/node_modules/lowdb/node_modules/lodash/_baseExtremum.js b/node_modules/lowdb/node_modules/lodash/_baseExtremum.js deleted file mode 100644 index 9d6aa77..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseExtremum.js +++ /dev/null @@ -1,32 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ -function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !isSymbol(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; -} - -module.exports = baseExtremum; diff --git a/node_modules/lowdb/node_modules/lodash/_baseFill.js b/node_modules/lowdb/node_modules/lodash/_baseFill.js deleted file mode 100644 index 46ef9c7..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseFill.js +++ /dev/null @@ -1,32 +0,0 @@ -var toInteger = require('./toInteger'), - toLength = require('./toLength'); - -/** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ -function baseFill(array, value, start, end) { - var length = array.length; - - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; -} - -module.exports = baseFill; diff --git a/node_modules/lowdb/node_modules/lodash/_baseFilter.js b/node_modules/lowdb/node_modules/lodash/_baseFilter.js deleted file mode 100644 index 4678477..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseFilter.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; -} - -module.exports = baseFilter; diff --git a/node_modules/lowdb/node_modules/lodash/_baseFindIndex.js b/node_modules/lowdb/node_modules/lodash/_baseFindIndex.js deleted file mode 100644 index bfd8259..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseFindIndex.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to search. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -module.exports = baseFindIndex; diff --git a/node_modules/lowdb/node_modules/lodash/_baseFindKey.js b/node_modules/lowdb/node_modules/lodash/_baseFindKey.js deleted file mode 100644 index afbad85..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseFindKey.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to search. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ -function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = key; - return false; - } - }); - return result; -} - -module.exports = baseFindKey; diff --git a/node_modules/lowdb/node_modules/lodash/_baseFlatten.js b/node_modules/lowdb/node_modules/lodash/_baseFlatten.js deleted file mode 100644 index 4b1e009..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseFlatten.js +++ /dev/null @@ -1,38 +0,0 @@ -var arrayPush = require('./_arrayPush'), - isFlattenable = require('./_isFlattenable'); - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -module.exports = baseFlatten; diff --git a/node_modules/lowdb/node_modules/lodash/_baseFor.js b/node_modules/lowdb/node_modules/lodash/_baseFor.js deleted file mode 100644 index d946590..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseFor.js +++ /dev/null @@ -1,16 +0,0 @@ -var createBaseFor = require('./_createBaseFor'); - -/** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseFor = createBaseFor(); - -module.exports = baseFor; diff --git a/node_modules/lowdb/node_modules/lodash/_baseForOwn.js b/node_modules/lowdb/node_modules/lodash/_baseForOwn.js deleted file mode 100644 index 503d523..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseForOwn.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseFor = require('./_baseFor'), - keys = require('./keys'); - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); -} - -module.exports = baseForOwn; diff --git a/node_modules/lowdb/node_modules/lodash/_baseForOwnRight.js b/node_modules/lowdb/node_modules/lodash/_baseForOwnRight.js deleted file mode 100644 index a4b10e6..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseForOwnRight.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseForRight = require('./_baseForRight'), - keys = require('./keys'); - -/** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); -} - -module.exports = baseForOwnRight; diff --git a/node_modules/lowdb/node_modules/lodash/_baseForRight.js b/node_modules/lowdb/node_modules/lodash/_baseForRight.js deleted file mode 100644 index 32842cd..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseForRight.js +++ /dev/null @@ -1,15 +0,0 @@ -var createBaseFor = require('./_createBaseFor'); - -/** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseForRight = createBaseFor(true); - -module.exports = baseForRight; diff --git a/node_modules/lowdb/node_modules/lodash/_baseFunctions.js b/node_modules/lowdb/node_modules/lodash/_baseFunctions.js deleted file mode 100644 index d23bc9b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseFunctions.js +++ /dev/null @@ -1,19 +0,0 @@ -var arrayFilter = require('./_arrayFilter'), - isFunction = require('./isFunction'); - -/** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ -function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); -} - -module.exports = baseFunctions; diff --git a/node_modules/lowdb/node_modules/lodash/_baseGet.js b/node_modules/lowdb/node_modules/lodash/_baseGet.js deleted file mode 100644 index 886720b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseGet.js +++ /dev/null @@ -1,25 +0,0 @@ -var castPath = require('./_castPath'), - isKey = require('./_isKey'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -module.exports = baseGet; diff --git a/node_modules/lowdb/node_modules/lodash/_baseGetAllKeys.js b/node_modules/lowdb/node_modules/lodash/_baseGetAllKeys.js deleted file mode 100644 index 8ad204e..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseGetAllKeys.js +++ /dev/null @@ -1,20 +0,0 @@ -var arrayPush = require('./_arrayPush'), - isArray = require('./isArray'); - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); -} - -module.exports = baseGetAllKeys; diff --git a/node_modules/lowdb/node_modules/lodash/_baseGt.js b/node_modules/lowdb/node_modules/lodash/_baseGt.js deleted file mode 100644 index 813238b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseGt.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.gt` which doesn't coerce arguments to numbers. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ -function baseGt(value, other) { - return value > other; -} - -module.exports = baseGt; diff --git a/node_modules/lowdb/node_modules/lodash/_baseHas.js b/node_modules/lowdb/node_modules/lodash/_baseHas.js deleted file mode 100644 index 3d2e7bf..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseHas.js +++ /dev/null @@ -1,26 +0,0 @@ -var getPrototype = require('./_getPrototype'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`, - // that are composed entirely of index properties, return `false` for - // `hasOwnProperty` checks of them. - return object != null && - (hasOwnProperty.call(object, key) || - (typeof object == 'object' && key in object && getPrototype(object) === null)); -} - -module.exports = baseHas; diff --git a/node_modules/lowdb/node_modules/lodash/_baseHasIn.js b/node_modules/lowdb/node_modules/lodash/_baseHasIn.js deleted file mode 100644 index 2e0d042..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseHasIn.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -module.exports = baseHasIn; diff --git a/node_modules/lowdb/node_modules/lodash/_baseInRange.js b/node_modules/lowdb/node_modules/lodash/_baseInRange.js deleted file mode 100644 index 16d53f2..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseInRange.js +++ /dev/null @@ -1,18 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * The base implementation of `_.inRange` which doesn't coerce arguments to numbers. - * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ -function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); -} - -module.exports = baseInRange; diff --git a/node_modules/lowdb/node_modules/lodash/_baseIndexOf.js b/node_modules/lowdb/node_modules/lodash/_baseIndexOf.js deleted file mode 100644 index 6cda802..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseIndexOf.js +++ /dev/null @@ -1,27 +0,0 @@ -var indexOfNaN = require('./_indexOfNaN'); - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - if (value !== value) { - return indexOfNaN(array, fromIndex); - } - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -module.exports = baseIndexOf; diff --git a/node_modules/lowdb/node_modules/lodash/_baseIndexOfWith.js b/node_modules/lowdb/node_modules/lodash/_baseIndexOfWith.js deleted file mode 100644 index 8be568a..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseIndexOfWith.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; -} - -module.exports = baseIndexOfWith; diff --git a/node_modules/lowdb/node_modules/lodash/_baseIntersection.js b/node_modules/lowdb/node_modules/lodash/_baseIntersection.js deleted file mode 100644 index c1d250c..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseIntersection.js +++ /dev/null @@ -1,74 +0,0 @@ -var SetCache = require('./_SetCache'), - arrayIncludes = require('./_arrayIncludes'), - arrayIncludesWith = require('./_arrayIncludesWith'), - arrayMap = require('./_arrayMap'), - baseUnary = require('./_baseUnary'), - cacheHas = require('./_cacheHas'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ -function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; - - var index = -1, - seen = caches[0]; - - outer: - while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -module.exports = baseIntersection; diff --git a/node_modules/lowdb/node_modules/lodash/_baseInverter.js b/node_modules/lowdb/node_modules/lodash/_baseInverter.js deleted file mode 100644 index fbc337f..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseInverter.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseForOwn = require('./_baseForOwn'); - -/** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ -function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; -} - -module.exports = baseInverter; diff --git a/node_modules/lowdb/node_modules/lodash/_baseInvoke.js b/node_modules/lowdb/node_modules/lodash/_baseInvoke.js deleted file mode 100644 index 3d6bca5..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseInvoke.js +++ /dev/null @@ -1,28 +0,0 @@ -var apply = require('./_apply'), - castPath = require('./_castPath'), - isKey = require('./_isKey'), - last = require('./last'), - parent = require('./_parent'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ -function baseInvoke(object, path, args) { - if (!isKey(path, object)) { - path = castPath(path); - object = parent(object, path); - path = last(path); - } - var func = object == null ? object : object[toKey(path)]; - return func == null ? undefined : apply(func, object, args); -} - -module.exports = baseInvoke; diff --git a/node_modules/lowdb/node_modules/lodash/_baseIsEqual.js b/node_modules/lowdb/node_modules/lodash/_baseIsEqual.js deleted file mode 100644 index 3772dab..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseIsEqual.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseIsEqualDeep = require('./_baseIsEqualDeep'), - isObject = require('./isObject'), - isObjectLike = require('./isObjectLike'); - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @param {boolean} [bitmask] The bitmask of comparison flags. - * The bitmask may be composed of the following flags: - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, customizer, bitmask, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); -} - -module.exports = baseIsEqual; diff --git a/node_modules/lowdb/node_modules/lodash/_baseIsEqualDeep.js b/node_modules/lowdb/node_modules/lodash/_baseIsEqualDeep.js deleted file mode 100644 index c18d6d1..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseIsEqualDeep.js +++ /dev/null @@ -1,82 +0,0 @@ -var Stack = require('./_Stack'), - equalArrays = require('./_equalArrays'), - equalByTag = require('./_equalByTag'), - equalObjects = require('./_equalObjects'), - getTag = require('./_getTag'), - isArray = require('./isArray'), - isHostObject = require('./_isHostObject'), - isTypedArray = require('./isTypedArray'); - -/** Used to compose bitmasks for comparison styles. */ -var PARTIAL_COMPARE_FLAG = 2; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparisons. - * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = getTag(object); - objTag = objTag == argsTag ? objectTag : objTag; - } - if (!othIsArr) { - othTag = getTag(other); - othTag = othTag == argsTag ? objectTag : othTag; - } - var objIsObj = objTag == objectTag && !isHostObject(object), - othIsObj = othTag == objectTag && !isHostObject(other), - isSameTag = objTag == othTag; - - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) - : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); - } - if (!(bitmask & PARTIAL_COMPARE_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, equalFunc, customizer, bitmask, stack); -} - -module.exports = baseIsEqualDeep; diff --git a/node_modules/lowdb/node_modules/lodash/_baseIsMatch.js b/node_modules/lowdb/node_modules/lodash/_baseIsMatch.js deleted file mode 100644 index d36c878..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseIsMatch.js +++ /dev/null @@ -1,62 +0,0 @@ -var Stack = require('./_Stack'), - baseIsEqual = require('./_baseIsEqual'); - -/** Used to compose bitmasks for comparison styles. */ -var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) - : result - )) { - return false; - } - } - } - return true; -} - -module.exports = baseIsMatch; diff --git a/node_modules/lowdb/node_modules/lodash/_baseIsNative.js b/node_modules/lowdb/node_modules/lodash/_baseIsNative.js deleted file mode 100644 index 4d7dd07..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseIsNative.js +++ /dev/null @@ -1,47 +0,0 @@ -var isFunction = require('./isFunction'), - isHostObject = require('./_isHostObject'), - isMasked = require('./_isMasked'), - isObject = require('./isObject'), - toSource = require('./_toSource'); - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = Function.prototype.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -module.exports = baseIsNative; diff --git a/node_modules/lowdb/node_modules/lodash/_baseIteratee.js b/node_modules/lowdb/node_modules/lodash/_baseIteratee.js deleted file mode 100644 index 995c257..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseIteratee.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseMatches = require('./_baseMatches'), - baseMatchesProperty = require('./_baseMatchesProperty'), - identity = require('./identity'), - isArray = require('./isArray'), - property = require('./property'); - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); -} - -module.exports = baseIteratee; diff --git a/node_modules/lowdb/node_modules/lodash/_baseKeys.js b/node_modules/lowdb/node_modules/lodash/_baseKeys.js deleted file mode 100644 index 2c8ccb9..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseKeys.js +++ /dev/null @@ -1,16 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = Object.keys; - -/** - * The base implementation of `_.keys` which doesn't skip the constructor - * property of prototypes or treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - return nativeKeys(Object(object)); -} - -module.exports = baseKeys; diff --git a/node_modules/lowdb/node_modules/lodash/_baseKeysIn.js b/node_modules/lowdb/node_modules/lodash/_baseKeysIn.js deleted file mode 100644 index 7455fd8..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseKeysIn.js +++ /dev/null @@ -1,36 +0,0 @@ -var Reflect = require('./_Reflect'), - iteratorToArray = require('./_iteratorToArray'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Built-in value references. */ -var enumerate = Reflect ? Reflect.enumerate : undefined, - propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/** - * The base implementation of `_.keysIn` which doesn't skip the constructor - * property of prototypes or treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeysIn(object) { - object = object == null ? object : Object(object); - - var result = []; - for (var key in object) { - result.push(key); - } - return result; -} - -// Fallback for IE < 9 with es6-shim. -if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) { - baseKeysIn = function(object) { - return iteratorToArray(enumerate(object)); - }; -} - -module.exports = baseKeysIn; diff --git a/node_modules/lowdb/node_modules/lodash/_baseLodash.js b/node_modules/lowdb/node_modules/lodash/_baseLodash.js deleted file mode 100644 index f76c790..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseLodash.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ -function baseLodash() { - // No operation performed. -} - -module.exports = baseLodash; diff --git a/node_modules/lowdb/node_modules/lodash/_baseLt.js b/node_modules/lowdb/node_modules/lodash/_baseLt.js deleted file mode 100644 index aa05efa..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseLt.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.lt` which doesn't coerce arguments to numbers. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ -function baseLt(value, other) { - return value < other; -} - -module.exports = baseLt; diff --git a/node_modules/lowdb/node_modules/lodash/_baseMap.js b/node_modules/lowdb/node_modules/lodash/_baseMap.js deleted file mode 100644 index 0bf5cea..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseMap.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseEach = require('./_baseEach'), - isArrayLike = require('./isArrayLike'); - -/** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; -} - -module.exports = baseMap; diff --git a/node_modules/lowdb/node_modules/lodash/_baseMatches.js b/node_modules/lowdb/node_modules/lodash/_baseMatches.js deleted file mode 100644 index e56582a..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseMatches.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'), - matchesStrictComparable = require('./_matchesStrictComparable'); - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; -} - -module.exports = baseMatches; diff --git a/node_modules/lowdb/node_modules/lodash/_baseMatchesProperty.js b/node_modules/lowdb/node_modules/lodash/_baseMatchesProperty.js deleted file mode 100644 index 3968081..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseMatchesProperty.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseIsEqual = require('./_baseIsEqual'), - get = require('./get'), - hasIn = require('./hasIn'), - isKey = require('./_isKey'), - isStrictComparable = require('./_isStrictComparable'), - matchesStrictComparable = require('./_matchesStrictComparable'), - toKey = require('./_toKey'); - -/** Used to compose bitmasks for comparison styles. */ -var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); - }; -} - -module.exports = baseMatchesProperty; diff --git a/node_modules/lowdb/node_modules/lodash/_baseMean.js b/node_modules/lowdb/node_modules/lodash/_baseMean.js deleted file mode 100644 index ac99a42..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseMean.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseSum = require('./_baseSum'); - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ -function baseMean(array, iteratee) { - var length = array ? array.length : 0; - return length ? (baseSum(array, iteratee) / length) : NAN; -} - -module.exports = baseMean; diff --git a/node_modules/lowdb/node_modules/lodash/_baseMerge.js b/node_modules/lowdb/node_modules/lodash/_baseMerge.js deleted file mode 100644 index e18d3bf..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseMerge.js +++ /dev/null @@ -1,50 +0,0 @@ -var Stack = require('./_Stack'), - arrayEach = require('./_arrayEach'), - assignMergeValue = require('./_assignMergeValue'), - baseMergeDeep = require('./_baseMergeDeep'), - isArray = require('./isArray'), - isObject = require('./isObject'), - isTypedArray = require('./isTypedArray'), - keysIn = require('./keysIn'); - -/** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ -function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - if (!(isArray(source) || isTypedArray(source))) { - var props = keysIn(source); - } - arrayEach(props || source, function(srcValue, key) { - if (props) { - key = srcValue; - srcValue = source[key]; - } - if (isObject(srcValue)) { - stack || (stack = new Stack); - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(object[key], srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }); -} - -module.exports = baseMerge; diff --git a/node_modules/lowdb/node_modules/lodash/_baseMergeDeep.js b/node_modules/lowdb/node_modules/lodash/_baseMergeDeep.js deleted file mode 100644 index 062f004..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseMergeDeep.js +++ /dev/null @@ -1,83 +0,0 @@ -var assignMergeValue = require('./_assignMergeValue'), - baseClone = require('./_baseClone'), - copyArray = require('./_copyArray'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isArrayLikeObject = require('./isArrayLikeObject'), - isFunction = require('./isFunction'), - isObject = require('./isObject'), - isPlainObject = require('./isPlainObject'), - isTypedArray = require('./isTypedArray'), - toPlainObject = require('./toPlainObject'); - -/** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ -function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = object[key], - srcValue = source[key], - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - newValue = srcValue; - if (isArray(srcValue) || isTypedArray(srcValue)) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else { - isCommon = false; - newValue = baseClone(srcValue, true); - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { - isCommon = false; - newValue = baseClone(srcValue, true); - } - else { - newValue = objValue; - } - } - else { - isCommon = false; - } - } - stack.set(srcValue, newValue); - - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - } - stack['delete'](srcValue); - assignMergeValue(object, key, newValue); -} - -module.exports = baseMergeDeep; diff --git a/node_modules/lowdb/node_modules/lodash/_baseNth.js b/node_modules/lowdb/node_modules/lodash/_baseNth.js deleted file mode 100644 index 6978a65..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseNth.js +++ /dev/null @@ -1,20 +0,0 @@ -var isIndex = require('./_isIndex'); - -/** - * The base implementation of `_.nth` which doesn't coerce `n` to an integer. - * - * @private - * @param {Array} array The array to query. - * @param {number} n The index of the element to return. - * @returns {*} Returns the nth element of `array`. - */ -function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined; -} - -module.exports = baseNth; diff --git a/node_modules/lowdb/node_modules/lodash/_baseOrderBy.js b/node_modules/lowdb/node_modules/lodash/_baseOrderBy.js deleted file mode 100644 index d8a46ab..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseOrderBy.js +++ /dev/null @@ -1,34 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIteratee = require('./_baseIteratee'), - baseMap = require('./_baseMap'), - baseSortBy = require('./_baseSortBy'), - baseUnary = require('./_baseUnary'), - compareMultiple = require('./_compareMultiple'), - identity = require('./identity'); - -/** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ -function baseOrderBy(collection, iteratees, orders) { - var index = -1; - iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee)); - - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); -} - -module.exports = baseOrderBy; diff --git a/node_modules/lowdb/node_modules/lodash/_basePick.js b/node_modules/lowdb/node_modules/lodash/_basePick.js deleted file mode 100644 index 7272548..0000000 --- a/node_modules/lowdb/node_modules/lodash/_basePick.js +++ /dev/null @@ -1,22 +0,0 @@ -var arrayReduce = require('./_arrayReduce'); - -/** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick. - * @returns {Object} Returns the new object. - */ -function basePick(object, props) { - object = Object(object); - return arrayReduce(props, function(result, key) { - if (key in object) { - result[key] = object[key]; - } - return result; - }, {}); -} - -module.exports = basePick; diff --git a/node_modules/lowdb/node_modules/lodash/_basePickBy.js b/node_modules/lowdb/node_modules/lodash/_basePickBy.js deleted file mode 100644 index 56ffa5f..0000000 --- a/node_modules/lowdb/node_modules/lodash/_basePickBy.js +++ /dev/null @@ -1,28 +0,0 @@ -var getAllKeysIn = require('./_getAllKeysIn'); - -/** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ -function basePickBy(object, predicate) { - var index = -1, - props = getAllKeysIn(object), - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index], - value = object[key]; - - if (predicate(value, key)) { - result[key] = value; - } - } - return result; -} - -module.exports = basePickBy; diff --git a/node_modules/lowdb/node_modules/lodash/_baseProperty.js b/node_modules/lowdb/node_modules/lodash/_baseProperty.js deleted file mode 100644 index 496281e..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseProperty.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -module.exports = baseProperty; diff --git a/node_modules/lowdb/node_modules/lodash/_basePropertyDeep.js b/node_modules/lowdb/node_modules/lodash/_basePropertyDeep.js deleted file mode 100644 index 1e5aae5..0000000 --- a/node_modules/lowdb/node_modules/lodash/_basePropertyDeep.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseGet = require('./_baseGet'); - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; -} - -module.exports = basePropertyDeep; diff --git a/node_modules/lowdb/node_modules/lodash/_basePullAll.js b/node_modules/lowdb/node_modules/lodash/_basePullAll.js deleted file mode 100644 index 305720e..0000000 --- a/node_modules/lowdb/node_modules/lodash/_basePullAll.js +++ /dev/null @@ -1,51 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIndexOf = require('./_baseIndexOf'), - baseIndexOfWith = require('./_baseIndexOfWith'), - baseUnary = require('./_baseUnary'), - copyArray = require('./_copyArray'); - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - */ -function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; - - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; - - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; -} - -module.exports = basePullAll; diff --git a/node_modules/lowdb/node_modules/lodash/_basePullAt.js b/node_modules/lowdb/node_modules/lodash/_basePullAt.js deleted file mode 100644 index 0dd1478..0000000 --- a/node_modules/lowdb/node_modules/lodash/_basePullAt.js +++ /dev/null @@ -1,50 +0,0 @@ -var castPath = require('./_castPath'), - isIndex = require('./_isIndex'), - isKey = require('./_isKey'), - last = require('./last'), - parent = require('./_parent'), - toKey = require('./_toKey'); - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ -function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; - - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } - else if (!isKey(index, array)) { - var path = castPath(index), - object = parent(array, path); - - if (object != null) { - delete object[toKey(last(path))]; - } - } - else { - delete array[toKey(index)]; - } - } - } - return array; -} - -module.exports = basePullAt; diff --git a/node_modules/lowdb/node_modules/lodash/_baseRandom.js b/node_modules/lowdb/node_modules/lodash/_baseRandom.js deleted file mode 100644 index 94f76a7..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseRandom.js +++ /dev/null @@ -1,18 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor, - nativeRandom = Math.random; - -/** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ -function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); -} - -module.exports = baseRandom; diff --git a/node_modules/lowdb/node_modules/lodash/_baseRange.js b/node_modules/lowdb/node_modules/lodash/_baseRange.js deleted file mode 100644 index 02d4ae2..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseRange.js +++ /dev/null @@ -1,28 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments to numbers. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -module.exports = baseRange; diff --git a/node_modules/lowdb/node_modules/lodash/_baseReduce.js b/node_modules/lowdb/node_modules/lodash/_baseReduce.js deleted file mode 100644 index 5a1f8b5..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseReduce.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -module.exports = baseReduce; diff --git a/node_modules/lowdb/node_modules/lodash/_baseRepeat.js b/node_modules/lowdb/node_modules/lodash/_baseRepeat.js deleted file mode 100644 index ee44c31..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseRepeat.js +++ /dev/null @@ -1,35 +0,0 @@ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor; - -/** - * The base implementation of `_.repeat` which doesn't coerce arguments. - * - * @private - * @param {string} string The string to repeat. - * @param {number} n The number of times to repeat the string. - * @returns {string} Returns the repeated string. - */ -function baseRepeat(string, n) { - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); - - return result; -} - -module.exports = baseRepeat; diff --git a/node_modules/lowdb/node_modules/lodash/_baseSet.js b/node_modules/lowdb/node_modules/lodash/_baseSet.js deleted file mode 100644 index 34d63e5..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseSet.js +++ /dev/null @@ -1,46 +0,0 @@ -var assignValue = require('./_assignValue'), - castPath = require('./_castPath'), - isIndex = require('./_isIndex'), - isKey = require('./_isKey'), - isObject = require('./isObject'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]); - if (isObject(nested)) { - var newValue = value; - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = objValue == null - ? (isIndex(path[index + 1]) ? [] : {}) - : objValue; - } - } - assignValue(nested, key, newValue); - } - nested = nested[key]; - } - return object; -} - -module.exports = baseSet; diff --git a/node_modules/lowdb/node_modules/lodash/_baseSetData.js b/node_modules/lowdb/node_modules/lodash/_baseSetData.js deleted file mode 100644 index e689df2..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseSetData.js +++ /dev/null @@ -1,17 +0,0 @@ -var identity = require('./identity'), - metaMap = require('./_metaMap'); - -/** - * The base implementation of `setData` without support for hot loop detection. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ -var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; -}; - -module.exports = baseSetData; diff --git a/node_modules/lowdb/node_modules/lodash/_baseSlice.js b/node_modules/lowdb/node_modules/lodash/_baseSlice.js deleted file mode 100644 index 786f6c9..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseSlice.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ -function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; -} - -module.exports = baseSlice; diff --git a/node_modules/lowdb/node_modules/lodash/_baseSome.js b/node_modules/lowdb/node_modules/lodash/_baseSome.js deleted file mode 100644 index 58f3f44..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseSome.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; -} - -module.exports = baseSome; diff --git a/node_modules/lowdb/node_modules/lodash/_baseSortBy.js b/node_modules/lowdb/node_modules/lodash/_baseSortBy.js deleted file mode 100644 index a25c92e..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseSortBy.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ -function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; -} - -module.exports = baseSortBy; diff --git a/node_modules/lowdb/node_modules/lodash/_baseSortedIndex.js b/node_modules/lowdb/node_modules/lodash/_baseSortedIndex.js deleted file mode 100644 index 0e82dc7..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseSortedIndex.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseSortedIndexBy = require('./_baseSortedIndexBy'), - identity = require('./identity'), - isSymbol = require('./isSymbol'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - -/** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ -function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array ? array.length : low; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if (computed !== null && !isSymbol(computed) && - (retHighest ? (computed <= value) : (computed < value))) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); -} - -module.exports = baseSortedIndex; diff --git a/node_modules/lowdb/node_modules/lodash/_baseSortedIndexBy.js b/node_modules/lowdb/node_modules/lodash/_baseSortedIndexBy.js deleted file mode 100644 index fde7928..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseSortedIndexBy.js +++ /dev/null @@ -1,64 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor, - nativeMin = Math.min; - -/** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ -function baseSortedIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array ? array.length : 0, - valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); -} - -module.exports = baseSortedIndexBy; diff --git a/node_modules/lowdb/node_modules/lodash/_baseSortedUniq.js b/node_modules/lowdb/node_modules/lodash/_baseSortedUniq.js deleted file mode 100644 index 802159a..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseSortedUniq.js +++ /dev/null @@ -1,30 +0,0 @@ -var eq = require('./eq'); - -/** - * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; -} - -module.exports = baseSortedUniq; diff --git a/node_modules/lowdb/node_modules/lodash/_baseSum.js b/node_modules/lowdb/node_modules/lodash/_baseSum.js deleted file mode 100644 index a9e84c1..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseSum.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * The base implementation of `_.sum` and `_.sumBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ -function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; - - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : (result + current); - } - } - return result; -} - -module.exports = baseSum; diff --git a/node_modules/lowdb/node_modules/lodash/_baseTimes.js b/node_modules/lowdb/node_modules/lodash/_baseTimes.js deleted file mode 100644 index 0603fc3..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseTimes.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -module.exports = baseTimes; diff --git a/node_modules/lowdb/node_modules/lodash/_baseToNumber.js b/node_modules/lowdb/node_modules/lodash/_baseToNumber.js deleted file mode 100644 index 04859f3..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseToNumber.js +++ /dev/null @@ -1,24 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** - * The base implementation of `_.toNumber` which doesn't ensure correct - * conversions of binary, hexadecimal, or octal string values. - * - * @private - * @param {*} value The value to process. - * @returns {number} Returns the number. - */ -function baseToNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; -} - -module.exports = baseToNumber; diff --git a/node_modules/lowdb/node_modules/lodash/_baseToPairs.js b/node_modules/lowdb/node_modules/lodash/_baseToPairs.js deleted file mode 100644 index bff1991..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseToPairs.js +++ /dev/null @@ -1,18 +0,0 @@ -var arrayMap = require('./_arrayMap'); - -/** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ -function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); -} - -module.exports = baseToPairs; diff --git a/node_modules/lowdb/node_modules/lodash/_baseToString.js b/node_modules/lowdb/node_modules/lodash/_baseToString.js deleted file mode 100644 index 462e26f..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseToString.js +++ /dev/null @@ -1,31 +0,0 @@ -var Symbol = require('./_Symbol'), - isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -module.exports = baseToString; diff --git a/node_modules/lowdb/node_modules/lodash/_baseUnary.js b/node_modules/lowdb/node_modules/lodash/_baseUnary.js deleted file mode 100644 index 4db20e2..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseUnary.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.unary` without support for storing wrapper metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} - -module.exports = baseUnary; diff --git a/node_modules/lowdb/node_modules/lodash/_baseUniq.js b/node_modules/lowdb/node_modules/lodash/_baseUniq.js deleted file mode 100644 index aea459d..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseUniq.js +++ /dev/null @@ -1,72 +0,0 @@ -var SetCache = require('./_SetCache'), - arrayIncludes = require('./_arrayIncludes'), - arrayIncludesWith = require('./_arrayIncludesWith'), - cacheHas = require('./_cacheHas'), - createSet = require('./_createSet'), - setToArray = require('./_setToArray'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -module.exports = baseUniq; diff --git a/node_modules/lowdb/node_modules/lodash/_baseUnset.js b/node_modules/lowdb/node_modules/lodash/_baseUnset.js deleted file mode 100644 index 754eb06..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseUnset.js +++ /dev/null @@ -1,24 +0,0 @@ -var baseHas = require('./_baseHas'), - castPath = require('./_castPath'), - isKey = require('./_isKey'), - last = require('./last'), - parent = require('./_parent'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ -function baseUnset(object, path) { - path = isKey(path, object) ? [path] : castPath(path); - object = parent(object, path); - - var key = toKey(last(path)); - return !(object != null && baseHas(object, key)) || delete object[key]; -} - -module.exports = baseUnset; diff --git a/node_modules/lowdb/node_modules/lodash/_baseUpdate.js b/node_modules/lowdb/node_modules/lodash/_baseUpdate.js deleted file mode 100644 index ec1b338..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseUpdate.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseGet = require('./_baseGet'), - baseSet = require('./_baseSet'); - -/** - * The base implementation of `_.update`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to update. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); -} - -module.exports = baseUpdate; diff --git a/node_modules/lowdb/node_modules/lodash/_baseValues.js b/node_modules/lowdb/node_modules/lodash/_baseValues.js deleted file mode 100644 index b95faad..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseValues.js +++ /dev/null @@ -1,19 +0,0 @@ -var arrayMap = require('./_arrayMap'); - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); -} - -module.exports = baseValues; diff --git a/node_modules/lowdb/node_modules/lodash/_baseWhile.js b/node_modules/lowdb/node_modules/lodash/_baseWhile.js deleted file mode 100644 index 07eac61..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseWhile.js +++ /dev/null @@ -1,26 +0,0 @@ -var baseSlice = require('./_baseSlice'); - -/** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ -function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length) && - predicate(array[index], index, array)) {} - - return isDrop - ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); -} - -module.exports = baseWhile; diff --git a/node_modules/lowdb/node_modules/lodash/_baseWrapperValue.js b/node_modules/lowdb/node_modules/lodash/_baseWrapperValue.js deleted file mode 100644 index 443e0df..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseWrapperValue.js +++ /dev/null @@ -1,25 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - arrayPush = require('./_arrayPush'), - arrayReduce = require('./_arrayReduce'); - -/** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ -function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); -} - -module.exports = baseWrapperValue; diff --git a/node_modules/lowdb/node_modules/lodash/_baseXor.js b/node_modules/lowdb/node_modules/lodash/_baseXor.js deleted file mode 100644 index 7e62d1b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseXor.js +++ /dev/null @@ -1,30 +0,0 @@ -var arrayPush = require('./_arrayPush'), - baseDifference = require('./_baseDifference'), - baseUniq = require('./_baseUniq'); - -/** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ -function baseXor(arrays, iteratee, comparator) { - var index = -1, - length = arrays.length; - - while (++index < length) { - var result = result - ? arrayPush( - baseDifference(result, arrays[index], iteratee, comparator), - baseDifference(arrays[index], result, iteratee, comparator) - ) - : arrays[index]; - } - return (result && result.length) ? baseUniq(result, iteratee, comparator) : []; -} - -module.exports = baseXor; diff --git a/node_modules/lowdb/node_modules/lodash/_baseZipObject.js b/node_modules/lowdb/node_modules/lodash/_baseZipObject.js deleted file mode 100644 index 401f85b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_baseZipObject.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ -function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; -} - -module.exports = baseZipObject; diff --git a/node_modules/lowdb/node_modules/lodash/_cacheHas.js b/node_modules/lowdb/node_modules/lodash/_cacheHas.js deleted file mode 100644 index c4c6b65..0000000 --- a/node_modules/lowdb/node_modules/lodash/_cacheHas.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Checks if a cache value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -module.exports = cacheHas; diff --git a/node_modules/lowdb/node_modules/lodash/_castArrayLikeObject.js b/node_modules/lowdb/node_modules/lodash/_castArrayLikeObject.js deleted file mode 100644 index 92c75fa..0000000 --- a/node_modules/lowdb/node_modules/lodash/_castArrayLikeObject.js +++ /dev/null @@ -1,14 +0,0 @@ -var isArrayLikeObject = require('./isArrayLikeObject'); - -/** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ -function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; -} - -module.exports = castArrayLikeObject; diff --git a/node_modules/lowdb/node_modules/lodash/_castFunction.js b/node_modules/lowdb/node_modules/lodash/_castFunction.js deleted file mode 100644 index 98c91ae..0000000 --- a/node_modules/lowdb/node_modules/lodash/_castFunction.js +++ /dev/null @@ -1,14 +0,0 @@ -var identity = require('./identity'); - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : identity; -} - -module.exports = castFunction; diff --git a/node_modules/lowdb/node_modules/lodash/_castPath.js b/node_modules/lowdb/node_modules/lodash/_castPath.js deleted file mode 100644 index 4f38f95..0000000 --- a/node_modules/lowdb/node_modules/lodash/_castPath.js +++ /dev/null @@ -1,15 +0,0 @@ -var isArray = require('./isArray'), - stringToPath = require('./_stringToPath'); - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value) { - return isArray(value) ? value : stringToPath(value); -} - -module.exports = castPath; diff --git a/node_modules/lowdb/node_modules/lodash/_castSlice.js b/node_modules/lowdb/node_modules/lodash/_castSlice.js deleted file mode 100644 index 071faeb..0000000 --- a/node_modules/lowdb/node_modules/lodash/_castSlice.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseSlice = require('./_baseSlice'); - -/** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ -function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); -} - -module.exports = castSlice; diff --git a/node_modules/lowdb/node_modules/lodash/_charsEndIndex.js b/node_modules/lowdb/node_modules/lodash/_charsEndIndex.js deleted file mode 100644 index 07908ff..0000000 --- a/node_modules/lowdb/node_modules/lodash/_charsEndIndex.js +++ /dev/null @@ -1,19 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'); - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ -function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; -} - -module.exports = charsEndIndex; diff --git a/node_modules/lowdb/node_modules/lodash/_charsStartIndex.js b/node_modules/lowdb/node_modules/lodash/_charsStartIndex.js deleted file mode 100644 index b17afd2..0000000 --- a/node_modules/lowdb/node_modules/lodash/_charsStartIndex.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'); - -/** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ -function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; - - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; -} - -module.exports = charsStartIndex; diff --git a/node_modules/lowdb/node_modules/lodash/_checkGlobal.js b/node_modules/lowdb/node_modules/lodash/_checkGlobal.js deleted file mode 100644 index b0ea47e..0000000 --- a/node_modules/lowdb/node_modules/lodash/_checkGlobal.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Checks if `value` is a global object. - * - * @private - * @param {*} value The value to check. - * @returns {null|Object} Returns `value` if it's a global object, else `null`. - */ -function checkGlobal(value) { - return (value && value.Object === Object) ? value : null; -} - -module.exports = checkGlobal; diff --git a/node_modules/lowdb/node_modules/lodash/_cloneArrayBuffer.js b/node_modules/lowdb/node_modules/lodash/_cloneArrayBuffer.js deleted file mode 100644 index c3d8f6e..0000000 --- a/node_modules/lowdb/node_modules/lodash/_cloneArrayBuffer.js +++ /dev/null @@ -1,16 +0,0 @@ -var Uint8Array = require('./_Uint8Array'); - -/** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ -function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; -} - -module.exports = cloneArrayBuffer; diff --git a/node_modules/lowdb/node_modules/lodash/_cloneBuffer.js b/node_modules/lowdb/node_modules/lodash/_cloneBuffer.js deleted file mode 100644 index 247d410..0000000 --- a/node_modules/lowdb/node_modules/lodash/_cloneBuffer.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ -function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var result = new buffer.constructor(buffer.length); - buffer.copy(result); - return result; -} - -module.exports = cloneBuffer; diff --git a/node_modules/lowdb/node_modules/lodash/_cloneDataView.js b/node_modules/lowdb/node_modules/lodash/_cloneDataView.js deleted file mode 100644 index 9c9b7b0..0000000 --- a/node_modules/lowdb/node_modules/lodash/_cloneDataView.js +++ /dev/null @@ -1,16 +0,0 @@ -var cloneArrayBuffer = require('./_cloneArrayBuffer'); - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -module.exports = cloneDataView; diff --git a/node_modules/lowdb/node_modules/lodash/_cloneMap.js b/node_modules/lowdb/node_modules/lodash/_cloneMap.js deleted file mode 100644 index b51983d..0000000 --- a/node_modules/lowdb/node_modules/lodash/_cloneMap.js +++ /dev/null @@ -1,19 +0,0 @@ -var addMapEntry = require('./_addMapEntry'), - arrayReduce = require('./_arrayReduce'), - mapToArray = require('./_mapToArray'); - -/** - * Creates a clone of `map`. - * - * @private - * @param {Object} map The map to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned map. - */ -function cloneMap(map, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map); - return arrayReduce(array, addMapEntry, new map.constructor); -} - -module.exports = cloneMap; diff --git a/node_modules/lowdb/node_modules/lodash/_cloneRegExp.js b/node_modules/lowdb/node_modules/lodash/_cloneRegExp.js deleted file mode 100644 index 64a30df..0000000 --- a/node_modules/lowdb/node_modules/lodash/_cloneRegExp.js +++ /dev/null @@ -1,17 +0,0 @@ -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -module.exports = cloneRegExp; diff --git a/node_modules/lowdb/node_modules/lodash/_cloneSet.js b/node_modules/lowdb/node_modules/lodash/_cloneSet.js deleted file mode 100644 index dc1db95..0000000 --- a/node_modules/lowdb/node_modules/lodash/_cloneSet.js +++ /dev/null @@ -1,19 +0,0 @@ -var addSetEntry = require('./_addSetEntry'), - arrayReduce = require('./_arrayReduce'), - setToArray = require('./_setToArray'); - -/** - * Creates a clone of `set`. - * - * @private - * @param {Object} set The set to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned set. - */ -function cloneSet(set, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set); - return arrayReduce(array, addSetEntry, new set.constructor); -} - -module.exports = cloneSet; diff --git a/node_modules/lowdb/node_modules/lodash/_cloneSymbol.js b/node_modules/lowdb/node_modules/lodash/_cloneSymbol.js deleted file mode 100644 index bede39f..0000000 --- a/node_modules/lowdb/node_modules/lodash/_cloneSymbol.js +++ /dev/null @@ -1,18 +0,0 @@ -var Symbol = require('./_Symbol'); - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -module.exports = cloneSymbol; diff --git a/node_modules/lowdb/node_modules/lodash/_cloneTypedArray.js b/node_modules/lowdb/node_modules/lodash/_cloneTypedArray.js deleted file mode 100644 index 7aad84d..0000000 --- a/node_modules/lowdb/node_modules/lodash/_cloneTypedArray.js +++ /dev/null @@ -1,16 +0,0 @@ -var cloneArrayBuffer = require('./_cloneArrayBuffer'); - -/** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ -function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); -} - -module.exports = cloneTypedArray; diff --git a/node_modules/lowdb/node_modules/lodash/_compareAscending.js b/node_modules/lowdb/node_modules/lodash/_compareAscending.js deleted file mode 100644 index 8dc2791..0000000 --- a/node_modules/lowdb/node_modules/lodash/_compareAscending.js +++ /dev/null @@ -1,41 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ -function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; -} - -module.exports = compareAscending; diff --git a/node_modules/lowdb/node_modules/lodash/_compareMultiple.js b/node_modules/lowdb/node_modules/lodash/_compareMultiple.js deleted file mode 100644 index ad61f0f..0000000 --- a/node_modules/lowdb/node_modules/lodash/_compareMultiple.js +++ /dev/null @@ -1,44 +0,0 @@ -var compareAscending = require('./_compareAscending'); - -/** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ -function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; -} - -module.exports = compareMultiple; diff --git a/node_modules/lowdb/node_modules/lodash/_composeArgs.js b/node_modules/lowdb/node_modules/lodash/_composeArgs.js deleted file mode 100644 index 1ce40f4..0000000 --- a/node_modules/lowdb/node_modules/lodash/_composeArgs.js +++ /dev/null @@ -1,39 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ -function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; -} - -module.exports = composeArgs; diff --git a/node_modules/lowdb/node_modules/lodash/_composeArgsRight.js b/node_modules/lowdb/node_modules/lodash/_composeArgsRight.js deleted file mode 100644 index 8dc588d..0000000 --- a/node_modules/lowdb/node_modules/lodash/_composeArgsRight.js +++ /dev/null @@ -1,41 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ -function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; -} - -module.exports = composeArgsRight; diff --git a/node_modules/lowdb/node_modules/lodash/_copyArray.js b/node_modules/lowdb/node_modules/lodash/_copyArray.js deleted file mode 100644 index cd94d5d..0000000 --- a/node_modules/lowdb/node_modules/lodash/_copyArray.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -module.exports = copyArray; diff --git a/node_modules/lowdb/node_modules/lodash/_copyObject.js b/node_modules/lowdb/node_modules/lodash/_copyObject.js deleted file mode 100644 index 474d17b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_copyObject.js +++ /dev/null @@ -1,31 +0,0 @@ -var assignValue = require('./_assignValue'); - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ -function copyObject(source, props, object, customizer) { - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : source[key]; - - assignValue(object, key, newValue); - } - return object; -} - -module.exports = copyObject; diff --git a/node_modules/lowdb/node_modules/lodash/_copySymbols.js b/node_modules/lowdb/node_modules/lodash/_copySymbols.js deleted file mode 100644 index 1fac3c8..0000000 --- a/node_modules/lowdb/node_modules/lodash/_copySymbols.js +++ /dev/null @@ -1,16 +0,0 @@ -var copyObject = require('./_copyObject'), - getSymbols = require('./_getSymbols'); - -/** - * Copies own symbol properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); -} - -module.exports = copySymbols; diff --git a/node_modules/lowdb/node_modules/lodash/_coreJsData.js b/node_modules/lowdb/node_modules/lodash/_coreJsData.js deleted file mode 100644 index f8e5b4e..0000000 --- a/node_modules/lowdb/node_modules/lodash/_coreJsData.js +++ /dev/null @@ -1,6 +0,0 @@ -var root = require('./_root'); - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -module.exports = coreJsData; diff --git a/node_modules/lowdb/node_modules/lodash/_countHolders.js b/node_modules/lowdb/node_modules/lodash/_countHolders.js deleted file mode 100644 index 8cc95e6..0000000 --- a/node_modules/lowdb/node_modules/lodash/_countHolders.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ -function countHolders(array, placeholder) { - var length = array.length, - result = 0; - - while (length--) { - if (array[length] === placeholder) { - result++; - } - } - return result; -} - -module.exports = countHolders; diff --git a/node_modules/lowdb/node_modules/lodash/_createAggregator.js b/node_modules/lowdb/node_modules/lodash/_createAggregator.js deleted file mode 100644 index 7f7afd2..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createAggregator.js +++ /dev/null @@ -1,23 +0,0 @@ -var arrayAggregator = require('./_arrayAggregator'), - baseAggregator = require('./_baseAggregator'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ -function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func(collection, setter, baseIteratee(iteratee), accumulator); - }; -} - -module.exports = createAggregator; diff --git a/node_modules/lowdb/node_modules/lodash/_createAssigner.js b/node_modules/lowdb/node_modules/lodash/_createAssigner.js deleted file mode 100644 index e0ba582..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createAssigner.js +++ /dev/null @@ -1,37 +0,0 @@ -var isIterateeCall = require('./_isIterateeCall'), - rest = require('./rest'); - -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return rest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); -} - -module.exports = createAssigner; diff --git a/node_modules/lowdb/node_modules/lodash/_createBaseEach.js b/node_modules/lowdb/node_modules/lodash/_createBaseEach.js deleted file mode 100644 index d24fdd1..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createBaseEach.js +++ /dev/null @@ -1,32 +0,0 @@ -var isArrayLike = require('./isArrayLike'); - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -module.exports = createBaseEach; diff --git a/node_modules/lowdb/node_modules/lodash/_createBaseFor.js b/node_modules/lowdb/node_modules/lodash/_createBaseFor.js deleted file mode 100644 index 94cbf29..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createBaseFor.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; -} - -module.exports = createBaseFor; diff --git a/node_modules/lowdb/node_modules/lodash/_createBaseWrapper.js b/node_modules/lowdb/node_modules/lodash/_createBaseWrapper.js deleted file mode 100644 index c365621..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createBaseWrapper.js +++ /dev/null @@ -1,29 +0,0 @@ -var createCtorWrapper = require('./_createCtorWrapper'), - root = require('./_root'); - -/** Used to compose bitmasks for wrapper metadata. */ -var BIND_FLAG = 1; - -/** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` - * for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createBaseWrapper(func, bitmask, thisArg) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtorWrapper(func); - - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; -} - -module.exports = createBaseWrapper; diff --git a/node_modules/lowdb/node_modules/lodash/_createCaseFirst.js b/node_modules/lowdb/node_modules/lodash/_createCaseFirst.js deleted file mode 100644 index 1a20532..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createCaseFirst.js +++ /dev/null @@ -1,33 +0,0 @@ -var castSlice = require('./_castSlice'), - reHasComplexSymbol = require('./_reHasComplexSymbol'), - stringToArray = require('./_stringToArray'), - toString = require('./toString'); - -/** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ -function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = reHasComplexSymbol.test(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; -} - -module.exports = createCaseFirst; diff --git a/node_modules/lowdb/node_modules/lodash/_createCompounder.js b/node_modules/lowdb/node_modules/lodash/_createCompounder.js deleted file mode 100644 index 8d4cee2..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createCompounder.js +++ /dev/null @@ -1,24 +0,0 @@ -var arrayReduce = require('./_arrayReduce'), - deburr = require('./deburr'), - words = require('./words'); - -/** Used to compose unicode capture groups. */ -var rsApos = "['\u2019]"; - -/** Used to match apostrophes. */ -var reApos = RegExp(rsApos, 'g'); - -/** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ -function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; -} - -module.exports = createCompounder; diff --git a/node_modules/lowdb/node_modules/lodash/_createCtorWrapper.js b/node_modules/lowdb/node_modules/lodash/_createCtorWrapper.js deleted file mode 100644 index 17e1bd8..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createCtorWrapper.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseCreate = require('./_baseCreate'), - isObject = require('./isObject'); - -/** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ -function createCtorWrapper(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; -} - -module.exports = createCtorWrapper; diff --git a/node_modules/lowdb/node_modules/lodash/_createCurryWrapper.js b/node_modules/lowdb/node_modules/lodash/_createCurryWrapper.js deleted file mode 100644 index d765b84..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createCurryWrapper.js +++ /dev/null @@ -1,47 +0,0 @@ -var apply = require('./_apply'), - createCtorWrapper = require('./_createCtorWrapper'), - createHybridWrapper = require('./_createHybridWrapper'), - createRecurryWrapper = require('./_createRecurryWrapper'), - getHolder = require('./_getHolder'), - replaceHolders = require('./_replaceHolders'), - root = require('./_root'); - -/** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` - * for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createCurryWrapper(func, bitmask, arity) { - var Ctor = createCtorWrapper(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); - - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); - - length -= holders.length; - if (length < arity) { - return createRecurryWrapper( - func, bitmask, createHybridWrapper, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; -} - -module.exports = createCurryWrapper; diff --git a/node_modules/lowdb/node_modules/lodash/_createFind.js b/node_modules/lowdb/node_modules/lodash/_createFind.js deleted file mode 100644 index 0a84618..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createFind.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - isArrayLike = require('./isArrayLike'), - keys = require('./keys'); - -/** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ -function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - predicate = baseIteratee(predicate, 3); - if (!isArrayLike(collection)) { - var props = keys(collection); - } - var index = findIndexFunc(props || collection, function(value, key) { - if (props) { - key = value; - value = iterable[key]; - } - return predicate(value, key, iterable); - }, fromIndex); - return index > -1 ? collection[props ? props[index] : index] : undefined; - }; -} - -module.exports = createFind; diff --git a/node_modules/lowdb/node_modules/lodash/_createFlow.js b/node_modules/lowdb/node_modules/lodash/_createFlow.js deleted file mode 100644 index 6b5ee54..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createFlow.js +++ /dev/null @@ -1,85 +0,0 @@ -var LodashWrapper = require('./_LodashWrapper'), - baseFlatten = require('./_baseFlatten'), - getData = require('./_getData'), - getFuncName = require('./_getFuncName'), - isArray = require('./isArray'), - isLaziable = require('./_isLaziable'), - rest = require('./rest'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** Used as the `TypeError` message for "Functions" methods. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** Used to compose bitmasks for wrapper metadata. */ -var CURRY_FLAG = 8, - PARTIAL_FLAG = 32, - ARY_FLAG = 128, - REARG_FLAG = 256; - -/** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ -function createFlow(fromRight) { - return rest(function(funcs) { - funcs = baseFlatten(funcs, 1); - - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; - - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if (data && isLaziable(data[0]) && - data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && - !data[4].length && data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) - ? wrapper[funcName]() - : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && - isArray(value) && value.length >= LARGE_ARRAY_SIZE) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }); -} - -module.exports = createFlow; diff --git a/node_modules/lowdb/node_modules/lodash/_createHybridWrapper.js b/node_modules/lowdb/node_modules/lodash/_createHybridWrapper.js deleted file mode 100644 index e433640..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createHybridWrapper.js +++ /dev/null @@ -1,93 +0,0 @@ -var composeArgs = require('./_composeArgs'), - composeArgsRight = require('./_composeArgsRight'), - countHolders = require('./_countHolders'), - createCtorWrapper = require('./_createCtorWrapper'), - createRecurryWrapper = require('./_createRecurryWrapper'), - getHolder = require('./_getHolder'), - reorder = require('./_reorder'), - replaceHolders = require('./_replaceHolders'), - root = require('./_root'); - -/** Used to compose bitmasks for wrapper metadata. */ -var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_FLAG = 8, - CURRY_RIGHT_FLAG = 16, - ARY_FLAG = 128, - FLIP_FLAG = 512; - -/** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` - * for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & ARY_FLAG, - isBind = bitmask & BIND_FLAG, - isBindKey = bitmask & BIND_KEY_FLAG, - isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), - isFlip = bitmask & FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtorWrapper(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; - - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurryWrapper( - func, bitmask, createHybridWrapper, wrapper.placeholder, thisArg, - args, newHolders, argPos, ary, arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtorWrapper(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; -} - -module.exports = createHybridWrapper; diff --git a/node_modules/lowdb/node_modules/lodash/_createInverter.js b/node_modules/lowdb/node_modules/lodash/_createInverter.js deleted file mode 100644 index 6c0c562..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createInverter.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseInverter = require('./_baseInverter'); - -/** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ -function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; -} - -module.exports = createInverter; diff --git a/node_modules/lowdb/node_modules/lodash/_createMathOperation.js b/node_modules/lowdb/node_modules/lodash/_createMathOperation.js deleted file mode 100644 index e750e98..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createMathOperation.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseToNumber = require('./_baseToNumber'), - baseToString = require('./_baseToString'); - -/** - * Creates a function that performs a mathematical operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new mathematical operation function. - */ -function createMathOperation(operator) { - return function(value, other) { - var result; - if (value === undefined && other === undefined) { - return 0; - } - if (value !== undefined) { - result = value; - } - if (other !== undefined) { - if (result === undefined) { - return other; - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; -} - -module.exports = createMathOperation; diff --git a/node_modules/lowdb/node_modules/lodash/_createOver.js b/node_modules/lowdb/node_modules/lodash/_createOver.js deleted file mode 100644 index e5f9b8b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createOver.js +++ /dev/null @@ -1,32 +0,0 @@ -var apply = require('./_apply'), - arrayMap = require('./_arrayMap'), - baseFlatten = require('./_baseFlatten'), - baseIteratee = require('./_baseIteratee'), - baseUnary = require('./_baseUnary'), - isArray = require('./isArray'), - isFlattenableIteratee = require('./_isFlattenableIteratee'), - rest = require('./rest'); - -/** - * Creates a function like `_.over`. - * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new over function. - */ -function createOver(arrayFunc) { - return rest(function(iteratees) { - iteratees = (iteratees.length == 1 && isArray(iteratees[0])) - ? arrayMap(iteratees[0], baseUnary(baseIteratee)) - : arrayMap(baseFlatten(iteratees, 1, isFlattenableIteratee), baseUnary(baseIteratee)); - - return rest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); -} - -module.exports = createOver; diff --git a/node_modules/lowdb/node_modules/lodash/_createPadding.js b/node_modules/lowdb/node_modules/lodash/_createPadding.js deleted file mode 100644 index cfc6225..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createPadding.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseRepeat = require('./_baseRepeat'), - baseToString = require('./_baseToString'), - castSlice = require('./_castSlice'), - reHasComplexSymbol = require('./_reHasComplexSymbol'), - stringSize = require('./_stringSize'), - stringToArray = require('./_stringToArray'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil; - -/** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. - * - * @private - * @param {number} length The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. - */ -function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars); - - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); - return reHasComplexSymbol.test(chars) - ? castSlice(stringToArray(result), 0, length).join('') - : result.slice(0, length); -} - -module.exports = createPadding; diff --git a/node_modules/lowdb/node_modules/lodash/_createPartialWrapper.js b/node_modules/lowdb/node_modules/lodash/_createPartialWrapper.js deleted file mode 100644 index cc4314e..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createPartialWrapper.js +++ /dev/null @@ -1,44 +0,0 @@ -var apply = require('./_apply'), - createCtorWrapper = require('./_createCtorWrapper'), - root = require('./_root'); - -/** Used to compose bitmasks for wrapper metadata. */ -var BIND_FLAG = 1; - -/** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` - * for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ -function createPartialWrapper(func, bitmask, thisArg, partials) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtorWrapper(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; -} - -module.exports = createPartialWrapper; diff --git a/node_modules/lowdb/node_modules/lodash/_createRange.js b/node_modules/lowdb/node_modules/lodash/_createRange.js deleted file mode 100644 index 9728563..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createRange.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseRange = require('./_baseRange'), - isIterateeCall = require('./_isIterateeCall'), - toNumber = require('./toNumber'); - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toNumber(start); - start = start === start ? start : 0; - if (end === undefined) { - end = start; - start = 0; - } else { - end = toNumber(end) || 0; - } - step = step === undefined ? (start < end ? 1 : -1) : (toNumber(step) || 0); - return baseRange(start, end, step, fromRight); - }; -} - -module.exports = createRange; diff --git a/node_modules/lowdb/node_modules/lodash/_createRecurryWrapper.js b/node_modules/lowdb/node_modules/lodash/_createRecurryWrapper.js deleted file mode 100644 index 63c096a..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createRecurryWrapper.js +++ /dev/null @@ -1,56 +0,0 @@ -var isLaziable = require('./_isLaziable'), - setData = require('./_setData'); - -/** Used to compose bitmasks for wrapper metadata. */ -var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_BOUND_FLAG = 4, - CURRY_FLAG = 8, - PARTIAL_FLAG = 32, - PARTIAL_RIGHT_FLAG = 64; - -/** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` - * for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createRecurryWrapper(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); - - if (!(bitmask & CURRY_BOUND_FLAG)) { - bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; - - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return result; -} - -module.exports = createRecurryWrapper; diff --git a/node_modules/lowdb/node_modules/lodash/_createRelationalOperation.js b/node_modules/lowdb/node_modules/lodash/_createRelationalOperation.js deleted file mode 100644 index a17c6b5..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createRelationalOperation.js +++ /dev/null @@ -1,20 +0,0 @@ -var toNumber = require('./toNumber'); - -/** - * Creates a function that performs a relational operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new relational operation function. - */ -function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; -} - -module.exports = createRelationalOperation; diff --git a/node_modules/lowdb/node_modules/lodash/_createRound.js b/node_modules/lowdb/node_modules/lodash/_createRound.js deleted file mode 100644 index 74b20d4..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createRound.js +++ /dev/null @@ -1,33 +0,0 @@ -var toInteger = require('./toInteger'), - toNumber = require('./toNumber'), - toString = require('./toString'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Creates a function like `_.round`. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ -function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = nativeMin(toInteger(precision), 292); - if (precision) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); - - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; -} - -module.exports = createRound; diff --git a/node_modules/lowdb/node_modules/lodash/_createSet.js b/node_modules/lowdb/node_modules/lodash/_createSet.js deleted file mode 100644 index ae24d05..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createSet.js +++ /dev/null @@ -1,19 +0,0 @@ -var Set = require('./_Set'), - noop = require('./noop'), - setToArray = require('./_setToArray'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Creates a set of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); -}; - -module.exports = createSet; diff --git a/node_modules/lowdb/node_modules/lodash/_createToPairs.js b/node_modules/lowdb/node_modules/lodash/_createToPairs.js deleted file mode 100644 index 568417a..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createToPairs.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseToPairs = require('./_baseToPairs'), - getTag = require('./_getTag'), - mapToArray = require('./_mapToArray'), - setToPairs = require('./_setToPairs'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** - * Creates a `_.toPairs` or `_.toPairsIn` function. - * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. - */ -function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); - } - if (tag == setTag) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; -} - -module.exports = createToPairs; diff --git a/node_modules/lowdb/node_modules/lodash/_createWrapper.js b/node_modules/lowdb/node_modules/lodash/_createWrapper.js deleted file mode 100644 index c77e763..0000000 --- a/node_modules/lowdb/node_modules/lodash/_createWrapper.js +++ /dev/null @@ -1,106 +0,0 @@ -var baseSetData = require('./_baseSetData'), - createBaseWrapper = require('./_createBaseWrapper'), - createCurryWrapper = require('./_createCurryWrapper'), - createHybridWrapper = require('./_createHybridWrapper'), - createPartialWrapper = require('./_createPartialWrapper'), - getData = require('./_getData'), - mergeData = require('./_mergeData'), - setData = require('./_setData'), - toInteger = require('./toInteger'); - -/** Used as the `TypeError` message for "Functions" methods. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** Used to compose bitmasks for wrapper metadata. */ -var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_FLAG = 8, - CURRY_RIGHT_FLAG = 16, - PARTIAL_FLAG = 32, - PARTIAL_RIGHT_FLAG = 64; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask of wrapper flags. - * The bitmask may be composed of the following flags: - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; - - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] == null - ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); - - if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { - bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == BIND_FLAG) { - var result = createBaseWrapper(func, bitmask, thisArg); - } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { - result = createCurryWrapper(func, bitmask, arity); - } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { - result = createPartialWrapper(func, bitmask, thisArg, partials); - } else { - result = createHybridWrapper.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setter(result, newData); -} - -module.exports = createWrapper; diff --git a/node_modules/lowdb/node_modules/lodash/_deburrLetter.js b/node_modules/lowdb/node_modules/lodash/_deburrLetter.js deleted file mode 100644 index e559dbe..0000000 --- a/node_modules/lowdb/node_modules/lodash/_deburrLetter.js +++ /dev/null @@ -1,33 +0,0 @@ -/** Used to map latin-1 supplementary letters to basic latin letters. */ -var deburredLetters = { - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss' -}; - -/** - * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ -function deburrLetter(letter) { - return deburredLetters[letter]; -} - -module.exports = deburrLetter; diff --git a/node_modules/lowdb/node_modules/lodash/_equalArrays.js b/node_modules/lowdb/node_modules/lodash/_equalArrays.js deleted file mode 100644 index 17ef313..0000000 --- a/node_modules/lowdb/node_modules/lodash/_equalArrays.js +++ /dev/null @@ -1,81 +0,0 @@ -var SetCache = require('./_SetCache'), - arraySome = require('./_arraySome'); - -/** Used to compose bitmasks for comparison styles. */ -var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked) { - return stacked == other; - } - var index = -1, - result = true, - seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined; - - stack.set(array, other); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!seen.has(othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { - return seen.add(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, customizer, bitmask, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - return result; -} - -module.exports = equalArrays; diff --git a/node_modules/lowdb/node_modules/lodash/_equalByTag.js b/node_modules/lowdb/node_modules/lodash/_equalByTag.js deleted file mode 100644 index b3e37bd..0000000 --- a/node_modules/lowdb/node_modules/lodash/_equalByTag.js +++ /dev/null @@ -1,114 +0,0 @@ -var Symbol = require('./_Symbol'), - Uint8Array = require('./_Uint8Array'), - equalArrays = require('./_equalArrays'), - mapToArray = require('./_mapToArray'), - setToArray = require('./_setToArray'); - -/** Used to compose bitmasks for comparison styles. */ -var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - // Coerce dates and booleans to numbers, dates to milliseconds and - // booleans to `1` or `0` treating invalid dates coerced to `NaN` as - // not equal. - return +object == +other; - - case errorTag: - return object.name == other.name && object.message == other.message; - - case numberTag: - // Treat `NaN` vs. `NaN` as equal. - return (object != +object) ? other != +other : object == +other; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/6.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & PARTIAL_COMPARE_FLAG; - convert || (convert = setToArray); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= UNORDERED_COMPARE_FLAG; - stack.set(object, other); - - // Recursively compare objects (susceptible to call stack limits). - return equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack); - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -module.exports = equalByTag; diff --git a/node_modules/lowdb/node_modules/lodash/_equalObjects.js b/node_modules/lowdb/node_modules/lodash/_equalObjects.js deleted file mode 100644 index 9a5d17f..0000000 --- a/node_modules/lowdb/node_modules/lodash/_equalObjects.js +++ /dev/null @@ -1,83 +0,0 @@ -var baseHas = require('./_baseHas'), - keys = require('./keys'); - -/** Used to compose bitmasks for comparison styles. */ -var PARTIAL_COMPARE_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : baseHas(other, key))) { - return false; - } - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - var result = true; - stack.set(object, other); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - return result; -} - -module.exports = equalObjects; diff --git a/node_modules/lowdb/node_modules/lodash/_escapeHtmlChar.js b/node_modules/lowdb/node_modules/lodash/_escapeHtmlChar.js deleted file mode 100644 index b21e452..0000000 --- a/node_modules/lowdb/node_modules/lodash/_escapeHtmlChar.js +++ /dev/null @@ -1,22 +0,0 @@ -/** Used to map characters to HTML entities. */ -var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' -}; - -/** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ -function escapeHtmlChar(chr) { - return htmlEscapes[chr]; -} - -module.exports = escapeHtmlChar; diff --git a/node_modules/lowdb/node_modules/lodash/_escapeStringChar.js b/node_modules/lowdb/node_modules/lodash/_escapeStringChar.js deleted file mode 100644 index 44eca96..0000000 --- a/node_modules/lowdb/node_modules/lodash/_escapeStringChar.js +++ /dev/null @@ -1,22 +0,0 @@ -/** Used to escape characters for inclusion in compiled string literals. */ -var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' -}; - -/** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ -function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; -} - -module.exports = escapeStringChar; diff --git a/node_modules/lowdb/node_modules/lodash/_getAllKeys.js b/node_modules/lowdb/node_modules/lodash/_getAllKeys.js deleted file mode 100644 index a9ce699..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getAllKeys.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseGetAllKeys = require('./_baseGetAllKeys'), - getSymbols = require('./_getSymbols'), - keys = require('./keys'); - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); -} - -module.exports = getAllKeys; diff --git a/node_modules/lowdb/node_modules/lodash/_getAllKeysIn.js b/node_modules/lowdb/node_modules/lodash/_getAllKeysIn.js deleted file mode 100644 index 1b46678..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getAllKeysIn.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseGetAllKeys = require('./_baseGetAllKeys'), - getSymbolsIn = require('./_getSymbolsIn'), - keysIn = require('./keysIn'); - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); -} - -module.exports = getAllKeysIn; diff --git a/node_modules/lowdb/node_modules/lodash/_getData.js b/node_modules/lowdb/node_modules/lodash/_getData.js deleted file mode 100644 index a1fe7b7..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getData.js +++ /dev/null @@ -1,15 +0,0 @@ -var metaMap = require('./_metaMap'), - noop = require('./noop'); - -/** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ -var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); -}; - -module.exports = getData; diff --git a/node_modules/lowdb/node_modules/lodash/_getFuncName.js b/node_modules/lowdb/node_modules/lodash/_getFuncName.js deleted file mode 100644 index 21e15b3..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getFuncName.js +++ /dev/null @@ -1,31 +0,0 @@ -var realNames = require('./_realNames'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ -function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; -} - -module.exports = getFuncName; diff --git a/node_modules/lowdb/node_modules/lodash/_getHolder.js b/node_modules/lowdb/node_modules/lodash/_getHolder.js deleted file mode 100644 index 65e94b5..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getHolder.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ -function getHolder(func) { - var object = func; - return object.placeholder; -} - -module.exports = getHolder; diff --git a/node_modules/lowdb/node_modules/lodash/_getLength.js b/node_modules/lowdb/node_modules/lodash/_getLength.js deleted file mode 100644 index 5407165..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getLength.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseProperty = require('./_baseProperty'); - -/** - * Gets the "length" property value of `object`. - * - * **Note:** This function is used to avoid a - * [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) that affects - * Safari on at least iOS 8.1-8.3 ARM64. - * - * @private - * @param {Object} object The object to query. - * @returns {*} Returns the "length" value. - */ -var getLength = baseProperty('length'); - -module.exports = getLength; diff --git a/node_modules/lowdb/node_modules/lodash/_getMapData.js b/node_modules/lowdb/node_modules/lodash/_getMapData.js deleted file mode 100644 index 17f6303..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getMapData.js +++ /dev/null @@ -1,18 +0,0 @@ -var isKeyable = require('./_isKeyable'); - -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} - -module.exports = getMapData; diff --git a/node_modules/lowdb/node_modules/lodash/_getMatchData.js b/node_modules/lowdb/node_modules/lodash/_getMatchData.js deleted file mode 100644 index 2cc70f9..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getMatchData.js +++ /dev/null @@ -1,24 +0,0 @@ -var isStrictComparable = require('./_isStrictComparable'), - keys = require('./keys'); - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; -} - -module.exports = getMatchData; diff --git a/node_modules/lowdb/node_modules/lodash/_getNative.js b/node_modules/lowdb/node_modules/lodash/_getNative.js deleted file mode 100644 index 97a622b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getNative.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseIsNative = require('./_baseIsNative'), - getValue = require('./_getValue'); - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -module.exports = getNative; diff --git a/node_modules/lowdb/node_modules/lodash/_getPrototype.js b/node_modules/lowdb/node_modules/lodash/_getPrototype.js deleted file mode 100644 index 1ef6d92..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getPrototype.js +++ /dev/null @@ -1,15 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetPrototype = Object.getPrototypeOf; - -/** - * Gets the `[[Prototype]]` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {null|Object} Returns the `[[Prototype]]`. - */ -function getPrototype(value) { - return nativeGetPrototype(Object(value)); -} - -module.exports = getPrototype; diff --git a/node_modules/lowdb/node_modules/lodash/_getSymbols.js b/node_modules/lowdb/node_modules/lodash/_getSymbols.js deleted file mode 100644 index 1a76917..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getSymbols.js +++ /dev/null @@ -1,24 +0,0 @@ -var stubArray = require('./stubArray'); - -/** Built-in value references. */ -var getOwnPropertySymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbol properties of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -function getSymbols(object) { - // Coerce `object` to an object to avoid non-object errors in V8. - // See https://bugs.chromium.org/p/v8/issues/detail?id=3443 for more details. - return getOwnPropertySymbols(Object(object)); -} - -// Fallback for IE < 11. -if (!getOwnPropertySymbols) { - getSymbols = stubArray; -} - -module.exports = getSymbols; diff --git a/node_modules/lowdb/node_modules/lodash/_getSymbolsIn.js b/node_modules/lowdb/node_modules/lodash/_getSymbolsIn.js deleted file mode 100644 index 3a3729f..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getSymbolsIn.js +++ /dev/null @@ -1,25 +0,0 @@ -var arrayPush = require('./_arrayPush'), - getPrototype = require('./_getPrototype'), - getSymbols = require('./_getSymbols'); - -/** Built-in value references. */ -var getOwnPropertySymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbol properties - * of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !getOwnPropertySymbols ? getSymbols : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; -}; - -module.exports = getSymbolsIn; diff --git a/node_modules/lowdb/node_modules/lodash/_getTag.js b/node_modules/lowdb/node_modules/lodash/_getTag.js deleted file mode 100644 index 0d1a455..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getTag.js +++ /dev/null @@ -1,70 +0,0 @@ -var DataView = require('./_DataView'), - Map = require('./_Map'), - Promise = require('./_Promise'), - Set = require('./_Set'), - WeakMap = require('./_WeakMap'), - toSource = require('./_toSource'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - setTag = '[object Set]', - weakMapTag = '[object WeakMap]'; - -var dataViewTag = '[object DataView]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** Used to detect maps, sets, and weakmaps. */ -var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); - -/** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function getTag(value) { - return objectToString.call(value); -} - -// Fallback for data views, maps, sets, and weak maps in IE 11, -// for data views in Edge, and promises in Node.js. -if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = objectToString.call(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : undefined; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; -} - -module.exports = getTag; diff --git a/node_modules/lowdb/node_modules/lodash/_getValue.js b/node_modules/lowdb/node_modules/lodash/_getValue.js deleted file mode 100644 index 5f7d773..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getValue.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -module.exports = getValue; diff --git a/node_modules/lowdb/node_modules/lodash/_getView.js b/node_modules/lowdb/node_modules/lodash/_getView.js deleted file mode 100644 index df1e5d4..0000000 --- a/node_modules/lowdb/node_modules/lodash/_getView.js +++ /dev/null @@ -1,33 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ -function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++index < length) { - var data = transforms[index], - size = data.size; - - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; -} - -module.exports = getView; diff --git a/node_modules/lowdb/node_modules/lodash/_hasPath.js b/node_modules/lowdb/node_modules/lodash/_hasPath.js deleted file mode 100644 index 4533c60..0000000 --- a/node_modules/lowdb/node_modules/lodash/_hasPath.js +++ /dev/null @@ -1,41 +0,0 @@ -var castPath = require('./_castPath'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isIndex = require('./_isIndex'), - isKey = require('./_isKey'), - isLength = require('./isLength'), - isString = require('./isString'), - toKey = require('./_toKey'); - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = isKey(path, object) ? [path] : castPath(path); - - var result, - index = -1, - length = path.length; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result) { - return result; - } - var length = object ? object.length : 0; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isString(object) || isArguments(object)); -} - -module.exports = hasPath; diff --git a/node_modules/lowdb/node_modules/lodash/_hashClear.js b/node_modules/lowdb/node_modules/lodash/_hashClear.js deleted file mode 100644 index 14c1591..0000000 --- a/node_modules/lowdb/node_modules/lodash/_hashClear.js +++ /dev/null @@ -1,14 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; -} - -module.exports = hashClear; diff --git a/node_modules/lowdb/node_modules/lodash/_hashDelete.js b/node_modules/lowdb/node_modules/lodash/_hashDelete.js deleted file mode 100644 index 45b39fb..0000000 --- a/node_modules/lowdb/node_modules/lodash/_hashDelete.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - return this.has(key) && delete this.__data__[key]; -} - -module.exports = hashDelete; diff --git a/node_modules/lowdb/node_modules/lodash/_hashGet.js b/node_modules/lowdb/node_modules/lodash/_hashGet.js deleted file mode 100644 index 1fc2f34..0000000 --- a/node_modules/lowdb/node_modules/lodash/_hashGet.js +++ /dev/null @@ -1,30 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; -} - -module.exports = hashGet; diff --git a/node_modules/lowdb/node_modules/lodash/_hashHas.js b/node_modules/lowdb/node_modules/lodash/_hashHas.js deleted file mode 100644 index f30aac3..0000000 --- a/node_modules/lowdb/node_modules/lodash/_hashHas.js +++ /dev/null @@ -1,23 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); -} - -module.exports = hashHas; diff --git a/node_modules/lowdb/node_modules/lodash/_hashSet.js b/node_modules/lowdb/node_modules/lodash/_hashSet.js deleted file mode 100644 index 56fec1e..0000000 --- a/node_modules/lowdb/node_modules/lodash/_hashSet.js +++ /dev/null @@ -1,22 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; -} - -module.exports = hashSet; diff --git a/node_modules/lowdb/node_modules/lodash/_indexKeys.js b/node_modules/lowdb/node_modules/lodash/_indexKeys.js deleted file mode 100644 index 0e2fc10..0000000 --- a/node_modules/lowdb/node_modules/lodash/_indexKeys.js +++ /dev/null @@ -1,24 +0,0 @@ -var baseTimes = require('./_baseTimes'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isLength = require('./isLength'), - isString = require('./isString'); - -/** - * Creates an array of index keys for `object` values of arrays, - * `arguments` objects, and strings, otherwise `null` is returned. - * - * @private - * @param {Object} object The object to query. - * @returns {Array|null} Returns index keys, else `null`. - */ -function indexKeys(object) { - var length = object ? object.length : undefined; - if (isLength(length) && - (isArray(object) || isString(object) || isArguments(object))) { - return baseTimes(length, String); - } - return null; -} - -module.exports = indexKeys; diff --git a/node_modules/lowdb/node_modules/lodash/_indexOfNaN.js b/node_modules/lowdb/node_modules/lodash/_indexOfNaN.js deleted file mode 100644 index 49a42bb..0000000 --- a/node_modules/lowdb/node_modules/lodash/_indexOfNaN.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Gets the index at which the first occurrence of `NaN` is found in `array`. - * - * @private - * @param {Array} array The array to search. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched `NaN`, else `-1`. - */ -function indexOfNaN(array, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - var other = array[index]; - if (other !== other) { - return index; - } - } - return -1; -} - -module.exports = indexOfNaN; diff --git a/node_modules/lowdb/node_modules/lodash/_initCloneArray.js b/node_modules/lowdb/node_modules/lodash/_initCloneArray.js deleted file mode 100644 index aef0212..0000000 --- a/node_modules/lowdb/node_modules/lodash/_initCloneArray.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -module.exports = initCloneArray; diff --git a/node_modules/lowdb/node_modules/lodash/_initCloneByTag.js b/node_modules/lowdb/node_modules/lodash/_initCloneByTag.js deleted file mode 100644 index e7b77ed..0000000 --- a/node_modules/lowdb/node_modules/lodash/_initCloneByTag.js +++ /dev/null @@ -1,80 +0,0 @@ -var cloneArrayBuffer = require('./_cloneArrayBuffer'), - cloneDataView = require('./_cloneDataView'), - cloneMap = require('./_cloneMap'), - cloneRegExp = require('./_cloneRegExp'), - cloneSet = require('./_cloneSet'), - cloneSymbol = require('./_cloneSymbol'), - cloneTypedArray = require('./_cloneTypedArray'); - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, cloneFunc, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return cloneTypedArray(object, isDeep); - - case mapTag: - return cloneMap(object, isDeep, cloneFunc); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return cloneRegExp(object); - - case setTag: - return cloneSet(object, isDeep, cloneFunc); - - case symbolTag: - return cloneSymbol(object); - } -} - -module.exports = initCloneByTag; diff --git a/node_modules/lowdb/node_modules/lodash/_initCloneObject.js b/node_modules/lowdb/node_modules/lodash/_initCloneObject.js deleted file mode 100644 index 5a13e64..0000000 --- a/node_modules/lowdb/node_modules/lodash/_initCloneObject.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseCreate = require('./_baseCreate'), - getPrototype = require('./_getPrototype'), - isPrototype = require('./_isPrototype'); - -/** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; -} - -module.exports = initCloneObject; diff --git a/node_modules/lowdb/node_modules/lodash/_isFlattenable.js b/node_modules/lowdb/node_modules/lodash/_isFlattenable.js deleted file mode 100644 index 1764fef..0000000 --- a/node_modules/lowdb/node_modules/lodash/_isFlattenable.js +++ /dev/null @@ -1,15 +0,0 @@ -var isArguments = require('./isArguments'), - isArray = require('./isArray'); - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return isArray(value) || isArguments(value); -} - -module.exports = isFlattenable; diff --git a/node_modules/lowdb/node_modules/lodash/_isFlattenableIteratee.js b/node_modules/lowdb/node_modules/lodash/_isFlattenableIteratee.js deleted file mode 100644 index f7ede3e..0000000 --- a/node_modules/lowdb/node_modules/lodash/_isFlattenableIteratee.js +++ /dev/null @@ -1,16 +0,0 @@ -var isArray = require('./isArray'), - isFunction = require('./isFunction'); - -/** - * Checks if `value` is a flattenable array and not a `_.matchesProperty` - * iteratee shorthand. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenableIteratee(value) { - return isArray(value) && !(value.length == 2 && !isFunction(value[0])); -} - -module.exports = isFlattenableIteratee; diff --git a/node_modules/lowdb/node_modules/lodash/_isHostObject.js b/node_modules/lowdb/node_modules/lodash/_isHostObject.js deleted file mode 100644 index e598c10..0000000 --- a/node_modules/lowdb/node_modules/lodash/_isHostObject.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Checks if `value` is a host object in IE < 9. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a host object, else `false`. - */ -function isHostObject(value) { - // Many host objects are `Object` objects that can coerce to strings - // despite having improperly defined `toString` methods. - var result = false; - if (value != null && typeof value.toString != 'function') { - try { - result = !!(value + ''); - } catch (e) {} - } - return result; -} - -module.exports = isHostObject; diff --git a/node_modules/lowdb/node_modules/lodash/_isIndex.js b/node_modules/lowdb/node_modules/lodash/_isIndex.js deleted file mode 100644 index e123dde..0000000 --- a/node_modules/lowdb/node_modules/lodash/_isIndex.js +++ /dev/null @@ -1,22 +0,0 @@ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); -} - -module.exports = isIndex; diff --git a/node_modules/lowdb/node_modules/lodash/_isIterateeCall.js b/node_modules/lowdb/node_modules/lodash/_isIterateeCall.js deleted file mode 100644 index a0bb5a9..0000000 --- a/node_modules/lowdb/node_modules/lodash/_isIterateeCall.js +++ /dev/null @@ -1,30 +0,0 @@ -var eq = require('./eq'), - isArrayLike = require('./isArrayLike'), - isIndex = require('./_isIndex'), - isObject = require('./isObject'); - -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; -} - -module.exports = isIterateeCall; diff --git a/node_modules/lowdb/node_modules/lodash/_isKey.js b/node_modules/lowdb/node_modules/lodash/_isKey.js deleted file mode 100644 index ff08b06..0000000 --- a/node_modules/lowdb/node_modules/lodash/_isKey.js +++ /dev/null @@ -1,29 +0,0 @@ -var isArray = require('./isArray'), - isSymbol = require('./isSymbol'); - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -module.exports = isKey; diff --git a/node_modules/lowdb/node_modules/lodash/_isKeyable.js b/node_modules/lowdb/node_modules/lodash/_isKeyable.js deleted file mode 100644 index 39f1828..0000000 --- a/node_modules/lowdb/node_modules/lodash/_isKeyable.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} - -module.exports = isKeyable; diff --git a/node_modules/lowdb/node_modules/lodash/_isLaziable.js b/node_modules/lowdb/node_modules/lodash/_isLaziable.js deleted file mode 100644 index a57c4f2..0000000 --- a/node_modules/lowdb/node_modules/lodash/_isLaziable.js +++ /dev/null @@ -1,28 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - getData = require('./_getData'), - getFuncName = require('./_getFuncName'), - lodash = require('./wrapperLodash'); - -/** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ -function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; - - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; -} - -module.exports = isLaziable; diff --git a/node_modules/lowdb/node_modules/lodash/_isMaskable.js b/node_modules/lowdb/node_modules/lodash/_isMaskable.js deleted file mode 100644 index eb98d09..0000000 --- a/node_modules/lowdb/node_modules/lodash/_isMaskable.js +++ /dev/null @@ -1,14 +0,0 @@ -var coreJsData = require('./_coreJsData'), - isFunction = require('./isFunction'), - stubFalse = require('./stubFalse'); - -/** - * Checks if `func` is capable of being masked. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `func` is maskable, else `false`. - */ -var isMaskable = coreJsData ? isFunction : stubFalse; - -module.exports = isMaskable; diff --git a/node_modules/lowdb/node_modules/lodash/_isMasked.js b/node_modules/lowdb/node_modules/lodash/_isMasked.js deleted file mode 100644 index 4b0f21b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_isMasked.js +++ /dev/null @@ -1,20 +0,0 @@ -var coreJsData = require('./_coreJsData'); - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -module.exports = isMasked; diff --git a/node_modules/lowdb/node_modules/lodash/_isPrototype.js b/node_modules/lowdb/node_modules/lodash/_isPrototype.js deleted file mode 100644 index 0f29498..0000000 --- a/node_modules/lowdb/node_modules/lodash/_isPrototype.js +++ /dev/null @@ -1,18 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; -} - -module.exports = isPrototype; diff --git a/node_modules/lowdb/node_modules/lodash/_isStrictComparable.js b/node_modules/lowdb/node_modules/lodash/_isStrictComparable.js deleted file mode 100644 index b59f40b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_isStrictComparable.js +++ /dev/null @@ -1,15 +0,0 @@ -var isObject = require('./isObject'); - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !isObject(value); -} - -module.exports = isStrictComparable; diff --git a/node_modules/lowdb/node_modules/lodash/_iteratorToArray.js b/node_modules/lowdb/node_modules/lodash/_iteratorToArray.js deleted file mode 100644 index 4768566..0000000 --- a/node_modules/lowdb/node_modules/lodash/_iteratorToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ -function iteratorToArray(iterator) { - var data, - result = []; - - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; -} - -module.exports = iteratorToArray; diff --git a/node_modules/lowdb/node_modules/lodash/_lazyClone.js b/node_modules/lowdb/node_modules/lodash/_lazyClone.js deleted file mode 100644 index d8a51f8..0000000 --- a/node_modules/lowdb/node_modules/lodash/_lazyClone.js +++ /dev/null @@ -1,23 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - copyArray = require('./_copyArray'); - -/** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ -function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; -} - -module.exports = lazyClone; diff --git a/node_modules/lowdb/node_modules/lodash/_lazyReverse.js b/node_modules/lowdb/node_modules/lodash/_lazyReverse.js deleted file mode 100644 index c5b5219..0000000 --- a/node_modules/lowdb/node_modules/lodash/_lazyReverse.js +++ /dev/null @@ -1,23 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'); - -/** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ -function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; -} - -module.exports = lazyReverse; diff --git a/node_modules/lowdb/node_modules/lodash/_lazyValue.js b/node_modules/lowdb/node_modules/lodash/_lazyValue.js deleted file mode 100644 index 09bf14b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_lazyValue.js +++ /dev/null @@ -1,73 +0,0 @@ -var baseWrapperValue = require('./_baseWrapperValue'), - getView = require('./_getView'), - isArray = require('./isArray'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** Used to indicate the type of lazy iteratees. */ -var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ -function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || arrLength < LARGE_ARRAY_SIZE || - (arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - - outer: - while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; -} - -module.exports = lazyValue; diff --git a/node_modules/lowdb/node_modules/lodash/_listCacheClear.js b/node_modules/lowdb/node_modules/lodash/_listCacheClear.js deleted file mode 100644 index e4e1325..0000000 --- a/node_modules/lowdb/node_modules/lodash/_listCacheClear.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; -} - -module.exports = listCacheClear; diff --git a/node_modules/lowdb/node_modules/lodash/_listCacheDelete.js b/node_modules/lowdb/node_modules/lodash/_listCacheDelete.js deleted file mode 100644 index 2f32328..0000000 --- a/node_modules/lowdb/node_modules/lodash/_listCacheDelete.js +++ /dev/null @@ -1,34 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - return true; -} - -module.exports = listCacheDelete; diff --git a/node_modules/lowdb/node_modules/lodash/_listCacheGet.js b/node_modules/lowdb/node_modules/lodash/_listCacheGet.js deleted file mode 100644 index f8192fc..0000000 --- a/node_modules/lowdb/node_modules/lodash/_listCacheGet.js +++ /dev/null @@ -1,19 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; -} - -module.exports = listCacheGet; diff --git a/node_modules/lowdb/node_modules/lodash/_listCacheHas.js b/node_modules/lowdb/node_modules/lodash/_listCacheHas.js deleted file mode 100644 index 2adf671..0000000 --- a/node_modules/lowdb/node_modules/lodash/_listCacheHas.js +++ /dev/null @@ -1,16 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; -} - -module.exports = listCacheHas; diff --git a/node_modules/lowdb/node_modules/lodash/_listCacheSet.js b/node_modules/lowdb/node_modules/lodash/_listCacheSet.js deleted file mode 100644 index e2f13b6..0000000 --- a/node_modules/lowdb/node_modules/lodash/_listCacheSet.js +++ /dev/null @@ -1,25 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} - -module.exports = listCacheSet; diff --git a/node_modules/lowdb/node_modules/lodash/_mapCacheClear.js b/node_modules/lowdb/node_modules/lodash/_mapCacheClear.js deleted file mode 100644 index edb42b5..0000000 --- a/node_modules/lowdb/node_modules/lodash/_mapCacheClear.js +++ /dev/null @@ -1,20 +0,0 @@ -var Hash = require('./_Hash'), - ListCache = require('./_ListCache'), - Map = require('./_Map'); - -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; -} - -module.exports = mapCacheClear; diff --git a/node_modules/lowdb/node_modules/lodash/_mapCacheDelete.js b/node_modules/lowdb/node_modules/lodash/_mapCacheDelete.js deleted file mode 100644 index 08f1c2e..0000000 --- a/node_modules/lowdb/node_modules/lodash/_mapCacheDelete.js +++ /dev/null @@ -1,16 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - return getMapData(this, key)['delete'](key); -} - -module.exports = mapCacheDelete; diff --git a/node_modules/lowdb/node_modules/lodash/_mapCacheGet.js b/node_modules/lowdb/node_modules/lodash/_mapCacheGet.js deleted file mode 100644 index f29f55c..0000000 --- a/node_modules/lowdb/node_modules/lodash/_mapCacheGet.js +++ /dev/null @@ -1,16 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} - -module.exports = mapCacheGet; diff --git a/node_modules/lowdb/node_modules/lodash/_mapCacheHas.js b/node_modules/lowdb/node_modules/lodash/_mapCacheHas.js deleted file mode 100644 index a1214c0..0000000 --- a/node_modules/lowdb/node_modules/lodash/_mapCacheHas.js +++ /dev/null @@ -1,16 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} - -module.exports = mapCacheHas; diff --git a/node_modules/lowdb/node_modules/lodash/_mapCacheSet.js b/node_modules/lowdb/node_modules/lodash/_mapCacheSet.js deleted file mode 100644 index 0ef1eaf..0000000 --- a/node_modules/lowdb/node_modules/lodash/_mapCacheSet.js +++ /dev/null @@ -1,18 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - getMapData(this, key).set(key, value); - return this; -} - -module.exports = mapCacheSet; diff --git a/node_modules/lowdb/node_modules/lodash/_mapToArray.js b/node_modules/lowdb/node_modules/lodash/_mapToArray.js deleted file mode 100644 index fe3dd53..0000000 --- a/node_modules/lowdb/node_modules/lodash/_mapToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -module.exports = mapToArray; diff --git a/node_modules/lowdb/node_modules/lodash/_matchesStrictComparable.js b/node_modules/lowdb/node_modules/lodash/_matchesStrictComparable.js deleted file mode 100644 index f608af9..0000000 --- a/node_modules/lowdb/node_modules/lodash/_matchesStrictComparable.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -module.exports = matchesStrictComparable; diff --git a/node_modules/lowdb/node_modules/lodash/_mergeData.js b/node_modules/lowdb/node_modules/lodash/_mergeData.js deleted file mode 100644 index 911e6ae..0000000 --- a/node_modules/lowdb/node_modules/lodash/_mergeData.js +++ /dev/null @@ -1,90 +0,0 @@ -var composeArgs = require('./_composeArgs'), - composeArgsRight = require('./_composeArgsRight'), - replaceHolders = require('./_replaceHolders'); - -/** Used as the internal argument placeholder. */ -var PLACEHOLDER = '__lodash_placeholder__'; - -/** Used to compose bitmasks for wrapper metadata. */ -var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_BOUND_FLAG = 4, - CURRY_FLAG = 8, - ARY_FLAG = 128, - REARG_FLAG = 256; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ -function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG); - - var isCombo = - ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) || - ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || - ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } - // Use source `ary` if it's smaller. - if (srcBitmask & ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; -} - -module.exports = mergeData; diff --git a/node_modules/lowdb/node_modules/lodash/_mergeDefaults.js b/node_modules/lowdb/node_modules/lodash/_mergeDefaults.js deleted file mode 100644 index 33375cc..0000000 --- a/node_modules/lowdb/node_modules/lodash/_mergeDefaults.js +++ /dev/null @@ -1,24 +0,0 @@ -var baseMerge = require('./_baseMerge'), - isObject = require('./isObject'); - -/** - * Used by `_.defaultsDeep` to customize its `_.merge` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. - */ -function mergeDefaults(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - baseMerge(objValue, srcValue, undefined, mergeDefaults, stack.set(srcValue, objValue)); - } - return objValue; -} - -module.exports = mergeDefaults; diff --git a/node_modules/lowdb/node_modules/lodash/_metaMap.js b/node_modules/lowdb/node_modules/lodash/_metaMap.js deleted file mode 100644 index 0157a0b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_metaMap.js +++ /dev/null @@ -1,6 +0,0 @@ -var WeakMap = require('./_WeakMap'); - -/** Used to store function metadata. */ -var metaMap = WeakMap && new WeakMap; - -module.exports = metaMap; diff --git a/node_modules/lowdb/node_modules/lodash/_nativeCreate.js b/node_modules/lowdb/node_modules/lodash/_nativeCreate.js deleted file mode 100644 index c7aede8..0000000 --- a/node_modules/lowdb/node_modules/lodash/_nativeCreate.js +++ /dev/null @@ -1,6 +0,0 @@ -var getNative = require('./_getNative'); - -/* Built-in method references that are verified to be native. */ -var nativeCreate = getNative(Object, 'create'); - -module.exports = nativeCreate; diff --git a/node_modules/lowdb/node_modules/lodash/_parent.js b/node_modules/lowdb/node_modules/lodash/_parent.js deleted file mode 100644 index 81d94d0..0000000 --- a/node_modules/lowdb/node_modules/lodash/_parent.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseGet = require('./_baseGet'), - baseSlice = require('./_baseSlice'); - -/** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ -function parent(object, path) { - return path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); -} - -module.exports = parent; diff --git a/node_modules/lowdb/node_modules/lodash/_reEscape.js b/node_modules/lowdb/node_modules/lodash/_reEscape.js deleted file mode 100644 index 7f47eda..0000000 --- a/node_modules/lowdb/node_modules/lodash/_reEscape.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to match template delimiters. */ -var reEscape = /<%-([\s\S]+?)%>/g; - -module.exports = reEscape; diff --git a/node_modules/lowdb/node_modules/lodash/_reEvaluate.js b/node_modules/lowdb/node_modules/lodash/_reEvaluate.js deleted file mode 100644 index 6adfc31..0000000 --- a/node_modules/lowdb/node_modules/lodash/_reEvaluate.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to match template delimiters. */ -var reEvaluate = /<%([\s\S]+?)%>/g; - -module.exports = reEvaluate; diff --git a/node_modules/lowdb/node_modules/lodash/_reHasComplexSymbol.js b/node_modules/lowdb/node_modules/lodash/_reHasComplexSymbol.js deleted file mode 100644 index be78c4b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_reHasComplexSymbol.js +++ /dev/null @@ -1,13 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0', - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); - -module.exports = reHasComplexSymbol; diff --git a/node_modules/lowdb/node_modules/lodash/_reInterpolate.js b/node_modules/lowdb/node_modules/lodash/_reInterpolate.js deleted file mode 100644 index d02ff0b..0000000 --- a/node_modules/lowdb/node_modules/lodash/_reInterpolate.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to match template delimiters. */ -var reInterpolate = /<%=([\s\S]+?)%>/g; - -module.exports = reInterpolate; diff --git a/node_modules/lowdb/node_modules/lodash/_realNames.js b/node_modules/lowdb/node_modules/lodash/_realNames.js deleted file mode 100644 index aa0d529..0000000 --- a/node_modules/lowdb/node_modules/lodash/_realNames.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to lookup unminified function names. */ -var realNames = {}; - -module.exports = realNames; diff --git a/node_modules/lowdb/node_modules/lodash/_reorder.js b/node_modules/lowdb/node_modules/lodash/_reorder.js deleted file mode 100644 index a3502b0..0000000 --- a/node_modules/lowdb/node_modules/lodash/_reorder.js +++ /dev/null @@ -1,29 +0,0 @@ -var copyArray = require('./_copyArray'), - isIndex = require('./_isIndex'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ -function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; -} - -module.exports = reorder; diff --git a/node_modules/lowdb/node_modules/lodash/_replaceHolders.js b/node_modules/lowdb/node_modules/lodash/_replaceHolders.js deleted file mode 100644 index 74360ec..0000000 --- a/node_modules/lowdb/node_modules/lodash/_replaceHolders.js +++ /dev/null @@ -1,29 +0,0 @@ -/** Used as the internal argument placeholder. */ -var PLACEHOLDER = '__lodash_placeholder__'; - -/** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ -function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; -} - -module.exports = replaceHolders; diff --git a/node_modules/lowdb/node_modules/lodash/_root.js b/node_modules/lowdb/node_modules/lodash/_root.js deleted file mode 100644 index c46a71a..0000000 --- a/node_modules/lowdb/node_modules/lodash/_root.js +++ /dev/null @@ -1,15 +0,0 @@ -var checkGlobal = require('./_checkGlobal'); - -/** Detect free variable `global` from Node.js. */ -var freeGlobal = checkGlobal(typeof global == 'object' && global); - -/** Detect free variable `self`. */ -var freeSelf = checkGlobal(typeof self == 'object' && self); - -/** Detect `this` as the global object. */ -var thisGlobal = checkGlobal(typeof this == 'object' && this); - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || thisGlobal || Function('return this')(); - -module.exports = root; diff --git a/node_modules/lowdb/node_modules/lodash/_setCacheAdd.js b/node_modules/lowdb/node_modules/lodash/_setCacheAdd.js deleted file mode 100644 index 1081a74..0000000 --- a/node_modules/lowdb/node_modules/lodash/_setCacheAdd.js +++ /dev/null @@ -1,19 +0,0 @@ -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -module.exports = setCacheAdd; diff --git a/node_modules/lowdb/node_modules/lodash/_setCacheHas.js b/node_modules/lowdb/node_modules/lodash/_setCacheHas.js deleted file mode 100644 index 9a49255..0000000 --- a/node_modules/lowdb/node_modules/lodash/_setCacheHas.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -module.exports = setCacheHas; diff --git a/node_modules/lowdb/node_modules/lodash/_setData.js b/node_modules/lowdb/node_modules/lodash/_setData.js deleted file mode 100644 index d86c610..0000000 --- a/node_modules/lowdb/node_modules/lodash/_setData.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseSetData = require('./_baseSetData'), - now = require('./now'); - -/** Used to detect hot functions by number of calls within a span of milliseconds. */ -var HOT_COUNT = 150, - HOT_SPAN = 16; - -/** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ -var setData = (function() { - var count = 0, - lastCalled = 0; - - return function(key, value) { - var stamp = now(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return key; - } - } else { - count = 0; - } - return baseSetData(key, value); - }; -}()); - -module.exports = setData; diff --git a/node_modules/lowdb/node_modules/lodash/_setToArray.js b/node_modules/lowdb/node_modules/lodash/_setToArray.js deleted file mode 100644 index b87f074..0000000 --- a/node_modules/lowdb/node_modules/lodash/_setToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -module.exports = setToArray; diff --git a/node_modules/lowdb/node_modules/lodash/_setToPairs.js b/node_modules/lowdb/node_modules/lodash/_setToPairs.js deleted file mode 100644 index 36ad37a..0000000 --- a/node_modules/lowdb/node_modules/lodash/_setToPairs.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ -function setToPairs(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; -} - -module.exports = setToPairs; diff --git a/node_modules/lowdb/node_modules/lodash/_stackClear.js b/node_modules/lowdb/node_modules/lodash/_stackClear.js deleted file mode 100644 index 498482c..0000000 --- a/node_modules/lowdb/node_modules/lodash/_stackClear.js +++ /dev/null @@ -1,14 +0,0 @@ -var ListCache = require('./_ListCache'); - -/** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ -function stackClear() { - this.__data__ = new ListCache; -} - -module.exports = stackClear; diff --git a/node_modules/lowdb/node_modules/lodash/_stackDelete.js b/node_modules/lowdb/node_modules/lodash/_stackDelete.js deleted file mode 100644 index 8c60260..0000000 --- a/node_modules/lowdb/node_modules/lodash/_stackDelete.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function stackDelete(key) { - return this.__data__['delete'](key); -} - -module.exports = stackDelete; diff --git a/node_modules/lowdb/node_modules/lodash/_stackGet.js b/node_modules/lowdb/node_modules/lodash/_stackGet.js deleted file mode 100644 index 1cdf004..0000000 --- a/node_modules/lowdb/node_modules/lodash/_stackGet.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function stackGet(key) { - return this.__data__.get(key); -} - -module.exports = stackGet; diff --git a/node_modules/lowdb/node_modules/lodash/_stackHas.js b/node_modules/lowdb/node_modules/lodash/_stackHas.js deleted file mode 100644 index 16a3ad1..0000000 --- a/node_modules/lowdb/node_modules/lodash/_stackHas.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function stackHas(key) { - return this.__data__.has(key); -} - -module.exports = stackHas; diff --git a/node_modules/lowdb/node_modules/lodash/_stackSet.js b/node_modules/lowdb/node_modules/lodash/_stackSet.js deleted file mode 100644 index 0380ee5..0000000 --- a/node_modules/lowdb/node_modules/lodash/_stackSet.js +++ /dev/null @@ -1,26 +0,0 @@ -var ListCache = require('./_ListCache'), - MapCache = require('./_MapCache'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ -function stackSet(key, value) { - var cache = this.__data__; - if (cache instanceof ListCache && cache.__data__.length == LARGE_ARRAY_SIZE) { - cache = this.__data__ = new MapCache(cache.__data__); - } - cache.set(key, value); - return this; -} - -module.exports = stackSet; diff --git a/node_modules/lowdb/node_modules/lodash/_stringSize.js b/node_modules/lowdb/node_modules/lodash/_stringSize.js deleted file mode 100644 index c64c7ff..0000000 --- a/node_modules/lowdb/node_modules/lodash/_stringSize.js +++ /dev/null @@ -1,47 +0,0 @@ -var reHasComplexSymbol = require('./_reHasComplexSymbol'); - -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0', - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ -function stringSize(string) { - if (!(string && reHasComplexSymbol.test(string))) { - return string.length; - } - var result = reComplexSymbol.lastIndex = 0; - while (reComplexSymbol.test(string)) { - result++; - } - return result; -} - -module.exports = stringSize; diff --git a/node_modules/lowdb/node_modules/lodash/_stringToArray.js b/node_modules/lowdb/node_modules/lodash/_stringToArray.js deleted file mode 100644 index 90986f0..0000000 --- a/node_modules/lowdb/node_modules/lodash/_stringToArray.js +++ /dev/null @@ -1,38 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0', - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function stringToArray(string) { - return string.match(reComplexSymbol); -} - -module.exports = stringToArray; diff --git a/node_modules/lowdb/node_modules/lodash/_stringToPath.js b/node_modules/lowdb/node_modules/lodash/_stringToPath.js deleted file mode 100644 index 8b884b9..0000000 --- a/node_modules/lowdb/node_modules/lodash/_stringToPath.js +++ /dev/null @@ -1,25 +0,0 @@ -var memoize = require('./memoize'), - toString = require('./toString'); - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(\.|\[\])(?:\4|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = memoize(function(string) { - var result = []; - toString(string).replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -module.exports = stringToPath; diff --git a/node_modules/lowdb/node_modules/lodash/_toKey.js b/node_modules/lowdb/node_modules/lodash/_toKey.js deleted file mode 100644 index c6d645c..0000000 --- a/node_modules/lowdb/node_modules/lodash/_toKey.js +++ /dev/null @@ -1,21 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -module.exports = toKey; diff --git a/node_modules/lowdb/node_modules/lodash/_toSource.js b/node_modules/lowdb/node_modules/lodash/_toSource.js deleted file mode 100644 index 43f3ff8..0000000 --- a/node_modules/lowdb/node_modules/lodash/_toSource.js +++ /dev/null @@ -1,23 +0,0 @@ -/** Used to resolve the decompiled source of functions. */ -var funcToString = Function.prototype.toString; - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to process. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -module.exports = toSource; diff --git a/node_modules/lowdb/node_modules/lodash/_unescapeHtmlChar.js b/node_modules/lowdb/node_modules/lodash/_unescapeHtmlChar.js deleted file mode 100644 index 28b3454..0000000 --- a/node_modules/lowdb/node_modules/lodash/_unescapeHtmlChar.js +++ /dev/null @@ -1,22 +0,0 @@ -/** Used to map HTML entities to characters. */ -var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'", - '`': '`' -}; - -/** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ -function unescapeHtmlChar(chr) { - return htmlUnescapes[chr]; -} - -module.exports = unescapeHtmlChar; diff --git a/node_modules/lowdb/node_modules/lodash/_wrapperClone.js b/node_modules/lowdb/node_modules/lodash/_wrapperClone.js deleted file mode 100644 index 7bb58a2..0000000 --- a/node_modules/lowdb/node_modules/lodash/_wrapperClone.js +++ /dev/null @@ -1,23 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - LodashWrapper = require('./_LodashWrapper'), - copyArray = require('./_copyArray'); - -/** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ -function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; -} - -module.exports = wrapperClone; diff --git a/node_modules/lowdb/node_modules/lodash/add.js b/node_modules/lowdb/node_modules/lodash/add.js deleted file mode 100644 index d82c652..0000000 --- a/node_modules/lowdb/node_modules/lodash/add.js +++ /dev/null @@ -1,22 +0,0 @@ -var createMathOperation = require('./_createMathOperation'); - -/** - * Adds two numbers. - * - * @static - * @memberOf _ - * @since 3.4.0 - * @category Math - * @param {number} augend The first number in an addition. - * @param {number} addend The second number in an addition. - * @returns {number} Returns the total. - * @example - * - * _.add(6, 4); - * // => 10 - */ -var add = createMathOperation(function(augend, addend) { - return augend + addend; -}); - -module.exports = add; diff --git a/node_modules/lowdb/node_modules/lodash/after.js b/node_modules/lowdb/node_modules/lodash/after.js deleted file mode 100644 index 910923a..0000000 --- a/node_modules/lowdb/node_modules/lodash/after.js +++ /dev/null @@ -1,42 +0,0 @@ -var toInteger = require('./toInteger'); - -/** Used as the `TypeError` message for "Functions" methods. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => Logs 'done saving!' after the two async saves have completed. - */ -function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; -} - -module.exports = after; diff --git a/node_modules/lowdb/node_modules/lodash/array.js b/node_modules/lowdb/node_modules/lodash/array.js deleted file mode 100644 index af688d3..0000000 --- a/node_modules/lowdb/node_modules/lodash/array.js +++ /dev/null @@ -1,67 +0,0 @@ -module.exports = { - 'chunk': require('./chunk'), - 'compact': require('./compact'), - 'concat': require('./concat'), - 'difference': require('./difference'), - 'differenceBy': require('./differenceBy'), - 'differenceWith': require('./differenceWith'), - 'drop': require('./drop'), - 'dropRight': require('./dropRight'), - 'dropRightWhile': require('./dropRightWhile'), - 'dropWhile': require('./dropWhile'), - 'fill': require('./fill'), - 'findIndex': require('./findIndex'), - 'findLastIndex': require('./findLastIndex'), - 'first': require('./first'), - 'flatten': require('./flatten'), - 'flattenDeep': require('./flattenDeep'), - 'flattenDepth': require('./flattenDepth'), - 'fromPairs': require('./fromPairs'), - 'head': require('./head'), - 'indexOf': require('./indexOf'), - 'initial': require('./initial'), - 'intersection': require('./intersection'), - 'intersectionBy': require('./intersectionBy'), - 'intersectionWith': require('./intersectionWith'), - 'join': require('./join'), - 'last': require('./last'), - 'lastIndexOf': require('./lastIndexOf'), - 'nth': require('./nth'), - 'pull': require('./pull'), - 'pullAll': require('./pullAll'), - 'pullAllBy': require('./pullAllBy'), - 'pullAllWith': require('./pullAllWith'), - 'pullAt': require('./pullAt'), - 'remove': require('./remove'), - 'reverse': require('./reverse'), - 'slice': require('./slice'), - 'sortedIndex': require('./sortedIndex'), - 'sortedIndexBy': require('./sortedIndexBy'), - 'sortedIndexOf': require('./sortedIndexOf'), - 'sortedLastIndex': require('./sortedLastIndex'), - 'sortedLastIndexBy': require('./sortedLastIndexBy'), - 'sortedLastIndexOf': require('./sortedLastIndexOf'), - 'sortedUniq': require('./sortedUniq'), - 'sortedUniqBy': require('./sortedUniqBy'), - 'tail': require('./tail'), - 'take': require('./take'), - 'takeRight': require('./takeRight'), - 'takeRightWhile': require('./takeRightWhile'), - 'takeWhile': require('./takeWhile'), - 'union': require('./union'), - 'unionBy': require('./unionBy'), - 'unionWith': require('./unionWith'), - 'uniq': require('./uniq'), - 'uniqBy': require('./uniqBy'), - 'uniqWith': require('./uniqWith'), - 'unzip': require('./unzip'), - 'unzipWith': require('./unzipWith'), - 'without': require('./without'), - 'xor': require('./xor'), - 'xorBy': require('./xorBy'), - 'xorWith': require('./xorWith'), - 'zip': require('./zip'), - 'zipObject': require('./zipObject'), - 'zipObjectDeep': require('./zipObjectDeep'), - 'zipWith': require('./zipWith') -}; diff --git a/node_modules/lowdb/node_modules/lodash/ary.js b/node_modules/lowdb/node_modules/lodash/ary.js deleted file mode 100644 index 91ce379..0000000 --- a/node_modules/lowdb/node_modules/lodash/ary.js +++ /dev/null @@ -1,29 +0,0 @@ -var createWrapper = require('./_createWrapper'); - -/** Used to compose bitmasks for wrapper metadata. */ -var ARY_FLAG = 128; - -/** - * Creates a function that invokes `func`, with up to `n` arguments, - * ignoring any additional arguments. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ -function ary(func, n, guard) { - n = guard ? undefined : n; - n = (func && n == null) ? func.length : n; - return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); -} - -module.exports = ary; diff --git a/node_modules/lowdb/node_modules/lodash/assign.js b/node_modules/lowdb/node_modules/lodash/assign.js deleted file mode 100644 index 2a60ff2..0000000 --- a/node_modules/lowdb/node_modules/lodash/assign.js +++ /dev/null @@ -1,64 +0,0 @@ -var assignValue = require('./_assignValue'), - copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - isArrayLike = require('./isArrayLike'), - isPrototype = require('./_isPrototype'), - keys = require('./keys'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ -var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); - -/** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.c = 3; - * } - * - * function Bar() { - * this.e = 5; - * } - * - * Foo.prototype.d = 4; - * Bar.prototype.f = 6; - * - * _.assign({ 'a': 1 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3, 'e': 5 } - */ -var assign = createAssigner(function(object, source) { - if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } -}); - -module.exports = assign; diff --git a/node_modules/lowdb/node_modules/lodash/assignIn.js b/node_modules/lowdb/node_modules/lodash/assignIn.js deleted file mode 100644 index b001c49..0000000 --- a/node_modules/lowdb/node_modules/lodash/assignIn.js +++ /dev/null @@ -1,58 +0,0 @@ -var assignValue = require('./_assignValue'), - copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - isArrayLike = require('./isArrayLike'), - isPrototype = require('./_isPrototype'), - keysIn = require('./keysIn'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ -var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); - -/** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * function Bar() { - * this.d = 4; - * } - * - * Foo.prototype.c = 3; - * Bar.prototype.e = 5; - * - * _.assignIn({ 'a': 1 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 } - */ -var assignIn = createAssigner(function(object, source) { - if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { - copyObject(source, keysIn(source), object); - return; - } - for (var key in source) { - assignValue(object, key, source[key]); - } -}); - -module.exports = assignIn; diff --git a/node_modules/lowdb/node_modules/lodash/assignInWith.js b/node_modules/lowdb/node_modules/lodash/assignInWith.js deleted file mode 100644 index 68fcc0b..0000000 --- a/node_modules/lowdb/node_modules/lodash/assignInWith.js +++ /dev/null @@ -1,38 +0,0 @@ -var copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - keysIn = require('./keysIn'); - -/** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); -}); - -module.exports = assignInWith; diff --git a/node_modules/lowdb/node_modules/lodash/assignWith.js b/node_modules/lowdb/node_modules/lodash/assignWith.js deleted file mode 100644 index 7dc6c76..0000000 --- a/node_modules/lowdb/node_modules/lodash/assignWith.js +++ /dev/null @@ -1,37 +0,0 @@ -var copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - keys = require('./keys'); - -/** - * This method is like `_.assign` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignInWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); -}); - -module.exports = assignWith; diff --git a/node_modules/lowdb/node_modules/lodash/at.js b/node_modules/lowdb/node_modules/lodash/at.js deleted file mode 100644 index 3f2ec0c..0000000 --- a/node_modules/lowdb/node_modules/lodash/at.js +++ /dev/null @@ -1,26 +0,0 @@ -var baseAt = require('./_baseAt'), - baseFlatten = require('./_baseFlatten'), - rest = require('./rest'); - -/** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths of elements to pick. - * @returns {Array} Returns the picked values. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - */ -var at = rest(function(object, paths) { - return baseAt(object, baseFlatten(paths, 1)); -}); - -module.exports = at; diff --git a/node_modules/lowdb/node_modules/lodash/attempt.js b/node_modules/lowdb/node_modules/lodash/attempt.js deleted file mode 100644 index e65b2e6..0000000 --- a/node_modules/lowdb/node_modules/lodash/attempt.js +++ /dev/null @@ -1,35 +0,0 @@ -var apply = require('./_apply'), - isError = require('./isError'), - rest = require('./rest'); - -/** - * Attempts to invoke `func`, returning either the result or the caught error - * object. Any additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {Function} func The function to attempt. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {*} Returns the `func` result or error object. - * @example - * - * // Avoid throwing errors for invalid selectors. - * var elements = _.attempt(function(selector) { - * return document.querySelectorAll(selector); - * }, '>_>'); - * - * if (_.isError(elements)) { - * elements = []; - * } - */ -var attempt = rest(function(func, args) { - try { - return apply(func, undefined, args); - } catch (e) { - return isError(e) ? e : new Error(e); - } -}); - -module.exports = attempt; diff --git a/node_modules/lowdb/node_modules/lodash/before.js b/node_modules/lowdb/node_modules/lodash/before.js deleted file mode 100644 index a495adc..0000000 --- a/node_modules/lowdb/node_modules/lodash/before.js +++ /dev/null @@ -1,40 +0,0 @@ -var toInteger = require('./toInteger'); - -/** Used as the `TypeError` message for "Functions" methods. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => allows adding up to 4 contacts to the list - */ -function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; -} - -module.exports = before; diff --git a/node_modules/lowdb/node_modules/lodash/bind.js b/node_modules/lowdb/node_modules/lodash/bind.js deleted file mode 100644 index 893932a..0000000 --- a/node_modules/lowdb/node_modules/lodash/bind.js +++ /dev/null @@ -1,57 +0,0 @@ -var createWrapper = require('./_createWrapper'), - getHolder = require('./_getHolder'), - replaceHolders = require('./_replaceHolders'), - rest = require('./rest'); - -/** Used to compose bitmasks for wrapper metadata. */ -var BIND_FLAG = 1, - PARTIAL_FLAG = 32; - -/** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var greet = function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * }; - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ -var bind = rest(function(func, thisArg, partials) { - var bitmask = BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= PARTIAL_FLAG; - } - return createWrapper(func, bitmask, thisArg, partials, holders); -}); - -// Assign default placeholders. -bind.placeholder = {}; - -module.exports = bind; diff --git a/node_modules/lowdb/node_modules/lodash/bindAll.js b/node_modules/lowdb/node_modules/lodash/bindAll.js deleted file mode 100644 index 7d1e9ba..0000000 --- a/node_modules/lowdb/node_modules/lodash/bindAll.js +++ /dev/null @@ -1,41 +0,0 @@ -var arrayEach = require('./_arrayEach'), - baseFlatten = require('./_baseFlatten'), - bind = require('./bind'), - rest = require('./rest'), - toKey = require('./_toKey'); - -/** - * Binds methods of an object to the object itself, overwriting the existing - * method. - * - * **Note:** This method doesn't set the "length" property of bound functions. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {Object} object The object to bind and assign the bound methods to. - * @param {...(string|string[])} methodNames The object method names to bind. - * @returns {Object} Returns `object`. - * @example - * - * var view = { - * 'label': 'docs', - * 'onClick': function() { - * console.log('clicked ' + this.label); - * } - * }; - * - * _.bindAll(view, ['onClick']); - * jQuery(element).on('click', view.onClick); - * // => Logs 'clicked docs' when clicked. - */ -var bindAll = rest(function(object, methodNames) { - arrayEach(baseFlatten(methodNames, 1), function(key) { - key = toKey(key); - object[key] = bind(object[key], object); - }); - return object; -}); - -module.exports = bindAll; diff --git a/node_modules/lowdb/node_modules/lodash/bindKey.js b/node_modules/lowdb/node_modules/lodash/bindKey.js deleted file mode 100644 index 1ed754b..0000000 --- a/node_modules/lowdb/node_modules/lodash/bindKey.js +++ /dev/null @@ -1,68 +0,0 @@ -var createWrapper = require('./_createWrapper'), - getHolder = require('./_getHolder'), - replaceHolders = require('./_replaceHolders'), - rest = require('./rest'); - -/** Used to compose bitmasks for wrapper metadata. */ -var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - PARTIAL_FLAG = 32; - -/** - * Creates a function that invokes the method at `object[key]` with `partials` - * prepended to the arguments it receives. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. See - * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Function - * @param {Object} object The object to invoke the method on. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // Bound with placeholders. - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ -var bindKey = rest(function(object, key, partials) { - var bitmask = BIND_FLAG | BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= PARTIAL_FLAG; - } - return createWrapper(key, bitmask, object, partials, holders); -}); - -// Assign default placeholders. -bindKey.placeholder = {}; - -module.exports = bindKey; diff --git a/node_modules/lowdb/node_modules/lodash/camelCase.js b/node_modules/lowdb/node_modules/lodash/camelCase.js deleted file mode 100644 index d7390de..0000000 --- a/node_modules/lowdb/node_modules/lodash/camelCase.js +++ /dev/null @@ -1,29 +0,0 @@ -var capitalize = require('./capitalize'), - createCompounder = require('./_createCompounder'); - -/** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ -var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); -}); - -module.exports = camelCase; diff --git a/node_modules/lowdb/node_modules/lodash/capitalize.js b/node_modules/lowdb/node_modules/lodash/capitalize.js deleted file mode 100644 index 3e1600e..0000000 --- a/node_modules/lowdb/node_modules/lodash/capitalize.js +++ /dev/null @@ -1,23 +0,0 @@ -var toString = require('./toString'), - upperFirst = require('./upperFirst'); - -/** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ -function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); -} - -module.exports = capitalize; diff --git a/node_modules/lowdb/node_modules/lodash/castArray.js b/node_modules/lowdb/node_modules/lodash/castArray.js deleted file mode 100644 index e470bdb..0000000 --- a/node_modules/lowdb/node_modules/lodash/castArray.js +++ /dev/null @@ -1,44 +0,0 @@ -var isArray = require('./isArray'); - -/** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ -function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; -} - -module.exports = castArray; diff --git a/node_modules/lowdb/node_modules/lodash/ceil.js b/node_modules/lowdb/node_modules/lodash/ceil.js deleted file mode 100644 index 56c8722..0000000 --- a/node_modules/lowdb/node_modules/lodash/ceil.js +++ /dev/null @@ -1,26 +0,0 @@ -var createRound = require('./_createRound'); - -/** - * Computes `number` rounded up to `precision`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Math - * @param {number} number The number to round up. - * @param {number} [precision=0] The precision to round up to. - * @returns {number} Returns the rounded up number. - * @example - * - * _.ceil(4.006); - * // => 5 - * - * _.ceil(6.004, 2); - * // => 6.01 - * - * _.ceil(6040, -2); - * // => 6100 - */ -var ceil = createRound('ceil'); - -module.exports = ceil; diff --git a/node_modules/lowdb/node_modules/lodash/chain.js b/node_modules/lowdb/node_modules/lodash/chain.js deleted file mode 100644 index f6cd647..0000000 --- a/node_modules/lowdb/node_modules/lodash/chain.js +++ /dev/null @@ -1,38 +0,0 @@ -var lodash = require('./wrapperLodash'); - -/** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ -function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; -} - -module.exports = chain; diff --git a/node_modules/lowdb/node_modules/lodash/chunk.js b/node_modules/lowdb/node_modules/lodash/chunk.js deleted file mode 100644 index 356510f..0000000 --- a/node_modules/lowdb/node_modules/lodash/chunk.js +++ /dev/null @@ -1,50 +0,0 @@ -var baseSlice = require('./_baseSlice'), - isIterateeCall = require('./_isIterateeCall'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ -function chunk(array, size, guard) { - if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { - size = 1; - } else { - size = nativeMax(toInteger(size), 0); - } - var length = array ? array.length : 0; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; -} - -module.exports = chunk; diff --git a/node_modules/lowdb/node_modules/lodash/clamp.js b/node_modules/lowdb/node_modules/lodash/clamp.js deleted file mode 100644 index 91a72c9..0000000 --- a/node_modules/lowdb/node_modules/lodash/clamp.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseClamp = require('./_baseClamp'), - toNumber = require('./toNumber'); - -/** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ -function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); -} - -module.exports = clamp; diff --git a/node_modules/lowdb/node_modules/lodash/clone.js b/node_modules/lowdb/node_modules/lodash/clone.js deleted file mode 100644 index d02395e..0000000 --- a/node_modules/lowdb/node_modules/lodash/clone.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ -function clone(value) { - return baseClone(value, false, true); -} - -module.exports = clone; diff --git a/node_modules/lowdb/node_modules/lodash/cloneDeep.js b/node_modules/lowdb/node_modules/lodash/cloneDeep.js deleted file mode 100644 index 94efce1..0000000 --- a/node_modules/lowdb/node_modules/lodash/cloneDeep.js +++ /dev/null @@ -1,25 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return baseClone(value, true, true); -} - -module.exports = cloneDeep; diff --git a/node_modules/lowdb/node_modules/lodash/cloneDeepWith.js b/node_modules/lowdb/node_modules/lodash/cloneDeepWith.js deleted file mode 100644 index 4a345fb..0000000 --- a/node_modules/lowdb/node_modules/lodash/cloneDeepWith.js +++ /dev/null @@ -1,35 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ -function cloneDeepWith(value, customizer) { - return baseClone(value, true, true, customizer); -} - -module.exports = cloneDeepWith; diff --git a/node_modules/lowdb/node_modules/lodash/cloneWith.js b/node_modules/lowdb/node_modules/lodash/cloneWith.js deleted file mode 100644 index c85f573..0000000 --- a/node_modules/lowdb/node_modules/lodash/cloneWith.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ -function cloneWith(value, customizer) { - return baseClone(value, false, true, customizer); -} - -module.exports = cloneWith; diff --git a/node_modules/lowdb/node_modules/lodash/collection.js b/node_modules/lowdb/node_modules/lodash/collection.js deleted file mode 100644 index 22b0c8b..0000000 --- a/node_modules/lowdb/node_modules/lodash/collection.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = { - 'at': require('./at'), - 'countBy': require('./countBy'), - 'each': require('./each'), - 'eachRight': require('./eachRight'), - 'every': require('./every'), - 'filter': require('./filter'), - 'find': require('./find'), - 'findLast': require('./findLast'), - 'flatMap': require('./flatMap'), - 'flatMapDeep': require('./flatMapDeep'), - 'flatMapDepth': require('./flatMapDepth'), - 'forEach': require('./forEach'), - 'forEachRight': require('./forEachRight'), - 'groupBy': require('./groupBy'), - 'includes': require('./includes'), - 'invokeMap': require('./invokeMap'), - 'keyBy': require('./keyBy'), - 'map': require('./map'), - 'orderBy': require('./orderBy'), - 'partition': require('./partition'), - 'reduce': require('./reduce'), - 'reduceRight': require('./reduceRight'), - 'reject': require('./reject'), - 'sample': require('./sample'), - 'sampleSize': require('./sampleSize'), - 'shuffle': require('./shuffle'), - 'size': require('./size'), - 'some': require('./some'), - 'sortBy': require('./sortBy') -}; diff --git a/node_modules/lowdb/node_modules/lodash/commit.js b/node_modules/lowdb/node_modules/lodash/commit.js deleted file mode 100644 index fe4db71..0000000 --- a/node_modules/lowdb/node_modules/lodash/commit.js +++ /dev/null @@ -1,33 +0,0 @@ -var LodashWrapper = require('./_LodashWrapper'); - -/** - * Executes the chain sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ -function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); -} - -module.exports = wrapperCommit; diff --git a/node_modules/lowdb/node_modules/lodash/compact.js b/node_modules/lowdb/node_modules/lodash/compact.js deleted file mode 100644 index 790f311..0000000 --- a/node_modules/lowdb/node_modules/lodash/compact.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ -function compact(array) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; -} - -module.exports = compact; diff --git a/node_modules/lowdb/node_modules/lodash/concat.js b/node_modules/lowdb/node_modules/lodash/concat.js deleted file mode 100644 index 506306c..0000000 --- a/node_modules/lowdb/node_modules/lodash/concat.js +++ /dev/null @@ -1,42 +0,0 @@ -var arrayPush = require('./_arrayPush'), - baseFlatten = require('./_baseFlatten'), - copyArray = require('./_copyArray'), - isArray = require('./isArray'); - -/** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @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] - */ -function concat() { - var length = arguments.length, - args = Array(length ? length - 1 : 0), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return length - ? arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)) - : []; -} - -module.exports = concat; diff --git a/node_modules/lowdb/node_modules/lodash/cond.js b/node_modules/lowdb/node_modules/lodash/cond.js deleted file mode 100644 index cdebd12..0000000 --- a/node_modules/lowdb/node_modules/lodash/cond.js +++ /dev/null @@ -1,60 +0,0 @@ -var apply = require('./_apply'), - arrayMap = require('./_arrayMap'), - baseIteratee = require('./_baseIteratee'), - rest = require('./rest'); - -/** Used as the `TypeError` message for "Functions" methods. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * Creates a function that iterates over `pairs` and invokes the corresponding - * function of the first predicate to return truthy. The predicate-function - * pairs are invoked with the `this` binding and arguments of the created - * function. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Util - * @param {Array} pairs The predicate-function pairs. - * @returns {Function} Returns the new composite function. - * @example - * - * var func = _.cond([ - * [_.matches({ 'a': 1 }), _.constant('matches A')], - * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], - * [_.constant(true), _.constant('no match')] - * ]); - * - * func({ 'a': 1, 'b': 2 }); - * // => 'matches A' - * - * func({ 'a': 0, 'b': 1 }); - * // => 'matches B' - * - * func({ 'a': '1', 'b': '2' }); - * // => 'no match' - */ -function cond(pairs) { - var length = pairs ? pairs.length : 0, - toIteratee = baseIteratee; - - pairs = !length ? [] : arrayMap(pairs, function(pair) { - if (typeof pair[1] != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return [toIteratee(pair[0]), pair[1]]; - }); - - return rest(function(args) { - var index = -1; - while (++index < length) { - var pair = pairs[index]; - if (apply(pair[0], this, args)) { - return apply(pair[1], this, args); - } - } - }); -} - -module.exports = cond; diff --git a/node_modules/lowdb/node_modules/lodash/conforms.js b/node_modules/lowdb/node_modules/lodash/conforms.js deleted file mode 100644 index 2a39154..0000000 --- a/node_modules/lowdb/node_modules/lodash/conforms.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseClone = require('./_baseClone'), - baseConforms = require('./_baseConforms'); - -/** - * Creates a function that invokes the predicate properties of `source` with - * the corresponding property values of a given object, returning `true` if - * all predicates return truthy, else `false`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Util - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * _.filter(users, _.conforms({ 'age': function(n) { return n > 38; } })); - * // => [{ 'user': 'fred', 'age': 40 }] - */ -function conforms(source) { - return baseConforms(baseClone(source, true)); -} - -module.exports = conforms; diff --git a/node_modules/lowdb/node_modules/lodash/constant.js b/node_modules/lowdb/node_modules/lodash/constant.js deleted file mode 100644 index 655ece3..0000000 --- a/node_modules/lowdb/node_modules/lodash/constant.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ -function constant(value) { - return function() { - return value; - }; -} - -module.exports = constant; diff --git a/node_modules/lowdb/node_modules/lodash/core.js b/node_modules/lowdb/node_modules/lodash/core.js deleted file mode 100644 index 9b6092d..0000000 --- a/node_modules/lowdb/node_modules/lodash/core.js +++ /dev/null @@ -1,3830 +0,0 @@ -/** - * @license - * lodash (Custom Build) - * Build: `lodash core -o ./dist/lodash.core.js` - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.13.1'; - - /** Used as the `TypeError` message for "Functions" methods. */ - var FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used to compose bitmasks for wrapper metadata. */ - var BIND_FLAG = 1, - PARTIAL_FLAG = 32; - - /** Used to compose bitmasks for comparison styles. */ - var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - stringTag = '[object String]'; - - /** Used to match HTML entities and HTML characters. */ - var reUnescapedHtml = /[&<>"'`]/g, - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = checkGlobal(typeof global == 'object' && global); - - /** Detect free variable `self`. */ - var freeSelf = checkGlobal(typeof self == 'object' && self); - - /** Detect `this` as the global object. */ - var thisGlobal = checkGlobal(typeof this == 'object' && this); - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || thisGlobal || Function('return this')(); - - /*--------------------------------------------------------------------------*/ - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - array.push.apply(array, values); - return array; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to search. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return baseMap(props, function(key) { - return object[key]; - }); - } - - /** - * Checks if `value` is a global object. - * - * @private - * @param {*} value The value to check. - * @returns {null|Object} Returns `value` if it's a global object, else `null`. - */ - function checkGlobal(value) { - return (value && value.Object === Object) ? value : null; - } - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeHtmlChar(chr) { - return htmlEscapes[chr]; - } - - /** - * Checks if `value` is a host object in IE < 9. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a host object, else `false`. - */ - function isHostObject() { - return false; - } - - /*--------------------------------------------------------------------------*/ - - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Built-in value references. */ - var objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeIsFinite = root.isFinite, - nativeKeys = Object.keys, - nativeMax = Math.max; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array of at least `200` elements - * and any iteratees accept only one argument. The heuristic for whether a - * section qualifies for shortcut fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `deburr`, `divide`, `each`, - * `eachRight`, `endsWith`, `eq`, `escape`, `escapeRegExp`, `every`, `find`, - * `findIndex`, `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `first`, - * `floor`, `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, - * `forOwnRight`, `get`, `gt`, `gte`, `has`, `hasIn`, `head`, `identity`, - * `includes`, `indexOf`, `inRange`, `invoke`, `isArguments`, `isArray`, - * `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, `isBoolean`, - * `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, `isEqualWith`, - * `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, `isMap`, - * `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - return value instanceof LodashWrapper - ? value - : new LodashWrapper(value); - } - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - } - - LodashWrapper.prototype = baseCreate(lodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Used by `_.defaults` to customize its `_.assignIn` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ - function assignInDefaults(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; - } - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - object[key] = value; - } - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} prototype The object to inherit from. - * @returns {Object} Returns the new object. - */ - function baseCreate(proto) { - return isObject(proto) ? objectCreate(proto) : {}; - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts an array - * of `func` arguments. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Object} args The arguments to provide to `func`. - * @returns {number} Returns the timer id. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !false) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return baseFilter(props, function(key) { - return isFunction(object[key]); - }); - } - - /** - * The base implementation of `_.gt` which doesn't coerce arguments to numbers. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @param {boolean} [bitmask] The bitmask of comparison flags. - * The bitmask may be composed of the following flags: - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, customizer, bitmask, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparisons. - * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = objectToString.call(object); - objTag = objTag == argsTag ? objectTag : objTag; - } - if (!othIsArr) { - othTag = objectToString.call(other); - othTag = othTag == argsTag ? objectTag : othTag; - } - var objIsObj = objTag == objectTag && !isHostObject(object), - othIsObj = othTag == objectTag && !isHostObject(other), - isSameTag = objTag == othTag; - - stack || (stack = []); - var stacked = find(stack, function(entry) { - return entry[0] === object; - }); - if (stacked && stacked[1]) { - return stacked[1] == other; - } - stack.push([object, other]); - if (isSameTag && !objIsObj) { - var result = (objIsArr) - ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) - : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); - stack.pop(); - return result; - } - if (!(bitmask & PARTIAL_COMPARE_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - var result = equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); - stack.pop(); - return result; - } - } - if (!isSameTag) { - return false; - } - var result = equalObjects(object, other, equalFunc, customizer, bitmask, stack); - stack.pop(); - return result; - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(func) { - if (typeof func == 'function') { - return func; - } - if (func == null) { - return identity; - } - return (typeof func == 'object' ? baseMatches : baseProperty)(func); - } - - /** - * The base implementation of `_.keys` which doesn't skip the constructor - * property of prototypes or treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - return nativeKeys(Object(object)); - } - - /** - * The base implementation of `_.keysIn` which doesn't skip the constructor - * property of prototypes or treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - object = object == null ? object : Object(object); - - var result = []; - for (var key in object) { - result.push(key); - } - return result; - } - - /** - * The base implementation of `_.lt` which doesn't coerce arguments to numbers. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other; - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var props = keys(source); - return function(object) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length]; - if (!(key in object && - baseIsEqual(source[key], object[key], undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG) - )) { - return false; - } - } - return true; - }; - } - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, props) { - object = Object(object); - return reduce(props, function(result, key) { - if (key in object) { - result[key] = object[key]; - } - return result; - }, {}); - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source) { - return baseSlice(source, 0, source.length); - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - return reduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = false; - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = false; - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : source[key]; - - assignValue(object, key, newValue); - } - return object; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return rest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtorWrapper(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - predicate = baseIteratee(predicate, 3); - if (!isArrayLike(collection)) { - var props = keys(collection); - } - var index = findIndexFunc(props || collection, function(value, key) { - if (props) { - key = value; - value = iterable[key]; - } - return predicate(value, key, iterable); - }, fromIndex); - return index > -1 ? collection[props ? props[index] : index] : undefined; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` - * for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartialWrapper(func, bitmask, thisArg, partials) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var isBind = bitmask & BIND_FLAG, - Ctor = createCtorWrapper(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return fn.apply(isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - var index = -1, - result = true, - seen = (bitmask & UNORDERED_COMPARE_FLAG) ? [] : undefined; - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - var compared; - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!baseSome(other, function(othValue, othIndex) { - if (!indexOf(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, customizer, bitmask, stack) - )) { - result = false; - break; - } - } - return result; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { - switch (tag) { - - case boolTag: - case dateTag: - // Coerce dates and booleans to numbers, dates to milliseconds and - // booleans to `1` or `0` treating invalid dates coerced to `NaN` as - // not equal. - return +object == +other; - - case errorTag: - return object.name == other.name && object.message == other.message; - - case numberTag: - // Treat `NaN` vs. `NaN` as equal. - return (object != +object) ? other != +other : object == +other; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/6.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - var result = true; - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - var compared; - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - return result; - } - - /** - * Gets the "length" property value of `object`. - * - * **Note:** This function is used to avoid a - * [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) that affects - * Safari on at least iOS 8.1-8.3 ARM64. - * - * @private - * @param {Object} object The object to query. - * @returns {*} Returns the "length" value. - */ - var getLength = baseProperty('length'); - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return isArray(value) || isArguments(value); - } - - /** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ - var toKey = String; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - return baseFilter(array, Boolean); - } - - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @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] - */ - function concat() { - var length = arguments.length, - args = Array(length ? length - 1 : 0), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return length - ? arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)) - : []; - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index); - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, 1) : []; - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, INFINITY) : []; - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return (array && array.length) ? array[0] : undefined; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (typeof fromIndex == 'number') { - fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; - } else { - fromIndex = 0; - } - var index = (fromIndex || 0) - 1, - isReflexive = value === value; - - while (++index < length) { - var other = array[index]; - if ((isReflexive ? other === value : other !== other)) { - return index; - } - } - return -1; - } - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array ? array.length : 0; - start = start == null ? 0 : +start; - end = end === undefined ? length : +end; - return length ? baseSlice(array, start, end) : []; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } - - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - predicate = guard ? undefined : predicate; - return baseEvery(collection, baseIteratee(predicate)); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ - function filter(collection, predicate) { - return baseFilter(collection, baseIteratee(predicate)); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex); - - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _([1, 2]).forEach(function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - return baseEach(collection, baseIteratee(iteratee)); - } - - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - return baseMap(collection, baseIteratee(iteratee)); - } - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - collection = isArrayLike(collection) ? collection : keys(collection); - return collection.length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - predicate = guard ? undefined : predicate; - return baseSome(collection, baseIteratee(predicate)); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Array|Array[]|Function|Function[]|Object|Object[]|string|string[])} - * [iteratees=[_.identity]] The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, function(o) { return o.user; }); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] - * - * _.sortBy(users, 'user', function(o) { - * return Math.floor(o.age / 10); - * }); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - */ - function sortBy(collection, iteratee) { - var index = 0; - iteratee = baseIteratee(iteratee); - - return baseMap(baseMap(collection, function(value, key, collection) { - return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; - }).sort(function(object, other) { - return compareAscending(object.criteria, other.criteria) || (object.index - other.index); - }), baseProperty('value')); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => allows adding up to 4 contacts to the list - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var greet = function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * }; - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = rest(function(func, thisArg, partials) { - return createPartialWrapper(func, BIND_FLAG | PARTIAL_FLAG, thisArg, partials); - }); - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one or more milliseconds. - */ - var defer = rest(function(func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = rest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - return !predicate.apply(this, arguments); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // `initialize` invokes `createApplication` once - */ - function once(func) { - return before(2, func); - } - - /** - * Creates a function that invokes `func` with the `this` binding of the - * created function and arguments from `start` and beyond provided as - * an array. - * - * **Note:** This method is based on the - * [rest parameter](https://mdn.io/rest_parameters). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.rest(function(what, names) { - * return what + ' ' + _.initial(names).join(', ') + - * (_.size(names) > 1 ? ', & ' : '') + _.last(names); - * }); - * - * say('hello', 'fred', 'barney', 'pebbles'); - * // => 'hello fred, barney, & pebbles' - */ - function rest(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = nativeMax(start === undefined ? (func.length - 1) : toInteger(start), 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - var otherArgs = Array(start + 1); - index = -1; - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = array; - return func.apply(this, otherArgs); - }; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - if (!isObject(value)) { - return value; - } - return isArray(value) ? copyArray(value) : copyObject(value, keys(value)); - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'user': 'fred' }; - * var other = { 'user': 'fred' }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - function isArguments(value) { - // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode. - return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && - (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); - } - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @type {Function} - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(getLength(value)) && !isFunction(value); - } - - /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && objectToString.call(value) == boolTag); - } - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - function isDate(value) { - return isObjectLike(value) && objectToString.call(value) == dateTag; - } - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (isArrayLike(value) && - (isArray(value) || isString(value) || - isFunction(value.splice) || isArguments(value))) { - return !value.length; - } - return !keys(value).length; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are **not** supported. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, - * else `false`. - * @example - * - * var object = { 'user': 'fred' }; - * var other = { 'user': 'fred' }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, - * else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8 which returns 'object' for typed array and weak map constructors, - // and PhantomJS 1.9 which returns 'function' for `NodeList` instances. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This function is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, - * else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return !!value && typeof value == 'object'; - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && objectToString.call(value) == numberTag); - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - function isRegExp(value) { - return isObject(value) && objectToString.call(value) == regexpTag; - } - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); - } - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!isArrayLike(value)) { - return values(value); - } - return value.length ? copyArray(value) : []; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/6.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - var toInteger = Number; - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - var toNumber = Number; - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {string} Returns the string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - if (typeof value == 'string') { - return value; - } - return value == null ? '' : (value + ''); - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.c = 3; - * } - * - * function Bar() { - * this.e = 5; - * } - * - * Foo.prototype.d = 4; - * Bar.prototype.f = 6; - * - * _.assign({ 'a': 1 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3, 'e': 5 } - */ - var assign = createAssigner(function(object, source) { - copyObject(source, keys(source), object); - }); - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * function Bar() { - * this.d = 4; - * } - * - * Foo.prototype.c = 3; - * Bar.prototype.e = 5; - * - * _.assignIn({ 'a': 1 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - - /** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? assign(result, properties) : result; - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); - * // => { 'user': 'barney', 'age': 36 } - */ - var defaults = rest(function(args) { - args.push(undefined, assignInDefaults); - return assignInWith.apply(undefined, args); - }); - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasOwnProperty.call(object, path); - } - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - var keys = baseKeys; - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - var keysIn = baseKeysIn; - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = rest(function(object, props) { - return object == null ? {} : basePick(object, baseMap(baseFlatten(props, 1), toKey)); - }); - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - var value = object == null ? undefined : object[path]; - if (value === undefined) { - value = defaultValue; - } - return isFunction(value) ? value.call(object) : value; - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object ? baseValues(object, keys(object)) : []; - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to - * their corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * Backticks are escaped because in IE < 9, they can break out of - * attribute values or HTML comments. See [#59](https://html5sec.org/#59), - * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and - * [#133](https://html5sec.org/#133) of the - * [HTML5 Security Cheatsheet](https://html5sec.org/) for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /*------------------------------------------------------------------------*/ - - /** - * This method returns the first argument given to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'user': 'fred' }; - * - * console.log(_.identity(object) === object); - * // => true - */ - function identity(value) { - return value; - } - - /** - * Creates a function that invokes `func` with the arguments of the created - * function. If `func` is a property name, the created function returns the - * property value for a given element. If `func` is an array or object, the - * created function returns `true` for elements that contain the equivalent - * source properties, otherwise it returns `false`. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Util - * @param {*} [func=_.identity] The value to convert to a callback. - * @returns {Function} Returns the callback. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); - * // => [{ 'user': 'barney', 'age': 36, 'active': true }] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, _.iteratee(['user', 'fred'])); - * // => [{ 'user': 'fred', 'age': 40 }] - * - * // The `_.property` iteratee shorthand. - * _.map(users, _.iteratee('user')); - * // => ['barney', 'fred'] - * - * // Create custom iteratee shorthands. - * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { - * return !_.isRegExp(func) ? iteratee(func) : function(string) { - * return func.test(string); - * }; - * }); - * - * _.filter(['abc', 'def'], /ef/); - * // => ['def'] - */ - var iteratee = baseIteratee; - - /** - * Creates a function that performs a partial deep comparison between a given - * object and `source`, returning `true` if the given object has equivalent - * property values, else `false`. The created function is equivalent to - * `_.isMatch` with a `source` partially applied. - * - * **Note:** This method supports comparing the same values as `_.isEqual`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, _.matches({ 'age': 40, 'active': false })); - * // => [{ 'user': 'fred', 'age': 40, 'active': false }] - */ - function matches(source) { - return baseMatches(assign({}, source)); - } - - /** - * Adds all own enumerable string keyed function properties of a source - * object to the destination object. If `object` is a function, then methods - * are added to its prototype as well. - * - * **Note:** Use `_.runInContext` to create a pristine `lodash` function to - * avoid conflicts caused by modifying the original. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {Function|Object} [object=lodash] The destination object. - * @param {Object} source The object of functions to add. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.chain=true] Specify whether mixins are chainable. - * @returns {Function|Object} Returns `object`. - * @example - * - * function vowels(string) { - * return _.filter(string, function(v) { - * return /[aeiou]/i.test(v); - * }); - * } - * - * _.mixin({ 'vowels': vowels }); - * _.vowels('fred'); - * // => ['e'] - * - * _('fred').vowels().value(); - * // => ['e'] - * - * _.mixin({ 'vowels': vowels }, { 'chain': false }); - * _('fred').vowels(); - * // => ['e'] - */ - function mixin(object, source, options) { - var props = keys(source), - methodNames = baseFunctions(source, props); - - if (options == null && - !(isObject(source) && (methodNames.length || !props.length))) { - options = source; - source = object; - object = this; - methodNames = baseFunctions(source, keys(source)); - } - var chain = !(isObject(options) && 'chain' in options) || !!options.chain, - isFunc = isFunction(object); - - baseEach(methodNames, function(methodName) { - var func = source[methodName]; - object[methodName] = func; - if (isFunc) { - object.prototype[methodName] = function() { - var chainAll = this.__chain__; - if (chain || chainAll) { - var result = object(this.__wrapped__), - actions = result.__actions__ = copyArray(this.__actions__); - - actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); - result.__chain__ = chainAll; - return result; - } - return func.apply(object, arrayPush([this.value()], arguments)); - }; - } - }); - - return object; - } - - /** - * Reverts the `_` variable to its previous value and returns a reference to - * the `lodash` function. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @returns {Function} Returns the `lodash` function. - * @example - * - * var lodash = _.noConflict(); - */ - function noConflict() { - if (root._ === this) { - root._ = oldDash; - } - return this; - } - - /** - * A method that returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ - function noop() { - // No operation performed. - } - - /** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ - function uniqueId(prefix) { - var id = ++idCounter; - return toString(prefix) + id; - } - - /*------------------------------------------------------------------------*/ - - /** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ - function max(array) { - return (array && array.length) - ? baseExtremum(array, identity, baseGt) - : undefined; - } - - /** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ - function min(array) { - return (array && array.length) - ? baseExtremum(array, identity, baseLt) - : undefined; - } - - /*------------------------------------------------------------------------*/ - - // Add methods that return wrapped values in chain sequences. - lodash.assignIn = assignIn; - lodash.before = before; - lodash.bind = bind; - lodash.chain = chain; - lodash.compact = compact; - lodash.concat = concat; - lodash.create = create; - lodash.defaults = defaults; - lodash.defer = defer; - lodash.delay = delay; - lodash.filter = filter; - lodash.flatten = flatten; - lodash.flattenDeep = flattenDeep; - lodash.iteratee = iteratee; - lodash.keys = keys; - lodash.map = map; - lodash.matches = matches; - lodash.mixin = mixin; - lodash.negate = negate; - lodash.once = once; - lodash.pick = pick; - lodash.slice = slice; - lodash.sortBy = sortBy; - lodash.tap = tap; - lodash.thru = thru; - lodash.toArray = toArray; - lodash.values = values; - - // Add aliases. - lodash.extend = assignIn; - - // Add methods to `lodash.prototype`. - mixin(lodash, lodash); - - /*------------------------------------------------------------------------*/ - - // Add methods that return unwrapped values in chain sequences. - lodash.clone = clone; - lodash.escape = escape; - lodash.every = every; - lodash.find = find; - lodash.forEach = forEach; - lodash.has = has; - lodash.head = head; - lodash.identity = identity; - lodash.indexOf = indexOf; - lodash.isArguments = isArguments; - lodash.isArray = isArray; - lodash.isBoolean = isBoolean; - lodash.isDate = isDate; - lodash.isEmpty = isEmpty; - lodash.isEqual = isEqual; - lodash.isFinite = isFinite; - lodash.isFunction = isFunction; - lodash.isNaN = isNaN; - lodash.isNull = isNull; - lodash.isNumber = isNumber; - lodash.isObject = isObject; - lodash.isRegExp = isRegExp; - lodash.isString = isString; - lodash.isUndefined = isUndefined; - lodash.last = last; - lodash.max = max; - lodash.min = min; - lodash.noConflict = noConflict; - lodash.noop = noop; - lodash.reduce = reduce; - lodash.result = result; - lodash.size = size; - lodash.some = some; - lodash.uniqueId = uniqueId; - - // Add aliases. - lodash.each = forEach; - lodash.first = head; - - mixin(lodash, (function() { - var source = {}; - baseForOwn(lodash, function(func, methodName) { - if (!hasOwnProperty.call(lodash.prototype, methodName)) { - source[methodName] = func; - } - }); - return source; - }()), { 'chain': false }); - - /*------------------------------------------------------------------------*/ - - /** - * The semantic version number. - * - * @static - * @memberOf _ - * @type {string} - */ - lodash.VERSION = VERSION; - - // Add `Array` methods to `lodash.prototype`. - baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { - var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], - chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', - retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); - - lodash.prototype[methodName] = function() { - var args = arguments; - if (retUnwrapped && !this.__chain__) { - var value = this.value(); - return func.apply(isArray(value) ? value : [], args); - } - return this[chainName](function(value) { - return func.apply(isArray(value) ? value : [], args); - }); - }; - }); - - // Add chain sequence methods to the `lodash` wrapper. - lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; - - /*--------------------------------------------------------------------------*/ - - // Expose Lodash on the free variable `window` or `self` when available so it's - // globally accessible, even when bundled with Browserify, Webpack, etc. This - // also prevents errors in cases where Lodash is loaded by a script tag in the - // presence of an AMD loader. See http://requirejs.org/docs/errors.html#mismatch - // for more details. Use `_.noConflict` to remove Lodash from the global object. - (freeSelf || {})._ = lodash; - - // Some AMD build optimizers like r.js check for condition patterns like the following: - if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { - // Define as an anonymous module so, through path mapping, it can be - // referenced as the "underscore" module. - define(function() { - return lodash; - }); - } - // Check for `exports` after `define` in case a build optimizer adds an `exports` object. - else if (freeModule) { - // Export for Node.js. - (freeModule.exports = lodash)._ = lodash; - // Export for CommonJS support. - freeExports._ = lodash; - } - else { - // Export to the global object. - root._ = lodash; - } -}.call(this)); diff --git a/node_modules/lowdb/node_modules/lodash/core.min.js b/node_modules/lowdb/node_modules/lodash/core.min.js deleted file mode 100644 index 96f15c2..0000000 --- a/node_modules/lowdb/node_modules/lodash/core.min.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * @license - * lodash (Custom Build) /license | Underscore.js 1.8.3 underscorejs.org/LICENSE - * Build: `lodash core -o ./dist/lodash.core.js` - */ -;(function(){function n(n){n=null==n?n:Object(n);var t,r=[];for(t in n)r.push(t);return r}function t(n){return mn(Object(n))}function r(n,t){return n.push.apply(n,t),n}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return x(t,function(t){return n[t]})}function o(n){return n&&n.Object===Object?n:null}function i(n){return cn[n]}function c(n){return n instanceof f?n:new f(n)}function f(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function a(n,t,r,e){ -var u;return(u=n===rn)||(u=hn[r],u=(n===u||n!==n&&u!==u)&&!vn.call(e,r)),u?t:n}function l(n){return L(n)?_n(n):{}}function p(n,t,r){if(typeof n!="function")throw new TypeError("Expected a function");return setTimeout(function(){n.apply(rn,r)},t)}function s(n,t){var r=true;return xn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function h(n,t,r){for(var e=-1,u=n.length;++e0&&e(f)?t>1?y(f,t-1,e,u,o):r(o,f):u||(o[o.length]=f)}return o}function b(n,r){return n&&En(n,r,t)}function g(n,t){return v(t,function(t){return K(n[t])})}function _(n,t){return n>t}function j(n,t,r,e,u){return n===t?true:null==n||null==t||!L(n)&&!Q(t)?n!==n&&t!==t:d(n,t,j,r,e,u)}function d(n,t,r,e,u,o){var i=Tn(n),c=Tn(t),f="[object Array]",a="[object Array]";i||(f=bn.call(n),f="[object Arguments]"==f?"[object Object]":f), -c||(a=bn.call(t),a="[object Arguments]"==a?"[object Object]":a);var l="[object Object]"==f&&true,c="[object Object]"==a&&true,a=f==a;o||(o=[]);var p=kn(o,function(t){return t[0]===n});return p&&p[1]?p[1]==t:(o.push([n,t]),a&&!l?(r=i?I(n,t,r,e,u,o):q(n,t,f),o.pop(),r):2&u||(i=l&&vn.call(n,"__wrapped__"),f=c&&vn.call(t,"__wrapped__"),!i&&!f)?a?(r=$(n,t,r,e,u,o),o.pop(),r):false:(i=i?n.value():n,t=f?t.value():t,r=r(i,t,e,u,o),o.pop(),r))}function m(n){return typeof n=="function"?n:null==n?nn:(typeof n=="object"?E:w)(n); -}function O(n,t){return t>n}function x(n,t){var r=-1,e=H(n)?Array(n.length):[];return xn(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function E(n){var r=t(n);return function(t){var e=r.length;if(null==t)return!e;for(t=Object(t);e--;){var u=r[e];if(!(u in t&&j(n[u],t[u],rn,3)))return false}return true}}function A(n,t){return n=Object(n),M(t,function(t,r){return r in n&&(t[r]=n[r]),t},{})}function w(n){return function(t){return null==t?rn:t[n]}}function k(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r, -0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e1?r[u-1]:rn,o=n.length>3&&typeof o=="function"?(u--, -o):rn;for(t=Object(t);++ei))return false;for(var c=-1,f=true,a=1&u?[]:rn;++cr?On(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++rarguments.length,xn)}function P(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Bn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=rn),r}}function U(n){var t;if(typeof n!="function")throw new TypeError("Expected a function"); -return t=On(t===rn?n.length-1:Bn(t),0),function(){for(var r=arguments,e=-1,u=On(r.length-t,0),o=Array(u);++e-1&&0==t%1&&9007199254740991>=t),t&&!K(n)}function K(n){return n=L(n)?bn.call(n):"","[object Function]"==n||"[object GeneratorFunction]"==n; -}function L(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function Q(n){return!!n&&typeof n=="object"}function W(n){return typeof n=="number"||Q(n)&&"[object Number]"==bn.call(n)}function X(n){return typeof n=="string"||!Tn(n)&&Q(n)&&"[object String]"==bn.call(n)}function Y(n){return typeof n=="string"?n:null==n?"":n+""}function Z(n){return n?u(n,t(n)):[]}function nn(n){return n}function tn(n,e,u){var o=t(e),i=g(e,o);null!=u||L(e)&&(i.length||!o.length)||(u=e,e=n,n=this,i=g(e,t(e)));var c=!(L(u)&&"chain"in u&&!u.chain),f=K(n); -return xn(i,function(t){var u=e[t];n[t]=u,f&&(n.prototype[t]=function(){var t=this.__chain__;if(c||t){var e=n(this.__wrapped__);return(e.__actions__=N(this.__actions__)).push({func:u,args:arguments,thisArg:n}),e.__chain__=t,e}return u.apply(n,r([this.value()],arguments))})}),n}var rn,en=1/0,un=/[&<>"'`]/g,on=RegExp(un.source),cn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},fn=typeof exports=="object"&&exports,an=fn&&typeof module=="object"&&module,ln=o(typeof self=="object"&&self),pn=o(typeof global=="object"&&global)||ln||o(typeof this=="object"&&this)||Function("return this")(),sn=Array.prototype,hn=Object.prototype,vn=hn.hasOwnProperty,yn=0,bn=hn.toString,gn=pn._,_n=Object.create,jn=hn.propertyIsEnumerable,dn=pn.isFinite,mn=Object.keys,On=Math.max; -f.prototype=l(c.prototype),f.prototype.constructor=f;var xn=function(n,t){return function(r,e){if(null==r)return r;if(!H(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o-1?r[i?i[u]:u]:rn}}(function(n,t,r){var e=n?n.length:0;if(!e)return-1;r=null==r?0:Bn(r),0>r&&(r=On(e+r,0));n:{for(t=m(t),e=n.length,r+=-1;++re||o&&c&&a||!u&&a||!i){r=1;break n}if(!o&&e>r||f&&u&&i||!c&&i||!a){r=-1;break n}}r=0}return r||n.index-t.index}),w("value"))},c.tap=function(n,t){return t(n),n},c.thru=function(n,t){return t(n)},c.toArray=function(n){return H(n)?n.length?N(n):[]:Z(n)},c.values=Z,c.extend=In, -tn(c,c),c.clone=function(n){return L(n)?Tn(n)?N(n):T(n,t(n)):n},c.escape=function(n){return(n=Y(n))&&on.test(n)?n.replace(un,i):n},c.every=function(n,t,r){return t=r?rn:t,s(n,m(t))},c.find=kn,c.forEach=J,c.has=function(n,t){return null!=n&&vn.call(n,t)},c.head=C,c.identity=nn,c.indexOf=G,c.isArguments=V,c.isArray=Tn,c.isBoolean=function(n){return true===n||false===n||Q(n)&&"[object Boolean]"==bn.call(n)},c.isDate=function(n){return Q(n)&&"[object Date]"==bn.call(n)},c.isEmpty=function(n){return H(n)&&(Tn(n)||X(n)||K(n.splice)||V(n))?!n.length:!t(n).length; -},c.isEqual=function(n,t){return j(n,t)},c.isFinite=function(n){return typeof n=="number"&&dn(n)},c.isFunction=K,c.isNaN=function(n){return W(n)&&n!=+n},c.isNull=function(n){return null===n},c.isNumber=W,c.isObject=L,c.isRegExp=function(n){return L(n)&&"[object RegExp]"==bn.call(n)},c.isString=X,c.isUndefined=function(n){return n===rn},c.last=function(n){var t=n?n.length:0;return t?n[t-1]:rn},c.max=function(n){return n&&n.length?h(n,nn,_):rn},c.min=function(n){return n&&n.length?h(n,nn,O):rn},c.noConflict=function(){ -return pn._===this&&(pn._=gn),this},c.noop=function(){},c.reduce=M,c.result=function(n,t,r){return t=null==n?rn:n[t],t===rn&&(t=r),K(t)?t.call(n):t},c.size=function(n){return null==n?0:(n=H(n)?n:t(n),n.length)},c.some=function(n,t,r){return t=r?rn:t,S(n,m(t))},c.uniqueId=function(n){var t=++yn;return Y(n)+t},c.each=J,c.first=C,tn(c,function(){var n={};return b(c,function(t,r){vn.call(c.prototype,r)||(n[r]=t)}),n}(),{chain:false}),c.VERSION="4.13.1",xn("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){ -var t=(/^(?:replace|split)$/.test(n)?String.prototype:sn)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);c.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(Tn(u)?u:[],n)}return this[r](function(r){return t.apply(Tn(r)?r:[],n)})}}),c.prototype.toJSON=c.prototype.valueOf=c.prototype.value=function(){return F(this.__wrapped__,this.__actions__)},(ln||{})._=c,typeof define=="function"&&typeof define.amd=="object"&&define.amd? define(function(){ -return c}):an?((an.exports=c)._=c,fn._=c):pn._=c}).call(this); \ No newline at end of file diff --git a/node_modules/lowdb/node_modules/lodash/countBy.js b/node_modules/lowdb/node_modules/lodash/countBy.js deleted file mode 100644 index 9162b9f..0000000 --- a/node_modules/lowdb/node_modules/lodash/countBy.js +++ /dev/null @@ -1,36 +0,0 @@ -var createAggregator = require('./_createAggregator'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the number of times the key was returned by `iteratee`. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ -var countBy = createAggregator(function(result, value, key) { - hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); -}); - -module.exports = countBy; diff --git a/node_modules/lowdb/node_modules/lodash/create.js b/node_modules/lowdb/node_modules/lodash/create.js deleted file mode 100644 index a99067f..0000000 --- a/node_modules/lowdb/node_modules/lodash/create.js +++ /dev/null @@ -1,43 +0,0 @@ -var baseAssign = require('./_baseAssign'), - baseCreate = require('./_baseCreate'); - -/** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ -function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? baseAssign(result, properties) : result; -} - -module.exports = create; diff --git a/node_modules/lowdb/node_modules/lodash/curry.js b/node_modules/lowdb/node_modules/lodash/curry.js deleted file mode 100644 index 2f85624..0000000 --- a/node_modules/lowdb/node_modules/lodash/curry.js +++ /dev/null @@ -1,57 +0,0 @@ -var createWrapper = require('./_createWrapper'); - -/** Used to compose bitmasks for wrapper metadata. */ -var CURRY_FLAG = 8; - -/** - * Creates a function that accepts arguments of `func` and either invokes - * `func` returning its result, if at least `arity` number of arguments have - * been provided, or returns a function that accepts the remaining `func` - * arguments, and so on. The arity of `func` may be specified if `func.length` - * is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ -function curry(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrapper(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curry.placeholder; - return result; -} - -// Assign default placeholders. -curry.placeholder = {}; - -module.exports = curry; diff --git a/node_modules/lowdb/node_modules/lodash/curryRight.js b/node_modules/lowdb/node_modules/lodash/curryRight.js deleted file mode 100644 index d00bfad..0000000 --- a/node_modules/lowdb/node_modules/lodash/curryRight.js +++ /dev/null @@ -1,54 +0,0 @@ -var createWrapper = require('./_createWrapper'); - -/** Used to compose bitmasks for wrapper metadata. */ -var CURRY_RIGHT_FLAG = 16; - -/** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ -function curryRight(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrapper(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curryRight.placeholder; - return result; -} - -// Assign default placeholders. -curryRight.placeholder = {}; - -module.exports = curryRight; diff --git a/node_modules/lowdb/node_modules/lodash/date.js b/node_modules/lowdb/node_modules/lodash/date.js deleted file mode 100644 index cbf5b41..0000000 --- a/node_modules/lowdb/node_modules/lodash/date.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - 'now': require('./now') -}; diff --git a/node_modules/lowdb/node_modules/lodash/debounce.js b/node_modules/lowdb/node_modules/lodash/debounce.js deleted file mode 100644 index a36c8ac..0000000 --- a/node_modules/lowdb/node_modules/lodash/debounce.js +++ /dev/null @@ -1,181 +0,0 @@ -var isObject = require('./isObject'), - now = require('./now'), - toNumber = require('./toNumber'); - -/** Used as the `TypeError` message for "Functions" methods. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide an options object to indicate whether `func` should be invoked on - * the leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent calls - * to the debounced function return the result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked - * on the trailing edge of the timeout only if the debounced function is - * invoked more than once during the `wait` timeout. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ -function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - result = wait - timeSinceLastCall; - - return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } - - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; -} - -module.exports = debounce; diff --git a/node_modules/lowdb/node_modules/lodash/deburr.js b/node_modules/lowdb/node_modules/lodash/deburr.js deleted file mode 100644 index 6862072..0000000 --- a/node_modules/lowdb/node_modules/lodash/deburr.js +++ /dev/null @@ -1,42 +0,0 @@ -var deburrLetter = require('./_deburrLetter'), - toString = require('./toString'); - -/** Used to match latin-1 supplementary letters (excluding mathematical operators). */ -var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; - -/** Used to compose unicode character classes. */ -var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0'; - -/** Used to compose unicode capture groups. */ -var rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']'; - -/** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ -var reComboMark = RegExp(rsCombo, 'g'); - -/** - * Deburrs `string` by converting - * [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * to basic latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ -function deburr(string) { - string = toString(string); - return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); -} - -module.exports = deburr; diff --git a/node_modules/lowdb/node_modules/lodash/defaults.js b/node_modules/lowdb/node_modules/lodash/defaults.js deleted file mode 100644 index 099d2e9..0000000 --- a/node_modules/lowdb/node_modules/lodash/defaults.js +++ /dev/null @@ -1,32 +0,0 @@ -var apply = require('./_apply'), - assignInDefaults = require('./_assignInDefaults'), - assignInWith = require('./assignInWith'), - rest = require('./rest'); - -/** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); - * // => { 'user': 'barney', 'age': 36 } - */ -var defaults = rest(function(args) { - args.push(undefined, assignInDefaults); - return apply(assignInWith, undefined, args); -}); - -module.exports = defaults; diff --git a/node_modules/lowdb/node_modules/lodash/defaultsDeep.js b/node_modules/lowdb/node_modules/lodash/defaultsDeep.js deleted file mode 100644 index b6447f7..0000000 --- a/node_modules/lowdb/node_modules/lodash/defaultsDeep.js +++ /dev/null @@ -1,31 +0,0 @@ -var apply = require('./_apply'), - mergeDefaults = require('./_mergeDefaults'), - mergeWith = require('./mergeWith'), - rest = require('./rest'); - -/** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } }); - * // => { 'user': { 'name': 'barney', 'age': 36 } } - * - */ -var defaultsDeep = rest(function(args) { - args.push(undefined, mergeDefaults); - return apply(mergeWith, undefined, args); -}); - -module.exports = defaultsDeep; diff --git a/node_modules/lowdb/node_modules/lodash/defer.js b/node_modules/lowdb/node_modules/lodash/defer.js deleted file mode 100644 index b096f71..0000000 --- a/node_modules/lowdb/node_modules/lodash/defer.js +++ /dev/null @@ -1,26 +0,0 @@ -var baseDelay = require('./_baseDelay'), - rest = require('./rest'); - -/** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one or more milliseconds. - */ -var defer = rest(function(func, args) { - return baseDelay(func, 1, args); -}); - -module.exports = defer; diff --git a/node_modules/lowdb/node_modules/lodash/delay.js b/node_modules/lowdb/node_modules/lodash/delay.js deleted file mode 100644 index cac90a9..0000000 --- a/node_modules/lowdb/node_modules/lodash/delay.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseDelay = require('./_baseDelay'), - rest = require('./rest'), - toNumber = require('./toNumber'); - -/** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ -var delay = rest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); -}); - -module.exports = delay; diff --git a/node_modules/lowdb/node_modules/lodash/difference.js b/node_modules/lowdb/node_modules/lodash/difference.js deleted file mode 100644 index bd52f54..0000000 --- a/node_modules/lowdb/node_modules/lodash/difference.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - isArrayLikeObject = require('./isArrayLikeObject'), - rest = require('./rest'); - -/** - * Creates an array of unique `array` values not included in the other given - * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. The order of result values is determined by the - * order they occur in the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ -var difference = rest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) - : []; -}); - -module.exports = difference; diff --git a/node_modules/lowdb/node_modules/lodash/differenceBy.js b/node_modules/lowdb/node_modules/lodash/differenceBy.js deleted file mode 100644 index bbafa32..0000000 --- a/node_modules/lowdb/node_modules/lodash/differenceBy.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - baseIteratee = require('./_baseIteratee'), - isArrayLikeObject = require('./isArrayLikeObject'), - last = require('./last'), - rest = require('./rest'); - -/** - * 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 they're compared. Result values are chosen from the first array. - * The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2] - * - * // The `_.property` iteratee shorthand. - * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ -var differenceBy = rest(function(array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee)) - : []; -}); - -module.exports = differenceBy; diff --git a/node_modules/lowdb/node_modules/lodash/differenceWith.js b/node_modules/lowdb/node_modules/lodash/differenceWith.js deleted file mode 100644 index 6ae8986..0000000 --- a/node_modules/lowdb/node_modules/lodash/differenceWith.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - isArrayLikeObject = require('./isArrayLikeObject'), - last = require('./last'), - rest = require('./rest'); - -/** - * This method is like `_.difference` except that it accepts `comparator` - * which is invoked to compare elements of `array` to `values`. Result values - * are chosen from the first array. The comparator is invoked with two arguments: - * (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * - * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); - * // => [{ 'x': 2, 'y': 1 }] - */ -var differenceWith = rest(function(array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) - : []; -}); - -module.exports = differenceWith; diff --git a/node_modules/lowdb/node_modules/lodash/divide.js b/node_modules/lowdb/node_modules/lodash/divide.js deleted file mode 100644 index 2889d79..0000000 --- a/node_modules/lowdb/node_modules/lodash/divide.js +++ /dev/null @@ -1,22 +0,0 @@ -var createMathOperation = require('./_createMathOperation'); - -/** - * Divide two numbers. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Math - * @param {number} dividend The first number in a division. - * @param {number} divisor The second number in a division. - * @returns {number} Returns the quotient. - * @example - * - * _.divide(6, 4); - * // => 1.5 - */ -var divide = createMathOperation(function(dividend, divisor) { - return dividend / divisor; -}); - -module.exports = divide; diff --git a/node_modules/lowdb/node_modules/lodash/drop.js b/node_modules/lowdb/node_modules/lodash/drop.js deleted file mode 100644 index 6124ef7..0000000 --- a/node_modules/lowdb/node_modules/lodash/drop.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseSlice = require('./_baseSlice'), - toInteger = require('./toInteger'); - -/** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ -function drop(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); -} - -module.exports = drop; diff --git a/node_modules/lowdb/node_modules/lodash/dropRight.js b/node_modules/lowdb/node_modules/lodash/dropRight.js deleted file mode 100644 index 8aa3576..0000000 --- a/node_modules/lowdb/node_modules/lodash/dropRight.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseSlice = require('./_baseSlice'), - toInteger = require('./toInteger'); - -/** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ -function dropRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); -} - -module.exports = dropRight; diff --git a/node_modules/lowdb/node_modules/lodash/dropRightWhile.js b/node_modules/lowdb/node_modules/lodash/dropRightWhile.js deleted file mode 100644 index 98f457b..0000000 --- a/node_modules/lowdb/node_modules/lodash/dropRightWhile.js +++ /dev/null @@ -1,46 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - baseWhile = require('./_baseWhile'); - -/** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.dropRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney'] - * - * // The `_.matches` iteratee shorthand. - * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropRightWhile(users, ['active', false]); - * // => objects for ['barney'] - * - * // The `_.property` iteratee shorthand. - * _.dropRightWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ -function dropRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, baseIteratee(predicate, 3), true, true) - : []; -} - -module.exports = dropRightWhile; diff --git a/node_modules/lowdb/node_modules/lodash/dropWhile.js b/node_modules/lowdb/node_modules/lodash/dropWhile.js deleted file mode 100644 index 94f76e0..0000000 --- a/node_modules/lowdb/node_modules/lodash/dropWhile.js +++ /dev/null @@ -1,46 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - baseWhile = require('./_baseWhile'); - -/** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ -function dropWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, baseIteratee(predicate, 3), true) - : []; -} - -module.exports = dropWhile; diff --git a/node_modules/lowdb/node_modules/lodash/each.js b/node_modules/lowdb/node_modules/lodash/each.js deleted file mode 100644 index 8800f42..0000000 --- a/node_modules/lowdb/node_modules/lodash/each.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEach'); diff --git a/node_modules/lowdb/node_modules/lodash/eachRight.js b/node_modules/lowdb/node_modules/lodash/eachRight.js deleted file mode 100644 index 3252b2a..0000000 --- a/node_modules/lowdb/node_modules/lodash/eachRight.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEachRight'); diff --git a/node_modules/lowdb/node_modules/lodash/endsWith.js b/node_modules/lowdb/node_modules/lodash/endsWith.js deleted file mode 100644 index bf10f25..0000000 --- a/node_modules/lowdb/node_modules/lodash/endsWith.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseClamp = require('./_baseClamp'), - baseToString = require('./_baseToString'), - toInteger = require('./toInteger'), - toString = require('./toString'); - -/** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to search. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search up to. - * @returns {boolean} Returns `true` if `string` ends with `target`, - * else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ -function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); - - var length = string.length; - position = position === undefined - ? length - : baseClamp(toInteger(position), 0, length); - - position -= target.length; - return position >= 0 && string.indexOf(target, position) == position; -} - -module.exports = endsWith; diff --git a/node_modules/lowdb/node_modules/lodash/entries.js b/node_modules/lowdb/node_modules/lodash/entries.js deleted file mode 100644 index 7a88df2..0000000 --- a/node_modules/lowdb/node_modules/lodash/entries.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairs'); diff --git a/node_modules/lowdb/node_modules/lodash/entriesIn.js b/node_modules/lowdb/node_modules/lodash/entriesIn.js deleted file mode 100644 index f6c6331..0000000 --- a/node_modules/lowdb/node_modules/lodash/entriesIn.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairsIn'); diff --git a/node_modules/lowdb/node_modules/lodash/eq.js b/node_modules/lowdb/node_modules/lodash/eq.js deleted file mode 100644 index e9445d4..0000000 --- a/node_modules/lowdb/node_modules/lodash/eq.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'user': 'fred' }; - * var other = { 'user': 'fred' }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -module.exports = eq; diff --git a/node_modules/lowdb/node_modules/lodash/escape.js b/node_modules/lowdb/node_modules/lodash/escape.js deleted file mode 100644 index 176417c..0000000 --- a/node_modules/lowdb/node_modules/lodash/escape.js +++ /dev/null @@ -1,49 +0,0 @@ -var escapeHtmlChar = require('./_escapeHtmlChar'), - toString = require('./toString'); - -/** Used to match HTML entities and HTML characters. */ -var reUnescapedHtml = /[&<>"'`]/g, - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - -/** - * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to - * their corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * Backticks are escaped because in IE < 9, they can break out of - * attribute values or HTML comments. See [#59](https://html5sec.org/#59), - * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and - * [#133](https://html5sec.org/#133) of the - * [HTML5 Security Cheatsheet](https://html5sec.org/) for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ -function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; -} - -module.exports = escape; diff --git a/node_modules/lowdb/node_modules/lodash/escapeRegExp.js b/node_modules/lowdb/node_modules/lodash/escapeRegExp.js deleted file mode 100644 index fe51960..0000000 --- a/node_modules/lowdb/node_modules/lodash/escapeRegExp.js +++ /dev/null @@ -1,32 +0,0 @@ -var toString = require('./toString'); - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); - -/** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ -function escapeRegExp(string) { - string = toString(string); - return (string && reHasRegExpChar.test(string)) - ? string.replace(reRegExpChar, '\\$&') - : string; -} - -module.exports = escapeRegExp; diff --git a/node_modules/lowdb/node_modules/lodash/every.js b/node_modules/lowdb/node_modules/lodash/every.js deleted file mode 100644 index 14f68e7..0000000 --- a/node_modules/lowdb/node_modules/lodash/every.js +++ /dev/null @@ -1,52 +0,0 @@ -var arrayEvery = require('./_arrayEvery'), - baseEvery = require('./_baseEvery'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'), - isIterateeCall = require('./_isIterateeCall'); - -/** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ -function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, baseIteratee(predicate, 3)); -} - -module.exports = every; diff --git a/node_modules/lowdb/node_modules/lodash/extend.js b/node_modules/lowdb/node_modules/lodash/extend.js deleted file mode 100644 index e00166c..0000000 --- a/node_modules/lowdb/node_modules/lodash/extend.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignIn'); diff --git a/node_modules/lowdb/node_modules/lodash/extendWith.js b/node_modules/lowdb/node_modules/lodash/extendWith.js deleted file mode 100644 index dbdcb3b..0000000 --- a/node_modules/lowdb/node_modules/lodash/extendWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInWith'); diff --git a/node_modules/lowdb/node_modules/lodash/fill.js b/node_modules/lowdb/node_modules/lodash/fill.js deleted file mode 100644 index 5730b7d..0000000 --- a/node_modules/lowdb/node_modules/lodash/fill.js +++ /dev/null @@ -1,45 +0,0 @@ -var baseFill = require('./_baseFill'), - isIterateeCall = require('./_isIterateeCall'); - -/** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ -function fill(array, value, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); -} - -module.exports = fill; diff --git a/node_modules/lowdb/node_modules/lodash/filter.js b/node_modules/lowdb/node_modules/lodash/filter.js deleted file mode 100644 index 98e3a96..0000000 --- a/node_modules/lowdb/node_modules/lodash/filter.js +++ /dev/null @@ -1,47 +0,0 @@ -var arrayFilter = require('./_arrayFilter'), - baseFilter = require('./_baseFilter'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ -function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, baseIteratee(predicate, 3)); -} - -module.exports = filter; diff --git a/node_modules/lowdb/node_modules/lodash/find.js b/node_modules/lowdb/node_modules/lodash/find.js deleted file mode 100644 index 3e40bb6..0000000 --- a/node_modules/lowdb/node_modules/lodash/find.js +++ /dev/null @@ -1,43 +0,0 @@ -var createFind = require('./_createFind'), - findIndex = require('./findIndex'); - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find = createFind(findIndex); - -module.exports = find; diff --git a/node_modules/lowdb/node_modules/lodash/findIndex.js b/node_modules/lowdb/node_modules/lodash/findIndex.js deleted file mode 100644 index 83af981..0000000 --- a/node_modules/lowdb/node_modules/lodash/findIndex.js +++ /dev/null @@ -1,56 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIteratee = require('./_baseIteratee'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index); -} - -module.exports = findIndex; diff --git a/node_modules/lowdb/node_modules/lodash/findKey.js b/node_modules/lowdb/node_modules/lodash/findKey.js deleted file mode 100644 index 26fc234..0000000 --- a/node_modules/lowdb/node_modules/lodash/findKey.js +++ /dev/null @@ -1,45 +0,0 @@ -var baseFindKey = require('./_baseFindKey'), - baseForOwn = require('./_baseForOwn'), - baseIteratee = require('./_baseIteratee'); - -/** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ -function findKey(object, predicate) { - return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn); -} - -module.exports = findKey; diff --git a/node_modules/lowdb/node_modules/lodash/findLast.js b/node_modules/lowdb/node_modules/lodash/findLast.js deleted file mode 100644 index f8dd4e1..0000000 --- a/node_modules/lowdb/node_modules/lodash/findLast.js +++ /dev/null @@ -1,26 +0,0 @@ -var createFind = require('./_createFind'), - findLastIndex = require('./findLastIndex'); - -/** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=collection.length-1] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ -var findLast = createFind(findLastIndex); - -module.exports = findLast; diff --git a/node_modules/lowdb/node_modules/lodash/findLastIndex.js b/node_modules/lowdb/node_modules/lodash/findLastIndex.js deleted file mode 100644 index 2caf34a..0000000 --- a/node_modules/lowdb/node_modules/lodash/findLastIndex.js +++ /dev/null @@ -1,60 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIteratee = require('./_baseIteratee'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ -function findLastIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index, true); -} - -module.exports = findLastIndex; diff --git a/node_modules/lowdb/node_modules/lodash/findLastKey.js b/node_modules/lowdb/node_modules/lodash/findLastKey.js deleted file mode 100644 index 5eedc1d..0000000 --- a/node_modules/lowdb/node_modules/lodash/findLastKey.js +++ /dev/null @@ -1,45 +0,0 @@ -var baseFindKey = require('./_baseFindKey'), - baseForOwnRight = require('./_baseForOwnRight'), - baseIteratee = require('./_baseIteratee'); - -/** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ -function findLastKey(object, predicate) { - return baseFindKey(object, baseIteratee(predicate, 3), baseForOwnRight); -} - -module.exports = findLastKey; diff --git a/node_modules/lowdb/node_modules/lodash/first.js b/node_modules/lowdb/node_modules/lodash/first.js deleted file mode 100644 index 53f4ad1..0000000 --- a/node_modules/lowdb/node_modules/lodash/first.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./head'); diff --git a/node_modules/lowdb/node_modules/lodash/flatMap.js b/node_modules/lowdb/node_modules/lodash/flatMap.js deleted file mode 100644 index f830749..0000000 --- a/node_modules/lowdb/node_modules/lodash/flatMap.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'); - -/** - * Creates a flattened array of values by running each element in `collection` - * thru `iteratee` and flattening the mapped results. The iteratee is invoked - * with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ -function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); -} - -module.exports = flatMap; diff --git a/node_modules/lowdb/node_modules/lodash/flatMapDeep.js b/node_modules/lowdb/node_modules/lodash/flatMapDeep.js deleted file mode 100644 index 3808262..0000000 --- a/node_modules/lowdb/node_modules/lodash/flatMapDeep.js +++ /dev/null @@ -1,32 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDeep([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ -function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY); -} - -module.exports = flatMapDeep; diff --git a/node_modules/lowdb/node_modules/lodash/flatMapDepth.js b/node_modules/lowdb/node_modules/lodash/flatMapDepth.js deleted file mode 100644 index d528bff..0000000 --- a/node_modules/lowdb/node_modules/lodash/flatMapDepth.js +++ /dev/null @@ -1,32 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'), - toInteger = require('./toInteger'); - -/** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The function invoked per iteration. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDepth([1, 2], duplicate, 2); - * // => [[1, 1], [2, 2]] - */ -function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); -} - -module.exports = flatMapDepth; diff --git a/node_modules/lowdb/node_modules/lodash/flatten.js b/node_modules/lowdb/node_modules/lodash/flatten.js deleted file mode 100644 index bd4f439..0000000 --- a/node_modules/lowdb/node_modules/lodash/flatten.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseFlatten = require('./_baseFlatten'); - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, 1) : []; -} - -module.exports = flatten; diff --git a/node_modules/lowdb/node_modules/lodash/flattenDeep.js b/node_modules/lowdb/node_modules/lodash/flattenDeep.js deleted file mode 100644 index c20c781..0000000 --- a/node_modules/lowdb/node_modules/lodash/flattenDeep.js +++ /dev/null @@ -1,25 +0,0 @@ -var baseFlatten = require('./_baseFlatten'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ -function flattenDeep(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, INFINITY) : []; -} - -module.exports = flattenDeep; diff --git a/node_modules/lowdb/node_modules/lodash/flattenDepth.js b/node_modules/lowdb/node_modules/lodash/flattenDepth.js deleted file mode 100644 index a0f4b52..0000000 --- a/node_modules/lowdb/node_modules/lodash/flattenDepth.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - toInteger = require('./toInteger'); - -/** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ -function flattenDepth(array, depth) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); -} - -module.exports = flattenDepth; diff --git a/node_modules/lowdb/node_modules/lodash/flip.js b/node_modules/lowdb/node_modules/lodash/flip.js deleted file mode 100644 index 574c780..0000000 --- a/node_modules/lowdb/node_modules/lodash/flip.js +++ /dev/null @@ -1,28 +0,0 @@ -var createWrapper = require('./_createWrapper'); - -/** Used to compose bitmasks for wrapper metadata. */ -var FLIP_FLAG = 512; - -/** - * Creates a function that invokes `func` with arguments reversed. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to flip arguments for. - * @returns {Function} Returns the new flipped function. - * @example - * - * var flipped = _.flip(function() { - * return _.toArray(arguments); - * }); - * - * flipped('a', 'b', 'c', 'd'); - * // => ['d', 'c', 'b', 'a'] - */ -function flip(func) { - return createWrapper(func, FLIP_FLAG); -} - -module.exports = flip; diff --git a/node_modules/lowdb/node_modules/lodash/floor.js b/node_modules/lowdb/node_modules/lodash/floor.js deleted file mode 100644 index ab6dfa2..0000000 --- a/node_modules/lowdb/node_modules/lodash/floor.js +++ /dev/null @@ -1,26 +0,0 @@ -var createRound = require('./_createRound'); - -/** - * Computes `number` rounded down to `precision`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Math - * @param {number} number The number to round down. - * @param {number} [precision=0] The precision to round down to. - * @returns {number} Returns the rounded down number. - * @example - * - * _.floor(4.006); - * // => 4 - * - * _.floor(0.046, 2); - * // => 0.04 - * - * _.floor(4060, -2); - * // => 4000 - */ -var floor = createRound('floor'); - -module.exports = floor; diff --git a/node_modules/lowdb/node_modules/lodash/flow.js b/node_modules/lowdb/node_modules/lodash/flow.js deleted file mode 100644 index 462f2db..0000000 --- a/node_modules/lowdb/node_modules/lodash/flow.js +++ /dev/null @@ -1,27 +0,0 @@ -var createFlow = require('./_createFlow'); - -/** - * Creates a function that returns the result of invoking the given functions - * with the `this` binding of the created function, where each successive - * invocation is supplied the return value of the previous. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {...(Function|Function[])} [funcs] Functions to invoke. - * @returns {Function} Returns the new composite function. - * @see _.flowRight - * @example - * - * function square(n) { - * return n * n; - * } - * - * var addSquare = _.flow([_.add, square]); - * addSquare(1, 2); - * // => 9 - */ -var flow = createFlow(); - -module.exports = flow; diff --git a/node_modules/lowdb/node_modules/lodash/flowRight.js b/node_modules/lowdb/node_modules/lodash/flowRight.js deleted file mode 100644 index a4eb8b6..0000000 --- a/node_modules/lowdb/node_modules/lodash/flowRight.js +++ /dev/null @@ -1,26 +0,0 @@ -var createFlow = require('./_createFlow'); - -/** - * This method is like `_.flow` except that it creates a function that - * invokes the given functions from right to left. - * - * @static - * @since 3.0.0 - * @memberOf _ - * @category Util - * @param {...(Function|Function[])} [funcs] Functions to invoke. - * @returns {Function} Returns the new composite function. - * @see _.flow - * @example - * - * function square(n) { - * return n * n; - * } - * - * var addSquare = _.flowRight([square, _.add]); - * addSquare(1, 2); - * // => 9 - */ -var flowRight = createFlow(true); - -module.exports = flowRight; diff --git a/node_modules/lowdb/node_modules/lodash/forEach.js b/node_modules/lowdb/node_modules/lodash/forEach.js deleted file mode 100644 index 143515f..0000000 --- a/node_modules/lowdb/node_modules/lodash/forEach.js +++ /dev/null @@ -1,41 +0,0 @@ -var arrayEach = require('./_arrayEach'), - baseEach = require('./_baseEach'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _([1, 2]).forEach(function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, baseIteratee(iteratee, 3)); -} - -module.exports = forEach; diff --git a/node_modules/lowdb/node_modules/lodash/forEachRight.js b/node_modules/lowdb/node_modules/lodash/forEachRight.js deleted file mode 100644 index c5d6e06..0000000 --- a/node_modules/lowdb/node_modules/lodash/forEachRight.js +++ /dev/null @@ -1,31 +0,0 @@ -var arrayEachRight = require('./_arrayEachRight'), - baseEachRight = require('./_baseEachRight'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEach - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `2` then `1`. - */ -function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, baseIteratee(iteratee, 3)); -} - -module.exports = forEachRight; diff --git a/node_modules/lowdb/node_modules/lodash/forIn.js b/node_modules/lowdb/node_modules/lodash/forIn.js deleted file mode 100644 index 2e757da..0000000 --- a/node_modules/lowdb/node_modules/lodash/forIn.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseFor = require('./_baseFor'), - baseIteratee = require('./_baseIteratee'), - keysIn = require('./keysIn'); - -/** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ -function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, baseIteratee(iteratee, 3), keysIn); -} - -module.exports = forIn; diff --git a/node_modules/lowdb/node_modules/lodash/forInRight.js b/node_modules/lowdb/node_modules/lodash/forInRight.js deleted file mode 100644 index a47d6bb..0000000 --- a/node_modules/lowdb/node_modules/lodash/forInRight.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseForRight = require('./_baseForRight'), - baseIteratee = require('./_baseIteratee'), - keysIn = require('./keysIn'); - -/** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ -function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, baseIteratee(iteratee, 3), keysIn); -} - -module.exports = forInRight; diff --git a/node_modules/lowdb/node_modules/lodash/forOwn.js b/node_modules/lowdb/node_modules/lodash/forOwn.js deleted file mode 100644 index 034c30b..0000000 --- a/node_modules/lowdb/node_modules/lodash/forOwn.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseForOwn = require('./_baseForOwn'), - baseIteratee = require('./_baseIteratee'); - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && baseForOwn(object, baseIteratee(iteratee, 3)); -} - -module.exports = forOwn; diff --git a/node_modules/lowdb/node_modules/lodash/forOwnRight.js b/node_modules/lowdb/node_modules/lodash/forOwnRight.js deleted file mode 100644 index 0f7aab8..0000000 --- a/node_modules/lowdb/node_modules/lodash/forOwnRight.js +++ /dev/null @@ -1,34 +0,0 @@ -var baseForOwnRight = require('./_baseForOwnRight'), - baseIteratee = require('./_baseIteratee'); - -/** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ -function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, baseIteratee(iteratee, 3)); -} - -module.exports = forOwnRight; diff --git a/node_modules/lowdb/node_modules/lodash/fp.js b/node_modules/lowdb/node_modules/lodash/fp.js deleted file mode 100644 index e372dbb..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp.js +++ /dev/null @@ -1,2 +0,0 @@ -var _ = require('./lodash.min').runInContext(); -module.exports = require('./fp/_baseConvert')(_, _); diff --git a/node_modules/lowdb/node_modules/lodash/fp/__.js b/node_modules/lowdb/node_modules/lodash/fp/__.js deleted file mode 100644 index 4af98de..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/__.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./placeholder'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/_baseConvert.js b/node_modules/lowdb/node_modules/lodash/fp/_baseConvert.js deleted file mode 100644 index e177cdd..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/_baseConvert.js +++ /dev/null @@ -1,466 +0,0 @@ -var mapping = require('./_mapping'), - mutateMap = mapping.mutate, - fallbackHolder = require('./placeholder'); - -/** - * Creates a function, with an arity of `n`, that invokes `func` with the - * arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} n The arity of the new function. - * @returns {Function} Returns the new function. - */ -function baseArity(func, n) { - return n == 2 - ? function(a, b) { return func.apply(undefined, arguments); } - : function(a) { return func.apply(undefined, arguments); }; -} - -/** - * Creates a function that invokes `func`, with up to `n` arguments, ignoring - * any additional arguments. - * - * @private - * @param {Function} func The function to cap arguments for. - * @param {number} n The arity cap. - * @returns {Function} Returns the new function. - */ -function baseAry(func, n) { - return n == 2 - ? function(a, b) { return func(a, b); } - : function(a) { return func(a); }; -} - -/** - * Creates a clone of `array`. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the cloned array. - */ -function cloneArray(array) { - var length = array ? array.length : 0, - result = Array(length); - - while (length--) { - result[length] = array[length]; - } - return result; -} - -/** - * Creates a function that clones a given object using the assignment `func`. - * - * @private - * @param {Function} func The assignment function. - * @returns {Function} Returns the new cloner function. - */ -function createCloner(func) { - return function(object) { - return func({}, object); - }; -} - -/** - * Creates a function that wraps `func` and uses `cloner` to clone the first - * argument it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} cloner The function to clone arguments. - * @returns {Function} Returns the new immutable function. - */ -function immutWrap(func, cloner) { - return function() { - var length = arguments.length; - if (!length) { - return result; - } - var args = Array(length); - while (length--) { - args[length] = arguments[length]; - } - var result = args[0] = cloner.apply(undefined, args); - func.apply(undefined, args); - return result; - }; -} - -/** - * The base implementation of `convert` which accepts a `util` object of methods - * required to perform conversions. - * - * @param {Object} util The util object. - * @param {string} name The name of the function to convert. - * @param {Function} func The function to convert. - * @param {Object} [options] The options object. - * @param {boolean} [options.cap=true] Specify capping iteratee arguments. - * @param {boolean} [options.curry=true] Specify currying. - * @param {boolean} [options.fixed=true] Specify fixed arity. - * @param {boolean} [options.immutable=true] Specify immutable operations. - * @param {boolean} [options.rearg=true] Specify rearranging arguments. - * @returns {Function|Object} Returns the converted function or object. - */ -function baseConvert(util, name, func, options) { - var setPlaceholder, - isLib = typeof name == 'function', - isObj = name === Object(name); - - if (isObj) { - options = func; - func = name; - name = undefined; - } - if (func == null) { - throw new TypeError; - } - options || (options = {}); - - var config = { - 'cap': 'cap' in options ? options.cap : true, - 'curry': 'curry' in options ? options.curry : true, - 'fixed': 'fixed' in options ? options.fixed : true, - 'immutable': 'immutable' in options ? options.immutable : true, - 'rearg': 'rearg' in options ? options.rearg : true - }; - - var forceCurry = ('curry' in options) && options.curry, - forceFixed = ('fixed' in options) && options.fixed, - forceRearg = ('rearg' in options) && options.rearg, - placeholder = isLib ? func : fallbackHolder, - pristine = isLib ? func.runInContext() : undefined; - - var helpers = isLib ? func : { - 'ary': util.ary, - 'assign': util.assign, - 'clone': util.clone, - 'curry': util.curry, - 'forEach': util.forEach, - 'isArray': util.isArray, - 'isFunction': util.isFunction, - 'iteratee': util.iteratee, - 'keys': util.keys, - 'rearg': util.rearg, - 'spread': util.spread, - 'toPath': util.toPath - }; - - var ary = helpers.ary, - assign = helpers.assign, - clone = helpers.clone, - curry = helpers.curry, - each = helpers.forEach, - isArray = helpers.isArray, - isFunction = helpers.isFunction, - keys = helpers.keys, - rearg = helpers.rearg, - spread = helpers.spread, - toPath = helpers.toPath; - - var aryMethodKeys = keys(mapping.aryMethod); - - var wrappers = { - 'castArray': function(castArray) { - return function() { - var value = arguments[0]; - return isArray(value) - ? castArray(cloneArray(value)) - : castArray.apply(undefined, arguments); - }; - }, - 'iteratee': function(iteratee) { - return function() { - var func = arguments[0], - arity = arguments[1], - result = iteratee(func, arity), - length = result.length; - - if (config.cap && typeof arity == 'number') { - arity = arity > 2 ? (arity - 2) : 1; - return (length && length <= arity) ? result : baseAry(result, arity); - } - return result; - }; - }, - 'mixin': function(mixin) { - return function(source) { - var func = this; - if (!isFunction(func)) { - return mixin(func, Object(source)); - } - var pairs = []; - each(keys(source), function(key) { - if (isFunction(source[key])) { - pairs.push([key, func.prototype[key]]); - } - }); - - mixin(func, Object(source)); - - each(pairs, function(pair) { - var value = pair[1]; - if (isFunction(value)) { - func.prototype[pair[0]] = value; - } else { - delete func.prototype[pair[0]]; - } - }); - return func; - }; - }, - 'runInContext': function(runInContext) { - return function(context) { - return baseConvert(util, runInContext(context), options); - }; - } - }; - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a clone of `object` by `path`. - * - * @private - * @param {Object} object The object to clone. - * @param {Array|string} path The path to clone by. - * @returns {Object} Returns the cloned object. - */ - function cloneByPath(object, path) { - path = toPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - result = clone(Object(object)), - nested = result; - - while (nested != null && ++index < length) { - var key = path[index], - value = nested[key]; - - if (value != null) { - nested[path[index]] = clone(index == lastIndex ? value : Object(value)); - } - nested = nested[key]; - } - return result; - } - - /** - * Converts `lodash` to an immutable auto-curried iteratee-first data-last - * version with conversion `options` applied. - * - * @param {Object} [options] The options object. See `baseConvert` for more details. - * @returns {Function} Returns the converted `lodash`. - */ - function convertLib(options) { - return _.runInContext.convert(options)(undefined); - } - - /** - * Create a converter function for `func` of `name`. - * - * @param {string} name The name of the function to convert. - * @param {Function} func The function to convert. - * @returns {Function} Returns the new converter function. - */ - function createConverter(name, func) { - var oldOptions = options; - return function(options) { - var newUtil = isLib ? pristine : helpers, - newFunc = isLib ? pristine[name] : func, - newOptions = assign(assign({}, oldOptions), options); - - return baseConvert(newUtil, name, newFunc, newOptions); - }; - } - - /** - * Creates a function that wraps `func` to invoke its iteratee, with up to `n` - * arguments, ignoring any additional arguments. - * - * @private - * @param {Function} func The function to cap iteratee arguments for. - * @param {number} n The arity cap. - * @returns {Function} Returns the new function. - */ - function iterateeAry(func, n) { - return overArg(func, function(func) { - return typeof func == 'function' ? baseAry(func, n) : func; - }); - } - - /** - * Creates a function that wraps `func` to invoke its iteratee with arguments - * arranged according to the specified `indexes` where the argument value at - * the first index is provided as the first argument, the argument value at - * the second index is provided as the second argument, and so on. - * - * @private - * @param {Function} func The function to rearrange iteratee arguments for. - * @param {number[]} indexes The arranged argument indexes. - * @returns {Function} Returns the new function. - */ - function iterateeRearg(func, indexes) { - return overArg(func, function(func) { - var n = indexes.length; - return baseArity(rearg(baseAry(func, n), indexes), n); - }); - } - - /** - * Creates a function that invokes `func` with its first argument passed - * thru `transform`. - * - * @private - * @param {Function} func The function to wrap. - * @param {...Function} transform The functions to transform the first argument. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function() { - var length = arguments.length; - if (!length) { - return func(); - } - var args = Array(length); - while (length--) { - args[length] = arguments[length]; - } - var index = config.rearg ? 0 : (length - 1); - args[index] = transform(args[index]); - return func.apply(undefined, args); - }; - } - - /** - * Creates a function that wraps `func` and applys the conversions - * rules by `name`. - * - * @private - * @param {string} name The name of the function to wrap. - * @param {Function} func The function to wrap. - * @returns {Function} Returns the converted function. - */ - function wrap(name, func) { - name = mapping.aliasToReal[name] || name; - - var result, - wrapped = func, - wrapper = wrappers[name]; - - if (wrapper) { - wrapped = wrapper(func); - } - else if (config.immutable) { - if (mutateMap.array[name]) { - wrapped = immutWrap(func, cloneArray); - } - else if (mutateMap.object[name]) { - wrapped = immutWrap(func, createCloner(func)); - } - else if (mutateMap.set[name]) { - wrapped = immutWrap(func, cloneByPath); - } - } - each(aryMethodKeys, function(aryKey) { - each(mapping.aryMethod[aryKey], function(otherName) { - if (name == otherName) { - var aryN = !isLib && mapping.iterateeAry[name], - reargIndexes = mapping.iterateeRearg[name], - spreadStart = mapping.methodSpread[name]; - - result = wrapped; - if (config.fixed && (forceFixed || !mapping.skipFixed[name])) { - result = spreadStart === undefined - ? ary(result, aryKey) - : spread(result, spreadStart); - } - if (config.rearg && aryKey > 1 && (forceRearg || !mapping.skipRearg[name])) { - result = rearg(result, mapping.methodRearg[name] || mapping.aryRearg[aryKey]); - } - if (config.cap) { - if (reargIndexes) { - result = iterateeRearg(result, reargIndexes); - } else if (aryN) { - result = iterateeAry(result, aryN); - } - } - if (forceCurry || (config.curry && aryKey > 1)) { - forceCurry && console.log(forceCurry, name); - result = curry(result, aryKey); - } - return false; - } - }); - return !result; - }); - - result || (result = wrapped); - if (result == func) { - result = forceCurry ? curry(result, 1) : function() { - return func.apply(this, arguments); - }; - } - result.convert = createConverter(name, func); - if (mapping.placeholder[name]) { - setPlaceholder = true; - result.placeholder = func.placeholder = placeholder; - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - if (!isObj) { - return wrap(name, func); - } - var _ = func; - - // Convert methods by ary cap. - var pairs = []; - each(aryMethodKeys, function(aryKey) { - each(mapping.aryMethod[aryKey], function(key) { - var func = _[mapping.remap[key] || key]; - if (func) { - pairs.push([key, wrap(key, func)]); - } - }); - }); - - // Convert remaining methods. - each(keys(_), function(key) { - var func = _[key]; - if (typeof func == 'function') { - var length = pairs.length; - while (length--) { - if (pairs[length][0] == key) { - return; - } - } - func.convert = createConverter(key, func); - pairs.push([key, func]); - } - }); - - // Assign to `_` leaving `_.prototype` unchanged to allow chaining. - each(pairs, function(pair) { - _[pair[0]] = pair[1]; - }); - - _.convert = convertLib; - if (setPlaceholder) { - _.placeholder = placeholder; - } - // Assign aliases. - each(keys(_), function(key) { - each(mapping.realToAlias[key] || [], function(alias) { - _[alias] = _[key]; - }); - }); - - return _; -} - -module.exports = baseConvert; diff --git a/node_modules/lowdb/node_modules/lodash/fp/_convertBrowser.js b/node_modules/lowdb/node_modules/lodash/fp/_convertBrowser.js deleted file mode 100644 index 1874a54..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/_convertBrowser.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseConvert = require('./_baseConvert'); - -/** - * Converts `lodash` to an immutable auto-curried iteratee-first data-last - * version with conversion `options` applied. - * - * @param {Function} lodash The lodash function to convert. - * @param {Object} [options] The options object. See `baseConvert` for more details. - * @returns {Function} Returns the converted `lodash`. - */ -function browserConvert(lodash, options) { - return baseConvert(lodash, lodash, options); -} - -if (typeof _ == 'function') { - _ = browserConvert(_.runInContext()); -} -module.exports = browserConvert; diff --git a/node_modules/lowdb/node_modules/lodash/fp/_falseOptions.js b/node_modules/lowdb/node_modules/lodash/fp/_falseOptions.js deleted file mode 100644 index 773235e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/_falseOptions.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - 'cap': false, - 'curry': false, - 'fixed': false, - 'immutable': false, - 'rearg': false -}; diff --git a/node_modules/lowdb/node_modules/lodash/fp/_mapping.js b/node_modules/lowdb/node_modules/lodash/fp/_mapping.js deleted file mode 100644 index a30c5de..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/_mapping.js +++ /dev/null @@ -1,309 +0,0 @@ -/** Used to map aliases to their real names. */ -exports.aliasToReal = { - - // Lodash aliases. - 'each': 'forEach', - 'eachRight': 'forEachRight', - 'entries': 'toPairs', - 'entriesIn': 'toPairsIn', - 'extend': 'assignIn', - 'extendWith': 'assignInWith', - 'first': 'head', - - // Ramda aliases. - '__': 'placeholder', - 'all': 'every', - 'allPass': 'overEvery', - 'always': 'constant', - 'any': 'some', - 'anyPass': 'overSome', - 'apply': 'spread', - 'assoc': 'set', - 'assocPath': 'set', - 'complement': 'negate', - 'compose': 'flowRight', - 'contains': 'includes', - 'dissoc': 'unset', - 'dissocPath': 'unset', - 'equals': 'isEqual', - 'identical': 'eq', - 'init': 'initial', - 'invertObj': 'invert', - 'juxt': 'over', - 'omitAll': 'omit', - 'nAry': 'ary', - 'path': 'get', - 'pathEq': 'matchesProperty', - 'pathOr': 'getOr', - 'paths': 'at', - 'pickAll': 'pick', - 'pipe': 'flow', - 'pluck': 'map', - 'prop': 'get', - 'propEq': 'matchesProperty', - 'propOr': 'getOr', - 'props': 'at', - 'unapply': 'rest', - 'unnest': 'flatten', - 'useWith': 'overArgs', - 'whereEq': 'filter', - 'zipObj': 'zipObject' -}; - -/** Used to map ary to method names. */ -exports.aryMethod = { - '1': [ - 'attempt', 'castArray', 'ceil', 'create', 'curry', 'curryRight', 'floor', - 'flow', 'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', - 'methodOf', 'mixin', 'over', 'overEvery', 'overSome', 'rest', 'reverse', - 'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart', - 'uniqueId', 'words' - ], - '2': [ - 'add', 'after', 'ary', 'assign', 'assignIn', 'at', 'before', 'bind', 'bindAll', - 'bindKey', 'chunk', 'cloneDeepWith', 'cloneWith', 'concat', 'countBy', 'curryN', - 'curryRightN', 'debounce', 'defaults', 'defaultsDeep', 'delay', 'difference', - 'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', - 'eq', 'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', - 'findLastIndex', 'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', - 'forEach', 'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', - 'get', 'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', - 'intersection', 'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', - 'join', 'keyBy', 'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', - 'matchesProperty', 'maxBy', 'meanBy', 'merge', 'minBy', 'multiply', 'nth', - 'omit', 'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', - 'partial', 'partialRight', 'partition', 'pick', 'pickBy', 'pull', 'pullAll', - 'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove', - 'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex', - 'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy', - 'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight', - 'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars', - 'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith', - 'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject', - 'zipObjectDeep' - ], - '3': [ - 'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith', - 'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr', - 'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith', - 'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth', - 'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd', - 'padCharsStart', 'pullAllBy', 'pullAllWith', 'reduce', 'reduceRight', 'replace', - 'set', 'slice', 'sortedIndexBy', 'sortedLastIndexBy', 'transform', 'unionBy', - 'unionWith', 'update', 'xorBy', 'xorWith', 'zipWith' - ], - '4': [ - 'fill', 'setWith', 'updateWith' - ] -}; - -/** Used to map ary to rearg configs. */ -exports.aryRearg = { - '2': [1, 0], - '3': [2, 0, 1], - '4': [3, 2, 0, 1] -}; - -/** Used to map method names to their iteratee ary. */ -exports.iterateeAry = { - 'dropRightWhile': 1, - 'dropWhile': 1, - 'every': 1, - 'filter': 1, - 'find': 1, - 'findFrom': 1, - 'findIndex': 1, - 'findIndexFrom': 1, - 'findKey': 1, - 'findLast': 1, - 'findLastFrom': 1, - 'findLastIndex': 1, - 'findLastIndexFrom': 1, - 'findLastKey': 1, - 'flatMap': 1, - 'flatMapDeep': 1, - 'flatMapDepth': 1, - 'forEach': 1, - 'forEachRight': 1, - 'forIn': 1, - 'forInRight': 1, - 'forOwn': 1, - 'forOwnRight': 1, - 'map': 1, - 'mapKeys': 1, - 'mapValues': 1, - 'partition': 1, - 'reduce': 2, - 'reduceRight': 2, - 'reject': 1, - 'remove': 1, - 'some': 1, - 'takeRightWhile': 1, - 'takeWhile': 1, - 'times': 1, - 'transform': 2 -}; - -/** Used to map method names to iteratee rearg configs. */ -exports.iterateeRearg = { - 'mapKeys': [1] -}; - -/** Used to map method names to rearg configs. */ -exports.methodRearg = { - 'assignInWith': [1, 2, 0], - 'assignWith': [1, 2, 0], - 'differenceBy': [1, 2, 0], - 'differenceWith': [1, 2, 0], - 'getOr': [2, 1, 0], - 'intersectionBy': [1, 2, 0], - 'intersectionWith': [1, 2, 0], - 'isEqualWith': [1, 2, 0], - 'isMatchWith': [2, 1, 0], - 'mergeWith': [1, 2, 0], - 'padChars': [2, 1, 0], - 'padCharsEnd': [2, 1, 0], - 'padCharsStart': [2, 1, 0], - 'pullAllBy': [2, 1, 0], - 'pullAllWith': [2, 1, 0], - 'setWith': [3, 1, 2, 0], - 'sortedIndexBy': [2, 1, 0], - 'sortedLastIndexBy': [2, 1, 0], - 'unionBy': [1, 2, 0], - 'unionWith': [1, 2, 0], - 'updateWith': [3, 1, 2, 0], - 'xorBy': [1, 2, 0], - 'xorWith': [1, 2, 0], - 'zipWith': [1, 2, 0] -}; - -/** Used to map method names to spread configs. */ -exports.methodSpread = { - 'invokeArgs': 2, - 'invokeArgsMap': 2, - 'partial': 1, - 'partialRight': 1, - 'without': 1 -}; - -/** Used to identify methods which mutate arrays or objects. */ -exports.mutate = { - 'array': { - 'fill': true, - 'pull': true, - 'pullAll': true, - 'pullAllBy': true, - 'pullAllWith': true, - 'pullAt': true, - 'remove': true, - 'reverse': true - }, - 'object': { - 'assign': true, - 'assignIn': true, - 'assignInWith': true, - 'assignWith': true, - 'defaults': true, - 'defaultsDeep': true, - 'merge': true, - 'mergeWith': true - }, - 'set': { - 'set': true, - 'setWith': true, - 'unset': true, - 'update': true, - 'updateWith': true - } -}; - -/** Used to track methods with placeholder support */ -exports.placeholder = { - 'bind': true, - 'bindKey': true, - 'curry': true, - 'curryRight': true, - 'partial': true, - 'partialRight': true -}; - -/** Used to map real names to their aliases. */ -exports.realToAlias = (function() { - var hasOwnProperty = Object.prototype.hasOwnProperty, - object = exports.aliasToReal, - result = {}; - - for (var key in object) { - var value = object[key]; - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - } - return result; -}()); - -/** Used to map method names to other names. */ -exports.remap = { - 'curryN': 'curry', - 'curryRightN': 'curryRight', - 'findFrom': 'find', - 'findIndexFrom': 'findIndex', - 'findLastFrom': 'findLast', - 'findLastIndexFrom': 'findLastIndex', - 'getOr': 'get', - 'includesFrom': 'includes', - 'indexOfFrom': 'indexOf', - 'invokeArgs': 'invoke', - 'invokeArgsMap': 'invokeMap', - 'lastIndexOfFrom': 'lastIndexOf', - 'padChars': 'pad', - 'padCharsEnd': 'padEnd', - 'padCharsStart': 'padStart', - 'restFrom': 'rest', - 'spreadFrom': 'spread', - 'trimChars': 'trim', - 'trimCharsEnd': 'trimEnd', - 'trimCharsStart': 'trimStart' -}; - -/** Used to track methods that skip fixing their arity. */ -exports.skipFixed = { - 'castArray': true, - 'flow': true, - 'flowRight': true, - 'iteratee': true, - 'mixin': true, - 'runInContext': true -}; - -/** Used to track methods that skip rearranging arguments. */ -exports.skipRearg = { - 'add': true, - 'assign': true, - 'assignIn': true, - 'bind': true, - 'bindKey': true, - 'concat': true, - 'difference': true, - 'divide': true, - 'eq': true, - 'gt': true, - 'gte': true, - 'isEqual': true, - 'lt': true, - 'lte': true, - 'matchesProperty': true, - 'merge': true, - 'multiply': true, - 'overArgs': true, - 'partial': true, - 'partialRight': true, - 'random': true, - 'range': true, - 'rangeRight': true, - 'subtract': true, - 'zip': true, - 'zipObject': true -}; diff --git a/node_modules/lowdb/node_modules/lodash/fp/_util.js b/node_modules/lowdb/node_modules/lodash/fp/_util.js deleted file mode 100644 index d450396..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/_util.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - 'ary': require('../ary'), - 'assign': require('../_baseAssign'), - 'clone': require('../clone'), - 'curry': require('../curry'), - 'forEach': require('../_arrayEach'), - 'isArray': require('../isArray'), - 'isFunction': require('../isFunction'), - 'iteratee': require('../iteratee'), - 'keys': require('../_baseKeys'), - 'rearg': require('../rearg'), - 'spread': require('../spread'), - 'toPath': require('../toPath') -}; diff --git a/node_modules/lowdb/node_modules/lodash/fp/add.js b/node_modules/lowdb/node_modules/lodash/fp/add.js deleted file mode 100644 index 816eeec..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/add.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('add', require('../add')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/after.js b/node_modules/lowdb/node_modules/lodash/fp/after.js deleted file mode 100644 index 21a0167..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/after.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('after', require('../after')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/all.js b/node_modules/lowdb/node_modules/lodash/fp/all.js deleted file mode 100644 index d0839f7..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/all.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./every'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/allPass.js b/node_modules/lowdb/node_modules/lodash/fp/allPass.js deleted file mode 100644 index 79b73ef..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/allPass.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./overEvery'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/always.js b/node_modules/lowdb/node_modules/lodash/fp/always.js deleted file mode 100644 index 9887703..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/always.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./constant'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/any.js b/node_modules/lowdb/node_modules/lodash/fp/any.js deleted file mode 100644 index 900ac25..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/any.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./some'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/anyPass.js b/node_modules/lowdb/node_modules/lodash/fp/anyPass.js deleted file mode 100644 index 2774ab3..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/anyPass.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./overSome'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/apply.js b/node_modules/lowdb/node_modules/lodash/fp/apply.js deleted file mode 100644 index 2b75712..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/apply.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./spread'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/array.js b/node_modules/lowdb/node_modules/lodash/fp/array.js deleted file mode 100644 index fe939c2..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/array.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../array')); diff --git a/node_modules/lowdb/node_modules/lodash/fp/ary.js b/node_modules/lowdb/node_modules/lodash/fp/ary.js deleted file mode 100644 index 8edf187..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/ary.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('ary', require('../ary')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/assign.js b/node_modules/lowdb/node_modules/lodash/fp/assign.js deleted file mode 100644 index 23f47af..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/assign.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assign', require('../assign')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/assignIn.js b/node_modules/lowdb/node_modules/lodash/fp/assignIn.js deleted file mode 100644 index 6e7c65f..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/assignIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignIn', require('../assignIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/assignInWith.js b/node_modules/lowdb/node_modules/lodash/fp/assignInWith.js deleted file mode 100644 index acb5923..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/assignInWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignInWith', require('../assignInWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/assignWith.js b/node_modules/lowdb/node_modules/lodash/fp/assignWith.js deleted file mode 100644 index eb92521..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/assignWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignWith', require('../assignWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/assoc.js b/node_modules/lowdb/node_modules/lodash/fp/assoc.js deleted file mode 100644 index 7648820..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/assoc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./set'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/assocPath.js b/node_modules/lowdb/node_modules/lodash/fp/assocPath.js deleted file mode 100644 index 7648820..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/assocPath.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./set'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/at.js b/node_modules/lowdb/node_modules/lodash/fp/at.js deleted file mode 100644 index cc39d25..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/at.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('at', require('../at')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/attempt.js b/node_modules/lowdb/node_modules/lodash/fp/attempt.js deleted file mode 100644 index 26ca42e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/attempt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('attempt', require('../attempt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/before.js b/node_modules/lowdb/node_modules/lodash/fp/before.js deleted file mode 100644 index 7a2de65..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/before.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('before', require('../before')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/bind.js b/node_modules/lowdb/node_modules/lodash/fp/bind.js deleted file mode 100644 index 5cbe4f3..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/bind.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('bind', require('../bind')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/bindAll.js b/node_modules/lowdb/node_modules/lodash/fp/bindAll.js deleted file mode 100644 index 6b4a4a0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/bindAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('bindAll', require('../bindAll')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/bindKey.js b/node_modules/lowdb/node_modules/lodash/fp/bindKey.js deleted file mode 100644 index 6a46c6b..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/bindKey.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('bindKey', require('../bindKey')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/camelCase.js b/node_modules/lowdb/node_modules/lodash/fp/camelCase.js deleted file mode 100644 index 87b77b4..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/camelCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('camelCase', require('../camelCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/capitalize.js b/node_modules/lowdb/node_modules/lodash/fp/capitalize.js deleted file mode 100644 index cac74e1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/capitalize.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('capitalize', require('../capitalize'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/castArray.js b/node_modules/lowdb/node_modules/lodash/fp/castArray.js deleted file mode 100644 index 8681c09..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/castArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('castArray', require('../castArray')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/ceil.js b/node_modules/lowdb/node_modules/lodash/fp/ceil.js deleted file mode 100644 index f416b72..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/ceil.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('ceil', require('../ceil')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/chain.js b/node_modules/lowdb/node_modules/lodash/fp/chain.js deleted file mode 100644 index 604fe39..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/chain.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('chain', require('../chain'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/chunk.js b/node_modules/lowdb/node_modules/lodash/fp/chunk.js deleted file mode 100644 index 871ab08..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/chunk.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('chunk', require('../chunk')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/clamp.js b/node_modules/lowdb/node_modules/lodash/fp/clamp.js deleted file mode 100644 index 3b06c01..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/clamp.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('clamp', require('../clamp')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/clone.js b/node_modules/lowdb/node_modules/lodash/fp/clone.js deleted file mode 100644 index cadb59c..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/clone.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('clone', require('../clone'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/cloneDeep.js b/node_modules/lowdb/node_modules/lodash/fp/cloneDeep.js deleted file mode 100644 index a6107aa..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/cloneDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cloneDeep', require('../cloneDeep'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/cloneDeepWith.js b/node_modules/lowdb/node_modules/lodash/fp/cloneDeepWith.js deleted file mode 100644 index 6f01e44..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/cloneDeepWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cloneDeepWith', require('../cloneDeepWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/cloneWith.js b/node_modules/lowdb/node_modules/lodash/fp/cloneWith.js deleted file mode 100644 index aa88578..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/cloneWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cloneWith', require('../cloneWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/collection.js b/node_modules/lowdb/node_modules/lodash/fp/collection.js deleted file mode 100644 index fc8b328..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/collection.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../collection')); diff --git a/node_modules/lowdb/node_modules/lodash/fp/commit.js b/node_modules/lowdb/node_modules/lodash/fp/commit.js deleted file mode 100644 index 130a894..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/commit.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('commit', require('../commit'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/compact.js b/node_modules/lowdb/node_modules/lodash/fp/compact.js deleted file mode 100644 index ce8f7a1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/compact.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('compact', require('../compact'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/complement.js b/node_modules/lowdb/node_modules/lodash/fp/complement.js deleted file mode 100644 index 93eb462..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/complement.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./negate'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/compose.js b/node_modules/lowdb/node_modules/lodash/fp/compose.js deleted file mode 100644 index 1954e94..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/compose.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./flowRight'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/concat.js b/node_modules/lowdb/node_modules/lodash/fp/concat.js deleted file mode 100644 index e59346a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/concat.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('concat', require('../concat')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/cond.js b/node_modules/lowdb/node_modules/lodash/fp/cond.js deleted file mode 100644 index 6a0120e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/cond.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cond', require('../cond'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/conforms.js b/node_modules/lowdb/node_modules/lodash/fp/conforms.js deleted file mode 100644 index e193cd6..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/conforms.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('conforms', require('../conforms'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/constant.js b/node_modules/lowdb/node_modules/lodash/fp/constant.js deleted file mode 100644 index 9e406fc..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/constant.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('constant', require('../constant'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/contains.js b/node_modules/lowdb/node_modules/lodash/fp/contains.js deleted file mode 100644 index 594722a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/contains.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./includes'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/convert.js b/node_modules/lowdb/node_modules/lodash/fp/convert.js deleted file mode 100644 index 4795dc4..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/convert.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseConvert = require('./_baseConvert'), - util = require('./_util'); - -/** - * Converts `func` of `name` to an immutable auto-curried iteratee-first data-last - * version with conversion `options` applied. If `name` is an object its methods - * will be converted. - * - * @param {string} name The name of the function to wrap. - * @param {Function} [func] The function to wrap. - * @param {Object} [options] The options object. See `baseConvert` for more details. - * @returns {Function|Object} Returns the converted function or object. - */ -function convert(name, func, options) { - return baseConvert(util, name, func, options); -} - -module.exports = convert; diff --git a/node_modules/lowdb/node_modules/lodash/fp/countBy.js b/node_modules/lowdb/node_modules/lodash/fp/countBy.js deleted file mode 100644 index dfa4643..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/countBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('countBy', require('../countBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/create.js b/node_modules/lowdb/node_modules/lodash/fp/create.js deleted file mode 100644 index 752025f..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/create.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('create', require('../create')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/curry.js b/node_modules/lowdb/node_modules/lodash/fp/curry.js deleted file mode 100644 index b0b4168..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/curry.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curry', require('../curry')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/curryN.js b/node_modules/lowdb/node_modules/lodash/fp/curryN.js deleted file mode 100644 index 2ae7d00..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/curryN.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curryN', require('../curry')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/curryRight.js b/node_modules/lowdb/node_modules/lodash/fp/curryRight.js deleted file mode 100644 index cb619eb..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/curryRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curryRight', require('../curryRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/curryRightN.js b/node_modules/lowdb/node_modules/lodash/fp/curryRightN.js deleted file mode 100644 index 2495afc..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/curryRightN.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curryRightN', require('../curryRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/date.js b/node_modules/lowdb/node_modules/lodash/fp/date.js deleted file mode 100644 index 82cb952..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/date.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../date')); diff --git a/node_modules/lowdb/node_modules/lodash/fp/debounce.js b/node_modules/lowdb/node_modules/lodash/fp/debounce.js deleted file mode 100644 index 2612229..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/debounce.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('debounce', require('../debounce')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/deburr.js b/node_modules/lowdb/node_modules/lodash/fp/deburr.js deleted file mode 100644 index 96463ab..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/deburr.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('deburr', require('../deburr'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/defaults.js b/node_modules/lowdb/node_modules/lodash/fp/defaults.js deleted file mode 100644 index e1a8e6e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/defaults.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaults', require('../defaults')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/defaultsDeep.js b/node_modules/lowdb/node_modules/lodash/fp/defaultsDeep.js deleted file mode 100644 index 1f172ff..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/defaultsDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaultsDeep', require('../defaultsDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/defer.js b/node_modules/lowdb/node_modules/lodash/fp/defer.js deleted file mode 100644 index ec7990f..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/defer.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defer', require('../defer'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/delay.js b/node_modules/lowdb/node_modules/lodash/fp/delay.js deleted file mode 100644 index 556dbd5..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/delay.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('delay', require('../delay')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/difference.js b/node_modules/lowdb/node_modules/lodash/fp/difference.js deleted file mode 100644 index 2d03765..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/difference.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('difference', require('../difference')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/differenceBy.js b/node_modules/lowdb/node_modules/lodash/fp/differenceBy.js deleted file mode 100644 index 2f91491..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/differenceBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('differenceBy', require('../differenceBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/differenceWith.js b/node_modules/lowdb/node_modules/lodash/fp/differenceWith.js deleted file mode 100644 index bcf5ad2..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/differenceWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('differenceWith', require('../differenceWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/dissoc.js b/node_modules/lowdb/node_modules/lodash/fp/dissoc.js deleted file mode 100644 index 7ec7be1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/dissoc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./unset'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/dissocPath.js b/node_modules/lowdb/node_modules/lodash/fp/dissocPath.js deleted file mode 100644 index 7ec7be1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/dissocPath.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./unset'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/divide.js b/node_modules/lowdb/node_modules/lodash/fp/divide.js deleted file mode 100644 index 82048c5..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/divide.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('divide', require('../divide')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/drop.js b/node_modules/lowdb/node_modules/lodash/fp/drop.js deleted file mode 100644 index 2fa9b4f..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/drop.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('drop', require('../drop')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/dropRight.js b/node_modules/lowdb/node_modules/lodash/fp/dropRight.js deleted file mode 100644 index e98881f..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/dropRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('dropRight', require('../dropRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/dropRightWhile.js b/node_modules/lowdb/node_modules/lodash/fp/dropRightWhile.js deleted file mode 100644 index cacaa70..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/dropRightWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('dropRightWhile', require('../dropRightWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/dropWhile.js b/node_modules/lowdb/node_modules/lodash/fp/dropWhile.js deleted file mode 100644 index 285f864..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/dropWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('dropWhile', require('../dropWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/each.js b/node_modules/lowdb/node_modules/lodash/fp/each.js deleted file mode 100644 index 8800f42..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/each.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEach'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/eachRight.js b/node_modules/lowdb/node_modules/lodash/fp/eachRight.js deleted file mode 100644 index 3252b2a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/eachRight.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEachRight'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/endsWith.js b/node_modules/lowdb/node_modules/lodash/fp/endsWith.js deleted file mode 100644 index 17dc2a4..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/endsWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('endsWith', require('../endsWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/entries.js b/node_modules/lowdb/node_modules/lodash/fp/entries.js deleted file mode 100644 index 7a88df2..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/entries.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairs'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/entriesIn.js b/node_modules/lowdb/node_modules/lodash/fp/entriesIn.js deleted file mode 100644 index f6c6331..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/entriesIn.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairsIn'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/eq.js b/node_modules/lowdb/node_modules/lodash/fp/eq.js deleted file mode 100644 index 9a3d21b..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/eq.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('eq', require('../eq')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/equals.js b/node_modules/lowdb/node_modules/lodash/fp/equals.js deleted file mode 100644 index e6a5ce0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/equals.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./isEqual'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/escape.js b/node_modules/lowdb/node_modules/lodash/fp/escape.js deleted file mode 100644 index 52c1fbb..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/escape.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('escape', require('../escape'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/escapeRegExp.js b/node_modules/lowdb/node_modules/lodash/fp/escapeRegExp.js deleted file mode 100644 index 369b2ef..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/escapeRegExp.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('escapeRegExp', require('../escapeRegExp'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/every.js b/node_modules/lowdb/node_modules/lodash/fp/every.js deleted file mode 100644 index 95c2776..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/every.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('every', require('../every')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/extend.js b/node_modules/lowdb/node_modules/lodash/fp/extend.js deleted file mode 100644 index e00166c..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/extend.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignIn'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/extendWith.js b/node_modules/lowdb/node_modules/lodash/fp/extendWith.js deleted file mode 100644 index dbdcb3b..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/extendWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInWith'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/fill.js b/node_modules/lowdb/node_modules/lodash/fp/fill.js deleted file mode 100644 index b2d47e8..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/fill.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('fill', require('../fill')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/filter.js b/node_modules/lowdb/node_modules/lodash/fp/filter.js deleted file mode 100644 index 796d501..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/filter.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('filter', require('../filter')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/find.js b/node_modules/lowdb/node_modules/lodash/fp/find.js deleted file mode 100644 index f805d33..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/find.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('find', require('../find')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/findFrom.js b/node_modules/lowdb/node_modules/lodash/fp/findFrom.js deleted file mode 100644 index da8275e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/findFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findFrom', require('../find')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/findIndex.js b/node_modules/lowdb/node_modules/lodash/fp/findIndex.js deleted file mode 100644 index 8c15fd1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/findIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findIndex', require('../findIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/findIndexFrom.js b/node_modules/lowdb/node_modules/lodash/fp/findIndexFrom.js deleted file mode 100644 index 32e98cb..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/findIndexFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findIndexFrom', require('../findIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/findKey.js b/node_modules/lowdb/node_modules/lodash/fp/findKey.js deleted file mode 100644 index 475bcfa..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/findKey.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findKey', require('../findKey')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/findLast.js b/node_modules/lowdb/node_modules/lodash/fp/findLast.js deleted file mode 100644 index 093fe94..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/findLast.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLast', require('../findLast')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/findLastFrom.js b/node_modules/lowdb/node_modules/lodash/fp/findLastFrom.js deleted file mode 100644 index 76c38fb..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/findLastFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastFrom', require('../findLast')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/findLastIndex.js b/node_modules/lowdb/node_modules/lodash/fp/findLastIndex.js deleted file mode 100644 index 36986df..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/findLastIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastIndex', require('../findLastIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/findLastIndexFrom.js b/node_modules/lowdb/node_modules/lodash/fp/findLastIndexFrom.js deleted file mode 100644 index 34c8176..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/findLastIndexFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastIndexFrom', require('../findLastIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/findLastKey.js b/node_modules/lowdb/node_modules/lodash/fp/findLastKey.js deleted file mode 100644 index 5f81b60..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/findLastKey.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastKey', require('../findLastKey')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/first.js b/node_modules/lowdb/node_modules/lodash/fp/first.js deleted file mode 100644 index 53f4ad1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/first.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./head'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/flatMap.js b/node_modules/lowdb/node_modules/lodash/fp/flatMap.js deleted file mode 100644 index d01dc4d..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/flatMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatMap', require('../flatMap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/flatMapDeep.js b/node_modules/lowdb/node_modules/lodash/fp/flatMapDeep.js deleted file mode 100644 index 569c42e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/flatMapDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatMapDeep', require('../flatMapDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/flatMapDepth.js b/node_modules/lowdb/node_modules/lodash/fp/flatMapDepth.js deleted file mode 100644 index 6eb68fd..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/flatMapDepth.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatMapDepth', require('../flatMapDepth')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/flatten.js b/node_modules/lowdb/node_modules/lodash/fp/flatten.js deleted file mode 100644 index 30425d8..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/flatten.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatten', require('../flatten'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/flattenDeep.js b/node_modules/lowdb/node_modules/lodash/fp/flattenDeep.js deleted file mode 100644 index aed5db2..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/flattenDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flattenDeep', require('../flattenDeep'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/flattenDepth.js b/node_modules/lowdb/node_modules/lodash/fp/flattenDepth.js deleted file mode 100644 index ad65e37..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/flattenDepth.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flattenDepth', require('../flattenDepth')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/flip.js b/node_modules/lowdb/node_modules/lodash/fp/flip.js deleted file mode 100644 index 0547e7b..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/flip.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flip', require('../flip'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/floor.js b/node_modules/lowdb/node_modules/lodash/fp/floor.js deleted file mode 100644 index a6cf335..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/floor.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('floor', require('../floor')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/flow.js b/node_modules/lowdb/node_modules/lodash/fp/flow.js deleted file mode 100644 index cd83677..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/flow.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flow', require('../flow')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/flowRight.js b/node_modules/lowdb/node_modules/lodash/fp/flowRight.js deleted file mode 100644 index 972a5b9..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/flowRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flowRight', require('../flowRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/forEach.js b/node_modules/lowdb/node_modules/lodash/fp/forEach.js deleted file mode 100644 index 2f49452..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/forEach.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forEach', require('../forEach')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/forEachRight.js b/node_modules/lowdb/node_modules/lodash/fp/forEachRight.js deleted file mode 100644 index 3ff9733..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/forEachRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forEachRight', require('../forEachRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/forIn.js b/node_modules/lowdb/node_modules/lodash/fp/forIn.js deleted file mode 100644 index 9341749..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/forIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forIn', require('../forIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/forInRight.js b/node_modules/lowdb/node_modules/lodash/fp/forInRight.js deleted file mode 100644 index cecf8bb..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/forInRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forInRight', require('../forInRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/forOwn.js b/node_modules/lowdb/node_modules/lodash/fp/forOwn.js deleted file mode 100644 index 246449e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/forOwn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forOwn', require('../forOwn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/forOwnRight.js b/node_modules/lowdb/node_modules/lodash/fp/forOwnRight.js deleted file mode 100644 index c5e826e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/forOwnRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forOwnRight', require('../forOwnRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/fromPairs.js b/node_modules/lowdb/node_modules/lodash/fp/fromPairs.js deleted file mode 100644 index f8cc596..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/fromPairs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('fromPairs', require('../fromPairs')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/function.js b/node_modules/lowdb/node_modules/lodash/fp/function.js deleted file mode 100644 index dfe69b1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/function.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../function')); diff --git a/node_modules/lowdb/node_modules/lodash/fp/functions.js b/node_modules/lowdb/node_modules/lodash/fp/functions.js deleted file mode 100644 index 09d1bb1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/functions.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('functions', require('../functions'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/functionsIn.js b/node_modules/lowdb/node_modules/lodash/fp/functionsIn.js deleted file mode 100644 index 2cfeb83..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/functionsIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('functionsIn', require('../functionsIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/get.js b/node_modules/lowdb/node_modules/lodash/fp/get.js deleted file mode 100644 index 6d3a328..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/get.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('get', require('../get')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/getOr.js b/node_modules/lowdb/node_modules/lodash/fp/getOr.js deleted file mode 100644 index 7dbf771..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/getOr.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('getOr', require('../get')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/groupBy.js b/node_modules/lowdb/node_modules/lodash/fp/groupBy.js deleted file mode 100644 index fc0bc78..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/groupBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('groupBy', require('../groupBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/gt.js b/node_modules/lowdb/node_modules/lodash/fp/gt.js deleted file mode 100644 index 9e57c80..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/gt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('gt', require('../gt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/gte.js b/node_modules/lowdb/node_modules/lodash/fp/gte.js deleted file mode 100644 index 4584786..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/gte.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('gte', require('../gte')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/has.js b/node_modules/lowdb/node_modules/lodash/fp/has.js deleted file mode 100644 index b901298..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/has.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('has', require('../has')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/hasIn.js b/node_modules/lowdb/node_modules/lodash/fp/hasIn.js deleted file mode 100644 index b3c3d1a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/hasIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('hasIn', require('../hasIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/head.js b/node_modules/lowdb/node_modules/lodash/fp/head.js deleted file mode 100644 index 2694f0a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/head.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('head', require('../head'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/identical.js b/node_modules/lowdb/node_modules/lodash/fp/identical.js deleted file mode 100644 index 85563f4..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/identical.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./eq'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/identity.js b/node_modules/lowdb/node_modules/lodash/fp/identity.js deleted file mode 100644 index 096415a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/identity.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('identity', require('../identity'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/inRange.js b/node_modules/lowdb/node_modules/lodash/fp/inRange.js deleted file mode 100644 index 202d940..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/inRange.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('inRange', require('../inRange')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/includes.js b/node_modules/lowdb/node_modules/lodash/fp/includes.js deleted file mode 100644 index 1146780..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/includes.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('includes', require('../includes')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/includesFrom.js b/node_modules/lowdb/node_modules/lodash/fp/includesFrom.js deleted file mode 100644 index 683afdb..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/includesFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('includesFrom', require('../includes')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/indexOf.js b/node_modules/lowdb/node_modules/lodash/fp/indexOf.js deleted file mode 100644 index 524658e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/indexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('indexOf', require('../indexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/indexOfFrom.js b/node_modules/lowdb/node_modules/lodash/fp/indexOfFrom.js deleted file mode 100644 index d99c822..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/indexOfFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('indexOfFrom', require('../indexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/init.js b/node_modules/lowdb/node_modules/lodash/fp/init.js deleted file mode 100644 index 2f88d8b..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/init.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./initial'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/initial.js b/node_modules/lowdb/node_modules/lodash/fp/initial.js deleted file mode 100644 index b732ba0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/initial.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('initial', require('../initial'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/intersection.js b/node_modules/lowdb/node_modules/lodash/fp/intersection.js deleted file mode 100644 index 52936d5..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/intersection.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('intersection', require('../intersection')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/intersectionBy.js b/node_modules/lowdb/node_modules/lodash/fp/intersectionBy.js deleted file mode 100644 index 72629f2..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/intersectionBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('intersectionBy', require('../intersectionBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/intersectionWith.js b/node_modules/lowdb/node_modules/lodash/fp/intersectionWith.js deleted file mode 100644 index e064f40..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/intersectionWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('intersectionWith', require('../intersectionWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/invert.js b/node_modules/lowdb/node_modules/lodash/fp/invert.js deleted file mode 100644 index 2d5d1f0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/invert.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invert', require('../invert')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/invertBy.js b/node_modules/lowdb/node_modules/lodash/fp/invertBy.js deleted file mode 100644 index 63ca97e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/invertBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invertBy', require('../invertBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/invertObj.js b/node_modules/lowdb/node_modules/lodash/fp/invertObj.js deleted file mode 100644 index f1d842e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/invertObj.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./invert'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/invoke.js b/node_modules/lowdb/node_modules/lodash/fp/invoke.js deleted file mode 100644 index fcf17f0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/invoke.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invoke', require('../invoke')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/invokeArgs.js b/node_modules/lowdb/node_modules/lodash/fp/invokeArgs.js deleted file mode 100644 index d3f2953..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/invokeArgs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invokeArgs', require('../invoke')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/invokeArgsMap.js b/node_modules/lowdb/node_modules/lodash/fp/invokeArgsMap.js deleted file mode 100644 index eaa9f84..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/invokeArgsMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invokeArgsMap', require('../invokeMap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/invokeMap.js b/node_modules/lowdb/node_modules/lodash/fp/invokeMap.js deleted file mode 100644 index 6515fd7..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/invokeMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invokeMap', require('../invokeMap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isArguments.js b/node_modules/lowdb/node_modules/lodash/fp/isArguments.js deleted file mode 100644 index 1d93c9e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isArguments.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArguments', require('../isArguments'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isArray.js b/node_modules/lowdb/node_modules/lodash/fp/isArray.js deleted file mode 100644 index ba7ade8..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArray', require('../isArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isArrayBuffer.js b/node_modules/lowdb/node_modules/lodash/fp/isArrayBuffer.js deleted file mode 100644 index 5088513..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isArrayBuffer.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArrayBuffer', require('../isArrayBuffer'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isArrayLike.js b/node_modules/lowdb/node_modules/lodash/fp/isArrayLike.js deleted file mode 100644 index 8f1856b..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isArrayLike.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArrayLike', require('../isArrayLike'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isArrayLikeObject.js b/node_modules/lowdb/node_modules/lodash/fp/isArrayLikeObject.js deleted file mode 100644 index 2108498..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isArrayLikeObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArrayLikeObject', require('../isArrayLikeObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isBoolean.js b/node_modules/lowdb/node_modules/lodash/fp/isBoolean.js deleted file mode 100644 index 9339f75..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isBoolean.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isBoolean', require('../isBoolean'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isBuffer.js b/node_modules/lowdb/node_modules/lodash/fp/isBuffer.js deleted file mode 100644 index e60b123..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isBuffer.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isBuffer', require('../isBuffer'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isDate.js b/node_modules/lowdb/node_modules/lodash/fp/isDate.js deleted file mode 100644 index dc41d08..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isDate.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isDate', require('../isDate'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isElement.js b/node_modules/lowdb/node_modules/lodash/fp/isElement.js deleted file mode 100644 index 18ee039..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isElement.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isElement', require('../isElement'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isEmpty.js b/node_modules/lowdb/node_modules/lodash/fp/isEmpty.js deleted file mode 100644 index 0f4ae84..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isEmpty.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isEmpty', require('../isEmpty'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isEqual.js b/node_modules/lowdb/node_modules/lodash/fp/isEqual.js deleted file mode 100644 index 4138386..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isEqual.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isEqual', require('../isEqual')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isEqualWith.js b/node_modules/lowdb/node_modules/lodash/fp/isEqualWith.js deleted file mode 100644 index 029ff5c..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isEqualWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isEqualWith', require('../isEqualWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isError.js b/node_modules/lowdb/node_modules/lodash/fp/isError.js deleted file mode 100644 index 3dfd81c..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isError.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isError', require('../isError'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isFinite.js b/node_modules/lowdb/node_modules/lodash/fp/isFinite.js deleted file mode 100644 index 0b647b8..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isFinite.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isFinite', require('../isFinite'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isFunction.js b/node_modules/lowdb/node_modules/lodash/fp/isFunction.js deleted file mode 100644 index ff8e5c4..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isFunction.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isFunction', require('../isFunction'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isInteger.js b/node_modules/lowdb/node_modules/lodash/fp/isInteger.js deleted file mode 100644 index 67af4ff..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isInteger', require('../isInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isLength.js b/node_modules/lowdb/node_modules/lodash/fp/isLength.js deleted file mode 100644 index fc101c5..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isLength.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isLength', require('../isLength'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isMap.js b/node_modules/lowdb/node_modules/lodash/fp/isMap.js deleted file mode 100644 index a209aa6..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isMap', require('../isMap'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isMatch.js b/node_modules/lowdb/node_modules/lodash/fp/isMatch.js deleted file mode 100644 index 6264ca1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isMatch.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isMatch', require('../isMatch')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isMatchWith.js b/node_modules/lowdb/node_modules/lodash/fp/isMatchWith.js deleted file mode 100644 index d95f319..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isMatchWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isMatchWith', require('../isMatchWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isNaN.js b/node_modules/lowdb/node_modules/lodash/fp/isNaN.js deleted file mode 100644 index 66a978f..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isNaN.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNaN', require('../isNaN'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isNative.js b/node_modules/lowdb/node_modules/lodash/fp/isNative.js deleted file mode 100644 index 3d775ba..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isNative.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNative', require('../isNative'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isNil.js b/node_modules/lowdb/node_modules/lodash/fp/isNil.js deleted file mode 100644 index 5952c02..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isNil.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNil', require('../isNil'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isNull.js b/node_modules/lowdb/node_modules/lodash/fp/isNull.js deleted file mode 100644 index f201a35..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isNull.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNull', require('../isNull'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isNumber.js b/node_modules/lowdb/node_modules/lodash/fp/isNumber.js deleted file mode 100644 index a2b5fa0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isNumber.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNumber', require('../isNumber'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isObject.js b/node_modules/lowdb/node_modules/lodash/fp/isObject.js deleted file mode 100644 index 231ace0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isObject', require('../isObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isObjectLike.js b/node_modules/lowdb/node_modules/lodash/fp/isObjectLike.js deleted file mode 100644 index f16082e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isObjectLike.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isObjectLike', require('../isObjectLike'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isPlainObject.js b/node_modules/lowdb/node_modules/lodash/fp/isPlainObject.js deleted file mode 100644 index b5bea90..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isPlainObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isPlainObject', require('../isPlainObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isRegExp.js b/node_modules/lowdb/node_modules/lodash/fp/isRegExp.js deleted file mode 100644 index 12a1a3d..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isRegExp.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isRegExp', require('../isRegExp'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isSafeInteger.js b/node_modules/lowdb/node_modules/lodash/fp/isSafeInteger.js deleted file mode 100644 index 7230f55..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isSafeInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isSafeInteger', require('../isSafeInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isSet.js b/node_modules/lowdb/node_modules/lodash/fp/isSet.js deleted file mode 100644 index 35c01f6..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isSet.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isSet', require('../isSet'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isString.js b/node_modules/lowdb/node_modules/lodash/fp/isString.js deleted file mode 100644 index 1fd0679..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isString.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isString', require('../isString'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isSymbol.js b/node_modules/lowdb/node_modules/lodash/fp/isSymbol.js deleted file mode 100644 index 3867695..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isSymbol.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isSymbol', require('../isSymbol'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isTypedArray.js b/node_modules/lowdb/node_modules/lodash/fp/isTypedArray.js deleted file mode 100644 index 8567953..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isTypedArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isTypedArray', require('../isTypedArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isUndefined.js b/node_modules/lowdb/node_modules/lodash/fp/isUndefined.js deleted file mode 100644 index ddbca31..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isUndefined.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isUndefined', require('../isUndefined'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isWeakMap.js b/node_modules/lowdb/node_modules/lodash/fp/isWeakMap.js deleted file mode 100644 index ef60c61..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isWeakMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isWeakMap', require('../isWeakMap'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/isWeakSet.js b/node_modules/lowdb/node_modules/lodash/fp/isWeakSet.js deleted file mode 100644 index c99bfaa..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/isWeakSet.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isWeakSet', require('../isWeakSet'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/iteratee.js b/node_modules/lowdb/node_modules/lodash/fp/iteratee.js deleted file mode 100644 index 9f0f717..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/iteratee.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('iteratee', require('../iteratee')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/join.js b/node_modules/lowdb/node_modules/lodash/fp/join.js deleted file mode 100644 index a220e00..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/join.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('join', require('../join')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/juxt.js b/node_modules/lowdb/node_modules/lodash/fp/juxt.js deleted file mode 100644 index f71e04e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/juxt.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./over'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/kebabCase.js b/node_modules/lowdb/node_modules/lodash/fp/kebabCase.js deleted file mode 100644 index 60737f1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/kebabCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('kebabCase', require('../kebabCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/keyBy.js b/node_modules/lowdb/node_modules/lodash/fp/keyBy.js deleted file mode 100644 index 9a6a85d..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/keyBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('keyBy', require('../keyBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/keys.js b/node_modules/lowdb/node_modules/lodash/fp/keys.js deleted file mode 100644 index e12bb07..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/keys.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('keys', require('../keys'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/keysIn.js b/node_modules/lowdb/node_modules/lodash/fp/keysIn.js deleted file mode 100644 index f3eb36a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/keysIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('keysIn', require('../keysIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/lang.js b/node_modules/lowdb/node_modules/lodash/fp/lang.js deleted file mode 100644 index 08cc9c1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/lang.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../lang')); diff --git a/node_modules/lowdb/node_modules/lodash/fp/last.js b/node_modules/lowdb/node_modules/lodash/fp/last.js deleted file mode 100644 index 0f71699..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/last.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('last', require('../last'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/lastIndexOf.js b/node_modules/lowdb/node_modules/lodash/fp/lastIndexOf.js deleted file mode 100644 index ddf39c3..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/lastIndexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lastIndexOf', require('../lastIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/lastIndexOfFrom.js b/node_modules/lowdb/node_modules/lodash/fp/lastIndexOfFrom.js deleted file mode 100644 index 1ff6a0b..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/lastIndexOfFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lastIndexOfFrom', require('../lastIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/lowerCase.js b/node_modules/lowdb/node_modules/lodash/fp/lowerCase.js deleted file mode 100644 index ea64bc1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/lowerCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lowerCase', require('../lowerCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/lowerFirst.js b/node_modules/lowdb/node_modules/lodash/fp/lowerFirst.js deleted file mode 100644 index 539720a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/lowerFirst.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lowerFirst', require('../lowerFirst'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/lt.js b/node_modules/lowdb/node_modules/lodash/fp/lt.js deleted file mode 100644 index a31d21e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/lt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lt', require('../lt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/lte.js b/node_modules/lowdb/node_modules/lodash/fp/lte.js deleted file mode 100644 index d795d10..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/lte.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lte', require('../lte')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/map.js b/node_modules/lowdb/node_modules/lodash/fp/map.js deleted file mode 100644 index cf98794..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/map.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('map', require('../map')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/mapKeys.js b/node_modules/lowdb/node_modules/lodash/fp/mapKeys.js deleted file mode 100644 index 1684587..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/mapKeys.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mapKeys', require('../mapKeys')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/mapValues.js b/node_modules/lowdb/node_modules/lodash/fp/mapValues.js deleted file mode 100644 index 4004972..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/mapValues.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mapValues', require('../mapValues')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/matches.js b/node_modules/lowdb/node_modules/lodash/fp/matches.js deleted file mode 100644 index 629399c..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/matches.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('matches', require('../matches'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/matchesProperty.js b/node_modules/lowdb/node_modules/lodash/fp/matchesProperty.js deleted file mode 100644 index 4575bd2..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/matchesProperty.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('matchesProperty', require('../matchesProperty')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/math.js b/node_modules/lowdb/node_modules/lodash/fp/math.js deleted file mode 100644 index e8f50f7..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/math.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../math')); diff --git a/node_modules/lowdb/node_modules/lodash/fp/max.js b/node_modules/lowdb/node_modules/lodash/fp/max.js deleted file mode 100644 index a66acac..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/max.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('max', require('../max'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/maxBy.js b/node_modules/lowdb/node_modules/lodash/fp/maxBy.js deleted file mode 100644 index d083fd6..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/maxBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('maxBy', require('../maxBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/mean.js b/node_modules/lowdb/node_modules/lodash/fp/mean.js deleted file mode 100644 index 3117246..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/mean.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mean', require('../mean'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/meanBy.js b/node_modules/lowdb/node_modules/lodash/fp/meanBy.js deleted file mode 100644 index 556f25e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/meanBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('meanBy', require('../meanBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/memoize.js b/node_modules/lowdb/node_modules/lodash/fp/memoize.js deleted file mode 100644 index 638eec6..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/memoize.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('memoize', require('../memoize')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/merge.js b/node_modules/lowdb/node_modules/lodash/fp/merge.js deleted file mode 100644 index ac66add..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/merge.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('merge', require('../merge')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/mergeWith.js b/node_modules/lowdb/node_modules/lodash/fp/mergeWith.js deleted file mode 100644 index 00d44d5..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/mergeWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mergeWith', require('../mergeWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/method.js b/node_modules/lowdb/node_modules/lodash/fp/method.js deleted file mode 100644 index f4060c6..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/method.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('method', require('../method')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/methodOf.js b/node_modules/lowdb/node_modules/lodash/fp/methodOf.js deleted file mode 100644 index 6139905..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/methodOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('methodOf', require('../methodOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/min.js b/node_modules/lowdb/node_modules/lodash/fp/min.js deleted file mode 100644 index d12c6b4..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/min.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('min', require('../min'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/minBy.js b/node_modules/lowdb/node_modules/lodash/fp/minBy.js deleted file mode 100644 index fdb9e24..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/minBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('minBy', require('../minBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/mixin.js b/node_modules/lowdb/node_modules/lodash/fp/mixin.js deleted file mode 100644 index 332e6fb..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/mixin.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mixin', require('../mixin')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/multiply.js b/node_modules/lowdb/node_modules/lodash/fp/multiply.js deleted file mode 100644 index 4dcf0b0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/multiply.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('multiply', require('../multiply')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/nAry.js b/node_modules/lowdb/node_modules/lodash/fp/nAry.js deleted file mode 100644 index f262a76..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/nAry.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./ary'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/negate.js b/node_modules/lowdb/node_modules/lodash/fp/negate.js deleted file mode 100644 index 8b6dc7c..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/negate.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('negate', require('../negate'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/next.js b/node_modules/lowdb/node_modules/lodash/fp/next.js deleted file mode 100644 index 140155e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/next.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('next', require('../next'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/noop.js b/node_modules/lowdb/node_modules/lodash/fp/noop.js deleted file mode 100644 index b9e32cc..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/noop.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('noop', require('../noop'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/now.js b/node_modules/lowdb/node_modules/lodash/fp/now.js deleted file mode 100644 index 6de2068..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/now.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('now', require('../now'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/nth.js b/node_modules/lowdb/node_modules/lodash/fp/nth.js deleted file mode 100644 index da4fda7..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/nth.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('nth', require('../nth')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/nthArg.js b/node_modules/lowdb/node_modules/lodash/fp/nthArg.js deleted file mode 100644 index 8ccd8e6..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/nthArg.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('nthArg', require('../nthArg'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/number.js b/node_modules/lowdb/node_modules/lodash/fp/number.js deleted file mode 100644 index 5c10b88..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/number.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../number')); diff --git a/node_modules/lowdb/node_modules/lodash/fp/object.js b/node_modules/lowdb/node_modules/lodash/fp/object.js deleted file mode 100644 index ae39a13..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/object.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../object')); diff --git a/node_modules/lowdb/node_modules/lodash/fp/omit.js b/node_modules/lowdb/node_modules/lodash/fp/omit.js deleted file mode 100644 index fd68529..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/omit.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('omit', require('../omit')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/omitAll.js b/node_modules/lowdb/node_modules/lodash/fp/omitAll.js deleted file mode 100644 index 144cf4b..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/omitAll.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./omit'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/omitBy.js b/node_modules/lowdb/node_modules/lodash/fp/omitBy.js deleted file mode 100644 index 90df738..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/omitBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('omitBy', require('../omitBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/once.js b/node_modules/lowdb/node_modules/lodash/fp/once.js deleted file mode 100644 index f8f0a5c..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/once.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('once', require('../once'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/orderBy.js b/node_modules/lowdb/node_modules/lodash/fp/orderBy.js deleted file mode 100644 index 848e210..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/orderBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('orderBy', require('../orderBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/over.js b/node_modules/lowdb/node_modules/lodash/fp/over.js deleted file mode 100644 index 01eba7b..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/over.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('over', require('../over')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/overArgs.js b/node_modules/lowdb/node_modules/lodash/fp/overArgs.js deleted file mode 100644 index 738556f..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/overArgs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('overArgs', require('../overArgs')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/overEvery.js b/node_modules/lowdb/node_modules/lodash/fp/overEvery.js deleted file mode 100644 index 9f5a032..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/overEvery.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('overEvery', require('../overEvery')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/overSome.js b/node_modules/lowdb/node_modules/lodash/fp/overSome.js deleted file mode 100644 index 15939d5..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/overSome.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('overSome', require('../overSome')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/pad.js b/node_modules/lowdb/node_modules/lodash/fp/pad.js deleted file mode 100644 index f1dea4a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/pad.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pad', require('../pad')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/padChars.js b/node_modules/lowdb/node_modules/lodash/fp/padChars.js deleted file mode 100644 index d6e0804..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/padChars.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padChars', require('../pad')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/padCharsEnd.js b/node_modules/lowdb/node_modules/lodash/fp/padCharsEnd.js deleted file mode 100644 index d4ab79a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/padCharsEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padCharsEnd', require('../padEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/padCharsStart.js b/node_modules/lowdb/node_modules/lodash/fp/padCharsStart.js deleted file mode 100644 index a08a300..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/padCharsStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padCharsStart', require('../padStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/padEnd.js b/node_modules/lowdb/node_modules/lodash/fp/padEnd.js deleted file mode 100644 index a8522ec..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/padEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padEnd', require('../padEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/padStart.js b/node_modules/lowdb/node_modules/lodash/fp/padStart.js deleted file mode 100644 index f4ca79d..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/padStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padStart', require('../padStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/parseInt.js b/node_modules/lowdb/node_modules/lodash/fp/parseInt.js deleted file mode 100644 index 27314cc..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/parseInt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('parseInt', require('../parseInt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/partial.js b/node_modules/lowdb/node_modules/lodash/fp/partial.js deleted file mode 100644 index 5d46015..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/partial.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('partial', require('../partial')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/partialRight.js b/node_modules/lowdb/node_modules/lodash/fp/partialRight.js deleted file mode 100644 index 7f05fed..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/partialRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('partialRight', require('../partialRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/partition.js b/node_modules/lowdb/node_modules/lodash/fp/partition.js deleted file mode 100644 index 2ebcacc..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/partition.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('partition', require('../partition')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/path.js b/node_modules/lowdb/node_modules/lodash/fp/path.js deleted file mode 100644 index b29cfb2..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/path.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./get'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/pathEq.js b/node_modules/lowdb/node_modules/lodash/fp/pathEq.js deleted file mode 100644 index 36c027a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/pathEq.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./matchesProperty'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/pathOr.js b/node_modules/lowdb/node_modules/lodash/fp/pathOr.js deleted file mode 100644 index 4ab5820..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/pathOr.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./getOr'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/paths.js b/node_modules/lowdb/node_modules/lodash/fp/paths.js deleted file mode 100644 index 1eb7950..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/paths.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./at'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/pick.js b/node_modules/lowdb/node_modules/lodash/fp/pick.js deleted file mode 100644 index 197393d..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/pick.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pick', require('../pick')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/pickAll.js b/node_modules/lowdb/node_modules/lodash/fp/pickAll.js deleted file mode 100644 index a8ecd46..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/pickAll.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./pick'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/pickBy.js b/node_modules/lowdb/node_modules/lodash/fp/pickBy.js deleted file mode 100644 index d832d16..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/pickBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pickBy', require('../pickBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/pipe.js b/node_modules/lowdb/node_modules/lodash/fp/pipe.js deleted file mode 100644 index b2e1e2c..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/pipe.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./flow'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/placeholder.js b/node_modules/lowdb/node_modules/lodash/fp/placeholder.js deleted file mode 100644 index 1ce1739..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/placeholder.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * The default argument placeholder value for methods. - * - * @type {Object} - */ -module.exports = {}; diff --git a/node_modules/lowdb/node_modules/lodash/fp/plant.js b/node_modules/lowdb/node_modules/lodash/fp/plant.js deleted file mode 100644 index eca8f32..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/plant.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('plant', require('../plant'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/pluck.js b/node_modules/lowdb/node_modules/lodash/fp/pluck.js deleted file mode 100644 index 0d1e1ab..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/pluck.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./map'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/prop.js b/node_modules/lowdb/node_modules/lodash/fp/prop.js deleted file mode 100644 index b29cfb2..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/prop.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./get'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/propEq.js b/node_modules/lowdb/node_modules/lodash/fp/propEq.js deleted file mode 100644 index 36c027a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/propEq.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./matchesProperty'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/propOr.js b/node_modules/lowdb/node_modules/lodash/fp/propOr.js deleted file mode 100644 index 4ab5820..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/propOr.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./getOr'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/property.js b/node_modules/lowdb/node_modules/lodash/fp/property.js deleted file mode 100644 index d832fbb..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/property.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('property', require('../property'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/propertyOf.js b/node_modules/lowdb/node_modules/lodash/fp/propertyOf.js deleted file mode 100644 index 3cfdef7..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/propertyOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('propertyOf', require('../propertyOf'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/props.js b/node_modules/lowdb/node_modules/lodash/fp/props.js deleted file mode 100644 index 1eb7950..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/props.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./at'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/pull.js b/node_modules/lowdb/node_modules/lodash/fp/pull.js deleted file mode 100644 index 8d7084f..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/pull.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pull', require('../pull')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/pullAll.js b/node_modules/lowdb/node_modules/lodash/fp/pullAll.js deleted file mode 100644 index 98d5c9a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/pullAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAll', require('../pullAll')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/pullAllBy.js b/node_modules/lowdb/node_modules/lodash/fp/pullAllBy.js deleted file mode 100644 index 876bc3b..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/pullAllBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAllBy', require('../pullAllBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/pullAllWith.js b/node_modules/lowdb/node_modules/lodash/fp/pullAllWith.js deleted file mode 100644 index f71ba4d..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/pullAllWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAllWith', require('../pullAllWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/pullAt.js b/node_modules/lowdb/node_modules/lodash/fp/pullAt.js deleted file mode 100644 index e8b3bb6..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/pullAt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAt', require('../pullAt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/random.js b/node_modules/lowdb/node_modules/lodash/fp/random.js deleted file mode 100644 index 99d852e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/random.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('random', require('../random')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/range.js b/node_modules/lowdb/node_modules/lodash/fp/range.js deleted file mode 100644 index a6bb591..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/range.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('range', require('../range')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/rangeRight.js b/node_modules/lowdb/node_modules/lodash/fp/rangeRight.js deleted file mode 100644 index fdb712f..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/rangeRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rangeRight', require('../rangeRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/rearg.js b/node_modules/lowdb/node_modules/lodash/fp/rearg.js deleted file mode 100644 index 678e02a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/rearg.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rearg', require('../rearg')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/reduce.js b/node_modules/lowdb/node_modules/lodash/fp/reduce.js deleted file mode 100644 index 4cef0a0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/reduce.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reduce', require('../reduce')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/reduceRight.js b/node_modules/lowdb/node_modules/lodash/fp/reduceRight.js deleted file mode 100644 index caf5bb5..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/reduceRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reduceRight', require('../reduceRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/reject.js b/node_modules/lowdb/node_modules/lodash/fp/reject.js deleted file mode 100644 index c163273..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/reject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reject', require('../reject')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/remove.js b/node_modules/lowdb/node_modules/lodash/fp/remove.js deleted file mode 100644 index e9d1327..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/remove.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('remove', require('../remove')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/repeat.js b/node_modules/lowdb/node_modules/lodash/fp/repeat.js deleted file mode 100644 index 08470f2..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/repeat.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('repeat', require('../repeat')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/replace.js b/node_modules/lowdb/node_modules/lodash/fp/replace.js deleted file mode 100644 index 2227db6..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/replace.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('replace', require('../replace')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/rest.js b/node_modules/lowdb/node_modules/lodash/fp/rest.js deleted file mode 100644 index c1f3d64..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/rest.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rest', require('../rest')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/restFrom.js b/node_modules/lowdb/node_modules/lodash/fp/restFrom.js deleted file mode 100644 index 714e42b..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/restFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('restFrom', require('../rest')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/result.js b/node_modules/lowdb/node_modules/lodash/fp/result.js deleted file mode 100644 index f86ce07..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/result.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('result', require('../result')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/reverse.js b/node_modules/lowdb/node_modules/lodash/fp/reverse.js deleted file mode 100644 index 07c9f5e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/reverse.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reverse', require('../reverse')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/round.js b/node_modules/lowdb/node_modules/lodash/fp/round.js deleted file mode 100644 index 4c0e5c8..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/round.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('round', require('../round')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/sample.js b/node_modules/lowdb/node_modules/lodash/fp/sample.js deleted file mode 100644 index 6bea125..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/sample.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sample', require('../sample'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/sampleSize.js b/node_modules/lowdb/node_modules/lodash/fp/sampleSize.js deleted file mode 100644 index 359ed6f..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/sampleSize.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sampleSize', require('../sampleSize')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/seq.js b/node_modules/lowdb/node_modules/lodash/fp/seq.js deleted file mode 100644 index d8f42b0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/seq.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../seq')); diff --git a/node_modules/lowdb/node_modules/lodash/fp/set.js b/node_modules/lowdb/node_modules/lodash/fp/set.js deleted file mode 100644 index 0b56a56..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/set.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('set', require('../set')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/setWith.js b/node_modules/lowdb/node_modules/lodash/fp/setWith.js deleted file mode 100644 index 0b58495..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/setWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('setWith', require('../setWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/shuffle.js b/node_modules/lowdb/node_modules/lodash/fp/shuffle.js deleted file mode 100644 index aa3a1ca..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/shuffle.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('shuffle', require('../shuffle'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/size.js b/node_modules/lowdb/node_modules/lodash/fp/size.js deleted file mode 100644 index 7490136..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/size.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('size', require('../size'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/slice.js b/node_modules/lowdb/node_modules/lodash/fp/slice.js deleted file mode 100644 index 15945d3..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/slice.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('slice', require('../slice')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/snakeCase.js b/node_modules/lowdb/node_modules/lodash/fp/snakeCase.js deleted file mode 100644 index a0ff780..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/snakeCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('snakeCase', require('../snakeCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/some.js b/node_modules/lowdb/node_modules/lodash/fp/some.js deleted file mode 100644 index a4fa2d0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/some.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('some', require('../some')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/sortBy.js b/node_modules/lowdb/node_modules/lodash/fp/sortBy.js deleted file mode 100644 index e0790ad..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/sortBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortBy', require('../sortBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/sortedIndex.js b/node_modules/lowdb/node_modules/lodash/fp/sortedIndex.js deleted file mode 100644 index 364a054..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/sortedIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedIndex', require('../sortedIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/sortedIndexBy.js b/node_modules/lowdb/node_modules/lodash/fp/sortedIndexBy.js deleted file mode 100644 index 9593dbd..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/sortedIndexBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedIndexBy', require('../sortedIndexBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/sortedIndexOf.js b/node_modules/lowdb/node_modules/lodash/fp/sortedIndexOf.js deleted file mode 100644 index c9084ca..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/sortedIndexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedIndexOf', require('../sortedIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/sortedLastIndex.js b/node_modules/lowdb/node_modules/lodash/fp/sortedLastIndex.js deleted file mode 100644 index 47fe241..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/sortedLastIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedLastIndex', require('../sortedLastIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/sortedLastIndexBy.js b/node_modules/lowdb/node_modules/lodash/fp/sortedLastIndexBy.js deleted file mode 100644 index 0f9a347..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/sortedLastIndexBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedLastIndexBy', require('../sortedLastIndexBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/sortedLastIndexOf.js b/node_modules/lowdb/node_modules/lodash/fp/sortedLastIndexOf.js deleted file mode 100644 index 0d4d932..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/sortedLastIndexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedLastIndexOf', require('../sortedLastIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/sortedUniq.js b/node_modules/lowdb/node_modules/lodash/fp/sortedUniq.js deleted file mode 100644 index 882d283..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/sortedUniq.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedUniq', require('../sortedUniq'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/sortedUniqBy.js b/node_modules/lowdb/node_modules/lodash/fp/sortedUniqBy.js deleted file mode 100644 index 033db91..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/sortedUniqBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedUniqBy', require('../sortedUniqBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/split.js b/node_modules/lowdb/node_modules/lodash/fp/split.js deleted file mode 100644 index 14de1a7..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/split.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('split', require('../split')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/spread.js b/node_modules/lowdb/node_modules/lodash/fp/spread.js deleted file mode 100644 index 2d11b70..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/spread.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('spread', require('../spread')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/spreadFrom.js b/node_modules/lowdb/node_modules/lodash/fp/spreadFrom.js deleted file mode 100644 index 0b630df..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/spreadFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('spreadFrom', require('../spread')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/startCase.js b/node_modules/lowdb/node_modules/lodash/fp/startCase.js deleted file mode 100644 index ada98c9..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/startCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('startCase', require('../startCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/startsWith.js b/node_modules/lowdb/node_modules/lodash/fp/startsWith.js deleted file mode 100644 index 985e2f2..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/startsWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('startsWith', require('../startsWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/string.js b/node_modules/lowdb/node_modules/lodash/fp/string.js deleted file mode 100644 index 773b037..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/string.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../string')); diff --git a/node_modules/lowdb/node_modules/lodash/fp/stubArray.js b/node_modules/lowdb/node_modules/lodash/fp/stubArray.js deleted file mode 100644 index cd604cb..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/stubArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubArray', require('../stubArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/stubFalse.js b/node_modules/lowdb/node_modules/lodash/fp/stubFalse.js deleted file mode 100644 index 3296664..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/stubFalse.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubFalse', require('../stubFalse'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/stubObject.js b/node_modules/lowdb/node_modules/lodash/fp/stubObject.js deleted file mode 100644 index c6c8ec4..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/stubObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubObject', require('../stubObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/stubString.js b/node_modules/lowdb/node_modules/lodash/fp/stubString.js deleted file mode 100644 index 701051e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/stubString.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubString', require('../stubString'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/stubTrue.js b/node_modules/lowdb/node_modules/lodash/fp/stubTrue.js deleted file mode 100644 index 9249082..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/stubTrue.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubTrue', require('../stubTrue'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/subtract.js b/node_modules/lowdb/node_modules/lodash/fp/subtract.js deleted file mode 100644 index d32b16d..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/subtract.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('subtract', require('../subtract')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/sum.js b/node_modules/lowdb/node_modules/lodash/fp/sum.js deleted file mode 100644 index 5cce12b..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/sum.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sum', require('../sum'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/sumBy.js b/node_modules/lowdb/node_modules/lodash/fp/sumBy.js deleted file mode 100644 index c882656..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/sumBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sumBy', require('../sumBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/tail.js b/node_modules/lowdb/node_modules/lodash/fp/tail.js deleted file mode 100644 index f122f0a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/tail.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('tail', require('../tail'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/take.js b/node_modules/lowdb/node_modules/lodash/fp/take.js deleted file mode 100644 index 9af98a7..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/take.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('take', require('../take')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/takeRight.js b/node_modules/lowdb/node_modules/lodash/fp/takeRight.js deleted file mode 100644 index b82950a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/takeRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('takeRight', require('../takeRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/takeRightWhile.js b/node_modules/lowdb/node_modules/lodash/fp/takeRightWhile.js deleted file mode 100644 index 8ffb0a2..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/takeRightWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('takeRightWhile', require('../takeRightWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/takeWhile.js b/node_modules/lowdb/node_modules/lodash/fp/takeWhile.js deleted file mode 100644 index 2813664..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/takeWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('takeWhile', require('../takeWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/tap.js b/node_modules/lowdb/node_modules/lodash/fp/tap.js deleted file mode 100644 index d33ad6e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/tap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('tap', require('../tap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/template.js b/node_modules/lowdb/node_modules/lodash/fp/template.js deleted file mode 100644 index 74857e1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/template.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('template', require('../template')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/templateSettings.js b/node_modules/lowdb/node_modules/lodash/fp/templateSettings.js deleted file mode 100644 index 7bcc0a8..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/templateSettings.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('templateSettings', require('../templateSettings'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/throttle.js b/node_modules/lowdb/node_modules/lodash/fp/throttle.js deleted file mode 100644 index 77fff14..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/throttle.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('throttle', require('../throttle')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/thru.js b/node_modules/lowdb/node_modules/lodash/fp/thru.js deleted file mode 100644 index d42b3b1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/thru.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('thru', require('../thru')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/times.js b/node_modules/lowdb/node_modules/lodash/fp/times.js deleted file mode 100644 index 0dab06d..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/times.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('times', require('../times')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toArray.js b/node_modules/lowdb/node_modules/lodash/fp/toArray.js deleted file mode 100644 index f0c360a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toArray', require('../toArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toFinite.js b/node_modules/lowdb/node_modules/lodash/fp/toFinite.js deleted file mode 100644 index 3a47687..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toFinite.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toFinite', require('../toFinite'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toInteger.js b/node_modules/lowdb/node_modules/lodash/fp/toInteger.js deleted file mode 100644 index e0af6a7..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toInteger', require('../toInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toIterator.js b/node_modules/lowdb/node_modules/lodash/fp/toIterator.js deleted file mode 100644 index 65e6baa..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toIterator.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toIterator', require('../toIterator'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toJSON.js b/node_modules/lowdb/node_modules/lodash/fp/toJSON.js deleted file mode 100644 index 2d718d0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toJSON.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toJSON', require('../toJSON'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toLength.js b/node_modules/lowdb/node_modules/lodash/fp/toLength.js deleted file mode 100644 index b97cdd9..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toLength.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toLength', require('../toLength'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toLower.js b/node_modules/lowdb/node_modules/lodash/fp/toLower.js deleted file mode 100644 index 616ef36..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toLower.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toLower', require('../toLower'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toNumber.js b/node_modules/lowdb/node_modules/lodash/fp/toNumber.js deleted file mode 100644 index d0c6f4d..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toNumber.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toNumber', require('../toNumber'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toPairs.js b/node_modules/lowdb/node_modules/lodash/fp/toPairs.js deleted file mode 100644 index af78378..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toPairs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPairs', require('../toPairs'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toPairsIn.js b/node_modules/lowdb/node_modules/lodash/fp/toPairsIn.js deleted file mode 100644 index 66504ab..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toPairsIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPairsIn', require('../toPairsIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toPath.js b/node_modules/lowdb/node_modules/lodash/fp/toPath.js deleted file mode 100644 index b4d5e50..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toPath.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPath', require('../toPath'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toPlainObject.js b/node_modules/lowdb/node_modules/lodash/fp/toPlainObject.js deleted file mode 100644 index 278bb86..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toPlainObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPlainObject', require('../toPlainObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toSafeInteger.js b/node_modules/lowdb/node_modules/lodash/fp/toSafeInteger.js deleted file mode 100644 index 367a26f..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toSafeInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toSafeInteger', require('../toSafeInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toString.js b/node_modules/lowdb/node_modules/lodash/fp/toString.js deleted file mode 100644 index cec4f8e..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toString.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toString', require('../toString'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/toUpper.js b/node_modules/lowdb/node_modules/lodash/fp/toUpper.js deleted file mode 100644 index 54f9a56..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/toUpper.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toUpper', require('../toUpper'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/transform.js b/node_modules/lowdb/node_modules/lodash/fp/transform.js deleted file mode 100644 index 759d088..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/transform.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('transform', require('../transform')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/trim.js b/node_modules/lowdb/node_modules/lodash/fp/trim.js deleted file mode 100644 index e6319a7..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/trim.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trim', require('../trim')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/trimChars.js b/node_modules/lowdb/node_modules/lodash/fp/trimChars.js deleted file mode 100644 index c9294de..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/trimChars.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimChars', require('../trim')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/trimCharsEnd.js b/node_modules/lowdb/node_modules/lodash/fp/trimCharsEnd.js deleted file mode 100644 index 284bc2f..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/trimCharsEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimCharsEnd', require('../trimEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/trimCharsStart.js b/node_modules/lowdb/node_modules/lodash/fp/trimCharsStart.js deleted file mode 100644 index ff0ee65..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/trimCharsStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimCharsStart', require('../trimStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/trimEnd.js b/node_modules/lowdb/node_modules/lodash/fp/trimEnd.js deleted file mode 100644 index 7190880..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/trimEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimEnd', require('../trimEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/trimStart.js b/node_modules/lowdb/node_modules/lodash/fp/trimStart.js deleted file mode 100644 index fda902c..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/trimStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimStart', require('../trimStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/truncate.js b/node_modules/lowdb/node_modules/lodash/fp/truncate.js deleted file mode 100644 index d265c1d..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/truncate.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('truncate', require('../truncate')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/unapply.js b/node_modules/lowdb/node_modules/lodash/fp/unapply.js deleted file mode 100644 index c5dfe77..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/unapply.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./rest'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/unary.js b/node_modules/lowdb/node_modules/lodash/fp/unary.js deleted file mode 100644 index 286c945..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/unary.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unary', require('../unary'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/unescape.js b/node_modules/lowdb/node_modules/lodash/fp/unescape.js deleted file mode 100644 index fddcb46..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/unescape.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unescape', require('../unescape'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/union.js b/node_modules/lowdb/node_modules/lodash/fp/union.js deleted file mode 100644 index ef8228d..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/union.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('union', require('../union')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/unionBy.js b/node_modules/lowdb/node_modules/lodash/fp/unionBy.js deleted file mode 100644 index 603687a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/unionBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unionBy', require('../unionBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/unionWith.js b/node_modules/lowdb/node_modules/lodash/fp/unionWith.js deleted file mode 100644 index 65bb3a7..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/unionWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unionWith', require('../unionWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/uniq.js b/node_modules/lowdb/node_modules/lodash/fp/uniq.js deleted file mode 100644 index bc18524..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/uniq.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniq', require('../uniq'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/uniqBy.js b/node_modules/lowdb/node_modules/lodash/fp/uniqBy.js deleted file mode 100644 index 634c6a8..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/uniqBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniqBy', require('../uniqBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/uniqWith.js b/node_modules/lowdb/node_modules/lodash/fp/uniqWith.js deleted file mode 100644 index 0ec601a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/uniqWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniqWith', require('../uniqWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/uniqueId.js b/node_modules/lowdb/node_modules/lodash/fp/uniqueId.js deleted file mode 100644 index aa8fc2f..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/uniqueId.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniqueId', require('../uniqueId')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/unnest.js b/node_modules/lowdb/node_modules/lodash/fp/unnest.js deleted file mode 100644 index 5d34060..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/unnest.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./flatten'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/unset.js b/node_modules/lowdb/node_modules/lodash/fp/unset.js deleted file mode 100644 index ea203a0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/unset.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unset', require('../unset')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/unzip.js b/node_modules/lowdb/node_modules/lodash/fp/unzip.js deleted file mode 100644 index cc364b3..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/unzip.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unzip', require('../unzip'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/unzipWith.js b/node_modules/lowdb/node_modules/lodash/fp/unzipWith.js deleted file mode 100644 index 182eaa1..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/unzipWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unzipWith', require('../unzipWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/update.js b/node_modules/lowdb/node_modules/lodash/fp/update.js deleted file mode 100644 index b8ce2cc..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/update.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('update', require('../update')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/updateWith.js b/node_modules/lowdb/node_modules/lodash/fp/updateWith.js deleted file mode 100644 index d5e8282..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/updateWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('updateWith', require('../updateWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/upperCase.js b/node_modules/lowdb/node_modules/lodash/fp/upperCase.js deleted file mode 100644 index c886f20..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/upperCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('upperCase', require('../upperCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/upperFirst.js b/node_modules/lowdb/node_modules/lodash/fp/upperFirst.js deleted file mode 100644 index d8c04df..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/upperFirst.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('upperFirst', require('../upperFirst'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/useWith.js b/node_modules/lowdb/node_modules/lodash/fp/useWith.js deleted file mode 100644 index d8b3df5..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/useWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./overArgs'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/util.js b/node_modules/lowdb/node_modules/lodash/fp/util.js deleted file mode 100644 index 18c00ba..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/util.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../util')); diff --git a/node_modules/lowdb/node_modules/lodash/fp/value.js b/node_modules/lowdb/node_modules/lodash/fp/value.js deleted file mode 100644 index 555eec7..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/value.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('value', require('../value'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/valueOf.js b/node_modules/lowdb/node_modules/lodash/fp/valueOf.js deleted file mode 100644 index f968807..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/valueOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('valueOf', require('../valueOf'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/values.js b/node_modules/lowdb/node_modules/lodash/fp/values.js deleted file mode 100644 index 2dfc561..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/values.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('values', require('../values'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/valuesIn.js b/node_modules/lowdb/node_modules/lodash/fp/valuesIn.js deleted file mode 100644 index a1b2bb8..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/valuesIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('valuesIn', require('../valuesIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/whereEq.js b/node_modules/lowdb/node_modules/lodash/fp/whereEq.js deleted file mode 100644 index ade80f6..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/whereEq.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./filter'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/without.js b/node_modules/lowdb/node_modules/lodash/fp/without.js deleted file mode 100644 index bad9e12..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/without.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('without', require('../without')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/words.js b/node_modules/lowdb/node_modules/lodash/fp/words.js deleted file mode 100644 index 4a90141..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/words.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('words', require('../words')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/wrap.js b/node_modules/lowdb/node_modules/lodash/fp/wrap.js deleted file mode 100644 index e93bd8a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/wrap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrap', require('../wrap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/wrapperAt.js b/node_modules/lowdb/node_modules/lodash/fp/wrapperAt.js deleted file mode 100644 index 8f0a310..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/wrapperAt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperAt', require('../wrapperAt'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/wrapperChain.js b/node_modules/lowdb/node_modules/lodash/fp/wrapperChain.js deleted file mode 100644 index 2a48ea2..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/wrapperChain.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperChain', require('../wrapperChain'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/wrapperLodash.js b/node_modules/lowdb/node_modules/lodash/fp/wrapperLodash.js deleted file mode 100644 index a7162d0..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/wrapperLodash.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperLodash', require('../wrapperLodash'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/wrapperReverse.js b/node_modules/lowdb/node_modules/lodash/fp/wrapperReverse.js deleted file mode 100644 index e1481aa..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/wrapperReverse.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperReverse', require('../wrapperReverse'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/wrapperValue.js b/node_modules/lowdb/node_modules/lodash/fp/wrapperValue.js deleted file mode 100644 index 8eb9112..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/wrapperValue.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperValue', require('../wrapperValue'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/xor.js b/node_modules/lowdb/node_modules/lodash/fp/xor.js deleted file mode 100644 index 29e2819..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/xor.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('xor', require('../xor')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/xorBy.js b/node_modules/lowdb/node_modules/lodash/fp/xorBy.js deleted file mode 100644 index b355686..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/xorBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('xorBy', require('../xorBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/xorWith.js b/node_modules/lowdb/node_modules/lodash/fp/xorWith.js deleted file mode 100644 index 8e05739..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/xorWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('xorWith', require('../xorWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/zip.js b/node_modules/lowdb/node_modules/lodash/fp/zip.js deleted file mode 100644 index 69e147a..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/zip.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zip', require('../zip')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/zipObj.js b/node_modules/lowdb/node_modules/lodash/fp/zipObj.js deleted file mode 100644 index f4a3453..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/zipObj.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./zipObject'); diff --git a/node_modules/lowdb/node_modules/lodash/fp/zipObject.js b/node_modules/lowdb/node_modules/lodash/fp/zipObject.js deleted file mode 100644 index 462dbb6..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/zipObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipObject', require('../zipObject')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/zipObjectDeep.js b/node_modules/lowdb/node_modules/lodash/fp/zipObjectDeep.js deleted file mode 100644 index 53a5d33..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/zipObjectDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipObjectDeep', require('../zipObjectDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fp/zipWith.js b/node_modules/lowdb/node_modules/lodash/fp/zipWith.js deleted file mode 100644 index c5cf9e2..0000000 --- a/node_modules/lowdb/node_modules/lodash/fp/zipWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipWith', require('../zipWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lowdb/node_modules/lodash/fromPairs.js b/node_modules/lowdb/node_modules/lodash/fromPairs.js deleted file mode 100644 index a591488..0000000 --- a/node_modules/lowdb/node_modules/lodash/fromPairs.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['fred', 30], ['barney', 40]]); - * // => { 'fred': 30, 'barney': 40 } - */ -function fromPairs(pairs) { - var index = -1, - length = pairs ? pairs.length : 0, - result = {}; - - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; -} - -module.exports = fromPairs; diff --git a/node_modules/lowdb/node_modules/lodash/function.js b/node_modules/lowdb/node_modules/lodash/function.js deleted file mode 100644 index b0fc6d9..0000000 --- a/node_modules/lowdb/node_modules/lodash/function.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - 'after': require('./after'), - 'ary': require('./ary'), - 'before': require('./before'), - 'bind': require('./bind'), - 'bindKey': require('./bindKey'), - 'curry': require('./curry'), - 'curryRight': require('./curryRight'), - 'debounce': require('./debounce'), - 'defer': require('./defer'), - 'delay': require('./delay'), - 'flip': require('./flip'), - 'memoize': require('./memoize'), - 'negate': require('./negate'), - 'once': require('./once'), - 'overArgs': require('./overArgs'), - 'partial': require('./partial'), - 'partialRight': require('./partialRight'), - 'rearg': require('./rearg'), - 'rest': require('./rest'), - 'spread': require('./spread'), - 'throttle': require('./throttle'), - 'unary': require('./unary'), - 'wrap': require('./wrap') -}; diff --git a/node_modules/lowdb/node_modules/lodash/functions.js b/node_modules/lowdb/node_modules/lodash/functions.js deleted file mode 100644 index 9722928..0000000 --- a/node_modules/lowdb/node_modules/lodash/functions.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseFunctions = require('./_baseFunctions'), - keys = require('./keys'); - -/** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functionsIn - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ -function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); -} - -module.exports = functions; diff --git a/node_modules/lowdb/node_modules/lodash/functionsIn.js b/node_modules/lowdb/node_modules/lodash/functionsIn.js deleted file mode 100644 index f00345d..0000000 --- a/node_modules/lowdb/node_modules/lodash/functionsIn.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseFunctions = require('./_baseFunctions'), - keysIn = require('./keysIn'); - -/** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functions - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ -function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); -} - -module.exports = functionsIn; diff --git a/node_modules/lowdb/node_modules/lodash/get.js b/node_modules/lowdb/node_modules/lodash/get.js deleted file mode 100644 index 5a5837b..0000000 --- a/node_modules/lowdb/node_modules/lodash/get.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseGet = require('./_baseGet'); - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is used in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; -} - -module.exports = get; diff --git a/node_modules/lowdb/node_modules/lodash/groupBy.js b/node_modules/lowdb/node_modules/lodash/groupBy.js deleted file mode 100644 index ae7db5f..0000000 --- a/node_modules/lowdb/node_modules/lodash/groupBy.js +++ /dev/null @@ -1,41 +0,0 @@ -var createAggregator = require('./_createAggregator'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ -var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - result[key] = [value]; - } -}); - -module.exports = groupBy; diff --git a/node_modules/lowdb/node_modules/lodash/gt.js b/node_modules/lowdb/node_modules/lodash/gt.js deleted file mode 100644 index 3a66282..0000000 --- a/node_modules/lowdb/node_modules/lodash/gt.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseGt = require('./_baseGt'), - createRelationalOperation = require('./_createRelationalOperation'); - -/** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - * @see _.lt - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ -var gt = createRelationalOperation(baseGt); - -module.exports = gt; diff --git a/node_modules/lowdb/node_modules/lodash/gte.js b/node_modules/lowdb/node_modules/lodash/gte.js deleted file mode 100644 index 4180a68..0000000 --- a/node_modules/lowdb/node_modules/lodash/gte.js +++ /dev/null @@ -1,30 +0,0 @@ -var createRelationalOperation = require('./_createRelationalOperation'); - -/** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to - * `other`, else `false`. - * @see _.lte - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ -var gte = createRelationalOperation(function(value, other) { - return value >= other; -}); - -module.exports = gte; diff --git a/node_modules/lowdb/node_modules/lodash/has.js b/node_modules/lowdb/node_modules/lodash/has.js deleted file mode 100644 index 34df55e..0000000 --- a/node_modules/lowdb/node_modules/lodash/has.js +++ /dev/null @@ -1,35 +0,0 @@ -var baseHas = require('./_baseHas'), - hasPath = require('./_hasPath'); - -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && hasPath(object, path, baseHas); -} - -module.exports = has; diff --git a/node_modules/lowdb/node_modules/lodash/hasIn.js b/node_modules/lowdb/node_modules/lodash/hasIn.js deleted file mode 100644 index 06a3686..0000000 --- a/node_modules/lowdb/node_modules/lodash/hasIn.js +++ /dev/null @@ -1,34 +0,0 @@ -var baseHasIn = require('./_baseHasIn'), - hasPath = require('./_hasPath'); - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); -} - -module.exports = hasIn; diff --git a/node_modules/lowdb/node_modules/lodash/head.js b/node_modules/lowdb/node_modules/lodash/head.js deleted file mode 100644 index dee9d1f..0000000 --- a/node_modules/lowdb/node_modules/lodash/head.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ -function head(array) { - return (array && array.length) ? array[0] : undefined; -} - -module.exports = head; diff --git a/node_modules/lowdb/node_modules/lodash/identity.js b/node_modules/lowdb/node_modules/lodash/identity.js deleted file mode 100644 index 058296f..0000000 --- a/node_modules/lowdb/node_modules/lodash/identity.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * This method returns the first argument given to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'user': 'fred' }; - * - * console.log(_.identity(object) === object); - * // => true - */ -function identity(value) { - return value; -} - -module.exports = identity; diff --git a/node_modules/lowdb/node_modules/lodash/inRange.js b/node_modules/lowdb/node_modules/lodash/inRange.js deleted file mode 100644 index bf71a8d..0000000 --- a/node_modules/lowdb/node_modules/lodash/inRange.js +++ /dev/null @@ -1,54 +0,0 @@ -var baseInRange = require('./_baseInRange'), - toNumber = require('./toNumber'); - -/** - * Checks if `n` is between `start` and up to, but not including, `end`. If - * `end` is not specified, it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @since 3.3.0 - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @see _.range, _.rangeRight - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ -function inRange(number, start, end) { - start = toNumber(start) || 0; - if (end === undefined) { - end = start; - start = 0; - } else { - end = toNumber(end) || 0; - } - number = toNumber(number); - return baseInRange(number, start, end); -} - -module.exports = inRange; diff --git a/node_modules/lowdb/node_modules/lodash/includes.js b/node_modules/lowdb/node_modules/lodash/includes.js deleted file mode 100644 index cefe3bf..0000000 --- a/node_modules/lowdb/node_modules/lodash/includes.js +++ /dev/null @@ -1,53 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'), - isArrayLike = require('./isArrayLike'), - isString = require('./isString'), - toInteger = require('./toInteger'), - values = require('./values'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Checks if `value` is in `collection`. If `collection` is a string, it's - * checked for a substring of `value`, otherwise - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); - * // => true - * - * _.includes('pebbles', 'eb'); - * // => true - */ -function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) - ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) - : (!!length && baseIndexOf(collection, value, fromIndex) > -1); -} - -module.exports = includes; diff --git a/node_modules/lowdb/node_modules/lodash/index.js b/node_modules/lowdb/node_modules/lodash/index.js deleted file mode 100644 index 5d063e2..0000000 --- a/node_modules/lowdb/node_modules/lodash/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lodash'); \ No newline at end of file diff --git a/node_modules/lowdb/node_modules/lodash/indexOf.js b/node_modules/lowdb/node_modules/lodash/indexOf.js deleted file mode 100644 index 657e4b5..0000000 --- a/node_modules/lowdb/node_modules/lodash/indexOf.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ -function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); -} - -module.exports = indexOf; diff --git a/node_modules/lowdb/node_modules/lodash/initial.js b/node_modules/lowdb/node_modules/lodash/initial.js deleted file mode 100644 index f4441b5..0000000 --- a/node_modules/lowdb/node_modules/lodash/initial.js +++ /dev/null @@ -1,21 +0,0 @@ -var dropRight = require('./dropRight'); - -/** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ -function initial(array) { - return dropRight(array, 1); -} - -module.exports = initial; diff --git a/node_modules/lowdb/node_modules/lodash/intersection.js b/node_modules/lowdb/node_modules/lodash/intersection.js deleted file mode 100644 index 1da06f8..0000000 --- a/node_modules/lowdb/node_modules/lodash/intersection.js +++ /dev/null @@ -1,30 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIntersection = require('./_baseIntersection'), - castArrayLikeObject = require('./_castArrayLikeObject'), - rest = require('./rest'); - -/** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. The order of result values is determined by the - * order they occur in the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ -var intersection = rest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped) - : []; -}); - -module.exports = intersection; diff --git a/node_modules/lowdb/node_modules/lodash/intersectionBy.js b/node_modules/lowdb/node_modules/lodash/intersectionBy.js deleted file mode 100644 index 5b8ffdc..0000000 --- a/node_modules/lowdb/node_modules/lodash/intersectionBy.js +++ /dev/null @@ -1,45 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIntersection = require('./_baseIntersection'), - baseIteratee = require('./_baseIteratee'), - castArrayLikeObject = require('./_castArrayLikeObject'), - last = require('./last'), - rest = require('./rest'); - -/** - * This method is like `_.intersection` except that it accepts `iteratee` - * which is invoked for each element of each `arrays` to generate the criterion - * by which they're compared. Result values are chosen from the first array. - * The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [2.1] - * - * // The `_.property` iteratee shorthand. - * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }] - */ -var intersectionBy = rest(function(arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (iteratee === last(mapped)) { - iteratee = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, baseIteratee(iteratee)) - : []; -}); - -module.exports = intersectionBy; diff --git a/node_modules/lowdb/node_modules/lodash/intersectionWith.js b/node_modules/lowdb/node_modules/lodash/intersectionWith.js deleted file mode 100644 index bc195dc..0000000 --- a/node_modules/lowdb/node_modules/lodash/intersectionWith.js +++ /dev/null @@ -1,42 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIntersection = require('./_baseIntersection'), - castArrayLikeObject = require('./_castArrayLikeObject'), - last = require('./last'), - rest = require('./rest'); - -/** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. Result values are chosen - * from the first array. The comparator is invoked with two arguments: - * (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ -var intersectionWith = rest(function(arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (comparator === last(mapped)) { - comparator = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, undefined, comparator) - : []; -}); - -module.exports = intersectionWith; diff --git a/node_modules/lowdb/node_modules/lodash/invert.js b/node_modules/lowdb/node_modules/lodash/invert.js deleted file mode 100644 index 21d10ab..0000000 --- a/node_modules/lowdb/node_modules/lodash/invert.js +++ /dev/null @@ -1,27 +0,0 @@ -var constant = require('./constant'), - createInverter = require('./_createInverter'), - identity = require('./identity'); - -/** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ -var invert = createInverter(function(result, value, key) { - result[value] = key; -}, constant(identity)); - -module.exports = invert; diff --git a/node_modules/lowdb/node_modules/lodash/invertBy.js b/node_modules/lowdb/node_modules/lodash/invertBy.js deleted file mode 100644 index 4298199..0000000 --- a/node_modules/lowdb/node_modules/lodash/invertBy.js +++ /dev/null @@ -1,45 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - createInverter = require('./_createInverter'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ -var invertBy = createInverter(function(result, value, key) { - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } -}, baseIteratee); - -module.exports = invertBy; diff --git a/node_modules/lowdb/node_modules/lodash/invoke.js b/node_modules/lowdb/node_modules/lodash/invoke.js deleted file mode 100644 index 7b6f56b..0000000 --- a/node_modules/lowdb/node_modules/lodash/invoke.js +++ /dev/null @@ -1,24 +0,0 @@ -var baseInvoke = require('./_baseInvoke'), - rest = require('./rest'); - -/** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ -var invoke = rest(baseInvoke); - -module.exports = invoke; diff --git a/node_modules/lowdb/node_modules/lodash/invokeMap.js b/node_modules/lowdb/node_modules/lodash/invokeMap.js deleted file mode 100644 index 4a6063e..0000000 --- a/node_modules/lowdb/node_modules/lodash/invokeMap.js +++ /dev/null @@ -1,44 +0,0 @@ -var apply = require('./_apply'), - baseEach = require('./_baseEach'), - baseInvoke = require('./_baseInvoke'), - isArrayLike = require('./isArrayLike'), - isKey = require('./_isKey'), - rest = require('./rest'); - -/** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `methodName` is a function, it's - * invoked for and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke each method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invokeMap([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ -var invokeMap = rest(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - isProp = isKey(path), - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value) { - var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); - result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args); - }); - return result; -}); - -module.exports = invokeMap; diff --git a/node_modules/lowdb/node_modules/lodash/isArguments.js b/node_modules/lowdb/node_modules/lodash/isArguments.js deleted file mode 100644 index 3ca0d3c..0000000 --- a/node_modules/lowdb/node_modules/lodash/isArguments.js +++ /dev/null @@ -1,46 +0,0 @@ -var isArrayLikeObject = require('./isArrayLikeObject'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -function isArguments(value) { - // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode. - return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && - (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); -} - -module.exports = isArguments; diff --git a/node_modules/lowdb/node_modules/lodash/isArray.js b/node_modules/lowdb/node_modules/lodash/isArray.js deleted file mode 100644 index 1901120..0000000 --- a/node_modules/lowdb/node_modules/lodash/isArray.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @type {Function} - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -module.exports = isArray; diff --git a/node_modules/lowdb/node_modules/lodash/isArrayBuffer.js b/node_modules/lowdb/node_modules/lodash/isArrayBuffer.js deleted file mode 100644 index 0a6a8e6..0000000 --- a/node_modules/lowdb/node_modules/lodash/isArrayBuffer.js +++ /dev/null @@ -1,37 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -var arrayBufferTag = '[object ArrayBuffer]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ -function isArrayBuffer(value) { - return isObjectLike(value) && objectToString.call(value) == arrayBufferTag; -} - -module.exports = isArrayBuffer; diff --git a/node_modules/lowdb/node_modules/lodash/isArrayLike.js b/node_modules/lowdb/node_modules/lodash/isArrayLike.js deleted file mode 100644 index 189a611..0000000 --- a/node_modules/lowdb/node_modules/lodash/isArrayLike.js +++ /dev/null @@ -1,34 +0,0 @@ -var getLength = require('./_getLength'), - isFunction = require('./isFunction'), - isLength = require('./isLength'); - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(getLength(value)) && !isFunction(value); -} - -module.exports = isArrayLike; diff --git a/node_modules/lowdb/node_modules/lodash/isArrayLikeObject.js b/node_modules/lowdb/node_modules/lodash/isArrayLikeObject.js deleted file mode 100644 index 6c4812a..0000000 --- a/node_modules/lowdb/node_modules/lodash/isArrayLikeObject.js +++ /dev/null @@ -1,33 +0,0 @@ -var isArrayLike = require('./isArrayLike'), - isObjectLike = require('./isObjectLike'); - -/** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ -function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); -} - -module.exports = isArrayLikeObject; diff --git a/node_modules/lowdb/node_modules/lodash/isBoolean.js b/node_modules/lowdb/node_modules/lodash/isBoolean.js deleted file mode 100644 index 242fad1..0000000 --- a/node_modules/lowdb/node_modules/lodash/isBoolean.js +++ /dev/null @@ -1,39 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ -function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && objectToString.call(value) == boolTag); -} - -module.exports = isBoolean; diff --git a/node_modules/lowdb/node_modules/lodash/isBuffer.js b/node_modules/lowdb/node_modules/lodash/isBuffer.js deleted file mode 100644 index 566c09f..0000000 --- a/node_modules/lowdb/node_modules/lodash/isBuffer.js +++ /dev/null @@ -1,37 +0,0 @@ -var root = require('./_root'), - stubFalse = require('./stubFalse'); - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Built-in value references. */ -var Buffer = moduleExports ? root.Buffer : undefined; - -/** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ -var isBuffer = !Buffer ? stubFalse : function(value) { - return value instanceof Buffer; -}; - -module.exports = isBuffer; diff --git a/node_modules/lowdb/node_modules/lodash/isDate.js b/node_modules/lowdb/node_modules/lodash/isDate.js deleted file mode 100644 index f85a801..0000000 --- a/node_modules/lowdb/node_modules/lodash/isDate.js +++ /dev/null @@ -1,38 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var dateTag = '[object Date]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ -function isDate(value) { - return isObjectLike(value) && objectToString.call(value) == dateTag; -} - -module.exports = isDate; diff --git a/node_modules/lowdb/node_modules/lodash/isElement.js b/node_modules/lowdb/node_modules/lodash/isElement.js deleted file mode 100644 index 67aca5d..0000000 --- a/node_modules/lowdb/node_modules/lodash/isElement.js +++ /dev/null @@ -1,26 +0,0 @@ -var isObjectLike = require('./isObjectLike'), - isPlainObject = require('./isPlainObject'); - -/** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, - * else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ -function isElement(value) { - return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); -} - -module.exports = isElement; diff --git a/node_modules/lowdb/node_modules/lodash/isEmpty.js b/node_modules/lowdb/node_modules/lodash/isEmpty.js deleted file mode 100644 index 9d46496..0000000 --- a/node_modules/lowdb/node_modules/lodash/isEmpty.js +++ /dev/null @@ -1,80 +0,0 @@ -var getTag = require('./_getTag'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isArrayLike = require('./isArrayLike'), - isBuffer = require('./isBuffer'), - isFunction = require('./isFunction'), - isObjectLike = require('./isObjectLike'), - isString = require('./isString'), - keys = require('./keys'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ -var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); - -/** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ -function isEmpty(value) { - if (isArrayLike(value) && - (isArray(value) || isString(value) || isFunction(value.splice) || - isArguments(value) || isBuffer(value))) { - return !value.length; - } - if (isObjectLike(value)) { - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return !(nonEnumShadows && keys(value).length); -} - -module.exports = isEmpty; diff --git a/node_modules/lowdb/node_modules/lodash/isEqual.js b/node_modules/lowdb/node_modules/lodash/isEqual.js deleted file mode 100644 index dd5d0cc..0000000 --- a/node_modules/lowdb/node_modules/lodash/isEqual.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseIsEqual = require('./_baseIsEqual'); - -/** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are **not** supported. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, - * else `false`. - * @example - * - * var object = { 'user': 'fred' }; - * var other = { 'user': 'fred' }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ -function isEqual(value, other) { - return baseIsEqual(value, other); -} - -module.exports = isEqual; diff --git a/node_modules/lowdb/node_modules/lodash/isEqualWith.js b/node_modules/lowdb/node_modules/lodash/isEqualWith.js deleted file mode 100644 index a442b24..0000000 --- a/node_modules/lowdb/node_modules/lodash/isEqualWith.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseIsEqual = require('./_baseIsEqual'); - -/** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, - * else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ -function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, customizer) : !!result; -} - -module.exports = isEqualWith; diff --git a/node_modules/lowdb/node_modules/lodash/isError.js b/node_modules/lowdb/node_modules/lodash/isError.js deleted file mode 100644 index b4a93ae..0000000 --- a/node_modules/lowdb/node_modules/lodash/isError.js +++ /dev/null @@ -1,43 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var errorTag = '[object Error]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, - * else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ -function isError(value) { - if (!isObjectLike(value)) { - return false; - } - return (objectToString.call(value) == errorTag) || - (typeof value.message == 'string' && typeof value.name == 'string'); -} - -module.exports = isError; diff --git a/node_modules/lowdb/node_modules/lodash/isFinite.js b/node_modules/lowdb/node_modules/lodash/isFinite.js deleted file mode 100644 index 66af206..0000000 --- a/node_modules/lowdb/node_modules/lodash/isFinite.js +++ /dev/null @@ -1,37 +0,0 @@ -var root = require('./_root'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsFinite = root.isFinite; - -/** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, - * else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ -function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); -} - -module.exports = isFinite; diff --git a/node_modules/lowdb/node_modules/lodash/isFunction.js b/node_modules/lowdb/node_modules/lodash/isFunction.js deleted file mode 100644 index da02be0..0000000 --- a/node_modules/lowdb/node_modules/lodash/isFunction.js +++ /dev/null @@ -1,43 +0,0 @@ -var isObject = require('./isObject'); - -/** `Object#toString` result references. */ -var funcTag = '[object Function]', - genTag = '[object GeneratorFunction]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8 which returns 'object' for typed array and weak map constructors, - // and PhantomJS 1.9 which returns 'function' for `NodeList` instances. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; -} - -module.exports = isFunction; diff --git a/node_modules/lowdb/node_modules/lodash/isInteger.js b/node_modules/lowdb/node_modules/lodash/isInteger.js deleted file mode 100644 index 66aa87d..0000000 --- a/node_modules/lowdb/node_modules/lodash/isInteger.js +++ /dev/null @@ -1,33 +0,0 @@ -var toInteger = require('./toInteger'); - -/** - * Checks if `value` is an integer. - * - * **Note:** This method is based on - * [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ -function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); -} - -module.exports = isInteger; diff --git a/node_modules/lowdb/node_modules/lodash/isLength.js b/node_modules/lowdb/node_modules/lodash/isLength.js deleted file mode 100644 index cd9b257..0000000 --- a/node_modules/lowdb/node_modules/lodash/isLength.js +++ /dev/null @@ -1,36 +0,0 @@ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This function is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, - * else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -module.exports = isLength; diff --git a/node_modules/lowdb/node_modules/lodash/isMap.js b/node_modules/lowdb/node_modules/lodash/isMap.js deleted file mode 100644 index f83758e..0000000 --- a/node_modules/lowdb/node_modules/lodash/isMap.js +++ /dev/null @@ -1,29 +0,0 @@ -var getTag = require('./_getTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]'; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -function isMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; -} - -module.exports = isMap; diff --git a/node_modules/lowdb/node_modules/lodash/isMatch.js b/node_modules/lowdb/node_modules/lodash/isMatch.js deleted file mode 100644 index 371e445..0000000 --- a/node_modules/lowdb/node_modules/lodash/isMatch.js +++ /dev/null @@ -1,32 +0,0 @@ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'); - -/** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. This method is - * equivalent to a `_.matches` function when `source` is partially applied. - * - * **Note:** This method supports comparing the same values as `_.isEqual`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'user': 'fred', 'age': 40 }; - * - * _.isMatch(object, { 'age': 40 }); - * // => true - * - * _.isMatch(object, { 'age': 36 }); - * // => false - */ -function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); -} - -module.exports = isMatch; diff --git a/node_modules/lowdb/node_modules/lodash/isMatchWith.js b/node_modules/lowdb/node_modules/lodash/isMatchWith.js deleted file mode 100644 index 187b6a6..0000000 --- a/node_modules/lowdb/node_modules/lodash/isMatchWith.js +++ /dev/null @@ -1,41 +0,0 @@ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'); - -/** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ -function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch(object, source, getMatchData(source), customizer); -} - -module.exports = isMatchWith; diff --git a/node_modules/lowdb/node_modules/lodash/isNaN.js b/node_modules/lowdb/node_modules/lodash/isNaN.js deleted file mode 100644 index 7d0d783..0000000 --- a/node_modules/lowdb/node_modules/lodash/isNaN.js +++ /dev/null @@ -1,38 +0,0 @@ -var isNumber = require('./isNumber'); - -/** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ -function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; -} - -module.exports = isNaN; diff --git a/node_modules/lowdb/node_modules/lodash/isNative.js b/node_modules/lowdb/node_modules/lodash/isNative.js deleted file mode 100644 index 8d9dd05..0000000 --- a/node_modules/lowdb/node_modules/lodash/isNative.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseIsNative = require('./_baseIsNative'), - isMaskable = require('./_isMaskable'); - -/** - * Checks if `value` is a pristine native function. - * - * **Note:** This method can't reliably detect native functions in the - * presence of the `core-js` package because `core-js` circumvents this kind - * of detection. Despite multiple requests, the `core-js` maintainer has made - * it clear: any attempt to fix the detection will be obstructed. As a result, - * we're left with little choice but to throw an error. Unfortunately, this - * also affects packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), - * which rely on `core-js`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ -function isNative(value) { - if (isMaskable(value)) { - throw new Error('This method is not supported with `core-js`. Try https://github.com/es-shims.'); - } - return baseIsNative(value); -} - -module.exports = isNative; diff --git a/node_modules/lowdb/node_modules/lodash/isNil.js b/node_modules/lowdb/node_modules/lodash/isNil.js deleted file mode 100644 index 79f0505..0000000 --- a/node_modules/lowdb/node_modules/lodash/isNil.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ -function isNil(value) { - return value == null; -} - -module.exports = isNil; diff --git a/node_modules/lowdb/node_modules/lodash/isNull.js b/node_modules/lowdb/node_modules/lodash/isNull.js deleted file mode 100644 index c0a374d..0000000 --- a/node_modules/lowdb/node_modules/lodash/isNull.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ -function isNull(value) { - return value === null; -} - -module.exports = isNull; diff --git a/node_modules/lowdb/node_modules/lodash/isNumber.js b/node_modules/lowdb/node_modules/lodash/isNumber.js deleted file mode 100644 index e427282..0000000 --- a/node_modules/lowdb/node_modules/lodash/isNumber.js +++ /dev/null @@ -1,48 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var numberTag = '[object Number]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ -function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && objectToString.call(value) == numberTag); -} - -module.exports = isNumber; diff --git a/node_modules/lowdb/node_modules/lodash/isObject.js b/node_modules/lowdb/node_modules/lodash/isObject.js deleted file mode 100644 index d16542f..0000000 --- a/node_modules/lowdb/node_modules/lodash/isObject.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -module.exports = isObject; diff --git a/node_modules/lowdb/node_modules/lodash/isObjectLike.js b/node_modules/lowdb/node_modules/lodash/isObjectLike.js deleted file mode 100644 index e34114b..0000000 --- a/node_modules/lowdb/node_modules/lodash/isObjectLike.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -module.exports = isObjectLike; diff --git a/node_modules/lowdb/node_modules/lodash/isPlainObject.js b/node_modules/lowdb/node_modules/lodash/isPlainObject.js deleted file mode 100644 index 13a90e7..0000000 --- a/node_modules/lowdb/node_modules/lodash/isPlainObject.js +++ /dev/null @@ -1,70 +0,0 @@ -var getPrototype = require('./_getPrototype'), - isHostObject = require('./_isHostObject'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = Function.prototype.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Used to infer the `Object` constructor. */ -var objectCtorString = funcToString.call(Object); - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, - * else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ -function isPlainObject(value) { - if (!isObjectLike(value) || - objectToString.call(value) != objectTag || isHostObject(value)) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return (typeof Ctor == 'function' && - Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); -} - -module.exports = isPlainObject; diff --git a/node_modules/lowdb/node_modules/lodash/isRegExp.js b/node_modules/lowdb/node_modules/lodash/isRegExp.js deleted file mode 100644 index 8eeb410..0000000 --- a/node_modules/lowdb/node_modules/lodash/isRegExp.js +++ /dev/null @@ -1,38 +0,0 @@ -var isObject = require('./isObject'); - -/** `Object#toString` result references. */ -var regexpTag = '[object RegExp]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ -function isRegExp(value) { - return isObject(value) && objectToString.call(value) == regexpTag; -} - -module.exports = isRegExp; diff --git a/node_modules/lowdb/node_modules/lodash/isSafeInteger.js b/node_modules/lowdb/node_modules/lodash/isSafeInteger.js deleted file mode 100644 index a780afb..0000000 --- a/node_modules/lowdb/node_modules/lodash/isSafeInteger.js +++ /dev/null @@ -1,38 +0,0 @@ -var isInteger = require('./isInteger'); - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on - * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, - * else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ -function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; -} - -module.exports = isSafeInteger; diff --git a/node_modules/lowdb/node_modules/lodash/isSet.js b/node_modules/lowdb/node_modules/lodash/isSet.js deleted file mode 100644 index 9030dc4..0000000 --- a/node_modules/lowdb/node_modules/lodash/isSet.js +++ /dev/null @@ -1,29 +0,0 @@ -var getTag = require('./_getTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var setTag = '[object Set]'; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -function isSet(value) { - return isObjectLike(value) && getTag(value) == setTag; -} - -module.exports = isSet; diff --git a/node_modules/lowdb/node_modules/lodash/isString.js b/node_modules/lowdb/node_modules/lodash/isString.js deleted file mode 100644 index 573de3b..0000000 --- a/node_modules/lowdb/node_modules/lodash/isString.js +++ /dev/null @@ -1,40 +0,0 @@ -var isArray = require('./isArray'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); -} - -module.exports = isString; diff --git a/node_modules/lowdb/node_modules/lodash/isSymbol.js b/node_modules/lowdb/node_modules/lodash/isSymbol.js deleted file mode 100644 index 21dd559..0000000 --- a/node_modules/lowdb/node_modules/lodash/isSymbol.js +++ /dev/null @@ -1,39 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); -} - -module.exports = isSymbol; diff --git a/node_modules/lowdb/node_modules/lodash/isTypedArray.js b/node_modules/lowdb/node_modules/lodash/isTypedArray.js deleted file mode 100644 index 0d86b90..0000000 --- a/node_modules/lowdb/node_modules/lodash/isTypedArray.js +++ /dev/null @@ -1,80 +0,0 @@ -var isLength = require('./isLength'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[objectTag] = typedArrayTags[regexpTag] = -typedArrayTags[setTag] = typedArrayTags[stringTag] = -typedArrayTags[weakMapTag] = false; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -function isTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; -} - -module.exports = isTypedArray; diff --git a/node_modules/lowdb/node_modules/lodash/isUndefined.js b/node_modules/lowdb/node_modules/lodash/isUndefined.js deleted file mode 100644 index 377d121..0000000 --- a/node_modules/lowdb/node_modules/lodash/isUndefined.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -module.exports = isUndefined; diff --git a/node_modules/lowdb/node_modules/lodash/isWeakMap.js b/node_modules/lowdb/node_modules/lodash/isWeakMap.js deleted file mode 100644 index cd7b9ed..0000000 --- a/node_modules/lowdb/node_modules/lodash/isWeakMap.js +++ /dev/null @@ -1,29 +0,0 @@ -var getTag = require('./_getTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var weakMapTag = '[object WeakMap]'; - -/** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ -function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; -} - -module.exports = isWeakMap; diff --git a/node_modules/lowdb/node_modules/lodash/isWeakSet.js b/node_modules/lowdb/node_modules/lodash/isWeakSet.js deleted file mode 100644 index 5395797..0000000 --- a/node_modules/lowdb/node_modules/lodash/isWeakSet.js +++ /dev/null @@ -1,38 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var weakSetTag = '[object WeakSet]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ -function isWeakSet(value) { - return isObjectLike(value) && objectToString.call(value) == weakSetTag; -} - -module.exports = isWeakSet; diff --git a/node_modules/lowdb/node_modules/lodash/iteratee.js b/node_modules/lowdb/node_modules/lodash/iteratee.js deleted file mode 100644 index 8ec0588..0000000 --- a/node_modules/lowdb/node_modules/lodash/iteratee.js +++ /dev/null @@ -1,50 +0,0 @@ -var baseClone = require('./_baseClone'), - baseIteratee = require('./_baseIteratee'); - -/** - * Creates a function that invokes `func` with the arguments of the created - * function. If `func` is a property name, the created function returns the - * property value for a given element. If `func` is an array or object, the - * created function returns `true` for elements that contain the equivalent - * source properties, otherwise it returns `false`. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Util - * @param {*} [func=_.identity] The value to convert to a callback. - * @returns {Function} Returns the callback. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); - * // => [{ 'user': 'barney', 'age': 36, 'active': true }] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, _.iteratee(['user', 'fred'])); - * // => [{ 'user': 'fred', 'age': 40 }] - * - * // The `_.property` iteratee shorthand. - * _.map(users, _.iteratee('user')); - * // => ['barney', 'fred'] - * - * // Create custom iteratee shorthands. - * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { - * return !_.isRegExp(func) ? iteratee(func) : function(string) { - * return func.test(string); - * }; - * }); - * - * _.filter(['abc', 'def'], /ef/); - * // => ['def'] - */ -function iteratee(func) { - return baseIteratee(typeof func == 'function' ? func : baseClone(func, true)); -} - -module.exports = iteratee; diff --git a/node_modules/lowdb/node_modules/lodash/join.js b/node_modules/lowdb/node_modules/lodash/join.js deleted file mode 100644 index fe31067..0000000 --- a/node_modules/lowdb/node_modules/lodash/join.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeJoin = arrayProto.join; - -/** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ -function join(array, separator) { - return array ? nativeJoin.call(array, separator) : ''; -} - -module.exports = join; diff --git a/node_modules/lowdb/node_modules/lodash/kebabCase.js b/node_modules/lowdb/node_modules/lodash/kebabCase.js deleted file mode 100644 index 8a52be6..0000000 --- a/node_modules/lowdb/node_modules/lodash/kebabCase.js +++ /dev/null @@ -1,28 +0,0 @@ -var createCompounder = require('./_createCompounder'); - -/** - * Converts `string` to - * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__FOO_BAR__'); - * // => 'foo-bar' - */ -var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); -}); - -module.exports = kebabCase; diff --git a/node_modules/lowdb/node_modules/lodash/keyBy.js b/node_modules/lowdb/node_modules/lodash/keyBy.js deleted file mode 100644 index 97e6f4b..0000000 --- a/node_modules/lowdb/node_modules/lodash/keyBy.js +++ /dev/null @@ -1,36 +0,0 @@ -var createAggregator = require('./_createAggregator'); - -/** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ -var keyBy = createAggregator(function(result, value, key) { - result[key] = value; -}); - -module.exports = keyBy; diff --git a/node_modules/lowdb/node_modules/lodash/keys.js b/node_modules/lowdb/node_modules/lodash/keys.js deleted file mode 100644 index 186a4fe..0000000 --- a/node_modules/lowdb/node_modules/lodash/keys.js +++ /dev/null @@ -1,56 +0,0 @@ -var baseHas = require('./_baseHas'), - baseKeys = require('./_baseKeys'), - indexKeys = require('./_indexKeys'), - isArrayLike = require('./isArrayLike'), - isIndex = require('./_isIndex'), - isPrototype = require('./_isPrototype'); - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - var isProto = isPrototype(object); - if (!(isProto || isArrayLike(object))) { - return baseKeys(object); - } - var indexes = indexKeys(object), - skipIndexes = !!indexes, - result = indexes || [], - length = result.length; - - for (var key in object) { - if (baseHas(object, key) && - !(skipIndexes && (key == 'length' || isIndex(key, length))) && - !(isProto && key == 'constructor')) { - result.push(key); - } - } - return result; -} - -module.exports = keys; diff --git a/node_modules/lowdb/node_modules/lodash/keysIn.js b/node_modules/lowdb/node_modules/lodash/keysIn.js deleted file mode 100644 index d2fb91c..0000000 --- a/node_modules/lowdb/node_modules/lodash/keysIn.js +++ /dev/null @@ -1,55 +0,0 @@ -var baseKeysIn = require('./_baseKeysIn'), - indexKeys = require('./_indexKeys'), - isIndex = require('./_isIndex'), - isPrototype = require('./_isPrototype'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ -function keysIn(object) { - var index = -1, - isProto = isPrototype(object), - props = baseKeysIn(object), - propsLength = props.length, - indexes = indexKeys(object), - skipIndexes = !!indexes, - result = indexes || [], - length = result.length; - - while (++index < propsLength) { - var key = props[index]; - if (!(skipIndexes && (key == 'length' || isIndex(key, length))) && - !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; -} - -module.exports = keysIn; diff --git a/node_modules/lowdb/node_modules/lodash/lang.js b/node_modules/lowdb/node_modules/lodash/lang.js deleted file mode 100644 index 6340c4b..0000000 --- a/node_modules/lowdb/node_modules/lodash/lang.js +++ /dev/null @@ -1,57 +0,0 @@ -module.exports = { - 'castArray': require('./castArray'), - 'clone': require('./clone'), - 'cloneDeep': require('./cloneDeep'), - 'cloneDeepWith': require('./cloneDeepWith'), - 'cloneWith': require('./cloneWith'), - 'eq': require('./eq'), - 'gt': require('./gt'), - 'gte': require('./gte'), - 'isArguments': require('./isArguments'), - 'isArray': require('./isArray'), - 'isArrayBuffer': require('./isArrayBuffer'), - 'isArrayLike': require('./isArrayLike'), - 'isArrayLikeObject': require('./isArrayLikeObject'), - 'isBoolean': require('./isBoolean'), - 'isBuffer': require('./isBuffer'), - 'isDate': require('./isDate'), - 'isElement': require('./isElement'), - 'isEmpty': require('./isEmpty'), - 'isEqual': require('./isEqual'), - 'isEqualWith': require('./isEqualWith'), - 'isError': require('./isError'), - 'isFinite': require('./isFinite'), - 'isFunction': require('./isFunction'), - 'isInteger': require('./isInteger'), - 'isLength': require('./isLength'), - 'isMap': require('./isMap'), - 'isMatch': require('./isMatch'), - 'isMatchWith': require('./isMatchWith'), - 'isNaN': require('./isNaN'), - 'isNative': require('./isNative'), - 'isNil': require('./isNil'), - 'isNull': require('./isNull'), - 'isNumber': require('./isNumber'), - 'isObject': require('./isObject'), - 'isObjectLike': require('./isObjectLike'), - 'isPlainObject': require('./isPlainObject'), - 'isRegExp': require('./isRegExp'), - 'isSafeInteger': require('./isSafeInteger'), - 'isSet': require('./isSet'), - 'isString': require('./isString'), - 'isSymbol': require('./isSymbol'), - 'isTypedArray': require('./isTypedArray'), - 'isUndefined': require('./isUndefined'), - 'isWeakMap': require('./isWeakMap'), - 'isWeakSet': require('./isWeakSet'), - 'lt': require('./lt'), - 'lte': require('./lte'), - 'toArray': require('./toArray'), - 'toFinite': require('./toFinite'), - 'toInteger': require('./toInteger'), - 'toLength': require('./toLength'), - 'toNumber': require('./toNumber'), - 'toPlainObject': require('./toPlainObject'), - 'toSafeInteger': require('./toSafeInteger'), - 'toString': require('./toString') -}; diff --git a/node_modules/lowdb/node_modules/lodash/last.js b/node_modules/lowdb/node_modules/lodash/last.js deleted file mode 100644 index 6402a4c..0000000 --- a/node_modules/lowdb/node_modules/lodash/last.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; -} - -module.exports = last; diff --git a/node_modules/lowdb/node_modules/lodash/lastIndexOf.js b/node_modules/lowdb/node_modules/lodash/lastIndexOf.js deleted file mode 100644 index 1b8fbbc..0000000 --- a/node_modules/lowdb/node_modules/lodash/lastIndexOf.js +++ /dev/null @@ -1,54 +0,0 @@ -var indexOfNaN = require('./_indexOfNaN'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ -function lastIndexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = ( - index < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1) - ) + 1; - } - if (value !== value) { - return indexOfNaN(array, index - 1, true); - } - while (index--) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -module.exports = lastIndexOf; diff --git a/node_modules/lowdb/node_modules/lodash/lodash.js b/node_modules/lowdb/node_modules/lodash/lodash.js deleted file mode 100644 index 5b5c703..0000000 --- a/node_modules/lowdb/node_modules/lodash/lodash.js +++ /dev/null @@ -1,16404 +0,0 @@ -/** - * @license - * lodash - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.13.1'; - - /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200; - - /** Used as the `TypeError` message for "Functions" methods. */ - var FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__lodash_hash_undefined__'; - - /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__'; - - /** Used to compose bitmasks for wrapper metadata. */ - var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_BOUND_FLAG = 4, - CURRY_FLAG = 8, - CURRY_RIGHT_FLAG = 16, - PARTIAL_FLAG = 32, - PARTIAL_RIGHT_FLAG = 64, - ARY_FLAG = 128, - REARG_FLAG = 256, - FLIP_FLAG = 512; - - /** Used to compose bitmasks for comparison styles. */ - var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - - /** Used as default options for `_.truncate`. */ - var DEFAULT_TRUNC_LENGTH = 30, - DEFAULT_TRUNC_OMISSION = '...'; - - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 150, - HOT_SPAN = 16; - - /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2, - LAZY_WHILE_FLAG = 3; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991, - MAX_INTEGER = 1.7976931348623157e+308, - NAN = 0 / 0; - - /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]', - weakSetTag = '[object WeakSet]'; - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - /** Used to match empty string literals in compiled template source. */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - - /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, - reUnescapedHtml = /[&<>"'`]/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to match template delimiters. */ - var reEscape = /<%-([\s\S]+?)%>/g, - reEvaluate = /<%([\s\S]+?)%>/g, - reInterpolate = /<%=([\s\S]+?)%>/g; - - /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(\.|\[\])(?:\4|$))/g; - - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); - - /** Used to match leading and trailing whitespace. */ - var reTrim = /^\s+|\s+$/g, - reTrimStart = /^\s+/, - reTrimEnd = /\s+$/; - - /** Used to match non-compound words composed of alphanumeric characters. */ - var reBasicWord = /[a-zA-Z0-9]+/g; - - /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g; - - /** - * Used to match - * [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). - */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - - /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; - - /** Used to detect hexadecimal string values. */ - var reHasHexPrefix = /^0x/i; - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; - - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** Used to match latin-1 supplementary letters (excluding mathematical operators). */ - var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; - - /** Used to ensure capturing order of template delimiters. */ - var reNoMatch = /($^)/; - - /** Used to match unescaped characters in compiled string literals. */ - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0', - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - - /** Used to compose unicode capture groups. */ - var rsApos = "['\u2019]", - rsAstral = '[' + rsAstralRange + ']', - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; - - /** Used to compose unicode regexes. */ - var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')', - rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - - /** Used to match apostrophes. */ - var reApos = RegExp(rsApos, 'g'); - - /** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ - var reComboMark = RegExp(rsCombo, 'g'); - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - - /** Used to match complex or compound words. */ - var reComplexWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', - rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr, - rsUpper + '+' + rsOptUpperContr, - rsDigits, - rsEmoji - ].join('|'), 'g'); - - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); - - /** Used to detect strings that need a more robust regexp to match words. */ - var reHasComplexWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - - /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', - 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', - 'Promise', 'Reflect', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', - 'Uint8Array', 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', - '_', 'isFinite', 'parseInt', 'setTimeout' - ]; - - /** Used to make template sourceURLs easier to identify. */ - var templateCounter = -1; - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = - typedArrayTags[errorTag] = typedArrayTags[funcTag] = - typedArrayTags[mapTag] = typedArrayTags[numberTag] = - typedArrayTags[objectTag] = typedArrayTags[regexpTag] = - typedArrayTags[setTag] = typedArrayTags[stringTag] = - typedArrayTags[weakMapTag] = false; - - /** Used to identify `toStringTag` values supported by `_.clone`. */ - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = - cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = - cloneableTags[boolTag] = cloneableTags[dateTag] = - cloneableTags[float32Tag] = cloneableTags[float64Tag] = - cloneableTags[int8Tag] = cloneableTags[int16Tag] = - cloneableTags[int32Tag] = cloneableTags[mapTag] = - cloneableTags[numberTag] = cloneableTags[objectTag] = - cloneableTags[regexpTag] = cloneableTags[setTag] = - cloneableTags[stringTag] = cloneableTags[symbolTag] = - cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = - cloneableTags[weakMapTag] = false; - - /** Used to map latin-1 supplementary letters to basic latin letters. */ - var deburredLetters = { - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss' - }; - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - - /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'", - '`': '`' - }; - - /** Used to escape characters for inclusion in compiled string literals. */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat, - freeParseInt = parseInt; - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = checkGlobal(typeof global == 'object' && global); - - /** Detect free variable `self`. */ - var freeSelf = checkGlobal(typeof self == 'object' && self); - - /** Detect `this` as the global object. */ - var thisGlobal = checkGlobal(typeof this == 'object' && this); - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || thisGlobal || Function('return this')(); - - /*--------------------------------------------------------------------------*/ - - /** - * Adds the key-value `pair` to `map`. - * - * @private - * @param {Object} map The map to modify. - * @param {Array} pair The key-value pair to add. - * @returns {Object} Returns `map`. - */ - function addMapEntry(map, pair) { - // Don't return `Map#set` because it doesn't return the map instance in IE 11. - map.set(pair[0], pair[1]); - return map; - } - - /** - * Adds `value` to `set`. - * - * @private - * @param {Object} set The set to modify. - * @param {*} value The value to add. - * @returns {Object} Returns `set`. - */ - function addSetEntry(set, value) { - set.add(value); - return set; - } - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - var length = args.length; - switch (length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - - /** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; - } - - /** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEach(array, iteratee) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEachRight(array, iteratee) { - var length = array ? array.length : 0; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ - function arrayEvery(array, predicate) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; - } - - /** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function arrayFilter(array, predicate) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to search. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludes(array, value) { - var length = array ? array.length : 0; - return !!length && baseIndexOf(array, value, 0) > -1; - } - - /** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to search. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; - } - - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array ? array.length : 0, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } - - /** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array ? array.length : 0; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } - - /** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array ? array.length : 0; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; - } - - /** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function arraySome(array, predicate) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } - - /** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to search. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = key; - return false; - } - }); - return result; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to search. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - if (value !== value) { - return indexOfNaN(array, fromIndex); - } - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ - function baseMean(array, iteratee) { - var length = array ? array.length : 0; - return length ? (baseSum(array, iteratee) / length) : NAN; - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ - function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; - } - - /** - * The base implementation of `_.sum` and `_.sumBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ - function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; - - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : (result + current); - } - } - return result; - } - - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - - /** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ - function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); - } - - /** - * The base implementation of `_.unary` without support for storing wrapper metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function(value) { - return func(value); - }; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - - /** - * Checks if a cache value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function cacheHas(cache, key) { - return cache.has(key); - } - - /** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; - - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Checks if `value` is a global object. - * - * @private - * @param {*} value The value to check. - * @returns {null|Object} Returns `value` if it's a global object, else `null`. - */ - function checkGlobal(value) { - return (value && value.Object === Object) ? value : null; - } - - /** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ - function countHolders(array, placeholder) { - var length = array.length, - result = 0; - - while (length--) { - if (array[length] === placeholder) { - result++; - } - } - return result; - } - - /** - * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ - function deburrLetter(letter) { - return deburredLetters[letter]; - } - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeHtmlChar(chr) { - return htmlEscapes[chr]; - } - - /** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; - } - - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key]; - } - - /** - * Gets the index at which the first occurrence of `NaN` is found in `array`. - * - * @private - * @param {Array} array The array to search. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched `NaN`, else `-1`. - */ - function indexOfNaN(array, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - var other = array[index]; - if (other !== other) { - return index; - } - } - return -1; - } - - /** - * Checks if `value` is a host object in IE < 9. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a host object, else `false`. - */ - function isHostObject(value) { - // Many host objects are `Object` objects that can coerce to strings - // despite having improperly defined `toString` methods. - var result = false; - if (value != null && typeof value.toString != 'function') { - try { - result = !!(value + ''); - } catch (e) {} - } - return result; - } - - /** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ - function iteratorToArray(iterator) { - var data, - result = []; - - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; - } - - /** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ - function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; - } - - /** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; - } - - /** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ - function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; - } - - /** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ - function setToPairs(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; - } - - /** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ - function stringSize(string) { - if (!(string && reHasComplexSymbol.test(string))) { - return string.length; - } - var result = reComplexSymbol.lastIndex = 0; - while (reComplexSymbol.test(string)) { - result++; - } - return result; - } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return string.match(reComplexSymbol); - } - - /** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - function unescapeHtmlChar(chr) { - return htmlUnescapes[chr]; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new pristine `lodash` function using the `context` object. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Util - * @param {Object} [context=root] The context object. - * @returns {Function} Returns a new `lodash` function. - * @example - * - * _.mixin({ 'foo': _.constant('foo') }); - * - * var lodash = _.runInContext(); - * lodash.mixin({ 'bar': lodash.constant('bar') }); - * - * _.isFunction(_.foo); - * // => true - * _.isFunction(_.bar); - * // => false - * - * lodash.isFunction(lodash.foo); - * // => false - * lodash.isFunction(lodash.bar); - * // => true - * - * // Use `context` to stub `Date#getTime` use in `_.now`. - * var stubbed = _.runInContext({ - * 'Date': function() { - * return { 'getTime': stubGetTime }; - * } - * }); - * - * // Create a suped-up `defer` in Node.js. - * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; - */ - function runInContext(context) { - context = context ? _.defaults({}, context, _.pick(root, contextProps)) : root; - - /** Built-in constructor references. */ - var Date = context.Date, - Error = context.Error, - Math = context.Math, - RegExp = context.RegExp, - TypeError = context.TypeError; - - /** Used for built-in method references. */ - var arrayProto = context.Array.prototype, - objectProto = context.Object.prototype, - stringProto = context.String.prototype; - - /** Used to detect overreaching core-js shims. */ - var coreJsData = context['__core-js_shared__']; - - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; - }()); - - /** Used to resolve the decompiled source of functions. */ - var funcToString = context.Function.prototype.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** Used to infer the `Object` constructor. */ - var objectCtorString = funcToString.call(Object); - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - /** Built-in value references. */ - var Buffer = moduleExports ? context.Buffer : undefined, - Reflect = context.Reflect, - Symbol = context.Symbol, - Uint8Array = context.Uint8Array, - enumerate = Reflect ? Reflect.enumerate : undefined, - getOwnPropertySymbols = Object.getOwnPropertySymbols, - iteratorSymbol = typeof (iteratorSymbol = Symbol && Symbol.iterator) == 'symbol' ? iteratorSymbol : undefined, - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - splice = arrayProto.splice; - - /** Built-in method references that are mockable. */ - var setTimeout = function(func, wait) { return context.setTimeout.call(root, func, wait); }; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeFloor = Math.floor, - nativeGetPrototype = Object.getPrototypeOf, - nativeIsFinite = context.isFinite, - nativeJoin = arrayProto.join, - nativeKeys = Object.keys, - nativeMax = Math.max, - nativeMin = Math.min, - nativeParseInt = context.parseInt, - nativeRandom = Math.random, - nativeReplace = stringProto.replace, - nativeReverse = arrayProto.reverse, - nativeSplit = stringProto.split; - - /* Built-in method references that are verified to be native. */ - var DataView = getNative(context, 'DataView'), - Map = getNative(context, 'Map'), - Promise = getNative(context, 'Promise'), - Set = getNative(context, 'Set'), - WeakMap = getNative(context, 'WeakMap'), - nativeCreate = getNative(Object, 'create'); - - /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap; - - /** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ - var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); - - /** Used to lookup unminified function names. */ - var realNames = {}; - - /** Used to detect maps, sets, and weakmaps. */ - var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array of at least `200` elements - * and any iteratees accept only one argument. The heuristic for whether a - * section qualifies for shortcut fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `deburr`, `divide`, `each`, - * `eachRight`, `endsWith`, `eq`, `escape`, `escapeRegExp`, `every`, `find`, - * `findIndex`, `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `first`, - * `floor`, `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, - * `forOwnRight`, `get`, `gt`, `gte`, `has`, `hasIn`, `head`, `identity`, - * `includes`, `indexOf`, `inRange`, `invoke`, `isArguments`, `isArray`, - * `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, `isBoolean`, - * `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, `isEqualWith`, - * `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, `isMap`, - * `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, '__wrapped__')) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); - } - - /** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ - function baseLodash() { - // No operation performed. - } - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; - } - - /** - * By default, the template delimiters used by lodash are like those in - * embedded Ruby (ERB). Change the following template settings to use - * alternative delimiters. - * - * @static - * @memberOf _ - * @type {Object} - */ - lodash.templateSettings = { - - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'escape': reEscape, - - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'evaluate': reEvaluate, - - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'interpolate': reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type {string} - */ - 'variable': '', - - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type {Object} - */ - 'imports': { - - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type {Function} - */ - '_': lodash - } - }; - - // Ensure wrappers are instances of `baseLodash`. - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; - - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } - - /** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; - } - - /** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; - } - - /** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || arrLength < LARGE_ARRAY_SIZE || - (arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - - outer: - while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; - } - - // Ensure `LazyWrapper` is an instance of `baseLodash`. - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Hash(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - } - - /** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function hashDelete(key) { - return this.has(key) && delete this.__data__[key]; - } - - /** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; - } - - /** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); - } - - /** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ - function hashSet(key, value) { - var data = this.__data__; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; - } - - // Add methods to `Hash`. - Hash.prototype.clear = hashClear; - Hash.prototype['delete'] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function ListCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ - function listCacheClear() { - this.__data__ = []; - } - - /** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - return true; - } - - /** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; - } - - /** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } - - /** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ - function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; - } - - // Add methods to `ListCache`. - ListCache.prototype.clear = listCacheClear; - ListCache.prototype['delete'] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function MapCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ - function mapCacheClear() { - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; - } - - /** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function mapCacheDelete(key) { - return getMapData(this, key)['delete'](key); - } - - /** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } - - /** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } - - /** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ - function mapCacheSet(key, value) { - getMapData(this, key).set(key, value); - return this; - } - - // Add methods to `MapCache`. - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype['delete'] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ - function SetCache(values) { - var index = -1, - length = values ? values.length : 0; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } - } - - /** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; - } - - /** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ - function setCacheHas(value) { - return this.__data__.has(value); - } - - // Add methods to `SetCache`. - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Stack(entries) { - this.__data__ = new ListCache(entries); - } - - /** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ - function stackClear() { - this.__data__ = new ListCache; - } - - /** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function stackDelete(key) { - return this.__data__['delete'](key); - } - - /** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function stackGet(key) { - return this.__data__.get(key); - } - - /** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function stackHas(key) { - return this.__data__.has(key); - } - - /** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ - function stackSet(key, value) { - var cache = this.__data__; - if (cache instanceof ListCache && cache.__data__.length == LARGE_ARRAY_SIZE) { - cache = this.__data__ = new MapCache(cache.__data__); - } - cache.set(key, value); - return this; - } - - // Add methods to `Stack`. - Stack.prototype.clear = stackClear; - Stack.prototype['delete'] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; - - /*------------------------------------------------------------------------*/ - - /** - * Used by `_.defaults` to customize its `_.assignIn` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ - function assignInDefaults(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; - } - - /** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (typeof key == 'number' && value === undefined && !(key in object))) { - object[key] = value; - } - } - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - object[key] = value; - } - } - - /** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to search. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; - } - - /** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } - - /** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths of elements to pick. - * @returns {Array} Returns the picked elements. - */ - function baseAt(object, paths) { - var index = -1, - isNil = object == null, - length = paths.length, - result = Array(length); - - while (++index < length) { - result[index] = isNil ? undefined : get(object, paths[index]); - } - return result; - } - - /** - * The base implementation of `_.clamp` which doesn't coerce arguments to numbers. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; - } - - /** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @param {boolean} [isFull] Specify a clone including symbols. - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, isDeep, isFull, customizer, key, object, stack) { - var result; - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - if (isHostObject(value)) { - return object ? value : {}; - } - result = initCloneObject(isFunc ? {} : value); - if (!isDeep) { - return copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, baseClone, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (!isArr) { - var props = isFull ? getAllKeys(value) : keys(value); - } - // Recursively populate clone (susceptible to call stack limits). - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); - }); - return result; - } - - /** - * The base implementation of `_.conforms` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - */ - function baseConforms(source) { - var props = keys(source), - length = props.length; - - return function(object) { - if (object == null) { - return !length; - } - var index = length; - while (index--) { - var key = props[index], - predicate = source[key], - value = object[key]; - - if ((value === undefined && - !(key in Object(object))) || !predicate(value)) { - return false; - } - } - return true; - }; - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} prototype The object to inherit from. - * @returns {Object} Returns the new object. - */ - function baseCreate(proto) { - return isObject(proto) ? objectCreate(proto) : {}; - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts an array - * of `func` arguments. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Object} args The arguments to provide to `func`. - * @returns {number} Returns the timer id. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ - function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEachRight = createBaseEach(baseForOwnRight, true); - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !isSymbol(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; - } - - /** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ - function baseFill(array, value, start, end) { - var length = array.length; - - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseForRight = createBaseFor(true); - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); - } - - /** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ - function baseGet(object, path) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; - } - - /** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); - } - - /** - * The base implementation of `_.gt` which doesn't coerce arguments to numbers. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; - } - - /** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHas(object, key) { - // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`, - // that are composed entirely of index properties, return `false` for - // `hasOwnProperty` checks of them. - return object != null && - (hasOwnProperty.call(object, key) || - (typeof object == 'object' && key in object && getPrototype(object) === null)); - } - - /** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHasIn(object, key) { - return object != null && key in Object(object); - } - - /** - * The base implementation of `_.inRange` which doesn't coerce arguments to numbers. - * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ - function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); - } - - /** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ - function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; - - var index = -1, - seen = caches[0]; - - outer: - while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ - function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; - } - - /** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ - function baseInvoke(object, path, args) { - if (!isKey(path, object)) { - path = castPath(path); - object = parent(object, path); - path = last(path); - } - var func = object == null ? object : object[toKey(path)]; - return func == null ? undefined : apply(func, object, args); - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @param {boolean} [bitmask] The bitmask of comparison flags. - * The bitmask may be composed of the following flags: - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, customizer, bitmask, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparisons. - * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = getTag(object); - objTag = objTag == argsTag ? objectTag : objTag; - } - if (!othIsArr) { - othTag = getTag(other); - othTag = othTag == argsTag ? objectTag : othTag; - } - var objIsObj = objTag == objectTag && !isHostObject(object), - othIsObj = othTag == objectTag && !isHostObject(other), - isSameTag = objTag == othTag; - - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) - : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); - } - if (!(bitmask & PARTIAL_COMPARE_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, equalFunc, customizer, bitmask, stack); - } - - /** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) - : result - )) { - return false; - } - } - } - return true; - } - - /** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); - } - - /** - * The base implementation of `_.keys` which doesn't skip the constructor - * property of prototypes or treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - return nativeKeys(Object(object)); - } - - /** - * The base implementation of `_.keysIn` which doesn't skip the constructor - * property of prototypes or treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - object = object == null ? object : Object(object); - - var result = []; - for (var key in object) { - result.push(key); - } - return result; - } - - // Fallback for IE < 9 with es6-shim. - if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) { - baseKeysIn = function(object) { - return iteratorToArray(enumerate(object)); - }; - } - - /** - * The base implementation of `_.lt` which doesn't coerce arguments to numbers. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other; - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } - - /** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); - }; - } - - /** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - if (!(isArray(source) || isTypedArray(source))) { - var props = keysIn(source); - } - arrayEach(props || source, function(srcValue, key) { - if (props) { - key = srcValue; - srcValue = source[key]; - } - if (isObject(srcValue)) { - stack || (stack = new Stack); - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(object[key], srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }); - } - - /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = object[key], - srcValue = source[key], - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - newValue = srcValue; - if (isArray(srcValue) || isTypedArray(srcValue)) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else { - isCommon = false; - newValue = baseClone(srcValue, true); - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { - isCommon = false; - newValue = baseClone(srcValue, true); - } - else { - newValue = objValue; - } - } - else { - isCommon = false; - } - } - stack.set(srcValue, newValue); - - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - } - stack['delete'](srcValue); - assignMergeValue(object, key, newValue); - } - - /** - * The base implementation of `_.nth` which doesn't coerce `n` to an integer. - * - * @private - * @param {Array} array The array to query. - * @param {number} n The index of the element to return. - * @returns {*} Returns the nth element of `array`. - */ - function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined; - } - - /** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ - function baseOrderBy(collection, iteratees, orders) { - var index = -1; - iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); - - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); - } - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, props) { - object = Object(object); - return arrayReduce(props, function(result, key) { - if (key in object) { - result[key] = object[key]; - } - return result; - }, {}); - } - - /** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ - function basePickBy(object, predicate) { - var index = -1, - props = getAllKeysIn(object), - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index], - value = object[key]; - - if (predicate(value, key)) { - result[key] = value; - } - } - return result; - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } - - /** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; - } - - /** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - */ - function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; - - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; - - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; - } - - /** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; - - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } - else if (!isKey(index, array)) { - var path = castPath(index), - object = parent(array, path); - - if (object != null) { - delete object[toKey(last(path))]; - } - } - else { - delete array[toKey(index)]; - } - } - } - return array; - } - - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } - - /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments to numbers. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } - - /** - * The base implementation of `_.repeat` which doesn't coerce arguments. - * - * @private - * @param {string} string The string to repeat. - * @param {number} n The number of times to repeat the string. - * @returns {string} Returns the repeated string. - */ - function baseRepeat(string, n) { - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); - - return result; - } - - /** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseSet(object, path, value, customizer) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]); - if (isObject(nested)) { - var newValue = value; - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = objValue == null - ? (isIndex(path[index + 1]) ? [] : {}) - : objValue; - } - } - assignValue(nested, key, newValue); - } - nested = nested[key]; - } - return object; - } - - /** - * The base implementation of `setData` without support for hot loop detection. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array ? array.length : low; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if (computed !== null && !isSymbol(computed) && - (retHighest ? (computed <= value) : (computed < value))) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); - } - - /** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array ? array.length : 0, - valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } - - /** - * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; - } - - /** - * The base implementation of `_.toNumber` which doesn't ensure correct - * conversions of binary, hexadecimal, or octal string values. - * - * @private - * @param {*} value The value to process. - * @returns {number} Returns the number. - */ - function baseToNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; - } - - /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - /** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ - function baseUnset(object, path) { - path = isKey(path, object) ? [path] : castPath(path); - object = parent(object, path); - - var key = toKey(last(path)); - return !(object != null && baseHas(object, key)) || delete object[key]; - } - - /** - * The base implementation of `_.update`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to update. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); - } - - /** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length) && - predicate(array[index], index, array)) {} - - return isDrop - ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } - - /** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ - function baseXor(arrays, iteratee, comparator) { - var index = -1, - length = arrays.length; - - while (++index < length) { - var result = result - ? arrayPush( - baseDifference(result, arrays[index], iteratee, comparator), - baseDifference(arrays[index], result, iteratee, comparator) - ) - : arrays[index]; - } - return (result && result.length) ? baseUniq(result, iteratee, comparator) : []; - } - - /** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ - function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; - } - - /** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } - - /** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ - function castFunction(value) { - return typeof value == 'function' ? value : identity; - } - - /** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast property path array. - */ - function castPath(value) { - return isArray(value) ? value : stringToPath(value); - } - - /** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); - } - - /** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var result = new buffer.constructor(buffer.length); - buffer.copy(result); - return result; - } - - /** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; - } - - /** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } - - /** - * Creates a clone of `map`. - * - * @private - * @param {Object} map The map to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned map. - */ - function cloneMap(map, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map); - return arrayReduce(array, addMapEntry, new map.constructor); - } - - /** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ - function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; - } - - /** - * Creates a clone of `set`. - * - * @private - * @param {Object} set The set to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned set. - */ - function cloneSet(set, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set); - return arrayReduce(array, addSetEntry, new set.constructor); - } - - /** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ - function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; - } - - /** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; - } - - /** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; - } - - /** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; - } - - /** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : source[key]; - - assignValue(object, key, newValue); - } - return object; - } - - /** - * Copies own symbol properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); - } - - /** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ - function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func(collection, setter, getIteratee(iteratee), accumulator); - }; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return rest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` - * for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createBaseWrapper(func, bitmask, thisArg) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtorWrapper(func); - - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } - - /** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = reHasComplexSymbol.test(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; - } - - /** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ - function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtorWrapper(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` - * for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createCurryWrapper(func, bitmask, arity) { - var Ctor = createCtorWrapper(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); - - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); - - length -= holders.length; - if (length < arity) { - return createRecurryWrapper( - func, bitmask, createHybridWrapper, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - predicate = getIteratee(predicate, 3); - if (!isArrayLike(collection)) { - var props = keys(collection); - } - var index = findIndexFunc(props || collection, function(value, key) { - if (props) { - key = value; - value = iterable[key]; - } - return predicate(value, key, iterable); - }, fromIndex); - return index > -1 ? collection[props ? props[index] : index] : undefined; - }; - } - - /** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ - function createFlow(fromRight) { - return rest(function(funcs) { - funcs = baseFlatten(funcs, 1); - - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; - - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if (data && isLaziable(data[0]) && - data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && - !data[4].length && data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) - ? wrapper[funcName]() - : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && - isArray(value) && value.length >= LARGE_ARRAY_SIZE) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }); - } - - /** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` - * for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & ARY_FLAG, - isBind = bitmask & BIND_FLAG, - isBindKey = bitmask & BIND_KEY_FLAG, - isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), - isFlip = bitmask & FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtorWrapper(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; - - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurryWrapper( - func, bitmask, createHybridWrapper, wrapper.placeholder, thisArg, - args, newHolders, argPos, ary, arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtorWrapper(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } - - /** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ - function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; - } - - /** - * Creates a function that performs a mathematical operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new mathematical operation function. - */ - function createMathOperation(operator) { - return function(value, other) { - var result; - if (value === undefined && other === undefined) { - return 0; - } - if (value !== undefined) { - result = value; - } - if (other !== undefined) { - if (result === undefined) { - return other; - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; - } - - /** - * Creates a function like `_.over`. - * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new over function. - */ - function createOver(arrayFunc) { - return rest(function(iteratees) { - iteratees = (iteratees.length == 1 && isArray(iteratees[0])) - ? arrayMap(iteratees[0], baseUnary(getIteratee())) - : arrayMap(baseFlatten(iteratees, 1, isFlattenableIteratee), baseUnary(getIteratee())); - - return rest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); - } - - /** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. - * - * @private - * @param {number} length The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. - */ - function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars); - - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); - return reHasComplexSymbol.test(chars) - ? castSlice(stringToArray(result), 0, length).join('') - : result.slice(0, length); - } - - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` - * for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartialWrapper(func, bitmask, thisArg, partials) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtorWrapper(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toNumber(start); - start = start === start ? start : 0; - if (end === undefined) { - end = start; - start = 0; - } else { - end = toNumber(end) || 0; - } - step = step === undefined ? (start < end ? 1 : -1) : (toNumber(step) || 0); - return baseRange(start, end, step, fromRight); - }; - } - - /** - * Creates a function that performs a relational operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new relational operation function. - */ - function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; - } - - /** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` - * for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createRecurryWrapper(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); - - if (!(bitmask & CURRY_BOUND_FLAG)) { - bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; - - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return result; - } - - /** - * Creates a function like `_.round`. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ - function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = nativeMin(toInteger(precision), 292); - if (precision) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); - - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; - } - - /** - * Creates a set of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ - var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); - }; - - /** - * Creates a `_.toPairs` or `_.toPairsIn` function. - * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. - */ - function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); - } - if (tag == setTag) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; - } - - /** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask of wrapper flags. - * The bitmask may be composed of the following flags: - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; - - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] == null - ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); - - if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { - bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == BIND_FLAG) { - var result = createBaseWrapper(func, bitmask, thisArg); - } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { - result = createCurryWrapper(func, bitmask, arity); - } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { - result = createPartialWrapper(func, bitmask, thisArg, partials); - } else { - result = createHybridWrapper.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setter(result, newData); - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked) { - return stacked == other; - } - var index = -1, - result = true, - seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined; - - stack.set(array, other); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!seen.has(othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { - return seen.add(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, customizer, bitmask, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - return result; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - // Coerce dates and booleans to numbers, dates to milliseconds and - // booleans to `1` or `0` treating invalid dates coerced to `NaN` as - // not equal. - return +object == +other; - - case errorTag: - return object.name == other.name && object.message == other.message; - - case numberTag: - // Treat `NaN` vs. `NaN` as equal. - return (object != +object) ? other != +other : object == +other; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/6.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & PARTIAL_COMPARE_FLAG; - convert || (convert = setToArray); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= UNORDERED_COMPARE_FLAG; - stack.set(object, other); - - // Recursively compare objects (susceptible to call stack limits). - return equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack); - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : baseHas(other, key))) { - return false; - } - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - var result = true; - stack.set(object, other); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - return result; - } - - /** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); - } - - /** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); - } - - /** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; - - /** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ - function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; - } - - /** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ - function getHolder(func) { - var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; - return object.placeholder; - } - - /** - * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, - * this function returns the custom method, otherwise it returns `baseIteratee`. - * If arguments are provided, the chosen function is invoked with them and - * its result is returned. - * - * @private - * @param {*} [value] The value to convert to an iteratee. - * @param {number} [arity] The arity of the created iteratee. - * @returns {Function} Returns the chosen function or its result. - */ - function getIteratee() { - var result = lodash.iteratee || iteratee; - result = result === iteratee ? baseIteratee : result; - return arguments.length ? result(arguments[0], arguments[1]) : result; - } - - /** - * Gets the "length" property value of `object`. - * - * **Note:** This function is used to avoid a - * [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) that affects - * Safari on at least iOS 8.1-8.3 ARM64. - * - * @private - * @param {Object} object The object to query. - * @returns {*} Returns the "length" value. - */ - var getLength = baseProperty('length'); - - /** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ - function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; - } - - /** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ - function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; - } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; - } - - /** - * Gets the `[[Prototype]]` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {null|Object} Returns the `[[Prototype]]`. - */ - function getPrototype(value) { - return nativeGetPrototype(Object(value)); - } - - /** - * Creates an array of the own enumerable symbol properties of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - function getSymbols(object) { - // Coerce `object` to an object to avoid non-object errors in V8. - // See https://bugs.chromium.org/p/v8/issues/detail?id=3443 for more details. - return getOwnPropertySymbols(Object(object)); - } - - // Fallback for IE < 11. - if (!getOwnPropertySymbols) { - getSymbols = stubArray; - } - - /** - * Creates an array of the own and inherited enumerable symbol properties - * of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbolsIn = !getOwnPropertySymbols ? getSymbols : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; - }; - - /** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function getTag(value) { - return objectToString.call(value); - } - - // Fallback for data views, maps, sets, and weak maps in IE 11, - // for data views in Edge, and promises in Node.js. - if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = objectToString.call(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : undefined; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; - } - - /** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++index < length) { - var data = transforms[index], - size = data.size; - - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; - } - - /** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ - function hasPath(object, path, hasFunc) { - path = isKey(path, object) ? [path] : castPath(path); - - var result, - index = -1, - length = path.length; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result) { - return result; - } - var length = object ? object.length : 0; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isString(object) || isArguments(object)); - } - - /** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ - function initCloneArray(array) { - var length = array.length, - result = array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } - - /** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; - } - - /** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneByTag(object, tag, cloneFunc, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return cloneTypedArray(object, isDeep); - - case mapTag: - return cloneMap(object, isDeep, cloneFunc); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return cloneRegExp(object); - - case setTag: - return cloneSet(object, isDeep, cloneFunc); - - case symbolTag: - return cloneSymbol(object); - } - } - - /** - * Creates an array of index keys for `object` values of arrays, - * `arguments` objects, and strings, otherwise `null` is returned. - * - * @private - * @param {Object} object The object to query. - * @returns {Array|null} Returns index keys, else `null`. - */ - function indexKeys(object) { - var length = object ? object.length : undefined; - if (isLength(length) && - (isArray(object) || isString(object) || isArguments(object))) { - return baseTimes(length, String); - } - return null; - } - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return isArray(value) || isArguments(value); - } - - /** - * Checks if `value` is a flattenable array and not a `_.matchesProperty` - * iteratee shorthand. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenableIteratee(value) { - return isArray(value) && !(value.length == 2 && !isFunction(value[0])); - } - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); - } - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; - } - - /** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ - function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); - } - - /** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ - function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); - } - - /** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ - function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; - - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } - - /** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ - function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); - } - - /** - * Checks if `func` is capable of being masked. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `func` is maskable, else `false`. - */ - var isMaskable = coreJsData ? isFunction : stubFalse; - - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; - } - - /** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ - function isStrictComparable(value) { - return value === value && !isObject(value); - } - - /** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; - } - - /** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ - function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG); - - var isCombo = - ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) || - ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || - ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } - // Use source `ary` if it's smaller. - if (srcBitmask & ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; - } - - /** - * Used by `_.defaultsDeep` to customize its `_.merge` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. - */ - function mergeDefaults(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - baseMerge(objValue, srcValue, undefined, mergeDefaults, stack.set(srcValue, objValue)); - } - return objValue; - } - - /** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ - function parent(object, path) { - return path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - } - - /** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ - function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; - } - - /** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var setData = (function() { - var count = 0, - lastCalled = 0; - - return function(key, value) { - var stamp = now(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return key; - } - } else { - count = 0; - } - return baseSetData(key, value); - }; - }()); - - /** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ - var stringToPath = memoize(function(string) { - var result = []; - toString(string).replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; - }); - - /** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ - function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - /** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to process. - * @returns {string} Returns the source code. - */ - function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; - } - - /** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ - function chunk(array, size, guard) { - if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { - size = 1; - } else { - size = nativeMax(toInteger(size), 0); - } - var length = array ? array.length : 0; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; - } - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @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] - */ - function concat() { - var length = arguments.length, - args = Array(length ? length - 1 : 0), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return length - ? arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)) - : []; - } - - /** - * Creates an array of unique `array` values not included in the other given - * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. The order of result values is determined by the - * order they occur in the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ - var difference = rest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) - : []; - }); - - /** - * 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 they're compared. Result values are chosen from the first array. - * The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2] - * - * // The `_.property` iteratee shorthand. - * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var differenceBy = rest(function(array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee)) - : []; - }); - - /** - * This method is like `_.difference` except that it accepts `comparator` - * which is invoked to compare elements of `array` to `values`. Result values - * are chosen from the first array. The comparator is invoked with two arguments: - * (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * - * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); - * // => [{ 'x': 2, 'y': 1 }] - */ - var differenceWith = rest(function(array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) - : []; - }); - - /** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function drop(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function dropRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.dropRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney'] - * - * // The `_.matches` iteratee shorthand. - * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropRightWhile(users, ['active', false]); - * // => objects for ['barney'] - * - * // The `_.property` iteratee shorthand. - * _.dropRightWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true, true) - : []; - } - - /** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true) - : []; - } - - /** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ - function fill(array, value, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, getIteratee(predicate, 3), index); - } - - /** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ - function findLastIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex(array, getIteratee(predicate, 3), index, true); - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, 1) : []; - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, INFINITY) : []; - } - - /** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ - function flattenDepth(array, depth) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); - } - - /** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['fred', 30], ['barney', 40]]); - * // => { 'fred': 30, 'barney': 40 } - */ - function fromPairs(pairs) { - var index = -1, - length = pairs ? pairs.length : 0, - result = {}; - - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return (array && array.length) ? array[0] : undefined; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); - } - - /** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ - function initial(array) { - return dropRight(array, 1); - } - - /** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. The order of result values is determined by the - * order they occur in the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ - var intersection = rest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `iteratee` - * which is invoked for each element of each `arrays` to generate the criterion - * by which they're compared. Result values are chosen from the first array. - * The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [2.1] - * - * // The `_.property` iteratee shorthand. - * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }] - */ - var intersectionBy = rest(function(arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (iteratee === last(mapped)) { - iteratee = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, getIteratee(iteratee)) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. Result values are chosen - * from the first array. The comparator is invoked with two arguments: - * (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ - var intersectionWith = rest(function(arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (comparator === last(mapped)) { - comparator = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, undefined, comparator) - : []; - }); - - /** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ - function join(array, separator) { - return array ? nativeJoin.call(array, separator) : ''; - } - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; - } - - /** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ - function lastIndexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = ( - index < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1) - ) + 1; - } - if (value !== value) { - return indexOfNaN(array, index - 1, true); - } - while (index--) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * Gets the element at index `n` of `array`. If `n` is negative, the nth - * element from the end is returned. - * - * @static - * @memberOf _ - * @since 4.11.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=0] The index of the element to return. - * @returns {*} Returns the nth element of `array`. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * - * _.nth(array, 1); - * // => 'b' - * - * _.nth(array, -2); - * // => 'c'; - */ - function nth(array, n) { - return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; - } - - /** - * Removes all given values from `array` using - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` - * to remove elements from an array by predicate. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...*} [values] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pull(array, 'a', 'c'); - * console.log(array); - * // => ['b', 'b'] - */ - var pull = rest(pullAll); - - /** - * This method is like `_.pull` except that it accepts an array of values to remove. - * - * **Note:** Unlike `_.difference`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pullAll(array, ['a', 'c']); - * console.log(array); - * // => ['b', 'b'] - */ - function pullAll(array, values) { - return (array && array.length && values && values.length) - ? basePullAll(array, values) - : array; - } - - /** - * This method is like `_.pullAll` except that it accepts `iteratee` which is - * invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The iteratee is invoked with one argument: (value). - * - * **Note:** Unlike `_.differenceBy`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; - * - * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); - * console.log(array); - * // => [{ 'x': 2 }] - */ - function pullAllBy(array, values, iteratee) { - return (array && array.length && values && values.length) - ? basePullAll(array, values, getIteratee(iteratee)) - : array; - } - - /** - * This method is like `_.pullAll` except that it accepts `comparator` which - * is invoked to compare elements of `array` to `values`. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.differenceWith`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; - * - * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); - * console.log(array); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] - */ - function pullAllWith(array, values, comparator) { - return (array && array.length && values && values.length) - ? basePullAll(array, values, undefined, comparator) - : array; - } - - /** - * Removes elements from `array` corresponding to `indexes` and returns an - * array of removed elements. - * - * **Note:** Unlike `_.at`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...(number|number[])} [indexes] The indexes of elements to remove. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * var pulled = _.pullAt(array, [1, 3]); - * - * console.log(array); - * // => ['a', 'c'] - * - * console.log(pulled); - * // => ['b', 'd'] - */ - var pullAt = rest(function(array, indexes) { - indexes = baseFlatten(indexes, 1); - - var length = array ? array.length : 0, - result = baseAt(array, indexes); - - basePullAt(array, arrayMap(indexes, function(index) { - return isIndex(index, length) ? +index : index; - }).sort(compareAscending)); - - return result; - }); - - /** - * Removes all elements from `array` that `predicate` returns truthy for - * and returns an array of the removed elements. The predicate is invoked - * with three arguments: (value, index, array). - * - * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` - * to pull elements from an array by value. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4]; - * var evens = _.remove(array, function(n) { - * return n % 2 == 0; - * }); - * - * console.log(array); - * // => [1, 3] - * - * console.log(evens); - * // => [2, 4] - */ - function remove(array, predicate) { - var result = []; - if (!(array && array.length)) { - return result; - } - var index = -1, - indexes = [], - length = array.length; - - predicate = getIteratee(predicate, 3); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result; - } - - /** - * Reverses `array` so that the first element becomes the last, the second - * element becomes the second to last, and so on. - * - * **Note:** This method mutates `array` and is based on - * [`Array#reverse`](https://mdn.io/Array/reverse). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.reverse(array); - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function reverse(array) { - return array ? nativeReverse.call(array) : array; - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } - else { - start = start == null ? 0 : toInteger(start); - end = end === undefined ? length : toInteger(end); - } - return baseSlice(array, start, end); - } - - /** - * Uses a binary search to determine the lowest index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedIndex([30, 50], 40); - * // => 1 - */ - function sortedIndex(array, value) { - return baseSortedIndex(array, value); - } - - /** - * This method is like `_.sortedIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); - * // => 0 - */ - function sortedIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee)); - } - - /** - * This method is like `_.indexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedIndexOf([4, 5, 5, 5, 6], 5); - * // => 1 - */ - function sortedIndexOf(array, value) { - var length = array ? array.length : 0; - if (length) { - var index = baseSortedIndex(array, value); - if (index < length && eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.sortedIndex` except that it returns the highest - * index at which `value` should be inserted into `array` in order to - * maintain its sort order. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedLastIndex([4, 5, 5, 5, 6], 5); - * // => 4 - */ - function sortedLastIndex(array, value) { - return baseSortedIndex(array, value, true); - } - - /** - * This method is like `_.sortedLastIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 1 - * - * // The `_.property` iteratee shorthand. - * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); - * // => 1 - */ - function sortedLastIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee), true); - } - - /** - * This method is like `_.lastIndexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); - * // => 3 - */ - function sortedLastIndexOf(array, value) { - var length = array ? array.length : 0; - if (length) { - var index = baseSortedIndex(array, value, true) - 1; - if (eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.uniq` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniq([1, 1, 2]); - * // => [1, 2] - */ - function sortedUniq(array) { - return (array && array.length) - ? baseSortedUniq(array) - : []; - } - - /** - * This method is like `_.uniqBy` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); - * // => [1.1, 2.3] - */ - function sortedUniqBy(array, iteratee) { - return (array && array.length) - ? baseSortedUniq(array, getIteratee(iteratee)) - : []; - } - - /** - * Gets all but the first element of `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.tail([1, 2, 3]); - * // => [2, 3] - */ - function tail(array) { - return drop(array, 1); - } - - /** - * Creates a slice of `array` with `n` elements taken from the beginning. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.take([1, 2, 3]); - * // => [1] - * - * _.take([1, 2, 3], 2); - * // => [1, 2] - * - * _.take([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.take([1, 2, 3], 0); - * // => [] - */ - function take(array, n, guard) { - if (!(array && array.length)) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` with `n` elements taken from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.takeRight([1, 2, 3]); - * // => [3] - * - * _.takeRight([1, 2, 3], 2); - * // => [2, 3] - * - * _.takeRight([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.takeRight([1, 2, 3], 0); - * // => [] - */ - function takeRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with elements taken from the end. Elements are - * taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.takeRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeRightWhile(users, ['active', false]); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.takeRightWhile(users, 'active'); - * // => [] - */ - function takeRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), false, true) - : []; - } - - /** - * Creates a slice of `array` with elements taken from the beginning. Elements - * are taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false}, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.takeWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matches` iteratee shorthand. - * _.takeWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeWhile(users, ['active', false]); - * // => objects for ['barney', 'fred'] - * - * // The `_.property` iteratee shorthand. - * _.takeWhile(users, 'active'); - * // => [] - */ - function takeWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3)) - : []; - } - - /** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ - var union = rest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); - }); - - /** - * This method is like `_.union` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which uniqueness is computed. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.unionBy([2.1], [1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - var unionBy = rest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee)); - }); - - /** - * This method is like `_.union` except that it accepts `comparator` which - * is invoked to compare elements of `arrays`. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.unionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var unionWith = rest(function(arrays) { - var comparator = last(arrays); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); - }); - - /** - * Creates a duplicate-free version of an array, using - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons, in which only the first occurrence of each - * element is kept. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniq([2, 1, 2]); - * // => [2, 1] - */ - function uniq(array) { - return (array && array.length) - ? baseUniq(array) - : []; - } - - /** - * This method is like `_.uniq` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * uniqueness is computed. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniqBy([2.1, 1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniqBy(array, iteratee) { - return (array && array.length) - ? baseUniq(array, getIteratee(iteratee)) - : []; - } - - /** - * This method is like `_.uniq` except that it accepts `comparator` which - * is invoked to compare elements of `array`. The comparator is invoked with - * two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.uniqWith(objects, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] - */ - function uniqWith(array, comparator) { - return (array && array.length) - ? baseUniq(array, undefined, comparator) - : []; - } - - /** - * This method is like `_.zip` except that it accepts an array of grouped - * elements and creates an array regrouping the elements to their pre-zip - * configuration. - * - * @static - * @memberOf _ - * @since 1.2.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]); - * // => [['fred', 30, true], ['barney', 40, false]] - * - * _.unzip(zipped); - * // => [['fred', 'barney'], [30, 40], [true, false]] - */ - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var length = 0; - array = arrayFilter(array, function(group) { - if (isArrayLikeObject(group)) { - length = nativeMax(group.length, length); - return true; - } - }); - return baseTimes(length, function(index) { - return arrayMap(array, baseProperty(index)); - }); - } - - /** - * This method is like `_.unzip` except that it accepts `iteratee` to specify - * how regrouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @param {Function} [iteratee=_.identity] The function to combine - * regrouped values. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip([1, 2], [10, 20], [100, 200]); - * // => [[1, 10, 100], [2, 20, 200]] - * - * _.unzipWith(zipped, _.add); - * // => [3, 30, 300] - */ - function unzipWith(array, iteratee) { - if (!(array && array.length)) { - return []; - } - var result = unzip(array); - if (iteratee == null) { - return result; - } - return arrayMap(result, function(group) { - return apply(iteratee, undefined, group); - }); - } - - /** - * Creates an array excluding all given values using - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...*} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.xor - * @example - * - * _.without([2, 1, 2, 3], 1, 2); - * // => [3] - */ - var without = rest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, values) - : []; - }); - - /** - * Creates an array of unique values that is the - * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) - * of the given arrays. The order of result values is determined by the order - * they occur in the arrays. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.without - * @example - * - * _.xor([2, 1], [2, 3]); - * // => [1, 3] - */ - var xor = rest(function(arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)); - }); - - /** - * This method is like `_.xor` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which by which they're compared. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2, 3.4] - * - * // The `_.property` iteratee shorthand. - * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var xorBy = rest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee)); - }); - - /** - * This method is like `_.xor` except that it accepts `comparator` which is - * invoked to compare elements of `arrays`. The comparator is invoked with - * two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.xorWith(objects, others, _.isEqual); - * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var xorWith = rest(function(arrays) { - var comparator = last(arrays); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); - }); - - /** - * Creates an array of grouped elements, the first of which contains the - * first elements of the given arrays, the second of which contains the - * second elements of the given arrays, and so on. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zip(['fred', 'barney'], [30, 40], [true, false]); - * // => [['fred', 30, true], ['barney', 40, false]] - */ - var zip = rest(unzip); - - /** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ - function zipObject(props, values) { - return baseZipObject(props || [], values || [], assignValue); - } - - /** - * This method is like `_.zipObject` except that it supports property paths. - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); - * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } - */ - function zipObjectDeep(props, values) { - return baseZipObject(props || [], values || [], baseSet); - } - - /** - * This method is like `_.zip` except that it accepts `iteratee` to specify - * how grouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @param {Function} [iteratee=_.identity] The function to combine grouped values. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { - * return a + b + c; - * }); - * // => [111, 222] - */ - var zipWith = rest(function(arrays) { - var length = arrays.length, - iteratee = length > 1 ? arrays[length - 1] : undefined; - - iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; - return unzipWith(arrays, iteratee); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } - - /** - * This method is the wrapper version of `_.at`. - * - * @name at - * @memberOf _ - * @since 1.0.0 - * @category Seq - * @param {...(string|string[])} [paths] The property paths of elements to pick. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _(object).at(['a[0].b.c', 'a[1]']).value(); - * // => [3, 4] - */ - var wrapperAt = rest(function(paths) { - paths = baseFlatten(paths, 1); - var length = paths.length, - start = length ? paths[0] : 0, - value = this.__wrapped__, - interceptor = function(object) { return baseAt(object, paths); }; - - if (length > 1 || this.__actions__.length || - !(value instanceof LazyWrapper) || !isIndex(start)) { - return this.thru(interceptor); - } - value = value.slice(start, +start + (length ? 1 : 0)); - value.__actions__.push({ - 'func': thru, - 'args': [interceptor], - 'thisArg': undefined - }); - return new LodashWrapper(value, this.__chain__).thru(function(array) { - if (length && !array.length) { - array.push(undefined); - } - return array; - }); - }); - - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chain sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } - - /** - * Gets the next value on a wrapped object following the - * [iterator protocol](https://mdn.io/iteration_protocols#iterator). - * - * @name next - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the next iterator value. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped.next(); - * // => { 'done': false, 'value': 1 } - * - * wrapped.next(); - * // => { 'done': false, 'value': 2 } - * - * wrapped.next(); - * // => { 'done': true, 'value': undefined } - */ - function wrapperNext() { - if (this.__values__ === undefined) { - this.__values__ = toArray(this.value()); - } - var done = this.__index__ >= this.__values__.length, - value = done ? undefined : this.__values__[this.__index__++]; - - return { 'done': done, 'value': value }; - } - - /** - * Enables the wrapper to be iterable. - * - * @name Symbol.iterator - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the wrapper object. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped[Symbol.iterator]() === wrapped; - * // => true - * - * Array.from(wrapped); - * // => [1, 2] - */ - function wrapperToIterator() { - return this; - } - - /** - * Creates a clone of the chain sequence planting `value` as the wrapped value. - * - * @name plant - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @param {*} value The value to plant. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2]).map(square); - * var other = wrapped.plant([3, 4]); - * - * other.value(); - * // => [9, 16] - * - * wrapped.value(); - * // => [1, 4] - */ - function wrapperPlant(value) { - var result, - parent = this; - - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent); - clone.__index__ = 0; - clone.__values__ = undefined; - if (result) { - previous.__wrapped__ = clone; - } else { - result = clone; - } - var previous = clone; - parent = parent.__wrapped__; - } - previous.__wrapped__ = value; - return result; - } - - /** - * This method is the wrapper version of `_.reverse`. - * - * **Note:** This method mutates the wrapped array. - * - * @name reverse - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2, 3]; - * - * _(array).reverse().value() - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function wrapperReverse() { - var value = this.__wrapped__; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - 'func': thru, - 'args': [reverse], - 'thisArg': undefined - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } - - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the number of times the key was returned by `iteratee`. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function(result, value, key) { - hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); - }); - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex); - - /** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=collection.length-1] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ - var findLast = createFind(findLastIndex); - - /** - * Creates a flattened array of values by running each element in `collection` - * thru `iteratee` and flattening the mapped results. The iteratee is invoked - * with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDeep([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY); - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The function invoked per iteration. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDepth([1, 2], duplicate, 2); - * // => [[1, 1], [2, 2]] - */ - function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); - } - - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _([1, 2]).forEach(function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEach - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `2` then `1`. - */ - function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - result[key] = [value]; - } - }); - - /** - * Checks if `value` is in `collection`. If `collection` is a string, it's - * checked for a substring of `value`, otherwise - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); - * // => true - * - * _.includes('pebbles', 'eb'); - * // => true - */ - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) - ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) - : (!!length && baseIndexOf(collection, value, fromIndex) > -1); - } - - /** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `methodName` is a function, it's - * invoked for and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke each method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invokeMap([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - var invokeMap = rest(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - isProp = isKey(path), - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value) { - var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); - result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args); - }); - return result; - }); - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ - var keyBy = createAggregator(function(result, value, key) { - result[key] = value; - }); - - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.sortBy` except that it allows specifying the sort - * orders of the iteratees to sort by. If `orders` is unspecified, all values - * are sorted in ascending order. Otherwise, specify an order of "desc" for - * descending or "asc" for ascending sort order of corresponding values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] - * The iteratees to sort by. - * @param {string[]} [orders] The sort orders of `iteratees`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 34 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 36 } - * ]; - * - * // Sort by `user` in ascending order and by `age` in descending order. - * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - */ - function orderBy(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - orders = guard ? undefined : orders; - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseOrderBy(collection, iteratees, orders); - } - - /** - * Creates an array of elements split into two groups, the first of which - * contains elements `predicate` returns truthy for, the second of which - * contains elements `predicate` returns falsey for. The predicate is - * invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the array of grouped elements. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true }, - * { 'user': 'pebbles', 'age': 1, 'active': false } - * ]; - * - * _.partition(users, function(o) { return o.active; }); - * // => objects for [['fred'], ['barney', 'pebbles']] - * - * // The `_.matches` iteratee shorthand. - * _.partition(users, { 'age': 1, 'active': false }); - * // => objects for [['pebbles'], ['barney', 'fred']] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.partition(users, ['active', false]); - * // => objects for [['barney', 'pebbles'], ['fred']] - * - * // The `_.property` iteratee shorthand. - * _.partition(users, 'active'); - * // => objects for [['fred'], ['barney', 'pebbles']] - */ - var partition = createAggregator(function(result, value, key) { - result[key ? 0 : 1].push(value); - }, function() { return [[], []]; }); - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); - } - - /** - * This method is like `_.reduce` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduce - * @example - * - * var array = [[0, 1], [2, 3], [4, 5]]; - * - * _.reduceRight(array, function(flattened, other) { - * return flattened.concat(other); - * }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - function reduceRight(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduceRight : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); - } - - /** - * The opposite of `_.filter`; this method returns the elements of `collection` - * that `predicate` does **not** return truthy for. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.filter - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true } - * ]; - * - * _.reject(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.reject(users, { 'age': 40, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.reject(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.reject(users, 'active'); - * // => objects for ['barney'] - */ - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - predicate = getIteratee(predicate, 3); - return func(collection, function(value, index, collection) { - return !predicate(value, index, collection); - }); - } - - /** - * Gets a random element from `collection`. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - */ - function sample(collection) { - var array = isArrayLike(collection) ? collection : values(collection), - length = array.length; - - return length > 0 ? array[baseRandom(0, length - 1)] : undefined; - } - - /** - * Gets `n` random elements at unique keys from `collection` up to the - * size of `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @param {number} [n=1] The number of elements to sample. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the random elements. - * @example - * - * _.sampleSize([1, 2, 3], 2); - * // => [3, 1] - * - * _.sampleSize([1, 2, 3], 4); - * // => [2, 3, 1] - */ - function sampleSize(collection, n, guard) { - var index = -1, - result = toArray(collection), - length = result.length, - lastIndex = length - 1; - - if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { - n = 1; - } else { - n = baseClamp(toInteger(n), 0, length); - } - while (++index < n) { - var rand = baseRandom(index, lastIndex), - value = result[rand]; - - result[rand] = result[index]; - result[index] = value; - } - result.length = n; - return result; - } - - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle(collection) { - return sampleSize(collection, MAX_ARRAY_LENGTH); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - var result = collection.length; - return (result && isString(collection)) ? stringSize(collection) : result; - } - if (isObjectLike(collection)) { - var tag = getTag(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - } - return keys(collection).length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Array|Array[]|Function|Function[]|Object|Object[]|string|string[])} - * [iteratees=[_.identity]] The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, function(o) { return o.user; }); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] - * - * _.sortBy(users, 'user', function(o) { - * return Math.floor(o.age / 10); - * }); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - */ - var sortBy = rest(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - iteratees = (iteratees.length == 1 && isArray(iteratees[0])) - ? iteratees[0] - : baseFlatten(iteratees, 1, isFlattenableIteratee); - - return baseOrderBy(collection, iteratees, []); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ - function now() { - return Date.now(); - } - - /*------------------------------------------------------------------------*/ - - /** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => Logs 'done saving!' after the two async saves have completed. - */ - function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - /** - * Creates a function that invokes `func`, with up to `n` arguments, - * ignoring any additional arguments. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ - function ary(func, n, guard) { - n = guard ? undefined : n; - n = (func && n == null) ? func.length : n; - return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); - } - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => allows adding up to 4 contacts to the list - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var greet = function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * }; - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = rest(function(func, thisArg, partials) { - var bitmask = BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= PARTIAL_FLAG; - } - return createWrapper(func, bitmask, thisArg, partials, holders); - }); - - /** - * Creates a function that invokes the method at `object[key]` with `partials` - * prepended to the arguments it receives. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. See - * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Function - * @param {Object} object The object to invoke the method on. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // Bound with placeholders. - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ - var bindKey = rest(function(object, key, partials) { - var bitmask = BIND_FLAG | BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= PARTIAL_FLAG; - } - return createWrapper(key, bitmask, object, partials, holders); - }); - - /** - * Creates a function that accepts arguments of `func` and either invokes - * `func` returning its result, if at least `arity` number of arguments have - * been provided, or returns a function that accepts the remaining `func` - * arguments, and so on. The arity of `func` may be specified if `func.length` - * is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ - function curry(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrapper(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curry.placeholder; - return result; - } - - /** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ - function curryRight(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrapper(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curryRight.placeholder; - return result; - } - - /** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide an options object to indicate whether `func` should be invoked on - * the leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent calls - * to the debounced function return the result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked - * on the trailing edge of the timeout only if the debounced function is - * invoked more than once during the `wait` timeout. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ - function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - result = wait - timeSinceLastCall; - - return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } - - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one or more milliseconds. - */ - var defer = rest(function(func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = rest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - /** - * Creates a function that invokes `func` with arguments reversed. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to flip arguments for. - * @returns {Function} Returns the new flipped function. - * @example - * - * var flipped = _.flip(function() { - * return _.toArray(arguments); - * }); - * - * flipped('a', 'b', 'c', 'd'); - * // => ['d', 'c', 'b', 'a'] - */ - function flip(func) { - return createWrapper(func, FLIP_FLAG); - } - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object) - * method interface of `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ - function memoize(func, resolver) { - if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result); - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; - } - - // Assign cache to `_.memoize`. - memoize.Cache = MapCache; - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - return !predicate.apply(this, arguments); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // `initialize` invokes `createApplication` once - */ - function once(func) { - return before(2, func); - } - - /** - * Creates a function that invokes `func` with arguments transformed by - * corresponding `transforms`. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Function - * @param {Function} func The function to wrap. - * @param {...(Array|Array[]|Function|Function[]|Object|Object[]|string|string[])} - * [transforms[_.identity]] The functions to transform. - * @returns {Function} Returns the new function. - * @example - * - * function doubled(n) { - * return n * 2; - * } - * - * function square(n) { - * return n * n; - * } - * - * var func = _.overArgs(function(x, y) { - * return [x, y]; - * }, [square, doubled]); - * - * func(9, 3); - * // => [81, 6] - * - * func(10, 5); - * // => [100, 10] - */ - var overArgs = rest(function(func, transforms) { - transforms = (transforms.length == 1 && isArray(transforms[0])) - ? arrayMap(transforms[0], baseUnary(getIteratee())) - : arrayMap(baseFlatten(transforms, 1, isFlattenableIteratee), baseUnary(getIteratee())); - - var funcsLength = transforms.length; - return rest(function(args) { - var index = -1, - length = nativeMin(args.length, funcsLength); - - while (++index < length) { - args[index] = transforms[index].call(this, args[index]); - } - return apply(func, this, args); - }); - }); - - /** - * Creates a function that invokes `func` with `partials` prepended to the - * arguments it receives. This method is like `_.bind` except it does **not** - * alter the `this` binding. - * - * The `_.partial.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 0.2.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * var greet = function(greeting, name) { - * return greeting + ' ' + name; - * }; - * - * var sayHelloTo = _.partial(greet, 'hello'); - * sayHelloTo('fred'); - * // => 'hello fred' - * - * // Partially applied with placeholders. - * var greetFred = _.partial(greet, _, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - */ - var partial = rest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partial)); - return createWrapper(func, PARTIAL_FLAG, undefined, partials, holders); - }); - - /** - * This method is like `_.partial` except that partially applied arguments - * are appended to the arguments it receives. - * - * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * var greet = function(greeting, name) { - * return greeting + ' ' + name; - * }; - * - * var greetFred = _.partialRight(greet, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - * - * // Partially applied with placeholders. - * var sayHelloTo = _.partialRight(greet, 'hello', _); - * sayHelloTo('fred'); - * // => 'hello fred' - */ - var partialRight = rest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partialRight)); - return createWrapper(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders); - }); - - /** - * Creates a function that invokes `func` with arguments arranged according - * to the specified `indexes` where the argument value at the first index is - * provided as the first argument, the argument value at the second index is - * provided as the second argument, and so on. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to rearrange arguments for. - * @param {...(number|number[])} indexes The arranged argument indexes. - * @returns {Function} Returns the new function. - * @example - * - * var rearged = _.rearg(function(a, b, c) { - * return [a, b, c]; - * }, [2, 0, 1]); - * - * rearged('b', 'c', 'a') - * // => ['a', 'b', 'c'] - */ - var rearg = rest(function(func, indexes) { - return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes, 1)); - }); - - /** - * Creates a function that invokes `func` with the `this` binding of the - * created function and arguments from `start` and beyond provided as - * an array. - * - * **Note:** This method is based on the - * [rest parameter](https://mdn.io/rest_parameters). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.rest(function(what, names) { - * return what + ' ' + _.initial(names).join(', ') + - * (_.size(names) > 1 ? ', & ' : '') + _.last(names); - * }); - * - * say('hello', 'fred', 'barney', 'pebbles'); - * // => 'hello fred, barney, & pebbles' - */ - function rest(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = nativeMax(start === undefined ? (func.length - 1) : toInteger(start), 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - switch (start) { - case 0: return func.call(this, array); - case 1: return func.call(this, args[0], array); - case 2: return func.call(this, args[0], args[1], array); - } - var otherArgs = Array(start + 1); - index = -1; - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = array; - return apply(func, this, otherArgs); - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of the - * create function and an array of arguments much like - * [`Function#apply`](http://www.ecma-international.org/ecma-262/6.0/#sec-function.prototype.apply). - * - * **Note:** This method is based on the - * [spread operator](https://mdn.io/spread_operator). - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Function - * @param {Function} func The function to spread arguments over. - * @param {number} [start=0] The start position of the spread. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.spread(function(who, what) { - * return who + ' says ' + what; - * }); - * - * say(['fred', 'hello']); - * // => 'fred says hello' - * - * var numbers = Promise.all([ - * Promise.resolve(40), - * Promise.resolve(36) - * ]); - * - * numbers.then(_.spread(function(x, y) { - * return x + y; - * })); - * // => a Promise of 76 - */ - function spread(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start === undefined ? 0 : nativeMax(toInteger(start), 0); - return rest(function(args) { - var array = args[start], - otherArgs = castSlice(args, 0, start); - - if (array) { - arrayPush(otherArgs, array); - } - return apply(func, this, otherArgs); - }); - } - - /** - * Creates a throttled function that only invokes `func` at most once per - * every `wait` milliseconds. The throttled function comes with a `cancel` - * method to cancel delayed `func` invocations and a `flush` method to - * immediately invoke them. Provide an options object to indicate whether - * `func` should be invoked on the leading and/or trailing edge of the `wait` - * timeout. The `func` is invoked with the last arguments provided to the - * throttled function. Subsequent calls to the throttled function return the - * result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the throttled function - * is invoked more than once during the `wait` timeout. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.throttle` and `_.debounce`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to throttle. - * @param {number} [wait=0] The number of milliseconds to throttle invocations to. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=true] - * Specify invoking on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // Avoid excessively updating the position while scrolling. - * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); - * - * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. - * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); - * jQuery(element).on('click', throttled); - * - * // Cancel the trailing throttled invocation. - * jQuery(window).on('popstate', throttled.cancel); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - 'leading': leading, - 'maxWait': wait, - 'trailing': trailing - }); - } - - /** - * Creates a function that accepts up to one argument, ignoring any - * additional arguments. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.unary(parseInt)); - * // => [6, 8, 10] - */ - function unary(func) { - return ary(func, 1); - } - - /** - * Creates a function that provides `value` to the wrapper function as its - * first argument. Any additional arguments provided to the function are - * appended to those provided to the wrapper function. The wrapper is invoked - * with the `this` binding of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {*} value The value to wrap. - * @param {Function} [wrapper=identity] The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var p = _.wrap(_.escape, function(func, text) { - * return '

' + func(text) + '

'; - * }); - * - * p('fred, barney, & pebbles'); - * // => '

fred, barney, & pebbles

' - */ - function wrap(value, wrapper) { - wrapper = wrapper == null ? identity : wrapper; - return partial(wrapper, value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ - function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; - } - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - return baseClone(value, false, true); - } - - /** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ - function cloneWith(value, customizer) { - return baseClone(value, false, true, customizer); - } - - /** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ - function cloneDeep(value) { - return baseClone(value, true, true); - } - - /** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ - function cloneDeepWith(value, customizer) { - return baseClone(value, true, true, customizer); - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'user': 'fred' }; - * var other = { 'user': 'fred' }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - * @see _.lt - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ - var gt = createRelationalOperation(baseGt); - - /** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to - * `other`, else `false`. - * @see _.lte - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ - var gte = createRelationalOperation(function(value, other) { - return value >= other; - }); - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - function isArguments(value) { - // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode. - return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && - (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); - } - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @type {Function} - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ - function isArrayBuffer(value) { - return isObjectLike(value) && objectToString.call(value) == arrayBufferTag; - } - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(getLength(value)) && !isFunction(value); - } - - /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && objectToString.call(value) == boolTag); - } - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = !Buffer ? stubFalse : function(value) { - return value instanceof Buffer; - }; - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - function isDate(value) { - return isObjectLike(value) && objectToString.call(value) == dateTag; - } - - /** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, - * else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ - function isElement(value) { - return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); - } - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (isArrayLike(value) && - (isArray(value) || isString(value) || isFunction(value.splice) || - isArguments(value) || isBuffer(value))) { - return !value.length; - } - if (isObjectLike(value)) { - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return !(nonEnumShadows && keys(value).length); - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are **not** supported. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, - * else `false`. - * @example - * - * var object = { 'user': 'fred' }; - * var other = { 'user': 'fred' }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, - * else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ - function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, customizer) : !!result; - } - - /** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, - * else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ - function isError(value) { - if (!isObjectLike(value)) { - return false; - } - return (objectToString.call(value) == errorTag) || - (typeof value.message == 'string' && typeof value.name == 'string'); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, - * else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8 which returns 'object' for typed array and weak map constructors, - // and PhantomJS 1.9 which returns 'function' for `NodeList` instances. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; - } - - /** - * Checks if `value` is an integer. - * - * **Note:** This method is based on - * [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ - function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This function is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, - * else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return !!value && typeof value == 'object'; - } - - /** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ - function isMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; - } - - /** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. This method is - * equivalent to a `_.matches` function when `source` is partially applied. - * - * **Note:** This method supports comparing the same values as `_.isEqual`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'user': 'fred', 'age': 40 }; - * - * _.isMatch(object, { 'age': 40 }); - * // => true - * - * _.isMatch(object, { 'age': 36 }); - * // => false - */ - function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); - } - - /** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ - function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch(object, source, getMatchData(source), customizer); - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is a pristine native function. - * - * **Note:** This method can't reliably detect native functions in the - * presence of the `core-js` package because `core-js` circumvents this kind - * of detection. Despite multiple requests, the `core-js` maintainer has made - * it clear: any attempt to fix the detection will be obstructed. As a result, - * we're left with little choice but to throw an error. Unfortunately, this - * also affects packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), - * which rely on `core-js`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ - function isNative(value) { - if (isMaskable(value)) { - throw new Error('This method is not supported with `core-js`. Try https://github.com/es-shims.'); - } - return baseIsNative(value); - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ - function isNil(value) { - return value == null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && objectToString.call(value) == numberTag); - } - - /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, - * else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ - function isPlainObject(value) { - if (!isObjectLike(value) || - objectToString.call(value) != objectTag || isHostObject(value)) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return (typeof Ctor == 'function' && - Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - function isRegExp(value) { - return isObject(value) && objectToString.call(value) == regexpTag; - } - - /** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on - * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, - * else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ - function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ - function isSet(value) { - return isObjectLike(value) && getTag(value) == setTag; - } - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); - } - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); - } - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - function isTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; - } - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ - function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; - } - - /** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, - * else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ - function isWeakSet(value) { - return isObjectLike(value) && objectToString.call(value) == weakSetTag; - } - - /** - * Checks if `value` is less than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - * @see _.gt - * @example - * - * _.lt(1, 3); - * // => true - * - * _.lt(3, 3); - * // => false - * - * _.lt(3, 1); - * // => false - */ - var lt = createRelationalOperation(baseLt); - - /** - * Checks if `value` is less than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than or equal to - * `other`, else `false`. - * @see _.gte - * @example - * - * _.lte(1, 3); - * // => true - * - * _.lte(3, 3); - * // => true - * - * _.lte(3, 1); - * // => false - */ - var lte = createRelationalOperation(function(value, other) { - return value <= other; - }); - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value); - } - if (iteratorSymbol && value[iteratorSymbol]) { - return iteratorToArray(value[iteratorSymbol]()); - } - var tag = getTag(value), - func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); - - return func(value); - } - - /** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/6.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; - } - - /** - * Converts `value` to an integer suitable for use as the length of an - * array-like object. - * - * **Note:** This method is based on - * [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toLength(3.2); - * // => 3 - * - * _.toLength(Number.MIN_VALUE); - * // => 0 - * - * _.toLength(Infinity); - * // => 4294967295 - * - * _.toLength('3.2'); - * // => 3 - */ - function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; - } - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = isFunction(value.valueOf) ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = value.replace(reTrim, ''); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); - } - - /** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } - - /** - * Converts `value` to a safe integer. A safe integer can be compared and - * represented correctly. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toSafeInteger(3.2); - * // => 3 - * - * _.toSafeInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toSafeInteger(Infinity); - * // => 9007199254740991 - * - * _.toSafeInteger('3.2'); - * // => 3 - */ - function toSafeInteger(value) { - return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); - } - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {string} Returns the string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.c = 3; - * } - * - * function Bar() { - * this.e = 5; - * } - * - * Foo.prototype.d = 4; - * Bar.prototype.f = 6; - * - * _.assign({ 'a': 1 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3, 'e': 5 } - */ - var assign = createAssigner(function(object, source) { - if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } - }); - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * function Bar() { - * this.d = 4; - * } - * - * Foo.prototype.c = 3; - * Bar.prototype.e = 5; - * - * _.assignIn({ 'a': 1 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 } - */ - var assignIn = createAssigner(function(object, source) { - if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { - copyObject(source, keysIn(source), object); - return; - } - for (var key in source) { - assignValue(object, key, source[key]); - } - }); - - /** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); - - /** - * This method is like `_.assign` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignInWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); - }); - - /** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths of elements to pick. - * @returns {Array} Returns the picked values. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - */ - var at = rest(function(object, paths) { - return baseAt(object, baseFlatten(paths, 1)); - }); - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? baseAssign(result, properties) : result; - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); - * // => { 'user': 'barney', 'age': 36 } - */ - var defaults = rest(function(args) { - args.push(undefined, assignInDefaults); - return apply(assignInWith, undefined, args); - }); - - /** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } }); - * // => { 'user': { 'name': 'barney', 'age': 36 } } - * - */ - var defaultsDeep = rest(function(args) { - args.push(undefined, mergeDefaults); - return apply(mergeWith, undefined, args); - }); - - /** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ - function findKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); - } - - /** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to search. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ - function findLastKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); - } - - /** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ - function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ - function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forOwn(object, iteratee) { - return object && baseForOwn(object, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ - function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, getIteratee(iteratee, 3)); - } - - /** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functionsIn - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ - function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); - } - - /** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functions - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ - function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); - } - - /** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is used in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ - function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; - } - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasPath(object, path, baseHas); - } - - /** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); - } - - /** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ - var invert = createInverter(function(result, value, key) { - result[value] = key; - }, constant(identity)); - - /** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ - var invertBy = createInverter(function(result, value, key) { - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - }, getIteratee); - - /** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ - var invoke = rest(baseInvoke); - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys(object) { - var isProto = isPrototype(object); - if (!(isProto || isArrayLike(object))) { - return baseKeys(object); - } - var indexes = indexKeys(object), - skipIndexes = !!indexes, - result = indexes || [], - length = result.length; - - for (var key in object) { - if (baseHas(object, key) && - !(skipIndexes && (key == 'length' || isIndex(key, length))) && - !(isProto && key == 'constructor')) { - result.push(key); - } - } - return result; - } - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - var index = -1, - isProto = isPrototype(object), - props = baseKeysIn(object), - propsLength = props.length, - indexes = indexKeys(object), - skipIndexes = !!indexes, - result = indexes || [], - length = result.length; - - while (++index < propsLength) { - var key = props[index]; - if (!(skipIndexes && (key == 'length' || isIndex(key, length))) && - !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } - - /** - * The opposite of `_.mapValues`; this method creates an object with the - * same values as `object` and keys generated by running each own enumerable - * string keyed property of `object` thru `iteratee`. The iteratee is invoked - * with three arguments: (value, key, object). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapValues - * @example - * - * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { - * return key + value; - * }); - * // => { 'a1': 1, 'b2': 2 } - */ - function mapKeys(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - result[iteratee(value, key, object)] = value; - }); - return result; - } - - /** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Array|Function|Object|string} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ - function mapValues(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - result[key] = iteratee(value, key, object); - }); - return result; - } - - /** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var users = { - * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }] - * }; - * - * var ages = { - * 'data': [{ 'age': 36 }, { 'age': 40 }] - * }; - * - * _.merge(users, ages); - * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } - */ - var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); - - /** - * This method is like `_.merge` except that it accepts `customizer` which - * is invoked to produce the merged values of the destination and source - * properties. If `customizer` returns `undefined`, merging is handled by the - * method instead. The `customizer` is invoked with seven arguments: - * (objValue, srcValue, key, object, source, stack). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * if (_.isArray(objValue)) { - * return objValue.concat(srcValue); - * } - * } - * - * var object = { - * 'fruits': ['apple'], - * 'vegetables': ['beet'] - * }; - * - * var other = { - * 'fruits': ['banana'], - * 'vegetables': ['carrot'] - * }; - * - * _.mergeWith(object, other, customizer); - * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] } - */ - var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { - baseMerge(object, source, srcIndex, customizer); - }); - - /** - * The opposite of `_.pick`; this method creates an object composed of the - * own and inherited enumerable string keyed properties of `object` that are - * not omitted. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to omit. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omit(object, ['a', 'c']); - * // => { 'b': '2' } - */ - var omit = rest(function(object, props) { - if (object == null) { - return {}; - } - props = arrayMap(baseFlatten(props, 1), toKey); - return basePick(object, baseDifference(getAllKeysIn(object), props)); - }); - - /** - * The opposite of `_.pickBy`; this method creates an object composed of - * the own and inherited enumerable string keyed properties of `object` that - * `predicate` doesn't return truthy for. The predicate is invoked with two - * arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omitBy(object, _.isNumber); - * // => { 'b': '2' } - */ - function omitBy(object, predicate) { - predicate = getIteratee(predicate); - return basePickBy(object, function(value, key) { - return !predicate(value, key); - }); - } - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = rest(function(object, props) { - return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey)); - }); - - /** - * Creates an object composed of the `object` properties `predicate` returns - * truthy for. The predicate is invoked with two arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Array|Function|Object|string} [predicate=_.identity] - * The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pickBy(object, _.isNumber); - * // => { 'a': 1, 'c': 3 } - */ - function pickBy(object, predicate) { - return object == null ? {} : basePickBy(object, getIteratee(predicate)); - } - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length; - - // Ensure the loop is entered when path is empty. - if (!length) { - object = undefined; - length = 1; - } - while (++index < length) { - var value = object == null ? undefined : object[toKey(path[index])]; - if (value === undefined) { - index = length; - value = defaultValue; - } - object = isFunction(value) ? value.call(object) : value; - } - return object; - } - - /** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 - */ - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); - } - - /** - * This method is like `_.set` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.setWith(object, '[0][1]', 'a', Object); - * // => { '0': { '1': 'a' } } - */ - function setWith(object, path, value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseSet(object, path, value, customizer); - } - - /** - * Creates an array of own enumerable string keyed-value pairs for `object` - * which can be consumed by `_.fromPairs`. If `object` is a map or set, its - * entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entries - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairs(new Foo); - * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) - */ - var toPairs = createToPairs(keys); - - /** - * Creates an array of own and inherited enumerable string keyed-value pairs - * for `object` which can be consumed by `_.fromPairs`. If `object` is a map - * or set, its entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entriesIn - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairsIn(new Foo); - * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) - */ - var toPairsIn = createToPairs(keysIn); - - /** - * An alternative to `_.reduce`; this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own - * enumerable string keyed properties thru `iteratee`, with each invocation - * potentially mutating the `accumulator` object. If `accumulator` is not - * provided, a new object with the same `[[Prototype]]` will be used. The - * iteratee is invoked with four arguments: (accumulator, value, key, object). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @returns {*} Returns the accumulated value. - * @example - * - * _.transform([2, 3, 4], function(result, n) { - * result.push(n *= n); - * return n % 2 == 0; - * }, []); - * // => [4, 9] - * - * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } - */ - function transform(object, iteratee, accumulator) { - var isArr = isArray(object) || isTypedArray(object); - iteratee = getIteratee(iteratee, 4); - - if (accumulator == null) { - if (isArr || isObject(object)) { - var Ctor = object.constructor; - if (isArr) { - accumulator = isArray(object) ? new Ctor : []; - } else { - accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; - } - } else { - accumulator = {}; - } - } - (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) { - return iteratee(accumulator, value, index, object); - }); - return accumulator; - } - - /** - * Removes the property at `path` of `object`. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 7 } }] }; - * _.unset(object, 'a[0].b.c'); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - * - * _.unset(object, ['a', '0', 'b', 'c']); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - */ - function unset(object, path) { - return object == null ? true : baseUnset(object, path); - } - - /** - * This method is like `_.set` except that accepts `updater` to produce the - * value to set. Use `_.updateWith` to customize `path` creation. The `updater` - * is invoked with one argument: (value). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.update(object, 'a[0].b.c', function(n) { return n * n; }); - * console.log(object.a[0].b.c); - * // => 9 - * - * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); - * console.log(object.x[0].y.z); - * // => 0 - */ - function update(object, path, updater) { - return object == null ? object : baseUpdate(object, path, castFunction(updater)); - } - - /** - * This method is like `_.update` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.updateWith(object, '[0][1]', _.constant('a'), Object); - * // => { '0': { '1': 'a' } } - */ - function updateWith(object, path, updater, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object ? baseValues(object, keys(object)) : []; - } - - /** - * Creates an array of the own and inherited enumerable string keyed property - * values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.valuesIn(new Foo); - * // => [1, 2, 3] (iteration order is not guaranteed) - */ - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ - function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); - } - - /** - * Checks if `n` is between `start` and up to, but not including, `end`. If - * `end` is not specified, it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @since 3.3.0 - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @see _.range, _.rangeRight - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ - function inRange(number, start, end) { - start = toNumber(start) || 0; - if (end === undefined) { - end = start; - start = 0; - } else { - end = toNumber(end) || 0; - } - number = toNumber(number); - return baseInRange(number, start, end); - } - - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toNumber(lower) || 0; - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toNumber(upper) || 0; - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ - var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); - }); - - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } - - /** - * Deburrs `string` by converting - * [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * to basic latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ - function deburr(string) { - string = toString(string); - return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); - } - - /** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to search. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search up to. - * @returns {boolean} Returns `true` if `string` ends with `target`, - * else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ - function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); - - var length = string.length; - position = position === undefined - ? length - : baseClamp(toInteger(position), 0, length); - - position -= target.length; - return position >= 0 && string.indexOf(target, position) == position; - } - - /** - * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to - * their corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * Backticks are escaped because in IE < 9, they can break out of - * attribute values or HTML comments. See [#59](https://html5sec.org/#59), - * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and - * [#133](https://html5sec.org/#133) of the - * [HTML5 Security Cheatsheet](https://html5sec.org/) for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ - function escapeRegExp(string) { - string = toString(string); - return (string && reHasRegExpChar.test(string)) - ? string.replace(reRegExpChar, '\\$&') - : string; - } - - /** - * Converts `string` to - * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__FOO_BAR__'); - * // => 'foo-bar' - */ - var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); - }); - - /** - * Converts `string`, as space separated words, to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the lower cased string. - * @example - * - * _.lowerCase('--Foo-Bar--'); - * // => 'foo bar' - * - * _.lowerCase('fooBar'); - * // => 'foo bar' - * - * _.lowerCase('__FOO_BAR__'); - * // => 'foo bar' - */ - var lowerCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + word.toLowerCase(); - }); - - /** - * Converts the first character of `string` to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.lowerFirst('Fred'); - * // => 'fred' - * - * _.lowerFirst('FRED'); - * // => 'fRED' - */ - var lowerFirst = createCaseFirst('toLowerCase'); - - /** - * Pads `string` on the left and right sides if it's shorter than `length`. - * Padding characters are truncated if they can't be evenly divided by `length`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.pad('abc', 8); - * // => ' abc ' - * - * _.pad('abc', 8, '_-'); - * // => '_-abc_-_' - * - * _.pad('abc', 3); - * // => 'abc' - */ - function pad(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - if (!length || strLength >= length) { - return string; - } - var mid = (length - strLength) / 2; - return ( - createPadding(nativeFloor(mid), chars) + - string + - createPadding(nativeCeil(mid), chars) - ); - } - - /** - * Pads `string` on the right side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padEnd('abc', 6); - * // => 'abc ' - * - * _.padEnd('abc', 6, '_-'); - * // => 'abc_-_' - * - * _.padEnd('abc', 3); - * // => 'abc' - */ - function padEnd(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (string + createPadding(length - strLength, chars)) - : string; - } - - /** - * Pads `string` on the left side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padStart('abc', 6); - * // => ' abc' - * - * _.padStart('abc', 6, '_-'); - * // => '_-_abc' - * - * _.padStart('abc', 3); - * // => 'abc' - */ - function padStart(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (createPadding(length - strLength, chars) + string) - : string; - } - - /** - * Converts `string` to an integer of the specified radix. If `radix` is - * `undefined` or `0`, a `radix` of `10` is used unless `value` is a - * hexadecimal, in which case a `radix` of `16` is used. - * - * **Note:** This method aligns with the - * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category String - * @param {string} string The string to convert. - * @param {number} [radix=10] The radix to interpret `value` by. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {number} Returns the converted integer. - * @example - * - * _.parseInt('08'); - * // => 8 - * - * _.map(['6', '08', '10'], _.parseInt); - * // => [6, 8, 10] - */ - function parseInt(string, radix, guard) { - // Chrome fails to trim leading whitespace characters. - // See https://bugs.chromium.org/p/v8/issues/detail?id=3109 for more details. - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - string = toString(string).replace(reTrim, ''); - return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10)); - } - - /** - * Repeats the given string `n` times. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to repeat. - * @param {number} [n=1] The number of times to repeat the string. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {string} Returns the repeated string. - * @example - * - * _.repeat('*', 3); - * // => '***' - * - * _.repeat('abc', 2); - * // => 'abcabc' - * - * _.repeat('abc', 0); - * // => '' - */ - function repeat(string, n, guard) { - if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - return baseRepeat(toString(string), n); - } - - /** - * Replaces matches for `pattern` in `string` with `replacement`. - * - * **Note:** This method is based on - * [`String#replace`](https://mdn.io/String/replace). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to modify. - * @param {RegExp|string} pattern The pattern to replace. - * @param {Function|string} replacement The match replacement. - * @returns {string} Returns the modified string. - * @example - * - * _.replace('Hi Fred', 'Fred', 'Barney'); - * // => 'Hi Barney' - */ - function replace() { - var args = arguments, - string = toString(args[0]); - - return args.length < 3 ? string : nativeReplace.call(string, args[1], args[2]); - } - - /** - * Converts `string` to - * [snake case](https://en.wikipedia.org/wiki/Snake_case). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the snake cased string. - * @example - * - * _.snakeCase('Foo Bar'); - * // => 'foo_bar' - * - * _.snakeCase('fooBar'); - * // => 'foo_bar' - * - * _.snakeCase('--FOO-BAR--'); - * // => 'foo_bar' - */ - var snakeCase = createCompounder(function(result, word, index) { - return result + (index ? '_' : '') + word.toLowerCase(); - }); - - /** - * Splits `string` by `separator`. - * - * **Note:** This method is based on - * [`String#split`](https://mdn.io/String/split). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to split. - * @param {RegExp|string} separator The separator pattern to split by. - * @param {number} [limit] The length to truncate results to. - * @returns {Array} Returns the string segments. - * @example - * - * _.split('a-b-c', '-', 2); - * // => ['a', 'b'] - */ - function split(string, separator, limit) { - if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { - separator = limit = undefined; - } - limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; - if (!limit) { - return []; - } - string = toString(string); - if (string && ( - typeof separator == 'string' || - (separator != null && !isRegExp(separator)) - )) { - separator = baseToString(separator); - if (separator == '' && reHasComplexSymbol.test(string)) { - return castSlice(stringToArray(string), 0, limit); - } - } - return nativeSplit.call(string, separator, limit); - } - - /** - * Converts `string` to - * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). - * - * @static - * @memberOf _ - * @since 3.1.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the start cased string. - * @example - * - * _.startCase('--foo-bar--'); - * // => 'Foo Bar' - * - * _.startCase('fooBar'); - * // => 'Foo Bar' - * - * _.startCase('__FOO_BAR__'); - * // => 'FOO BAR' - */ - var startCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + upperFirst(word); - }); - - /** - * Checks if `string` starts with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to search. - * @param {string} [target] The string to search for. - * @param {number} [position=0] The position to search from. - * @returns {boolean} Returns `true` if `string` starts with `target`, - * else `false`. - * @example - * - * _.startsWith('abc', 'a'); - * // => true - * - * _.startsWith('abc', 'b'); - * // => false - * - * _.startsWith('abc', 'b', 1); - * // => true - */ - function startsWith(string, target, position) { - string = toString(string); - position = baseClamp(toInteger(position), 0, string.length); - return string.lastIndexOf(baseToString(target), position) == position; - } - - /** - * Creates a compiled template function that can interpolate data properties - * in "interpolate" delimiters, HTML-escape interpolated data properties in - * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data - * properties may be accessed as free variables in the template. If a setting - * object is given, it takes precedence over `_.templateSettings` values. - * - * **Note:** In the development build `_.template` utilizes - * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) - * for easier debugging. - * - * For more information on precompiling templates see - * [lodash's custom builds documentation](https://lodash.com/custom-builds). - * - * For more information on Chrome extension sandboxes see - * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The template string. - * @param {Object} [options={}] The options object. - * @param {RegExp} [options.escape=_.templateSettings.escape] - * The HTML "escape" delimiter. - * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] - * The "evaluate" delimiter. - * @param {Object} [options.imports=_.templateSettings.imports] - * An object to import into the template as free variables. - * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] - * The "interpolate" delimiter. - * @param {string} [options.sourceURL='lodash.templateSources[n]'] - * The sourceURL of the compiled template. - * @param {string} [options.variable='obj'] - * The data object variable name. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the compiled template function. - * @example - * - * // Use the "interpolate" delimiter to create a compiled template. - * var compiled = _.template('hello <%= user %>!'); - * compiled({ 'user': 'fred' }); - * // => 'hello fred!' - * - * // Use the HTML "escape" delimiter to escape data property values. - * var compiled = _.template('<%- value %>'); - * compiled({ 'value': ' - -``` - -## Documentation - -Some functions are also available in the following forms: -* `Series` - the same as `` but runs only a single async operation at a time -* `Limit` - the same as `` but runs a maximum of `limit` async operations at a time - -### Collections - -* [`each`](#each), `eachSeries`, `eachLimit` -* [`forEachOf`](#forEachOf), `forEachOfSeries`, `forEachOfLimit` -* [`map`](#map), `mapSeries`, `mapLimit` -* [`filter`](#filter), `filterSeries`, `filterLimit` -* [`reject`](#reject), `rejectSeries`, `rejectLimit` -* [`reduce`](#reduce), [`reduceRight`](#reduceRight) -* [`detect`](#detect), `detectSeries`, `detectLimit` -* [`sortBy`](#sortBy) -* [`some`](#some), `someLimit` -* [`every`](#every), `everyLimit` -* [`concat`](#concat), `concatSeries` - -### Control Flow - -* [`series`](#seriestasks-callback) -* [`parallel`](#parallel), `parallelLimit` -* [`whilst`](#whilst), [`doWhilst`](#doWhilst) -* [`until`](#until), [`doUntil`](#doUntil) -* [`during`](#during), [`doDuring`](#doDuring) -* [`forever`](#forever) -* [`waterfall`](#waterfall) -* [`compose`](#compose) -* [`seq`](#seq) -* [`applyEach`](#applyEach), `applyEachSeries` -* [`queue`](#queue), [`priorityQueue`](#priorityQueue) -* [`cargo`](#cargo) -* [`auto`](#auto) -* [`retry`](#retry) -* [`iterator`](#iterator) -* [`times`](#times), `timesSeries`, `timesLimit` - -### Utils - -* [`apply`](#apply) -* [`nextTick`](#nextTick) -* [`memoize`](#memoize) -* [`unmemoize`](#unmemoize) -* [`ensureAsync`](#ensureAsync) -* [`constant`](#constant) -* [`asyncify`](#asyncify) -* [`wrapSync`](#wrapSync) -* [`log`](#log) -* [`dir`](#dir) -* [`noConflict`](#noConflict) - -## Collections - - - -### each(arr, iterator, [callback]) - -Applies the function `iterator` to each item in `arr`, in parallel. -The `iterator` is called with an item from the list, and a callback for when it -has finished. If the `iterator` passes an error to its `callback`, the main -`callback` (for the `each` function) is immediately called with the error. - -Note, that since this function applies `iterator` to each item in parallel, -there is no guarantee that the iterator functions will complete in order. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err)` which must be called once it has - completed. If no error has occurred, the `callback` should be run without - arguments or with an explicit `null` argument. The array index is not passed - to the iterator. If you need the index, use [`forEachOf`](#forEachOf). -* `callback(err)` - *Optional* A callback which is called when all `iterator` functions - have finished, or an error occurs. - -__Examples__ - - -```js -// assuming openFiles is an array of file names and saveFile is a function -// to save the modified contents of that file: - -async.each(openFiles, saveFile, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - -```js -// assuming openFiles is an array of file names - -async.each(openFiles, function(file, callback) { - - // Perform operation on file here. - console.log('Processing file ' + file); - - if( file.length > 32 ) { - console.log('This file name is too long'); - callback('File name too long'); - } else { - // Do work to process file here - console.log('File processed'); - callback(); - } -}, function(err){ - // if any of the file processing produced an error, err would equal that error - if( err ) { - // One of the iterations produced an error. - // All processing will now stop. - console.log('A file failed to process'); - } else { - console.log('All files have been processed successfully'); - } -}); -``` - -__Related__ - -* eachSeries(arr, iterator, [callback]) -* eachLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - - - -### forEachOf(obj, iterator, [callback]) - -Like `each`, except that it iterates over objects, and passes the key as the second argument to the iterator. - -__Arguments__ - -* `obj` - An object or array to iterate over. -* `iterator(item, key, callback)` - A function to apply to each item in `obj`. -The `key` is the item's key, or index in the case of an array. The iterator is -passed a `callback(err)` which must be called once it has completed. If no -error has occurred, the callback should be run without arguments or with an -explicit `null` argument. -* `callback(err)` - *Optional* A callback which is called when all `iterator` functions have finished, or an error occurs. - -__Example__ - -```js -var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; -var configs = {}; - -async.forEachOf(obj, function (value, key, callback) { - fs.readFile(__dirname + value, "utf8", function (err, data) { - if (err) return callback(err); - try { - configs[key] = JSON.parse(data); - } catch (e) { - return callback(e); - } - callback(); - }) -}, function (err) { - if (err) console.error(err.message); - // configs is now a map of JSON data - doSomethingWith(configs); -}) -``` - -__Related__ - -* forEachOfSeries(obj, iterator, [callback]) -* forEachOfLimit(obj, limit, iterator, [callback]) - ---------------------------------------- - - -### map(arr, iterator, [callback]) - -Produces a new array of values by mapping each value in `arr` through -the `iterator` function. The `iterator` is called with an item from `arr` and a -callback for when it has finished processing. Each of these callback takes 2 arguments: -an `error`, and the transformed item from `arr`. If `iterator` passes an error to its -callback, the main `callback` (for the `map` function) is immediately called with the error. - -Note, that since this function applies the `iterator` to each item in parallel, -there is no guarantee that the `iterator` functions will complete in order. -However, the results array will be in the same order as the original `arr`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, transformed)` which must be called once - it has completed with an error (which can be `null`) and a transformed item. -* `callback(err, results)` - *Optional* A callback which is called when all `iterator` - functions have finished, or an error occurs. Results is an array of the - transformed items from the `arr`. - -__Example__ - -```js -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - -__Related__ -* mapSeries(arr, iterator, [callback]) -* mapLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - - -### filter(arr, iterator, [callback]) - -__Alias:__ `select` - -Returns a new array of all the values in `arr` which pass an async truth test. -_The callback for each `iterator` call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. This operation is -performed in parallel, but the results array will be in the same order as the -original. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in `arr`. - The `iterator` is passed a `callback(truthValue)`, which must be called with a - boolean argument once it has completed. -* `callback(results)` - *Optional* A callback which is called after all the `iterator` - functions have finished. - -__Example__ - -```js -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); -``` - -__Related__ - -* filterSeries(arr, iterator, [callback]) -* filterLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### reject(arr, iterator, [callback]) - -The opposite of [`filter`](#filter). Removes values that pass an `async` truth test. - -__Related__ - -* rejectSeries(arr, iterator, [callback]) -* rejectLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### reduce(arr, memo, iterator, [callback]) - -__Aliases:__ `inject`, `foldl` - -Reduces `arr` into a single value using an async `iterator` to return -each successive step. `memo` is the initial state of the reduction. -This function only operates in series. - -For performance reasons, it may make sense to split a call to this function into -a parallel map, and then use the normal `Array.prototype.reduce` on the results. -This function is for situations where each step in the reduction needs to be async; -if you can get the data before reducing it, then it's probably a good idea to do so. - -__Arguments__ - -* `arr` - An array to iterate over. -* `memo` - The initial state of the reduction. -* `iterator(memo, item, callback)` - A function applied to each item in the - array to produce the next step in the reduction. The `iterator` is passed a - `callback(err, reduction)` which accepts an optional error as its first - argument, and the state of the reduction as the second. If an error is - passed to the callback, the reduction is stopped and the main `callback` is - immediately called with the error. -* `callback(err, result)` - *Optional* A callback which is called after all the `iterator` - functions have finished. Result is the reduced value. - -__Example__ - -```js -async.reduce([1,2,3], 0, function(memo, item, callback){ - // pointless async: - process.nextTick(function(){ - callback(null, memo + item) - }); -}, function(err, result){ - // result is now equal to the last value of memo, which is 6 -}); -``` - ---------------------------------------- - - -### reduceRight(arr, memo, iterator, [callback]) - -__Alias:__ `foldr` - -Same as [`reduce`](#reduce), only operates on `arr` in reverse order. - - ---------------------------------------- - - -### detect(arr, iterator, [callback]) - -Returns the first value in `arr` that passes an async truth test. The -`iterator` is applied in parallel, meaning the first iterator to return `true` will -fire the detect `callback` with that result. That means the result might not be -the first item in the original `arr` (in terms of order) that passes the test. - -If order within the original `arr` is important, then look at [`detectSeries`](#detectSeries). - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in `arr`. - The iterator is passed a `callback(truthValue)` which must be called with a - boolean argument once it has completed. **Note: this callback does not take an error as its first argument.** -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `true`, or after all the `iterator` functions have finished. Result will be - the first item in the array that passes the truth test (iterator) or the - value `undefined` if none passed. **Note: this callback does not take an error as its first argument.** - -__Example__ - -```js -async.detect(['file1','file2','file3'], fs.exists, function(result){ - // result now equals the first file in the list that exists -}); -``` - -__Related__ - -* detectSeries(arr, iterator, [callback]) -* detectLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### sortBy(arr, iterator, [callback]) - -Sorts a list by the results of running each `arr` value through an async `iterator`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, sortValue)` which must be called once it - has completed with an error (which can be `null`) and a value to use as the sort - criteria. -* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` - functions have finished, or an error occurs. Results is the items from - the original `arr` sorted by the values returned by the `iterator` calls. - -__Example__ - -```js -async.sortBy(['file1','file2','file3'], function(file, callback){ - fs.stat(file, function(err, stats){ - callback(err, stats.mtime); - }); -}, function(err, results){ - // results is now the original array of files sorted by - // modified date -}); -``` - -__Sort Order__ - -By modifying the callback parameter the sorting order can be influenced: - -```js -//ascending order -async.sortBy([1,9,3,5], function(x, callback){ - callback(null, x); -}, function(err,result){ - //result callback -} ); - -//descending order -async.sortBy([1,9,3,5], function(x, callback){ - callback(null, x*-1); //<- x*-1 instead of x, turns the order around -}, function(err,result){ - //result callback -} ); -``` - ---------------------------------------- - - -### some(arr, iterator, [callback]) - -__Alias:__ `any` - -Returns `true` if at least one element in the `arr` satisfies an async test. -_The callback for each iterator call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. Once any iterator -call returns `true`, the main `callback` is immediately called. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in the array - in parallel. The iterator is passed a `callback(truthValue)`` which must be - called with a boolean argument once it has completed. -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `true`, or after all the iterator functions have finished. Result will be - either `true` or `false` depending on the values of the async tests. - - **Note: the callbacks do not take an error as their first argument.** -__Example__ - -```js -async.some(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then at least one of the files exists -}); -``` - -__Related__ - -* someLimit(arr, limit, iterator, callback) - ---------------------------------------- - - -### every(arr, iterator, [callback]) - -__Alias:__ `all` - -Returns `true` if every element in `arr` satisfies an async test. -_The callback for each `iterator` call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in the array - in parallel. The iterator is passed a `callback(truthValue)` which must be - called with a boolean argument once it has completed. -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `false`, or after all the iterator functions have finished. Result will be - either `true` or `false` depending on the values of the async tests. - - **Note: the callbacks do not take an error as their first argument.** - -__Example__ - -```js -async.every(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then every file exists -}); -``` - -__Related__ - -* everyLimit(arr, limit, iterator, callback) - ---------------------------------------- - - -### concat(arr, iterator, [callback]) - -Applies `iterator` to each item in `arr`, concatenating the results. Returns the -concatenated list. The `iterator`s are called in parallel, and the results are -concatenated as they return. There is no guarantee that the results array will -be returned in the original order of `arr` passed to the `iterator` function. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, results)` which must be called once it - has completed with an error (which can be `null`) and an array of results. -* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` - functions have finished, or an error occurs. Results is an array containing - the concatenated results of the `iterator` function. - -__Example__ - -```js -async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ - // files is now a list of filenames that exist in the 3 directories -}); -``` - -__Related__ - -* concatSeries(arr, iterator, [callback]) - - -## Control Flow - - -### series(tasks, [callback]) - -Run the functions in the `tasks` array in series, each one running once the previous -function has completed. If any functions in the series pass an error to its -callback, no more functions are run, and `callback` is immediately called with the value of the error. -Otherwise, `callback` receives an array of results when `tasks` have completed. - -It is also possible to use an object instead of an array. Each property will be -run as a function, and the results will be passed to the final `callback` as an object -instead of an array. This can be a more readable way of handling results from -[`series`](#series). - -**Note** that while many implementations preserve the order of object properties, the -[ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) -explicitly states that - -> The mechanics and order of enumerating the properties is not specified. - -So if you rely on the order in which your series of functions are executed, and want -this to work on all platforms, consider using an array. - -__Arguments__ - -* `tasks` - An array or object containing functions to run, each function is passed - a `callback(err, result)` it must call on completion with an error `err` (which can - be `null`) and an optional `result` value. -* `callback(err, results)` - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the `task` callbacks. - -__Example__ - -```js -async.series([ - function(callback){ - // do some stuff ... - callback(null, 'one'); - }, - function(callback){ - // do some more stuff ... - callback(null, 'two'); - } -], -// optional callback -function(err, results){ - // results is now equal to ['one', 'two'] -}); - - -// an example using an object instead of an array -async.series({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equal to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - - -### parallel(tasks, [callback]) - -Run the `tasks` array of functions in parallel, without waiting until the previous -function has completed. If any of the functions pass an error to its -callback, the main `callback` is immediately called with the value of the error. -Once the `tasks` have completed, the results are passed to the final `callback` as an -array. - -**Note:** `parallel` is about kicking-off I/O tasks in parallel, not about parallel execution of code. If your tasks do not use any timers or perform any I/O, they will actually be executed in series. Any synchronous setup sections for each task will happen one after the other. JavaScript remains single-threaded. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final `callback` as an object -instead of an array. This can be a more readable way of handling results from -[`parallel`](#parallel). - - -__Arguments__ - -* `tasks` - An array or object containing functions to run. Each function is passed - a `callback(err, result)` which it must call on completion with an error `err` - (which can be `null`) and an optional `result` value. -* `callback(err, results)` - An optional callback to run once all the functions - have completed successfully. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```js -async.parallel([ - function(callback){ - setTimeout(function(){ - callback(null, 'one'); - }, 200); - }, - function(callback){ - setTimeout(function(){ - callback(null, 'two'); - }, 100); - } -], -// optional callback -function(err, results){ - // the results array will equal ['one','two'] even though - // the second function had a shorter timeout. -}); - - -// an example using an object instead of an array -async.parallel({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equals to: {one: 1, two: 2} -}); -``` - -__Related__ - -* parallelLimit(tasks, limit, [callback]) - ---------------------------------------- - - -### whilst(test, fn, callback) - -Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped, -or an error occurs. - -__Arguments__ - -* `test()` - synchronous truth test to perform before each execution of `fn`. -* `fn(callback)` - A function which is called each time `test` passes. The function is - passed a `callback(err)`, which must be called once it has completed with an - optional `err` argument. -* `callback(err, [results])` - A callback which is called after the test - function has failed and repeated execution of `fn` has stopped. `callback` - will be passed an error and any arguments passed to the final `fn`'s callback. - -__Example__ - -```js -var count = 0; - -async.whilst( - function () { return count < 5; }, - function (callback) { - count++; - setTimeout(function () { - callback(null, count); - }, 1000); - }, - function (err, n) { - // 5 seconds have passed, n = 5 - } -); -``` - ---------------------------------------- - - -### doWhilst(fn, test, callback) - -The post-check version of [`whilst`](#whilst). To reflect the difference in -the order of operations, the arguments `test` and `fn` are switched. - -`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. - ---------------------------------------- - - -### until(test, fn, callback) - -Repeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped, -or an error occurs. `callback` will be passed an error and any arguments passed -to the final `fn`'s callback. - -The inverse of [`whilst`](#whilst). - ---------------------------------------- - - -### doUntil(fn, test, callback) - -Like [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`. - ---------------------------------------- - - -### during(test, fn, callback) - -Like [`whilst`](#whilst), except the `test` is an asynchronous function that is passed a callback in the form of `function (err, truth)`. If error is passed to `test` or `fn`, the main callback is immediately called with the value of the error. - -__Example__ - -```js -var count = 0; - -async.during( - function (callback) { - return callback(null, count < 5); - }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - // 5 seconds have passed - } -); -``` - ---------------------------------------- - - -### doDuring(fn, test, callback) - -The post-check version of [`during`](#during). To reflect the difference in -the order of operations, the arguments `test` and `fn` are switched. - -Also a version of [`doWhilst`](#doWhilst) with asynchronous `test` function. - ---------------------------------------- - - -### forever(fn, [errback]) - -Calls the asynchronous function `fn` with a callback parameter that allows it to -call itself again, in series, indefinitely. - -If an error is passed to the callback then `errback` is called with the -error, and execution stops, otherwise it will never be called. - -```js -async.forever( - function(next) { - // next is suitable for passing to things that need a callback(err [, whatever]); - // it will result in this function being called again. - }, - function(err) { - // if next is called with a value in its first parameter, it will appear - // in here as 'err', and execution will stop. - } -); -``` - ---------------------------------------- - - -### waterfall(tasks, [callback]) - -Runs the `tasks` array of functions in series, each passing their results to the next in -the array. However, if any of the `tasks` pass an error to their own callback, the -next function is not executed, and the main `callback` is immediately called with -the error. - -__Arguments__ - -* `tasks` - An array of functions to run, each function is passed a - `callback(err, result1, result2, ...)` it must call on completion. The first - argument is an error (which can be `null`) and any further arguments will be - passed as arguments in order to the next task. -* `callback(err, [results])` - An optional callback to run once all the functions - have completed. This will be passed the results of the last task's callback. - - - -__Example__ - -```js -async.waterfall([ - function(callback) { - callback(null, 'one', 'two'); - }, - function(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); - }, - function(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); - } -], function (err, result) { - // result now equals 'done' -}); -``` -Or, with named functions: - -```js -async.waterfall([ - myFirstFunction, - mySecondFunction, - myLastFunction, -], function (err, result) { - // result now equals 'done' -}); -function myFirstFunction(callback) { - callback(null, 'one', 'two'); -} -function mySecondFunction(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); -} -function myLastFunction(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); -} -``` - -Or, if you need to pass any argument to the first function: - -```js -async.waterfall([ - async.apply(myFirstFunction, 'zero'), - mySecondFunction, - myLastFunction, -], function (err, result) { - // result now equals 'done' -}); -function myFirstFunction(arg1, callback) { - // arg1 now equals 'zero' - callback(null, 'one', 'two'); -} -function mySecondFunction(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); -} -function myLastFunction(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); -} -``` - ---------------------------------------- - -### compose(fn1, fn2...) - -Creates a function which is a composition of the passed asynchronous -functions. Each function consumes the return value of the function that -follows. Composing functions `f()`, `g()`, and `h()` would produce the result of -`f(g(h()))`, only this version uses callbacks to obtain the return values. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* `functions...` - the asynchronous functions to compose - - -__Example__ - -```js -function add1(n, callback) { - setTimeout(function () { - callback(null, n + 1); - }, 10); -} - -function mul3(n, callback) { - setTimeout(function () { - callback(null, n * 3); - }, 10); -} - -var add1mul3 = async.compose(mul3, add1); - -add1mul3(4, function (err, result) { - // result now equals 15 -}); -``` - ---------------------------------------- - -### seq(fn1, fn2...) - -Version of the compose function that is more natural to read. -Each function consumes the return value of the previous function. -It is the equivalent of [`compose`](#compose) with the arguments reversed. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* `functions...` - the asynchronous functions to compose - - -__Example__ - -```js -// Requires lodash (or underscore), express3 and dresende's orm2. -// Part of an app, that fetches cats of the logged user. -// This example uses `seq` function to avoid overnesting and error -// handling clutter. -app.get('/cats', function(request, response) { - var User = request.models.User; - async.seq( - _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data)) - function(user, fn) { - user.getCats(fn); // 'getCats' has signature (callback(err, data)) - } - )(req.session.user_id, function (err, cats) { - if (err) { - console.error(err); - response.json({ status: 'error', message: err.message }); - } else { - response.json({ status: 'ok', message: 'Cats found', data: cats }); - } - }); -}); -``` - ---------------------------------------- - -### applyEach(fns, args..., callback) - -Applies the provided arguments to each function in the array, calling -`callback` after all functions have completed. If you only provide the first -argument, then it will return a function which lets you pass in the -arguments as if it were a single function call. - -__Arguments__ - -* `fns` - the asynchronous functions to all call with the same arguments -* `args...` - any number of separate arguments to pass to the function -* `callback` - the final argument should be the callback, called when all - functions have completed processing - - -__Example__ - -```js -async.applyEach([enableSearch, updateSchema], 'bucket', callback); - -// partial application example: -async.each( - buckets, - async.applyEach([enableSearch, updateSchema]), - callback -); -``` - -__Related__ - -* applyEachSeries(tasks, args..., [callback]) - ---------------------------------------- - - -### queue(worker, [concurrency]) - -Creates a `queue` object with the specified `concurrency`. Tasks added to the -`queue` are processed in parallel (up to the `concurrency` limit). If all -`worker`s are in progress, the task is queued until one becomes available. -Once a `worker` completes a `task`, that `task`'s callback is called. - -__Arguments__ - -* `worker(task, callback)` - An asynchronous function for processing a queued - task, which must call its `callback(err)` argument when finished, with an - optional `error` as an argument. If you want to handle errors from an individual task, pass a callback to `q.push()`. -* `concurrency` - An `integer` for determining how many `worker` functions should be - run in parallel. If omitted, the concurrency defaults to `1`. If the concurrency is `0`, an error is thrown. - -__Queue objects__ - -The `queue` object returned by this function has the following properties and -methods: - -* `length()` - a function returning the number of items waiting to be processed. -* `started` - a function returning whether or not any items have been pushed and processed by the queue -* `running()` - a function returning the number of items currently being processed. -* `workersList()` - a function returning the array of items currently being processed. -* `idle()` - a function returning false if there are items waiting or being processed, or true if not. -* `concurrency` - an integer for determining how many `worker` functions should be - run in parallel. This property can be changed after a `queue` is created to - alter the concurrency on-the-fly. -* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once - the `worker` has finished processing the task. Instead of a single task, a `tasks` array - can be submitted. The respective callback is used for every task in the list. -* `unshift(task, [callback])` - add a new task to the front of the `queue`. -* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit, - and further tasks will be queued. -* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`. -* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`. -* `paused` - a boolean for determining whether the queue is in a paused state -* `pause()` - a function that pauses the processing of tasks until `resume()` is called. -* `resume()` - a function that resumes the processing of queued tasks when the queue is paused. -* `kill()` - a function that removes the `drain` callback and empties remaining tasks from the queue forcing it to go idle. - -__Example__ - -```js -// create a queue object with concurrency 2 - -var q = async.queue(function (task, callback) { - console.log('hello ' + task.name); - callback(); -}, 2); - - -// assign a callback -q.drain = function() { - console.log('all items have been processed'); -} - -// add some items to the queue - -q.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); -}); -q.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); - -// add some items to the queue (batch-wise) - -q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { - console.log('finished processing item'); -}); - -// add some items to the front of the queue - -q.unshift({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); -``` - - ---------------------------------------- - - -### priorityQueue(worker, concurrency) - -The same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects: - -* `push(task, priority, [callback])` - `priority` should be a number. If an array of - `tasks` is given, all tasks will be assigned the same priority. -* The `unshift` method was removed. - ---------------------------------------- - - -### cargo(worker, [payload]) - -Creates a `cargo` object with the specified payload. Tasks added to the -cargo will be processed altogether (up to the `payload` limit). If the -`worker` is in progress, the task is queued until it becomes available. Once -the `worker` has completed some tasks, each callback of those tasks is called. -Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) for how `cargo` and `queue` work. - -While [queue](#queue) passes only one task to one of a group of workers -at a time, cargo passes an array of tasks to a single worker, repeating -when the worker is finished. - -__Arguments__ - -* `worker(tasks, callback)` - An asynchronous function for processing an array of - queued tasks, which must call its `callback(err)` argument when finished, with - an optional `err` argument. -* `payload` - An optional `integer` for determining how many tasks should be - processed per round; if omitted, the default is unlimited. - -__Cargo objects__ - -The `cargo` object returned by this function has the following properties and -methods: - -* `length()` - A function returning the number of items waiting to be processed. -* `payload` - An `integer` for determining how many tasks should be - process per round. This property can be changed after a `cargo` is created to - alter the payload on-the-fly. -* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called - once the `worker` has finished processing the task. Instead of a single task, an array of `tasks` - can be submitted. The respective callback is used for every task in the list. -* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued. -* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`. -* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`. -* `idle()`, `pause()`, `resume()`, `kill()` - cargo inherits all of the same methods and event calbacks as [`queue`](#queue) - -__Example__ - -```js -// create a cargo object with payload 2 - -var cargo = async.cargo(function (tasks, callback) { - for(var i=0; i -### auto(tasks, [concurrency], [callback]) - -Determines the best order for running the functions in `tasks`, based on their requirements. Each function can optionally depend on other functions being completed first, and each function is run as soon as its requirements are satisfied. - -If any of the functions pass an error to their callback, the `auto` sequence will stop. Further tasks will not execute (so any other functions depending on it will not run), and the main `callback` is immediately called with the error. Functions also receive an object containing the results of functions which have completed so far. - -Note, all functions are called with a `results` object as a second argument, -so it is unsafe to pass functions in the `tasks` object which cannot handle the -extra argument. - -For example, this snippet of code: - -```js -async.auto({ - readData: async.apply(fs.readFile, 'data.txt', 'utf-8') -}, callback); -``` - -will have the effect of calling `readFile` with the results object as the last -argument, which will fail: - -```js -fs.readFile('data.txt', 'utf-8', cb, {}); -``` - -Instead, wrap the call to `readFile` in a function which does not forward the -`results` object: - -```js -async.auto({ - readData: function(cb, results){ - fs.readFile('data.txt', 'utf-8', cb); - } -}, callback); -``` - -__Arguments__ - -* `tasks` - An object. Each of its properties is either a function or an array of - requirements, with the function itself the last item in the array. The object's key - of a property serves as the name of the task defined by that property, - i.e. can be used when specifying requirements for other tasks. - The function receives two arguments: (1) a `callback(err, result)` which must be - called when finished, passing an `error` (which can be `null`) and the result of - the function's execution, and (2) a `results` object, containing the results of - the previously executed functions. -* `concurrency` - An optional `integer` for determining the maximum number of tasks that can be run in parallel. By default, as many as possible. -* `callback(err, results)` - An optional callback which is called when all the - tasks have been completed. It receives the `err` argument if any `tasks` - pass an error to their callback. Results are always returned; however, if - an error occurs, no further `tasks` will be performed, and the results - object will only contain partial results. - - -__Example__ - -```js -async.auto({ - get_data: function(callback){ - console.log('in get_data'); - // async code to get some data - callback(null, 'data', 'converted to array'); - }, - make_folder: function(callback){ - console.log('in make_folder'); - // async code to create a directory to store a file in - // this is run at the same time as getting the data - callback(null, 'folder'); - }, - write_file: ['get_data', 'make_folder', function(callback, results){ - console.log('in write_file', JSON.stringify(results)); - // once there is some data and the directory exists, - // write the data to a file in the directory - callback(null, 'filename'); - }], - email_link: ['write_file', function(callback, results){ - console.log('in email_link', JSON.stringify(results)); - // once the file is written let's email a link to it... - // results.write_file contains the filename returned by write_file. - callback(null, {'file':results.write_file, 'email':'user@example.com'}); - }] -}, function(err, results) { - console.log('err = ', err); - console.log('results = ', results); -}); -``` - -This is a fairly trivial example, but to do this using the basic parallel and -series functions would look like this: - -```js -async.parallel([ - function(callback){ - console.log('in get_data'); - // async code to get some data - callback(null, 'data', 'converted to array'); - }, - function(callback){ - console.log('in make_folder'); - // async code to create a directory to store a file in - // this is run at the same time as getting the data - callback(null, 'folder'); - } -], -function(err, results){ - async.series([ - function(callback){ - console.log('in write_file', JSON.stringify(results)); - // once there is some data and the directory exists, - // write the data to a file in the directory - results.push('filename'); - callback(null); - }, - function(callback){ - console.log('in email_link', JSON.stringify(results)); - // once the file is written let's email a link to it... - callback(null, {'file':results.pop(), 'email':'user@example.com'}); - } - ]); -}); -``` - -For a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding -new tasks much easier (and the code more readable). - - ---------------------------------------- - - -### retry([opts = {times: 5, interval: 0}| 5], task, [callback]) - -Attempts to get a successful response from `task` no more than `times` times before -returning an error. If the task is successful, the `callback` will be passed the result -of the successful task. If all attempts fail, the callback will be passed the error and -result (if any) of the final attempt. - -__Arguments__ - -* `opts` - Can be either an object with `times` and `interval` or a number. - * `times` - The number of attempts to make before giving up. The default is `5`. - * `interval` - The time to wait between retries, in milliseconds. The default is `0`. - * If `opts` is a number, the number specifies the number of times to retry, with the default interval of `0`. -* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)` - which must be called when finished, passing `err` (which can be `null`) and the `result` of - the function's execution, and (2) a `results` object, containing the results of - the previously executed functions (if nested inside another control flow). -* `callback(err, results)` - An optional callback which is called when the - task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`. - -The [`retry`](#retry) function can be used as a stand-alone control flow by passing a callback, as shown below: - -```js -// try calling apiMethod 3 times -async.retry(3, apiMethod, function(err, result) { - // do something with the result -}); -``` - -```js -// try calling apiMethod 3 times, waiting 200 ms between each retry -async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { - // do something with the result -}); -``` - -```js -// try calling apiMethod the default 5 times no delay between each retry -async.retry(apiMethod, function(err, result) { - // do something with the result -}); -``` - -It can also be embedded within other control flow functions to retry individual methods -that are not as reliable, like this: - -```js -async.auto({ - users: api.getUsers.bind(api), - payments: async.retry(3, api.getPayments.bind(api)) -}, function(err, results) { - // do something with the results -}); -``` - - ---------------------------------------- - - -### iterator(tasks) - -Creates an iterator function which calls the next function in the `tasks` array, -returning a continuation to call the next one after that. It's also possible to -“peek” at the next iterator with `iterator.next()`. - -This function is used internally by the `async` module, but can be useful when -you want to manually control the flow of functions in series. - -__Arguments__ - -* `tasks` - An array of functions to run. - -__Example__ - -```js -var iterator = async.iterator([ - function(){ sys.p('one'); }, - function(){ sys.p('two'); }, - function(){ sys.p('three'); } -]); - -node> var iterator2 = iterator(); -'one' -node> var iterator3 = iterator2(); -'two' -node> iterator3(); -'three' -node> var nextfn = iterator2.next(); -node> nextfn(); -'three' -``` - ---------------------------------------- - - -### apply(function, arguments..) - -Creates a continuation function with some arguments already applied. - -Useful as a shorthand when combined with other control flow functions. Any arguments -passed to the returned function are added to the arguments originally passed -to apply. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to automatically apply when the - continuation is called. - -__Example__ - -```js -// using apply - -async.parallel([ - async.apply(fs.writeFile, 'testfile1', 'test1'), - async.apply(fs.writeFile, 'testfile2', 'test2'), -]); - - -// the same process without using apply - -async.parallel([ - function(callback){ - fs.writeFile('testfile1', 'test1', callback); - }, - function(callback){ - fs.writeFile('testfile2', 'test2', callback); - } -]); -``` - -It's possible to pass any number of additional arguments when calling the -continuation: - -```js -node> var fn = async.apply(sys.puts, 'one'); -node> fn('two', 'three'); -one -two -three -``` - ---------------------------------------- - - -### nextTick(callback), setImmediate(callback) - -Calls `callback` on a later loop around the event loop. In Node.js this just -calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)` -if available, otherwise `setTimeout(callback, 0)`, which means other higher priority -events may precede the execution of `callback`. - -This is used internally for browser-compatibility purposes. - -__Arguments__ - -* `callback` - The function to call on a later loop around the event loop. - -__Example__ - -```js -var call_order = []; -async.nextTick(function(){ - call_order.push('two'); - // call_order now equals ['one','two'] -}); -call_order.push('one') -``` - - -### times(n, iterator, [callback]) - -Calls the `iterator` function `n` times, and accumulates results in the same manner -you would use with [`map`](#map). - -__Arguments__ - -* `n` - The number of times to run the function. -* `iterator` - The function to call `n` times. -* `callback` - see [`map`](#map) - -__Example__ - -```js -// Pretend this is some complicated async factory -var createUser = function(id, callback) { - callback(null, { - id: 'user' + id - }) -} -// generate 5 users -async.times(5, function(n, next){ - createUser(n, function(err, user) { - next(err, user) - }) -}, function(err, users) { - // we should now have 5 users -}); -``` - -__Related__ - -* timesSeries(n, iterator, [callback]) -* timesLimit(n, limit, iterator, [callback]) - - -## Utils - - -### memoize(fn, [hasher]) - -Caches the results of an `async` function. When creating a hash to store function -results against, the callback is omitted from the hash and an optional hash -function can be used. - -If no hash function is specified, the first argument is used as a hash key, which may work reasonably if it is a string or a data type that converts to a distinct string. Note that objects and arrays will not behave reasonably. Neither will cases where the other arguments are significant. In such cases, specify your own hash function. - -The cache of results is exposed as the `memo` property of the function returned -by `memoize`. - -__Arguments__ - -* `fn` - The function to proxy and cache results from. -* `hasher` - An optional function for generating a custom hash for storing - results. It has all the arguments applied to it apart from the callback, and - must be synchronous. - -__Example__ - -```js -var slow_fn = function (name, callback) { - // do something - callback(null, result); -}; -var fn = async.memoize(slow_fn); - -// fn can now be used as if it were slow_fn -fn('some name', function () { - // callback -}); -``` - - -### unmemoize(fn) - -Undoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized -form. Handy for testing. - -__Arguments__ - -* `fn` - the memoized function - ---------------------------------------- - - -### ensureAsync(fn) - -Wrap an async function and ensure it calls its callback on a later tick of the event loop. If the function already calls its callback on a next tick, no extra deferral is added. This is useful for preventing stack overflows (`RangeError: Maximum call stack size exceeded`) and generally keeping [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) contained. - -__Arguments__ - -* `fn` - an async function, one that expects a node-style callback as its last argument - -Returns a wrapped function with the exact same call signature as the function passed in. - -__Example__ - -```js -function sometimesAsync(arg, callback) { - if (cache[arg]) { - return callback(null, cache[arg]); // this would be synchronous!! - } else { - doSomeIO(arg, callback); // this IO would be asynchronous - } -} - -// this has a risk of stack overflows if many results are cached in a row -async.mapSeries(args, sometimesAsync, done); - -// this will defer sometimesAsync's callback if necessary, -// preventing stack overflows -async.mapSeries(args, async.ensureAsync(sometimesAsync), done); - -``` - ---------------------------------------- - - -### constant(values...) - -Returns a function that when called, calls-back with the values provided. Useful as the first function in a `waterfall`, or for plugging values in to `auto`. - -__Example__ - -```js -async.waterfall([ - async.constant(42), - function (value, next) { - // value === 42 - }, - //... -], callback); - -async.waterfall([ - async.constant(filename, "utf8"), - fs.readFile, - function (fileData, next) { - //... - } - //... -], callback); - -async.auto({ - hostname: async.constant("https://server.net/"), - port: findFreePort, - launchServer: ["hostname", "port", function (cb, options) { - startServer(options, cb); - }], - //... -}, callback); - -``` - ---------------------------------------- - - - -### asyncify(func) - -__Alias:__ `wrapSync` - -Take a sync function and make it async, passing its return value to a callback. This is useful for plugging sync functions into a waterfall, series, or other async functions. Any arguments passed to the generated function will be passed to the wrapped function (except for the final callback argument). Errors thrown will be passed to the callback. - -__Example__ - -```js -async.waterfall([ - async.apply(fs.readFile, filename, "utf8"), - async.asyncify(JSON.parse), - function (data, next) { - // data is the result of parsing the text. - // If there was a parsing error, it would have been caught. - } -], callback) -``` - -If the function passed to `asyncify` returns a Promise, that promises's resolved/rejected state will be used to call the callback, rather than simply the synchronous return value. Example: - -```js -async.waterfall([ - async.apply(fs.readFile, filename, "utf8"), - async.asyncify(function (contents) { - return db.model.create(contents); - }), - function (model, next) { - // `model` is the instantiated model object. - // If there was an error, this function would be skipped. - } -], callback) -``` - -This also means you can asyncify ES2016 `async` functions. - -```js -var q = async.queue(async.asyncify(async function (file) { - var intermediateStep = await processFile(file); - return await somePromise(intermediateStep) -})); - -q.push(files); -``` - ---------------------------------------- - - -### log(function, arguments) - -Logs the result of an `async` function to the `console`. Only works in Node.js or -in browsers that support `console.log` and `console.error` (such as FF and Chrome). -If multiple arguments are returned from the async function, `console.log` is -called on each argument in order. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, 'hello ' + name); - }, 1000); -}; -``` -```js -node> async.log(hello, 'world'); -'hello world' -``` - ---------------------------------------- - - -### dir(function, arguments) - -Logs the result of an `async` function to the `console` using `console.dir` to -display the properties of the resulting object. Only works in Node.js or -in browsers that support `console.dir` and `console.error` (such as FF and Chrome). -If multiple arguments are returned from the async function, `console.dir` is -called on each argument in order. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, {hello: name}); - }, 1000); -}; -``` -```js -node> async.dir(hello, 'world'); -{hello: 'world'} -``` - ---------------------------------------- - - -### noConflict() - -Changes the value of `async` back to its original value, returning a reference to the -`async` object. diff --git a/node_modules/twit/node_modules/request/node_modules/form-data/node_modules/async/dist/async.js b/node_modules/twit/node_modules/request/node_modules/form-data/node_modules/async/dist/async.js deleted file mode 100644 index 31e7620..0000000 --- a/node_modules/twit/node_modules/request/node_modules/form-data/node_modules/async/dist/async.js +++ /dev/null @@ -1,1265 +0,0 @@ -/*! - * async - * https://github.com/caolan/async - * - * Copyright 2010-2014 Caolan McMahon - * Released under the MIT license - */ -(function () { - - var async = {}; - function noop() {} - function identity(v) { - return v; - } - function toBool(v) { - return !!v; - } - function notId(v) { - return !v; - } - - // global on the server, window in the browser - var previous_async; - - // Establish the root object, `window` (`self`) in the browser, `global` - // on the server, or `this` in some virtual machines. We use `self` - // instead of `window` for `WebWorker` support. - var root = typeof self === 'object' && self.self === self && self || - typeof global === 'object' && global.global === global && global || - this; - - if (root != null) { - previous_async = root.async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - function only_once(fn) { - return function() { - if (fn === null) throw new Error("Callback was already called."); - fn.apply(this, arguments); - fn = null; - }; - } - - function _once(fn) { - return function() { - if (fn === null) return; - fn.apply(this, arguments); - fn = null; - }; - } - - //// cross-browser compatiblity functions //// - - var _toString = Object.prototype.toString; - - var _isArray = Array.isArray || function (obj) { - return _toString.call(obj) === '[object Array]'; - }; - - // Ported from underscore.js isObject - var _isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - function _isArrayLike(arr) { - return _isArray(arr) || ( - // has a positive integer length property - typeof arr.length === "number" && - arr.length >= 0 && - arr.length % 1 === 0 - ); - } - - function _arrayEach(arr, iterator) { - var index = -1, - length = arr.length; - - while (++index < length) { - iterator(arr[index], index, arr); - } - } - - function _map(arr, iterator) { - var index = -1, - length = arr.length, - result = Array(length); - - while (++index < length) { - result[index] = iterator(arr[index], index, arr); - } - return result; - } - - function _range(count) { - return _map(Array(count), function (v, i) { return i; }); - } - - function _reduce(arr, iterator, memo) { - _arrayEach(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - } - - function _forEachOf(object, iterator) { - _arrayEach(_keys(object), function (key) { - iterator(object[key], key); - }); - } - - function _indexOf(arr, item) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] === item) return i; - } - return -1; - } - - var _keys = Object.keys || function (obj) { - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - function _keyIterator(coll) { - var i = -1; - var len; - var keys; - if (_isArrayLike(coll)) { - len = coll.length; - return function next() { - i++; - return i < len ? i : null; - }; - } else { - keys = _keys(coll); - len = keys.length; - return function next() { - i++; - return i < len ? keys[i] : null; - }; - } - } - - // Similar to ES6's rest param (http://ariya.ofilabs.com/2013/03/es6-and-rest-parameter.html) - // This accumulates the arguments passed into an array, after a given index. - // From underscore.js (https://github.com/jashkenas/underscore/pull/2140). - function _restParam(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0); - var rest = Array(length); - for (var index = 0; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - } - // Currently unused but handle cases outside of the switch statement: - // var args = Array(startIndex + 1); - // for (index = 0; index < startIndex; index++) { - // args[index] = arguments[index]; - // } - // args[startIndex] = rest; - // return func.apply(this, args); - }; - } - - function _withoutIndex(iterator) { - return function (value, index, callback) { - return iterator(value, callback); - }; - } - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - - // capture the global reference to guard against fakeTimer mocks - var _setImmediate = typeof setImmediate === 'function' && setImmediate; - - var _delay = _setImmediate ? function(fn) { - // not a direct alias for IE10 compatibility - _setImmediate(fn); - } : function(fn) { - setTimeout(fn, 0); - }; - - if (typeof process === 'object' && typeof process.nextTick === 'function') { - async.nextTick = process.nextTick; - } else { - async.nextTick = _delay; - } - async.setImmediate = _setImmediate ? _delay : async.nextTick; - - - async.forEach = - async.each = function (arr, iterator, callback) { - return async.eachOf(arr, _withoutIndex(iterator), callback); - }; - - async.forEachSeries = - async.eachSeries = function (arr, iterator, callback) { - return async.eachOfSeries(arr, _withoutIndex(iterator), callback); - }; - - - async.forEachLimit = - async.eachLimit = function (arr, limit, iterator, callback) { - return _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback); - }; - - async.forEachOf = - async.eachOf = function (object, iterator, callback) { - callback = _once(callback || noop); - object = object || []; - - var iter = _keyIterator(object); - var key, completed = 0; - - while ((key = iter()) != null) { - completed += 1; - iterator(object[key], key, only_once(done)); - } - - if (completed === 0) callback(null); - - function done(err) { - completed--; - if (err) { - callback(err); - } - // Check key is null in case iterator isn't exhausted - // and done resolved synchronously. - else if (key === null && completed <= 0) { - callback(null); - } - } - }; - - async.forEachOfSeries = - async.eachOfSeries = function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - var key = nextKey(); - function iterate() { - var sync = true; - if (key === null) { - return callback(null); - } - iterator(obj[key], key, only_once(function (err) { - if (err) { - callback(err); - } - else { - key = nextKey(); - if (key === null) { - return callback(null); - } else { - if (sync) { - async.setImmediate(iterate); - } else { - iterate(); - } - } - } - })); - sync = false; - } - iterate(); - }; - - - - async.forEachOfLimit = - async.eachOfLimit = function (obj, limit, iterator, callback) { - _eachOfLimit(limit)(obj, iterator, callback); - }; - - function _eachOfLimit(limit) { - - return function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - if (limit <= 0) { - return callback(null); - } - var done = false; - var running = 0; - var errored = false; - - (function replenish () { - if (done && running <= 0) { - return callback(null); - } - - while (running < limit && !errored) { - var key = nextKey(); - if (key === null) { - done = true; - if (running <= 0) { - callback(null); - } - return; - } - running += 1; - iterator(obj[key], key, only_once(function (err) { - running -= 1; - if (err) { - callback(err); - errored = true; - } - else { - replenish(); - } - })); - } - })(); - }; - } - - - function doParallel(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOf, obj, iterator, callback); - }; - } - function doParallelLimit(fn) { - return function (obj, limit, iterator, callback) { - return fn(_eachOfLimit(limit), obj, iterator, callback); - }; - } - function doSeries(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOfSeries, obj, iterator, callback); - }; - } - - function _asyncMap(eachfn, arr, iterator, callback) { - callback = _once(callback || noop); - arr = arr || []; - var results = _isArrayLike(arr) ? [] : {}; - eachfn(arr, function (value, index, callback) { - iterator(value, function (err, v) { - results[index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = doParallelLimit(_asyncMap); - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.inject = - async.foldl = - async.reduce = function (arr, memo, iterator, callback) { - async.eachOfSeries(arr, function (x, i, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - - async.foldr = - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, identity).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - - async.transform = function (arr, memo, iterator, callback) { - if (arguments.length === 3) { - callback = iterator; - iterator = memo; - memo = _isArray(arr) ? [] : {}; - } - - async.eachOf(arr, function(v, k, cb) { - iterator(memo, v, k, cb); - }, function(err) { - callback(err, memo); - }); - }; - - function _filter(eachfn, arr, iterator, callback) { - var results = []; - eachfn(arr, function (x, index, callback) { - iterator(x, function (v) { - if (v) { - results.push({index: index, value: x}); - } - callback(); - }); - }, function () { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - } - - async.select = - async.filter = doParallel(_filter); - - async.selectLimit = - async.filterLimit = doParallelLimit(_filter); - - async.selectSeries = - async.filterSeries = doSeries(_filter); - - function _reject(eachfn, arr, iterator, callback) { - _filter(eachfn, arr, function(value, cb) { - iterator(value, function(v) { - cb(!v); - }); - }, callback); - } - async.reject = doParallel(_reject); - async.rejectLimit = doParallelLimit(_reject); - async.rejectSeries = doSeries(_reject); - - function _createTester(eachfn, check, getResult) { - return function(arr, limit, iterator, cb) { - function done() { - if (cb) cb(getResult(false, void 0)); - } - function iteratee(x, _, callback) { - if (!cb) return callback(); - iterator(x, function (v) { - if (cb && check(v)) { - cb(getResult(true, x)); - cb = iterator = false; - } - callback(); - }); - } - if (arguments.length > 3) { - eachfn(arr, limit, iteratee, done); - } else { - cb = iterator; - iterator = limit; - eachfn(arr, iteratee, done); - } - }; - } - - async.any = - async.some = _createTester(async.eachOf, toBool, identity); - - async.someLimit = _createTester(async.eachOfLimit, toBool, identity); - - async.all = - async.every = _createTester(async.eachOf, notId, notId); - - async.everyLimit = _createTester(async.eachOfLimit, notId, notId); - - function _findGetResult(v, x) { - return x; - } - async.detect = _createTester(async.eachOf, identity, _findGetResult); - async.detectSeries = _createTester(async.eachOfSeries, identity, _findGetResult); - async.detectLimit = _createTester(async.eachOfLimit, identity, _findGetResult); - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - callback(null, _map(results.sort(comparator), function (x) { - return x.value; - })); - } - - }); - - function comparator(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - } - }; - - async.auto = function (tasks, concurrency, callback) { - if (typeof arguments[1] === 'function') { - // concurrency is optional, shift the args. - callback = concurrency; - concurrency = null; - } - callback = _once(callback || noop); - var keys = _keys(tasks); - var remainingTasks = keys.length; - if (!remainingTasks) { - return callback(null); - } - if (!concurrency) { - concurrency = remainingTasks; - } - - var results = {}; - var runningTasks = 0; - - var hasError = false; - - var listeners = []; - function addListener(fn) { - listeners.unshift(fn); - } - function removeListener(fn) { - var idx = _indexOf(listeners, fn); - if (idx >= 0) listeners.splice(idx, 1); - } - function taskComplete() { - remainingTasks--; - _arrayEach(listeners.slice(0), function (fn) { - fn(); - }); - } - - addListener(function () { - if (!remainingTasks) { - callback(null, results); - } - }); - - _arrayEach(keys, function (k) { - if (hasError) return; - var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]]; - var taskCallback = _restParam(function(err, args) { - runningTasks--; - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _forEachOf(results, function(val, rkey) { - safeResults[rkey] = val; - }); - safeResults[k] = args; - hasError = true; - - callback(err, safeResults); - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }); - var requires = task.slice(0, task.length - 1); - // prevent dead-locks - var len = requires.length; - var dep; - while (len--) { - if (!(dep = tasks[requires[len]])) { - throw new Error('Has nonexistent dependency in ' + requires.join(', ')); - } - if (_isArray(dep) && _indexOf(dep, k) >= 0) { - throw new Error('Has cyclic dependencies'); - } - } - function ready() { - return runningTasks < concurrency && _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - } - if (ready()) { - runningTasks++; - task[task.length - 1](taskCallback, results); - } - else { - addListener(listener); - } - function listener() { - if (ready()) { - runningTasks++; - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - } - }); - }; - - - - async.retry = function(times, task, callback) { - var DEFAULT_TIMES = 5; - var DEFAULT_INTERVAL = 0; - - var attempts = []; - - var opts = { - times: DEFAULT_TIMES, - interval: DEFAULT_INTERVAL - }; - - function parseTimes(acc, t){ - if(typeof t === 'number'){ - acc.times = parseInt(t, 10) || DEFAULT_TIMES; - } else if(typeof t === 'object'){ - acc.times = parseInt(t.times, 10) || DEFAULT_TIMES; - acc.interval = parseInt(t.interval, 10) || DEFAULT_INTERVAL; - } else { - throw new Error('Unsupported argument type for \'times\': ' + typeof t); - } - } - - var length = arguments.length; - if (length < 1 || length > 3) { - throw new Error('Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)'); - } else if (length <= 2 && typeof times === 'function') { - callback = task; - task = times; - } - if (typeof times !== 'function') { - parseTimes(opts, times); - } - opts.callback = callback; - opts.task = task; - - function wrappedTask(wrappedCallback, wrappedResults) { - function retryAttempt(task, finalAttempt) { - return function(seriesCallback) { - task(function(err, result){ - seriesCallback(!err || finalAttempt, {err: err, result: result}); - }, wrappedResults); - }; - } - - function retryInterval(interval){ - return function(seriesCallback){ - setTimeout(function(){ - seriesCallback(null); - }, interval); - }; - } - - while (opts.times) { - - var finalAttempt = !(opts.times-=1); - attempts.push(retryAttempt(opts.task, finalAttempt)); - if(!finalAttempt && opts.interval > 0){ - attempts.push(retryInterval(opts.interval)); - } - } - - async.series(attempts, function(done, data){ - data = data[data.length - 1]; - (wrappedCallback || opts.callback)(data.err, data.result); - }); - } - - // If a callback is passed, run this as a controll flow - return opts.callback ? wrappedTask() : wrappedTask; - }; - - async.waterfall = function (tasks, callback) { - callback = _once(callback || noop); - if (!_isArray(tasks)) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - function wrapIterator(iterator) { - return _restParam(function (err, args) { - if (err) { - callback.apply(null, [err].concat(args)); - } - else { - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - ensureAsync(iterator).apply(null, args); - } - }); - } - wrapIterator(async.iterator(tasks))(); - }; - - function _parallel(eachfn, tasks, callback) { - callback = callback || noop; - var results = _isArrayLike(tasks) ? [] : {}; - - eachfn(tasks, function (task, key, callback) { - task(_restParam(function (err, args) { - if (args.length <= 1) { - args = args[0]; - } - results[key] = args; - callback(err); - })); - }, function (err) { - callback(err, results); - }); - } - - async.parallel = function (tasks, callback) { - _parallel(async.eachOf, tasks, callback); - }; - - async.parallelLimit = function(tasks, limit, callback) { - _parallel(_eachOfLimit(limit), tasks, callback); - }; - - async.series = function(tasks, callback) { - _parallel(async.eachOfSeries, tasks, callback); - }; - - async.iterator = function (tasks) { - function makeCallback(index) { - function fn() { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - } - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - } - return makeCallback(0); - }; - - async.apply = _restParam(function (fn, args) { - return _restParam(function (callArgs) { - return fn.apply( - null, args.concat(callArgs) - ); - }); - }); - - function _concat(eachfn, arr, fn, callback) { - var result = []; - eachfn(arr, function (x, index, cb) { - fn(x, function (err, y) { - result = result.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, result); - }); - } - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - callback = callback || noop; - if (test()) { - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else if (test.apply(this, args)) { - iterator(next); - } else { - callback.apply(null, [null].concat(args)); - } - }); - iterator(next); - } else { - callback(null); - } - }; - - async.doWhilst = function (iterator, test, callback) { - var calls = 0; - return async.whilst(function() { - return ++calls <= 1 || test.apply(this, arguments); - }, iterator, callback); - }; - - async.until = function (test, iterator, callback) { - return async.whilst(function() { - return !test.apply(this, arguments); - }, iterator, callback); - }; - - async.doUntil = function (iterator, test, callback) { - return async.doWhilst(iterator, function() { - return !test.apply(this, arguments); - }, callback); - }; - - async.during = function (test, iterator, callback) { - callback = callback || noop; - - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else { - args.push(check); - test.apply(this, args); - } - }); - - var check = function(err, truth) { - if (err) { - callback(err); - } else if (truth) { - iterator(next); - } else { - callback(null); - } - }; - - test(check); - }; - - async.doDuring = function (iterator, test, callback) { - var calls = 0; - async.during(function(next) { - if (calls++ < 1) { - next(null, true); - } else { - test.apply(this, arguments); - } - }, iterator, callback); - }; - - function _queue(worker, concurrency, payload) { - if (concurrency == null) { - concurrency = 1; - } - else if(concurrency === 0) { - throw new Error('Concurrency must not be zero'); - } - function _insert(q, data, pos, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0 && q.idle()) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - callback: callback || noop - }; - - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - }); - async.setImmediate(q.process); - } - function _next(q, tasks) { - return function(){ - workers -= 1; - - var removed = false; - var args = arguments; - _arrayEach(tasks, function (task) { - _arrayEach(workersList, function (worker, index) { - if (worker === task && !removed) { - workersList.splice(index, 1); - removed = true; - } - }); - - task.callback.apply(task, args); - }); - if (q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - } - - var workers = 0; - var workersList = []; - var q = { - tasks: [], - concurrency: concurrency, - payload: payload, - saturated: noop, - empty: noop, - drain: noop, - started: false, - paused: false, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - kill: function () { - q.drain = noop; - q.tasks = []; - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - while(!q.paused && workers < q.concurrency && q.tasks.length){ - - var tasks = q.payload ? - q.tasks.splice(0, q.payload) : - q.tasks.splice(0, q.tasks.length); - - var data = _map(tasks, function (task) { - return task.data; - }); - - if (q.tasks.length === 0) { - q.empty(); - } - workers += 1; - workersList.push(tasks[0]); - var cb = only_once(_next(q, tasks)); - worker(data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - }, - workersList: function () { - return workersList; - }, - idle: function() { - return q.tasks.length + workers === 0; - }, - pause: function () { - q.paused = true; - }, - resume: function () { - if (q.paused === false) { return; } - q.paused = false; - var resumeCount = Math.min(q.concurrency, q.tasks.length); - // Need to call q.process once per concurrent - // worker to preserve full concurrency after pause - for (var w = 1; w <= resumeCount; w++) { - async.setImmediate(q.process); - } - } - }; - return q; - } - - async.queue = function (worker, concurrency) { - var q = _queue(function (items, cb) { - worker(items[0], cb); - }, concurrency, 1); - - return q; - }; - - async.priorityQueue = function (worker, concurrency) { - - function _compareTasks(a, b){ - return a.priority - b.priority; - } - - function _binarySearch(sequence, item, compare) { - var beg = -1, - end = sequence.length - 1; - while (beg < end) { - var mid = beg + ((end - beg + 1) >>> 1); - if (compare(item, sequence[mid]) >= 0) { - beg = mid; - } else { - end = mid - 1; - } - } - return beg; - } - - function _insert(q, data, priority, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - priority: priority, - callback: typeof callback === 'function' ? callback : noop - }; - - q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item); - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - // Start with a normal queue - var q = async.queue(worker, concurrency); - - // Override push to accept second parameter representing priority - q.push = function (data, priority, callback) { - _insert(q, data, priority, callback); - }; - - // Remove unshift function - delete q.unshift; - - return q; - }; - - async.cargo = function (worker, payload) { - return _queue(worker, 1, payload); - }; - - function _console_fn(name) { - return _restParam(function (fn, args) { - fn.apply(null, args.concat([_restParam(function (err, args) { - if (typeof console === 'object') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _arrayEach(args, function (x) { - console[name](x); - }); - } - } - })])); - }); - } - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - var has = Object.prototype.hasOwnProperty; - hasher = hasher || identity; - var memoized = _restParam(function memoized(args) { - var callback = args.pop(); - var key = hasher.apply(null, args); - if (has.call(memo, key)) { - async.setImmediate(function () { - callback.apply(null, memo[key]); - }); - } - else if (has.call(queues, key)) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([_restParam(function (args) { - memo[key] = args; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, args); - } - })])); - } - }); - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - function _times(mapper) { - return function (count, iterator, callback) { - mapper(_range(count), iterator, callback); - }; - } - - async.times = _times(async.map); - async.timesSeries = _times(async.mapSeries); - async.timesLimit = function (count, limit, iterator, callback) { - return async.mapLimit(_range(count), limit, iterator, callback); - }; - - async.seq = function (/* functions... */) { - var fns = arguments; - return _restParam(function (args) { - var that = this; - - var callback = args[args.length - 1]; - if (typeof callback == 'function') { - args.pop(); - } else { - callback = noop; - } - - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([_restParam(function (err, nextargs) { - cb(err, nextargs); - })])); - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }); - }; - - async.compose = function (/* functions... */) { - return async.seq.apply(null, Array.prototype.reverse.call(arguments)); - }; - - - function _applyEach(eachfn) { - return _restParam(function(fns, args) { - var go = _restParam(function(args) { - var that = this; - var callback = args.pop(); - return eachfn(fns, function (fn, _, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }); - if (args.length) { - return go.apply(this, args); - } - else { - return go; - } - }); - } - - async.applyEach = _applyEach(async.eachOf); - async.applyEachSeries = _applyEach(async.eachOfSeries); - - - async.forever = function (fn, callback) { - var done = only_once(callback || noop); - var task = ensureAsync(fn); - function next(err) { - if (err) { - return done(err); - } - task(next); - } - next(); - }; - - function ensureAsync(fn) { - return _restParam(function (args) { - var callback = args.pop(); - args.push(function () { - var innerArgs = arguments; - if (sync) { - async.setImmediate(function () { - callback.apply(null, innerArgs); - }); - } else { - callback.apply(null, innerArgs); - } - }); - var sync = true; - fn.apply(this, args); - sync = false; - }); - } - - async.ensureAsync = ensureAsync; - - async.constant = _restParam(function(values) { - var args = [null].concat(values); - return function (callback) { - return callback.apply(this, args); - }; - }); - - async.wrapSync = - async.asyncify = function asyncify(func) { - return _restParam(function (args) { - var callback = args.pop(); - var result; - try { - result = func.apply(this, args); - } catch (e) { - return callback(e); - } - // if result is Promise object - if (_isObject(result) && typeof result.then === "function") { - result.then(function(value) { - callback(null, value); - })["catch"](function(err) { - callback(err.message ? err : new Error(err)); - }); - } else { - callback(null, result); - } - }); - }; - - // Node.js - if (typeof module === 'object' && module.exports) { - module.exports = async; - } - // AMD / RequireJS - else if (typeof define === 'function' && define.amd) { - define([], function () { - return async; - }); - } - // included directly via '); - expect(encoded).to.equal('\\x3cscript\\x3ealert\\x281\\x29\\x3c\\x2fscript\\x3e'); - done(); - }); - - it('encodes \' characters', function (done) { - - var encoded = Hoek.escapeJavaScript('something(\'param\')'); - expect(encoded).to.equal('something\\x28\\x27param\\x27\\x29'); - done(); - }); - - it('encodes large unicode characters with the correct padding', function (done) { - - var encoded = Hoek.escapeJavaScript(String.fromCharCode(500) + String.fromCharCode(1000)); - expect(encoded).to.equal('\\u0500\\u1000'); - done(); - }); - - it('doesn\'t throw an exception when passed null', function (done) { - - var encoded = Hoek.escapeJavaScript(null); - expect(encoded).to.equal(''); - done(); - }); -}); - -describe('escapeHtml()', function () { - - it('encodes / characters', function (done) { - - var encoded = Hoek.escapeHtml(''); - expect(encoded).to.equal('<script>alert(1)</script>'); - done(); - }); - - it('encodes < and > as named characters', function (done) { - - var encoded = Hoek.escapeHtml(' -``` - -Or in node.js: - -``` -npm install node-uuid -``` - -```javascript -var uuid = require('node-uuid'); -``` - -Then create some ids ... - -```javascript -// Generate a v1 (time-based) id -uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' - -// Generate a v4 (random) id -uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' -``` - -## API - -### uuid.v1([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Notes: - -1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v1({ - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}); // -> "710b962e-041c-11e1-9234-0123456789ab" -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -var arr = new Array(32); // -> [] -uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15] -uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15] - -// Optionally use uuid.unparse() to get stringify the ids -uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115' -uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115' -``` - -### uuid.v4([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v4({ - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}); -// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" -``` - -Example: Generate two IDs in a single buffer - -```javascript -var buffer = new Array(32); // (or 'new Buffer' in node.js) -uuid.v4(null, buffer, 0); -uuid.v4(null, buffer, 16); -``` - -### uuid.parse(id[, buffer[, offset]]) -### uuid.unparse(buffer[, offset]) - -Parse and unparse UUIDs - - * `id` - (String) UUID(-like) string - * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used - * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0 - -Example parsing and unparsing a UUID string - -```javascript -var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> -var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10' -``` - -### uuid.noConflict() - -(Browsers only) Set `uuid` property back to it's previous value. - -Returns the node-uuid object. - -Example: - -```javascript -var myUuid = uuid.noConflict(); -myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' -``` - -## Deprecated APIs - -Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version. - -### uuid([format [, buffer [, offset]]]) - -uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary). - -### uuid.BufferClass - -The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API. - -## Command Line Interface - -To use the executable, it's probably best to install this library globally. - -`npm install -g node-uuid` - -Usage: - -``` -USAGE: uuid [version] [options] - - -options: - ---help Display this message and exit -``` - -`version` must be an RFC4122 version that is supported by this library, which is currently version 1 and version 4 (denoted by "v1" and "v4", respectively). `version` defaults to version 4 when not supplied. - -### Examples - -``` -> uuid -3a91f950-dec8-4688-ba14-5b7bbfc7a563 -``` - -``` -> uuid v1 -9d0b43e0-7696-11e3-964b-250efa37a98e -``` - -``` -> uuid v4 -6790ac7c-24ac-4f98-8464-42f6d98a53ae -``` - -## Testing - -In node.js - -``` -npm test -``` - -In Browser - -``` -open test/test.html -``` - -### Benchmarking - -Requires node.js - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -For a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark) - -For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). - -## Release notes - -### 1.4.6 - -* Properly detect node crypto and whatwg crypto -* Workaround phantomjs/browserify bug -* Explicit check for `window` rather implicit this-global -* Issue warning if Math.random() is being used -* "use strict"; -* A few jshint / stylistic updates (=== and such) - -### 1.4.0 - -* Improved module context detection -* Removed public RNG functions - -### 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - -### 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/README.md b/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/README.md deleted file mode 100644 index aaeb2ea..0000000 --- a/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# node-uuid Benchmarks - -### Results - -To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark - -### Run them yourself - -node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`. - -To prepare and run the benchmark issue; - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -You'll see an output like this one: - -``` -# v4 -nodeuuid.v4(): 854700 uuids/second -nodeuuid.v4('binary'): 788643 uuids/second -nodeuuid.v4('binary', buffer): 1336898 uuids/second -uuid(): 479386 uuids/second -uuid('binary'): 582072 uuids/second -uuidjs.create(4): 312304 uuids/second - -# v1 -nodeuuid.v1(): 938086 uuids/second -nodeuuid.v1('binary'): 683060 uuids/second -nodeuuid.v1('binary', buffer): 1644736 uuids/second -uuidjs.create(1): 190621 uuids/second -``` - -* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library. -* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK. - -If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file: - -``` -for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done; -``` - -If you're interested in how performance varies between different node versions, you can issue the above command multiple times. - -You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot: - -``` -(cd benchmark/ && ./bench.sh) -``` - -This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then. diff --git a/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu b/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu deleted file mode 100644 index a342fbb..0000000 --- a/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu +++ /dev/null @@ -1,174 +0,0 @@ -#!/opt/local/bin/gnuplot -persist -# -# -# G N U P L O T -# Version 4.4 patchlevel 3 -# last modified March 2011 -# System: Darwin 10.8.0 -# -# Copyright (C) 1986-1993, 1998, 2004, 2007-2010 -# Thomas Williams, Colin Kelley and many others -# -# gnuplot home: http://www.gnuplot.info -# faq, bugs, etc: type "help seeking-assistance" -# immediate help: type "help" -# plot window: hit 'h' -set terminal postscript eps noenhanced defaultplex \ - leveldefault color colortext \ - solid linewidth 1.2 butt noclip \ - palfuncparam 2000,0.003 \ - "Helvetica" 14 -set output 'bench.eps' -unset clip points -set clip one -unset clip two -set bar 1.000000 front -set border 31 front linetype -1 linewidth 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set timefmt x "%d/%m/%y,%H:%M" -set timefmt y "%d/%m/%y,%H:%M" -set timefmt z "%d/%m/%y,%H:%M" -set timefmt x2 "%d/%m/%y,%H:%M" -set timefmt y2 "%d/%m/%y,%H:%M" -set timefmt cb "%d/%m/%y,%H:%M" -set boxwidth -set style fill empty border -set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1 -set style circle radius graph 0.02, first 0, 0 -set dummy x,y -set format x "% g" -set format y "% g" -set format x2 "% g" -set format y2 "% g" -set format z "% g" -set format cb "% g" -set angles radians -unset grid -set key title "" -set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox -set key noinvert samplen 4 spacing 1 width 0 height 0 -set key maxcolumns 2 maxrows 0 -unset label -unset arrow -set style increment default -unset style line -set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0 -unset style arrow -set style histogram clustered gap 2 title offset character 0, 0, 0 -unset logscale -set offsets graph 0.05, 0.15, 0, 0 -set pointsize 1.5 -set pointintervalbox 1 -set encoding default -unset polar -unset parametric -unset decimalsign -set view 60, 30, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -unset contour -set clabel '%8.3g' -set mapping cartesian -set datafile separator whitespace -unset hidden3d -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -set style data points -set style function lines -set xzeroaxis linetype -2 linewidth 1.000 -set yzeroaxis linetype -2 linewidth 1.000 -set zzeroaxis linetype -2 linewidth 1.000 -set x2zeroaxis linetype -2 linewidth 1.000 -set y2zeroaxis linetype -2 linewidth 1.000 -set ticslevel 0.5 -set mxtics default -set mytics default -set mztics default -set mx2tics default -set my2tics default -set mcbtics default -set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set xtics norangelimit -set xtics () -set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set ytics autofreq norangelimit -set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 -set ztics autofreq norangelimit -set nox2tics -set noy2tics -set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set cbtics autofreq norangelimit -set title "" -set title offset character 0, 0, 0 font "" norotate -set timestamp bottom -set timestamp "" -set timestamp offset character 0, 0, 0 font "" norotate -set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale rfixmin -set autoscale rfixmax -set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set autoscale tfixmin -set autoscale tfixmax -set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale ufixmin -set autoscale ufixmax -set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale vfixmin -set autoscale vfixmax -set xlabel "" -set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set x2label "" -set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate -set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] ) -set autoscale xfixmin -set autoscale xfixmax -set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] ) -set autoscale x2fixmin -set autoscale x2fixmax -set ylabel "" -set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set y2label "" -set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] ) -set autoscale yfixmin -set autoscale yfixmax -set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] ) -set autoscale y2fixmin -set autoscale y2fixmax -set zlabel "" -set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale zfixmin -set autoscale zfixmax -set cblabel "" -set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale cbfixmin -set autoscale cbfixmax -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set pm3d explicit at s -set pm3d scansautomatic -set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean -set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB -set palette rgbformulae 7, 5, 15 -set colorbox default -set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault -set loadpath -set fontpath -set fit noerrorvariables -GNUTERM = "aqua" -plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2 -# EOF diff --git a/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/bench.sh b/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/bench.sh deleted file mode 100755 index d870a0c..0000000 --- a/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/bench.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# for a given node version run: -# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done; - -PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte') -FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es) -INDICES=(2 3 2 3 2 2 2 2 2) -VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " ) -TMPJOIN="tmp_join" -OUTPUT="bench_results.txt" - -for I in ${!FILES[*]}; do - F=${FILES[$I]} - P=${PATTERNS[$I]} - INDEX=${INDICES[$I]} - echo "version $F" > $F - for V in $VERSIONS; do - (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F - done - if [ $I == 0 ]; then - cat $F > $TMPJOIN - else - join $TMPJOIN $F > $OUTPUT - cp $OUTPUT $TMPJOIN - fi - rm $F -done - -rm $TMPJOIN - -gnuplot bench.gnu -convert -density 200 -resize 800x560 -flatten bench.eps bench.png -rm bench.eps diff --git a/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c b/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c deleted file mode 100644 index dbfc75f..0000000 --- a/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include -#include -#include -#include - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js b/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js deleted file mode 100644 index 40e6efb..0000000 --- a/node_modules/twit/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js +++ /dev/null @@ -1,84 +0,0 @@ -try { - var nodeuuid = require('../uuid'); -} catch (e) { - console.error('node-uuid require failed - skipping tests'); -} - -try { - var uuid = require('uuid'); -} catch (e) { - console.error('uuid require failed - skipping tests'); -} - -try { - var uuidjs = require('uuid-js'); -} catch (e) { - console.error('uuid-js require failed - skipping tests'); -} - -var N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -console.log('# v4'); - -// node-uuid - string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4(); - rate('nodeuuid.v4() - using node.js crypto RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG}); - rate('nodeuuid.v4() - using Math.random() RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary'); - rate('nodeuuid.v4(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer); - rate('nodeuuid.v4(\'binary\', buffer)', t); -} - -// libuuid - string form -if (uuid) { - for (var i = 0, t = Date.now(); i < N; i++) uuid(); - rate('uuid()', t); - - for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); - rate('uuid(\'binary\')', t); -} - -// uuid-js - string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4); - rate('uuidjs.create(4)', t); -} - -// 140byte.es -for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)}); -rate('140byte.es_v4', t); - -console.log(''); -console.log('# v1'); - -// node-uuid - v1 string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1(); - rate('nodeuuid.v1()', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary'); - rate('nodeuuid.v1(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer); - rate('nodeuuid.v1(\'binary\', buffer)', t); -} - -// uuid-js - v1 string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1); - rate('uuidjs.create(1)', t); -} diff --git a/node_modules/twit/node_modules/request/node_modules/node-uuid/bin/uuid b/node_modules/twit/node_modules/request/node_modules/node-uuid/bin/uuid deleted file mode 100755 index f732e99..0000000 --- a/node_modules/twit/node_modules/request/node_modules/node-uuid/bin/uuid +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env node - -var path = require('path'); -var uuid = require(path.join(__dirname, '..')); - -var arg = process.argv[2]; - -if ('--help' === arg) { - console.log('\n USAGE: uuid [version] [options]\n\n'); - console.log(' options:\n'); - console.log(' --help Display this message and exit\n'); - process.exit(0); -} - -if (null == arg) { - console.log(uuid()); - process.exit(0); -} - -if ('v1' !== arg && 'v4' !== arg) { - console.error('Version must be RFC4122 version 1 or version 4, denoted as "v1" or "v4"'); - process.exit(1); -} - -console.log(uuid[arg]()); -process.exit(0); diff --git a/node_modules/twit/node_modules/request/node_modules/node-uuid/bower.json b/node_modules/twit/node_modules/request/node_modules/node-uuid/bower.json deleted file mode 100644 index c0925e1..0000000 --- a/node_modules/twit/node_modules/request/node_modules/node-uuid/bower.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "node-uuid", - "version": "1.4.7", - "homepage": "https://github.com/broofa/node-uuid", - "authors": [ - "Robert Kieffer " - ], - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "main": "uuid.js", - "keywords": [ - "uuid", - "gid", - "rfc4122" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/node_modules/twit/node_modules/request/node_modules/node-uuid/component.json b/node_modules/twit/node_modules/request/node_modules/node-uuid/component.json deleted file mode 100644 index 3ff4633..0000000 --- a/node_modules/twit/node_modules/request/node_modules/node-uuid/component.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "node-uuid", - "repo": "broofa/node-uuid", - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "version": "1.4.7", - "author": "Robert Kieffer ", - "contributors": [ - { - "name": "Christoph Tavan ", - "github": "https://github.com/ctavan" - } - ], - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "dependencies": {}, - "development": {}, - "main": "uuid.js", - "scripts": [ - "uuid.js" - ], - "license": "MIT" -} \ No newline at end of file diff --git a/node_modules/twit/node_modules/request/node_modules/node-uuid/package.json b/node_modules/twit/node_modules/request/node_modules/node-uuid/package.json deleted file mode 100644 index 74f03df..0000000 --- a/node_modules/twit/node_modules/request/node_modules/node-uuid/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com" - }, - "bin": { - "uuid": "./bin/uuid" - }, - "bugs": { - "url": "https://github.com/broofa/node-uuid/issues" - }, - "contributors": [ - { - "name": "AJ ONeal", - "email": "coolaj86@gmail.com" - }, - { - "name": "Christoph Tavan", - "email": "dev@tavan.de" - } - ], - "dependencies": {}, - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "devDependencies": { - "nyc": "^2.2.0" - }, - "directories": {}, - "homepage": "https://github.com/broofa/node-uuid", - "installable": true, - "keywords": [ - "guid", - "rfc4122", - "uuid" - ], - "lib": ".", - "licenses": [ - { - "type": "MIT", - "url": "https://raw.github.com/broofa/node-uuid/master/LICENSE.md" - } - ], - "main": "./uuid.js", - "maintainers": [ - { - "name": "broofa", - "email": "robert@broofa.com" - }, - { - "name": "coolaj86", - "email": "coolaj86@gmail.com" - } - ], - "name": "node-uuid", - "optionalDependencies": {}, - "repository": { - "type": "git", - "url": "git+https://github.com/broofa/node-uuid.git" - }, - "scripts": { - "coverage": "nyc npm test && nyc report", - "test": "node test/test.js" - }, - "url": "http://github.com/broofa/node-uuid", - "version": "1.4.7", - "gitHead": "309512573ec1c60143c257157479a20f7f1f51cd", - "_id": "node-uuid@1.4.7", - "_shasum": "6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f", - "_from": "node-uuid@>=1.4.0 <1.5.0", - "_npmVersion": "3.3.6", - "_nodeVersion": "5.0.0", - "_npmUser": { - "name": "coolaj86", - "email": "coolaj86@gmail.com" - }, - "dist": { - "shasum": "6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f", - "tarball": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz" - }, - "_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/twit/node_modules/request/node_modules/node-uuid/test/compare_v1.js b/node_modules/twit/node_modules/request/node_modules/node-uuid/test/compare_v1.js deleted file mode 100644 index 05af822..0000000 --- a/node_modules/twit/node_modules/request/node_modules/node-uuid/test/compare_v1.js +++ /dev/null @@ -1,63 +0,0 @@ -var assert = require('assert'), - nodeuuid = require('../uuid'), - uuidjs = require('uuid-js'), - libuuid = require('uuid').generate, - util = require('util'), - exec = require('child_process').exec, - os = require('os'); - -// On Mac Os X / macports there's only the ossp-uuid package that provides uuid -// On Linux there's uuid-runtime which provides uuidgen -var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t'; - -function compare(ids) { - console.log(ids); - for (var i = 0; i < ids.length; i++) { - var id = ids[i].split('-'); - id = [id[2], id[1], id[0]].join(''); - ids[i] = id; - } - var sorted = ([].concat(ids)).sort(); - - if (sorted.toString() !== ids.toString()) { - console.log('Warning: sorted !== ids'); - } else { - console.log('everything in order!'); - } -} - -// Test time order of v1 uuids -var ids = []; -while (ids.length < 10e3) ids.push(nodeuuid.v1()); - -var max = 10; -console.log('node-uuid:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(nodeuuid.v1()); -compare(ids); - -console.log(''); -console.log('uuidjs:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString()); -compare(ids); - -console.log(''); -console.log('libuuid:'); -ids = []; -var count = 0; -var last = function() { - compare(ids); -} -var cb = function(err, stdout, stderr) { - ids.push(stdout.substring(0, stdout.length-1)); - count++; - if (count < max) { - return next(); - } - last(); -}; -var next = function() { - exec(uuidCmd, cb); -}; -next(); diff --git a/node_modules/twit/node_modules/request/node_modules/node-uuid/test/test.html b/node_modules/twit/node_modules/request/node_modules/node-uuid/test/test.html deleted file mode 100644 index d80326e..0000000 --- a/node_modules/twit/node_modules/request/node_modules/node-uuid/test/test.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - diff --git a/node_modules/twit/node_modules/request/node_modules/node-uuid/test/test.js b/node_modules/twit/node_modules/request/node_modules/node-uuid/test/test.js deleted file mode 100644 index 5f1113d..0000000 --- a/node_modules/twit/node_modules/request/node_modules/node-uuid/test/test.js +++ /dev/null @@ -1,231 +0,0 @@ -if (!this.uuid) { - // node.js - uuid = require('../uuid'); - if (!/_rb/.test(uuid._rng.toString())) { - throw new Error("should use crypto for node.js"); - } -} - -// -// x-platform log/assert shims -// - -function _log(msg, type) { - type = type || 'log'; - - if (typeof(document) != 'undefined') { - document.write('
' + msg.replace(/\n/g, '
') + '
'); - } - if (typeof(console) != 'undefined') { - var color = { - log: '\033[39m', - warn: '\033[33m', - error: '\033[31m' - }; - console[type](color[type] + msg + color.log); - } -} - -function log(msg) {_log(msg, 'log');} -function warn(msg) {_log(msg, 'warn');} -function error(msg) {_log(msg, 'error');} - -function assert(res, msg) { - if (!res) { - error('FAIL: ' + msg); - } else { - log('Pass: ' + msg); - } -} - -// -// Unit tests -// - -// Verify ordering of v1 ids created with explicit times -var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00 - -function compare(name, ids) { - ids = ids.map(function(id) { - return id.split('-').reverse().join('-'); - }).sort(); - var sorted = ([].concat(ids)).sort(); - - assert(sorted.toString() == ids.toString(), name + ' have expected order'); -} - -// Verify ordering of v1 ids created using default behavior -compare('uuids with current time', [ - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1(), - uuid.v1() -]); - -// Verify ordering of v1 ids created with explicit times -compare('uuids with time option', [ - uuid.v1({msecs: TIME - 10*3600*1000}), - uuid.v1({msecs: TIME - 1}), - uuid.v1({msecs: TIME}), - uuid.v1({msecs: TIME + 1}), - uuid.v1({msecs: TIME + 28*24*3600*1000}) -]); - -assert( - uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}), - 'IDs created at same msec are different' -); - -// Verify throw if too many ids created -var thrown = false; -try { - uuid.v1({msecs: TIME, nsecs: 10000}); -} catch (e) { - thrown = true; -} -assert(thrown, 'Exception thrown when > 10K ids created in 1 ms'); - -// Verify clock regression bumps clockseq -var uidt = uuid.v1({msecs: TIME}); -var uidtb = uuid.v1({msecs: TIME - 1}); -assert( - parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1, - 'Clock regression by msec increments the clockseq' -); - -// Verify clock regression bumps clockseq -var uidtn = uuid.v1({msecs: TIME, nsecs: 10}); -var uidtnb = uuid.v1({msecs: TIME, nsecs: 9}); -assert( - parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1, - 'Clock regression by nsec increments the clockseq' -); - -// Verify explicit options produce expected id -var id = uuid.v1({ - msecs: 1321651533573, - nsecs: 5432, - clockseq: 0x385c, - node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ] -}); -assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); - -// Verify adjacent ids across a msec boundary are 1 time unit apart -var u0 = uuid.v1({msecs: TIME, nsecs: 9999}); -var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0}); - -var before = u0.split('-')[0], after = u1.split('-')[0]; -var dt = parseInt(after, 16) - parseInt(before, 16); -assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart'); - -// -// Test parse/unparse -// - -id = '00112233445566778899aabbccddeeff'; -assert(uuid.unparse(uuid.parse(id.substr(0,10))) == - '00112233-4400-0000-0000-000000000000', 'Short parse'); -assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) == - '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse'); - -// -// Perf tests -// - -var generators = { - v1: uuid.v1, - v4: uuid.v4 -}; - -var UUID_FORMAT = { - v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i, - v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i -}; - -var N = 1e4; - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second'); -} - -for (var version in generators) { - var counts = {}, max = 0; - var generator = generators[version]; - var format = UUID_FORMAT[version]; - - log('\nSanity check ' + N + ' ' + version + ' uuids'); - for (var i = 0, ok = 0; i < N; i++) { - id = generator(); - if (!format.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - assert(fail, id + ' is not a valid id'); - } - - // Count digits for our randomness check - if (version == 'v4') { - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } - } - } - - // Check randomness for v4 UUIDs - if (version == 'v4') { - // Limit that we get worried about randomness. (Purely empirical choice, this!) - var limit = 2*100*Math.sqrt(1/N); - - log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)'); - - for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)'); - } - } -} - -// Perf tests -for (var version in generators) { - log('\nPerformance testing ' + version + ' UUIDs'); - var generator = generators[version]; - var buf = new uuid.BufferClass(16); - - for (var i = 0, t = Date.now(); i < N; i++) generator(); - rate('uuid.' + version + '()', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary'); - rate('uuid.' + version + '(\'binary\')', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf); - rate('uuid.' + version + '(\'binary\', buffer)', t); -} diff --git a/node_modules/twit/node_modules/request/node_modules/node-uuid/uuid.js b/node_modules/twit/node_modules/request/node_modules/node-uuid/uuid.js deleted file mode 100644 index 89c5b8f..0000000 --- a/node_modules/twit/node_modules/request/node_modules/node-uuid/uuid.js +++ /dev/null @@ -1,272 +0,0 @@ -// uuid.js -// -// Copyright (c) 2010-2012 Robert Kieffer -// MIT License - http://opensource.org/licenses/mit-license.php - -/*global window, require, define */ -(function(_window) { - 'use strict'; - - // Unique ID creation requires a high quality random # generator. We feature - // detect to determine the best RNG source, normalizing to a function that - // returns 128-bits of randomness, since that's what's usually required - var _rng, _mathRNG, _nodeRNG, _whatwgRNG, _previousRoot; - - function setupBrowser() { - // Allow for MSIE11 msCrypto - var _crypto = _window.crypto || _window.msCrypto; - - if (!_rng && _crypto && _crypto.getRandomValues) { - // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto - // - // Moderately fast, high quality - try { - var _rnds8 = new Uint8Array(16); - _whatwgRNG = _rng = function whatwgRNG() { - _crypto.getRandomValues(_rnds8); - return _rnds8; - }; - _rng(); - } catch(e) {} - } - - if (!_rng) { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var _rnds = new Array(16); - _mathRNG = _rng = function() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) { r = Math.random() * 0x100000000; } - _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return _rnds; - }; - if ('undefined' !== typeof console && console.warn) { - console.warn("[SECURITY] node-uuid: crypto not usable, falling back to insecure Math.random()"); - } - } - } - - function setupNode() { - // Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html - // - // Moderately fast, high quality - if ('function' === typeof require) { - try { - var _rb = require('crypto').randomBytes; - _nodeRNG = _rng = _rb && function() {return _rb(16);}; - _rng(); - } catch(e) {} - } - } - - if (_window) { - setupBrowser(); - } else { - setupNode(); - } - - // Buffer class to use - var BufferClass = ('function' === typeof Buffer) ? Buffer : Array; - - // Maps for number <-> hex string conversion - var _byteToHex = []; - var _hexToByte = {}; - for (var i = 0; i < 256; i++) { - _byteToHex[i] = (i + 0x100).toString(16).substr(1); - _hexToByte[_byteToHex[i]] = i; - } - - // **`parse()` - Parse a UUID into it's component bytes** - function parse(s, buf, offset) { - var i = (buf && offset) || 0, ii = 0; - - buf = buf || []; - s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) { - if (ii < 16) { // Don't overflow! - buf[i + ii++] = _hexToByte[oct]; - } - }); - - // Zero out remaining bytes if string was short - while (ii < 16) { - buf[i + ii++] = 0; - } - - return buf; - } - - // **`unparse()` - Convert UUID byte array (ala parse()) into a string** - function unparse(buf, offset) { - var i = offset || 0, bth = _byteToHex; - return bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]]; - } - - // **`v1()` - Generate time-based UUID** - // - // Inspired by https://github.com/LiosK/UUID.js - // and http://docs.python.org/library/uuid.html - - // random #'s we need to init node and clockseq - var _seedBytes = _rng(); - - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - var _nodeId = [ - _seedBytes[0] | 0x01, - _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] - ]; - - // Per 4.2.2, randomize (14 bit) clockseq - var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; - - // Previous uuid creation time - var _lastMSecs = 0, _lastNSecs = 0; - - // See https://github.com/broofa/node-uuid for API details - function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - - var clockseq = (options.clockseq != null) ? options.clockseq : _clockseq; - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = (options.msecs != null) ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = (options.nsecs != null) ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq == null) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - var node = options.node || _nodeId; - for (var n = 0; n < 6; n++) { - b[i + n] = node[n]; - } - - return buf ? buf : unparse(b); - } - - // **`v4()` - Generate random UUID** - - // See https://github.com/broofa/node-uuid for API details - function v4(options, buf, offset) { - // Deprecated - 'format' argument, as supported in v1.2 - var i = buf && offset || 0; - - if (typeof(options) === 'string') { - buf = (options === 'binary') ? new BufferClass(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || _rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ii++) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || unparse(rnds); - } - - // Export public API - var uuid = v4; - uuid.v1 = v1; - uuid.v4 = v4; - uuid.parse = parse; - uuid.unparse = unparse; - uuid.BufferClass = BufferClass; - uuid._rng = _rng; - uuid._mathRNG = _mathRNG; - uuid._nodeRNG = _nodeRNG; - uuid._whatwgRNG = _whatwgRNG; - - if (('undefined' !== typeof module) && module.exports) { - // Publish as node.js module - module.exports = uuid; - } else if (typeof define === 'function' && define.amd) { - // Publish as AMD module - define(function() {return uuid;}); - - - } else { - // Publish as global (in browsers) - _previousRoot = _window.uuid; - - // **`noConflict()` - (browser only) to reset global 'uuid' var** - uuid.noConflict = function() { - _window.uuid = _previousRoot; - return uuid; - }; - - _window.uuid = uuid; - } -})('undefined' !== typeof window ? window : null); diff --git a/node_modules/twit/node_modules/request/node_modules/oauth-sign/LICENSE b/node_modules/twit/node_modules/request/node_modules/oauth-sign/LICENSE deleted file mode 100644 index a4a9aee..0000000 --- a/node_modules/twit/node_modules/request/node_modules/oauth-sign/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/twit/node_modules/request/node_modules/oauth-sign/README.md b/node_modules/twit/node_modules/request/node_modules/oauth-sign/README.md deleted file mode 100644 index 34c4a85..0000000 --- a/node_modules/twit/node_modules/request/node_modules/oauth-sign/README.md +++ /dev/null @@ -1,4 +0,0 @@ -oauth-sign -========== - -OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module. diff --git a/node_modules/twit/node_modules/request/node_modules/oauth-sign/index.js b/node_modules/twit/node_modules/request/node_modules/oauth-sign/index.js deleted file mode 100644 index dadcba9..0000000 --- a/node_modules/twit/node_modules/request/node_modules/oauth-sign/index.js +++ /dev/null @@ -1,136 +0,0 @@ -var crypto = require('crypto') - , qs = require('querystring') - ; - -function sha1 (key, body) { - return crypto.createHmac('sha1', key).update(body).digest('base64') -} - -function rsa (key, body) { - return crypto.createSign("RSA-SHA1").update(body).sign(key, 'base64'); -} - -function rfc3986 (str) { - return encodeURIComponent(str) - .replace(/!/g,'%21') - .replace(/\*/g,'%2A') - .replace(/\(/g,'%28') - .replace(/\)/g,'%29') - .replace(/'/g,'%27') - ; -} - -// Maps object to bi-dimensional array -// Converts { foo: 'A', bar: [ 'b', 'B' ]} to -// [ ['foo', 'A'], ['bar', 'b'], ['bar', 'B'] ] -function map (obj) { - var key, val, arr = [] - for (key in obj) { - val = obj[key] - if (Array.isArray(val)) - for (var i = 0; i < val.length; i++) - arr.push([key, val[i]]) - else if (typeof val === "object") - for (var prop in val) - arr.push([key + '[' + prop + ']', val[prop]]); - else - arr.push([key, val]) - } - return arr -} - -// Compare function for sort -function compare (a, b) { - return a > b ? 1 : a < b ? -1 : 0 -} - -function generateBase (httpMethod, base_uri, params) { - // adapted from https://dev.twitter.com/docs/auth/oauth and - // https://dev.twitter.com/docs/auth/creating-signature - - // Parameter normalization - // http://tools.ietf.org/html/rfc5849#section-3.4.1.3.2 - var normalized = map(params) - // 1. First, the name and value of each parameter are encoded - .map(function (p) { - return [ rfc3986(p[0]), rfc3986(p[1] || '') ] - }) - // 2. The parameters are sorted by name, using ascending byte value - // ordering. If two or more parameters share the same name, they - // are sorted by their value. - .sort(function (a, b) { - return compare(a[0], b[0]) || compare(a[1], b[1]) - }) - // 3. The name of each parameter is concatenated to its corresponding - // value using an "=" character (ASCII code 61) as a separator, even - // if the value is empty. - .map(function (p) { return p.join('=') }) - // 4. The sorted name/value pairs are concatenated together into a - // single string by using an "&" character (ASCII code 38) as - // separator. - .join('&') - - var base = [ - rfc3986(httpMethod ? httpMethod.toUpperCase() : 'GET'), - rfc3986(base_uri), - rfc3986(normalized) - ].join('&') - - return base -} - -function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) { - var base = generateBase(httpMethod, base_uri, params) - var key = [ - consumer_secret || '', - token_secret || '' - ].map(rfc3986).join('&') - - return sha1(key, base) -} - -function rsasign (httpMethod, base_uri, params, private_key, token_secret) { - var base = generateBase(httpMethod, base_uri, params) - var key = private_key || '' - - return rsa(key, base) -} - -function plaintext (consumer_secret, token_secret) { - var key = [ - consumer_secret || '', - token_secret || '' - ].map(rfc3986).join('&') - - return key -} - -function sign (signMethod, httpMethod, base_uri, params, consumer_secret, token_secret) { - var method - var skipArgs = 1 - - switch (signMethod) { - case 'RSA-SHA1': - method = rsasign - break - case 'HMAC-SHA1': - method = hmacsign - break - case 'PLAINTEXT': - method = plaintext - skipArgs = 4 - break - default: - throw new Error("Signature method not supported: " + signMethod) - } - - return method.apply(null, [].slice.call(arguments, skipArgs)) -} - -exports.hmacsign = hmacsign -exports.rsasign = rsasign -exports.plaintext = plaintext -exports.sign = sign -exports.rfc3986 = rfc3986 -exports.generateBase = generateBase - diff --git a/node_modules/twit/node_modules/request/node_modules/oauth-sign/package.json b/node_modules/twit/node_modules/request/node_modules/oauth-sign/package.json deleted file mode 100644 index 5c01494..0000000 --- a/node_modules/twit/node_modules/request/node_modules/oauth-sign/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "oauth-sign", - "description": "OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module.", - "version": "0.8.2", - "license": "Apache-2.0", - "repository": { - "url": "git+https://github.com/mikeal/oauth-sign.git" - }, - "main": "index.js", - "files": [ - "index.js" - ], - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "scripts": { - "test": "node test.js" - }, - "gitHead": "0b034206316132f57e26970152c2fb18e71bddd5", - "bugs": { - "url": "https://github.com/mikeal/oauth-sign/issues" - }, - "homepage": "https://github.com/mikeal/oauth-sign#readme", - "_id": "oauth-sign@0.8.2", - "_shasum": "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43", - "_from": "oauth-sign@>=0.8.0 <0.9.0", - "_npmVersion": "2.15.3", - "_nodeVersion": "5.9.0", - "_npmUser": { - "name": "simov", - "email": "simeonvelichkov@gmail.com" - }, - "dist": { - "shasum": "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43", - "tarball": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz" - }, - "maintainers": [ - { - "name": "mikeal", - "email": "mikeal.rogers@gmail.com" - }, - { - "name": "nylen", - "email": "jnylen@gmail.com" - }, - { - "name": "simov", - "email": "simeonvelichkov@gmail.com" - } - ], - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/oauth-sign-0.8.2.tgz_1462396399020_0.8175400267355144" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/twit/node_modules/request/node_modules/qs/.eslintignore b/node_modules/twit/node_modules/request/node_modules/qs/.eslintignore deleted file mode 100644 index 1521c8b..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -dist diff --git a/node_modules/twit/node_modules/request/node_modules/qs/.jshintignore b/node_modules/twit/node_modules/request/node_modules/qs/.jshintignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/.jshintignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/twit/node_modules/request/node_modules/qs/.jshintrc b/node_modules/twit/node_modules/request/node_modules/qs/.jshintrc deleted file mode 100644 index 997b3f7..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/.jshintrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "node": true, - - "curly": true, - "latedef": true, - "quotmark": true, - "undef": true, - "unused": true, - "trailing": true -} diff --git a/node_modules/twit/node_modules/request/node_modules/qs/.npmignore b/node_modules/twit/node_modules/request/node_modules/qs/.npmignore deleted file mode 100644 index 2abba8d..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/.npmignore +++ /dev/null @@ -1,19 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov -complexity.md -dist diff --git a/node_modules/twit/node_modules/request/node_modules/qs/.travis.yml b/node_modules/twit/node_modules/request/node_modules/qs/.travis.yml deleted file mode 100644 index f502178..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js - -node_js: - - 0.10 - - 0.12 - - iojs diff --git a/node_modules/twit/node_modules/request/node_modules/qs/CHANGELOG.md b/node_modules/twit/node_modules/request/node_modules/qs/CHANGELOG.md deleted file mode 100644 index 1fadc78..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/CHANGELOG.md +++ /dev/null @@ -1,88 +0,0 @@ - -## [**3.1.0**](https://github.com/hapijs/qs/issues?milestone=24&state=open) -- [**#89**](https://github.com/hapijs/qs/issues/89) Add option to disable "Transform dot notation to bracket notation" - -## [**3.0.0**](https://github.com/hapijs/qs/issues?milestone=23&state=closed) -- [**#77**](https://github.com/hapijs/qs/issues/77) Perf boost -- [**#60**](https://github.com/hapijs/qs/issues/60) Add explicit option to disable array parsing -- [**#80**](https://github.com/hapijs/qs/issues/80) qs.parse silently drops properties -- [**#74**](https://github.com/hapijs/qs/issues/74) Bad parse when turning array into object -- [**#81**](https://github.com/hapijs/qs/issues/81) Add a `filter` option -- [**#68**](https://github.com/hapijs/qs/issues/68) Fixed issue with recursion and passing strings into objects. -- [**#66**](https://github.com/hapijs/qs/issues/66) Add mixed array and object dot notation support Closes: #47 -- [**#76**](https://github.com/hapijs/qs/issues/76) RFC 3986 -- [**#85**](https://github.com/hapijs/qs/issues/85) No equal sign -- [**#84**](https://github.com/hapijs/qs/issues/84) update license attribute - -## [**2.4.1**](https://github.com/hapijs/qs/issues?milestone=20&state=closed) -- [**#73**](https://github.com/hapijs/qs/issues/73) Property 'hasOwnProperty' of object # is not a function - -## [**2.4.0**](https://github.com/hapijs/qs/issues?milestone=19&state=closed) -- [**#70**](https://github.com/hapijs/qs/issues/70) Add arrayFormat option - -## [**2.3.3**](https://github.com/hapijs/qs/issues?milestone=18&state=closed) -- [**#59**](https://github.com/hapijs/qs/issues/59) make sure array indexes are >= 0, closes #57 -- [**#58**](https://github.com/hapijs/qs/issues/58) make qs usable for browser loader - -## [**2.3.2**](https://github.com/hapijs/qs/issues?milestone=17&state=closed) -- [**#55**](https://github.com/hapijs/qs/issues/55) allow merging a string into an object - -## [**2.3.1**](https://github.com/hapijs/qs/issues?milestone=16&state=closed) -- [**#52**](https://github.com/hapijs/qs/issues/52) Return "undefined" and "false" instead of throwing "TypeError". - -## [**2.3.0**](https://github.com/hapijs/qs/issues?milestone=15&state=closed) -- [**#50**](https://github.com/hapijs/qs/issues/50) add option to omit array indices, closes #46 - -## [**2.2.5**](https://github.com/hapijs/qs/issues?milestone=14&state=closed) -- [**#39**](https://github.com/hapijs/qs/issues/39) Is there an alternative to Buffer.isBuffer? -- [**#49**](https://github.com/hapijs/qs/issues/49) refactor utils.merge, fixes #45 -- [**#41**](https://github.com/hapijs/qs/issues/41) avoid browserifying Buffer, for #39 - -## [**2.2.4**](https://github.com/hapijs/qs/issues?milestone=13&state=closed) -- [**#38**](https://github.com/hapijs/qs/issues/38) how to handle object keys beginning with a number - -## [**2.2.3**](https://github.com/hapijs/qs/issues?milestone=12&state=closed) -- [**#37**](https://github.com/hapijs/qs/issues/37) parser discards first empty value in array -- [**#36**](https://github.com/hapijs/qs/issues/36) Update to lab 4.x - -## [**2.2.2**](https://github.com/hapijs/qs/issues?milestone=11&state=closed) -- [**#33**](https://github.com/hapijs/qs/issues/33) Error when plain object in a value -- [**#34**](https://github.com/hapijs/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty -- [**#24**](https://github.com/hapijs/qs/issues/24) Changelog? Semver? - -## [**2.2.1**](https://github.com/hapijs/qs/issues?milestone=10&state=closed) -- [**#32**](https://github.com/hapijs/qs/issues/32) account for circular references properly, closes #31 -- [**#31**](https://github.com/hapijs/qs/issues/31) qs.parse stackoverflow on circular objects - -## [**2.2.0**](https://github.com/hapijs/qs/issues?milestone=9&state=closed) -- [**#26**](https://github.com/hapijs/qs/issues/26) Don't use Buffer global if it's not present -- [**#30**](https://github.com/hapijs/qs/issues/30) Bug when merging non-object values into arrays -- [**#29**](https://github.com/hapijs/qs/issues/29) Don't call Utils.clone at the top of Utils.merge -- [**#23**](https://github.com/hapijs/qs/issues/23) Ability to not limit parameters? - -## [**2.1.0**](https://github.com/hapijs/qs/issues?milestone=8&state=closed) -- [**#22**](https://github.com/hapijs/qs/issues/22) Enable using a RegExp as delimiter - -## [**2.0.0**](https://github.com/hapijs/qs/issues?milestone=7&state=closed) -- [**#18**](https://github.com/hapijs/qs/issues/18) Why is there arrayLimit? -- [**#20**](https://github.com/hapijs/qs/issues/20) Configurable parametersLimit -- [**#21**](https://github.com/hapijs/qs/issues/21) make all limits optional, for #18, for #20 - -## [**1.2.2**](https://github.com/hapijs/qs/issues?milestone=6&state=closed) -- [**#19**](https://github.com/hapijs/qs/issues/19) Don't overwrite null values - -## [**1.2.1**](https://github.com/hapijs/qs/issues?milestone=5&state=closed) -- [**#16**](https://github.com/hapijs/qs/issues/16) ignore non-string delimiters -- [**#15**](https://github.com/hapijs/qs/issues/15) Close code block - -## [**1.2.0**](https://github.com/hapijs/qs/issues?milestone=4&state=closed) -- [**#12**](https://github.com/hapijs/qs/issues/12) Add optional delim argument -- [**#13**](https://github.com/hapijs/qs/issues/13) fix #11: flattened keys in array are now correctly parsed - -## [**1.1.0**](https://github.com/hapijs/qs/issues?milestone=3&state=closed) -- [**#7**](https://github.com/hapijs/qs/issues/7) Empty values of a POST array disappear after being submitted -- [**#9**](https://github.com/hapijs/qs/issues/9) Should not omit equals signs (=) when value is null -- [**#6**](https://github.com/hapijs/qs/issues/6) Minor grammar fix in README - -## [**1.0.2**](https://github.com/hapijs/qs/issues?milestone=2&state=closed) -- [**#5**](https://github.com/hapijs/qs/issues/5) array holes incorrectly copied into object on large index diff --git a/node_modules/twit/node_modules/request/node_modules/qs/CONTRIBUTING.md b/node_modules/twit/node_modules/request/node_modules/qs/CONTRIBUTING.md deleted file mode 100644 index 8928361..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/CONTRIBUTING.md +++ /dev/null @@ -1 +0,0 @@ -Please view our [hapijs contributing guide](https://github.com/hapijs/hapi/blob/master/CONTRIBUTING.md). diff --git a/node_modules/twit/node_modules/request/node_modules/qs/LICENSE b/node_modules/twit/node_modules/request/node_modules/qs/LICENSE deleted file mode 100644 index d456948..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2014 Nathan LaFreniere and other contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * * * - -The complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors diff --git a/node_modules/twit/node_modules/request/node_modules/qs/Makefile b/node_modules/twit/node_modules/request/node_modules/qs/Makefile deleted file mode 100644 index 31cc899..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -test: - @node node_modules/lab/bin/lab -a code -L -test-cov: - @node node_modules/lab/bin/lab -a code -t 100 -L -test-cov-html: - @node node_modules/lab/bin/lab -a code -L -r html -o coverage.html - -.PHONY: test test-cov test-cov-html diff --git a/node_modules/twit/node_modules/request/node_modules/qs/README.md b/node_modules/twit/node_modules/request/node_modules/qs/README.md deleted file mode 100644 index 0c72aba..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/README.md +++ /dev/null @@ -1,303 +0,0 @@ -# qs - -A querystring parsing and stringifying library with some added security. - -[![Build Status](https://secure.travis-ci.org/hapijs/qs.svg)](http://travis-ci.org/hapijs/qs) - -Lead Maintainer: [Nathan LaFreniere](https://github.com/nlf) - -The **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring). - -## Usage - -```javascript -var Qs = require('qs'); - -var obj = Qs.parse('a=c'); // { a: 'c' } -var str = Qs.stringify(obj); // 'a=c' -``` - -### Parsing Objects - -```javascript -Qs.parse(string, [options]); -``` - -**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`, or prefixing the sub-key with a dot `.`. -For example, the string `'foo[bar]=baz'` converts to: - -```javascript -{ - foo: { - bar: 'baz' - } -} -``` - -The parsed value is returned as a plain object, created via `Object.create(null)` and as such you should be aware that prototype methods do not exist on it and a user may set those names to whatever value they like: - -```javascript -Qs.parse('a.hasOwnProperty=b'); -// { a: { hasOwnProperty: 'b' } } -``` - -URI encoded strings work too: - -```javascript -Qs.parse('a%5Bb%5D=c'); -// { a: { b: 'c' } } -``` - -You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`: - -```javascript -{ - foo: { - bar: { - baz: 'foobarbaz' - } - } -} -``` - -By default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like -`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be: - -```javascript -{ - a: { - b: { - c: { - d: { - e: { - f: { - '[g][h][i]': 'j' - } - } - } - } - } - } -} -``` - -This depth can be overridden by passing a `depth` option to `Qs.parse(string, [options])`: - -```javascript -Qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 }); -// { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } } -``` - -The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number. - -For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option: - -```javascript -Qs.parse('a=b&c=d', { parameterLimit: 1 }); -// { a: 'b' } -``` - -An optional delimiter can also be passed: - -```javascript -Qs.parse('a=b;c=d', { delimiter: ';' }); -// { a: 'b', c: 'd' } -``` - -Delimiters can be a regular expression too: - -```javascript -Qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ }); -// { a: 'b', c: 'd', e: 'f' } -``` - -### Parsing Arrays - -**qs** can also parse arrays using a similar `[]` notation: - -```javascript -Qs.parse('a[]=b&a[]=c'); -// { a: ['b', 'c'] } -``` - -You may specify an index as well: - -```javascript -Qs.parse('a[1]=c&a[0]=b'); -// { a: ['b', 'c'] } -``` - -Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number -to create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving -their order: - -```javascript -Qs.parse('a[1]=b&a[15]=c'); -// { a: ['b', 'c'] } -``` - -Note that an empty string is also a value, and will be preserved: - -```javascript -Qs.parse('a[]=&a[]=b'); -// { a: ['', 'b'] } -Qs.parse('a[0]=b&a[1]=&a[2]=c'); -// { a: ['b', '', 'c'] } -``` - -**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will -instead be converted to an object with the index as the key: - -```javascript -Qs.parse('a[100]=b'); -// { a: { '100': 'b' } } -``` - -This limit can be overridden by passing an `arrayLimit` option: - -```javascript -Qs.parse('a[1]=b', { arrayLimit: 0 }); -// { a: { '1': 'b' } } -``` - -To disable array parsing entirely, set `parseArrays` to `false`. - -```javascript -Qs.parse('a[]=b', { parseArrays: false }); -// { a: { '0': 'b' } } -``` - -If you mix notations, **qs** will merge the two items into an object: - -```javascript -Qs.parse('a[0]=b&a[b]=c'); -// { a: { '0': 'b', b: 'c' } } -``` - -You can also create arrays of objects: - -```javascript -Qs.parse('a[][b]=c'); -// { a: [{ b: 'c' }] } -``` - -### Stringifying - -```javascript -Qs.stringify(object, [options]); -``` - -When stringifying, **qs** always URI encodes output. Objects are stringified as you would expect: - -```javascript -Qs.stringify({ a: 'b' }); -// 'a=b' -Qs.stringify({ a: { b: 'c' } }); -// 'a%5Bb%5D=c' -``` - -Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage. - -When arrays are stringified, by default they are given explicit indices: - -```javascript -Qs.stringify({ a: ['b', 'c', 'd'] }); -// 'a[0]=b&a[1]=c&a[2]=d' -``` - -You may override this by setting the `indices` option to `false`: - -```javascript -Qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }); -// 'a=b&a=c&a=d' -``` - -You may use the `arrayFormat` option to specify the format of the output array - -```javascript -Qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }) -// 'a[0]=b&a[1]=c' -Qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }) -// 'a[]=b&a[]=c' -Qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }) -// 'a=b&a=c' -``` - -Empty strings and null values will omit the value, but the equals sign (=) remains in place: - -```javascript -Qs.stringify({ a: '' }); -// 'a=' -``` - -Properties that are set to `undefined` will be omitted entirely: - -```javascript -Qs.stringify({ a: null, b: undefined }); -// 'a=' -``` - -The delimiter may be overridden with stringify as well: - -```javascript -Qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }); -// 'a=b;c=d' -``` - -Finally, you can use the `filter` option to restrict which keys will be included in the stringified output. -If you pass a function, it will be called for each key to obtain the replacement value. Otherwise, if you -pass an array, it will be used to select properties and array indices for stringification: - -```javascript -function filterFunc(prefix, value) { - if (prefix == 'b') { - // Return an `undefined` value to omit a property. - return; - } - if (prefix == 'e[f]') { - return value.getTime(); - } - if (prefix == 'e[g][0]') { - return value * 2; - } - return value; -} -Qs.stringify({ a: 'b', c: 'd', e: { f: new Date(123), g: [2] } }, { filter: filterFunc }) -// 'a=b&c=d&e[f]=123&e[g][0]=4' -Qs.stringify({ a: 'b', c: 'd', e: 'f' }, { filter: ['a', 'e'] }) -// 'a=b&e=f' -Qs.stringify({ a: ['b', 'c', 'd'], e: 'f' }, { filter: ['a', 0, 2] }) -// 'a[0]=b&a[2]=d' -``` - -### Handling of `null` values - -By default, `null` values are treated like empty strings: - -```javascript -Qs.stringify({ a: null, b: '' }); -// 'a=&b=' -``` - -Parsing does not distinguish between parameters with and without equal signs. Both are converted to empty strings. - -```javascript -Qs.parse('a&b=') -// { a: '', b: '' } -``` - -To distinguish between `null` values and empty strings use the `strictNullHandling` flag. In the result string the `null` -values have no `=` sign: - -```javascript -Qs.stringify({ a: null, b: '' }, { strictNullHandling: true }); -// 'a&b=' -``` - -To parse values without `=` back to `null` use the `strictNullHandling` flag: - -```javascript -Qs.parse('a&b=', { strictNullHandling: true }); -// { a: null, b: '' } - -``` diff --git a/node_modules/twit/node_modules/request/node_modules/qs/bower.json b/node_modules/twit/node_modules/request/node_modules/qs/bower.json deleted file mode 100644 index ffd0641..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/bower.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "qs", - "main": "dist/qs.js", - "version": "3.0.0", - "homepage": "https://github.com/hapijs/qs", - "authors": [ - "Nathan LaFreniere " - ], - "description": "A querystring parser that supports nesting and arrays, with a depth limit", - "keywords": [ - "querystring", - "qs" - ], - "license": "BSD-3-Clause", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/node_modules/twit/node_modules/request/node_modules/qs/index.js b/node_modules/twit/node_modules/request/node_modules/qs/index.js deleted file mode 100644 index 2291cd8..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/'); diff --git a/node_modules/twit/node_modules/request/node_modules/qs/lib/index.js b/node_modules/twit/node_modules/request/node_modules/qs/lib/index.js deleted file mode 100644 index 0e09493..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/lib/index.js +++ /dev/null @@ -1,15 +0,0 @@ -// Load modules - -var Stringify = require('./stringify'); -var Parse = require('./parse'); - - -// Declare internals - -var internals = {}; - - -module.exports = { - stringify: Stringify, - parse: Parse -}; diff --git a/node_modules/twit/node_modules/request/node_modules/qs/lib/parse.js b/node_modules/twit/node_modules/request/node_modules/qs/lib/parse.js deleted file mode 100644 index 1a1e205..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/lib/parse.js +++ /dev/null @@ -1,166 +0,0 @@ -// Load modules - -var Utils = require('./utils'); - - -// Declare internals - -var internals = { - delimiter: '&', - depth: 5, - arrayLimit: 20, - parameterLimit: 1000, - strictNullHandling: false -}; - - -internals.parseValues = function (str, options) { - - var obj = {}; - var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit); - - for (var i = 0, il = parts.length; i < il; ++i) { - var part = parts[i]; - var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1; - - if (pos === -1) { - obj[Utils.decode(part)] = ''; - - if (options.strictNullHandling) { - obj[Utils.decode(part)] = null; - } - } - else { - var key = Utils.decode(part.slice(0, pos)); - var val = Utils.decode(part.slice(pos + 1)); - - if (!Object.prototype.hasOwnProperty.call(obj, key)) { - obj[key] = val; - } - else { - obj[key] = [].concat(obj[key]).concat(val); - } - } - } - - return obj; -}; - - -internals.parseObject = function (chain, val, options) { - - if (!chain.length) { - return val; - } - - var root = chain.shift(); - - var obj; - if (root === '[]') { - obj = []; - obj = obj.concat(internals.parseObject(chain, val, options)); - } - else { - obj = Object.create(null); - var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root; - var index = parseInt(cleanRoot, 10); - var indexString = '' + index; - if (!isNaN(index) && - root !== cleanRoot && - indexString === cleanRoot && - index >= 0 && - (options.parseArrays && - index <= options.arrayLimit)) { - - obj = []; - obj[index] = internals.parseObject(chain, val, options); - } - else { - obj[cleanRoot] = internals.parseObject(chain, val, options); - } - } - - return obj; -}; - - -internals.parseKeys = function (key, val, options) { - - if (!key) { - return; - } - - // Transform dot notation to bracket notation - - if (options.allowDots) { - key = key.replace(/\.([^\.\[]+)/g, '[$1]'); - } - - // The regex chunks - - var parent = /^([^\[\]]*)/; - var child = /(\[[^\[\]]*\])/g; - - // Get the parent - - var segment = parent.exec(key); - - // Stash the parent if it exists - - var keys = []; - if (segment[1]) { - keys.push(segment[1]); - } - - // Loop through children appending to the array until we hit depth - - var i = 0; - while ((segment = child.exec(key)) !== null && i < options.depth) { - - ++i; - keys.push(segment[1]); - } - - // If there's a remainder, just add whatever is left - - if (segment) { - keys.push('[' + key.slice(segment.index) + ']'); - } - - return internals.parseObject(keys, val, options); -}; - - -module.exports = function (str, options) { - - if (str === '' || - str === null || - typeof str === 'undefined') { - - return Object.create(null); - } - - options = options || {}; - options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : internals.delimiter; - options.depth = typeof options.depth === 'number' ? options.depth : internals.depth; - options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : internals.arrayLimit; - options.parseArrays = options.parseArrays !== false; - options.allowDots = options.allowDots !== false; - options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : internals.parameterLimit; - options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : internals.strictNullHandling; - - - var tempObj = typeof str === 'string' ? internals.parseValues(str, options) : str; - var obj = Object.create(null); - - // Iterate over the keys and setup the new object - - var keys = Object.keys(tempObj); - for (var i = 0, il = keys.length; i < il; ++i) { - var key = keys[i]; - var newObj = internals.parseKeys(key, tempObj[key], options); - obj = Utils.merge(obj, newObj); - } - - return Utils.compact(obj); -}; diff --git a/node_modules/twit/node_modules/request/node_modules/qs/lib/stringify.js b/node_modules/twit/node_modules/request/node_modules/qs/lib/stringify.js deleted file mode 100644 index 7414284..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/lib/stringify.js +++ /dev/null @@ -1,121 +0,0 @@ -// Load modules - -var Utils = require('./utils'); - - -// Declare internals - -var internals = { - delimiter: '&', - arrayPrefixGenerators: { - brackets: function (prefix, key) { - - return prefix + '[]'; - }, - indices: function (prefix, key) { - - return prefix + '[' + key + ']'; - }, - repeat: function (prefix, key) { - - return prefix; - } - }, - strictNullHandling: false -}; - - -internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHandling, filter) { - - if (typeof filter === 'function') { - obj = filter(prefix, obj); - } - else if (Utils.isBuffer(obj)) { - obj = obj.toString(); - } - else if (obj instanceof Date) { - obj = obj.toISOString(); - } - else if (obj === null) { - if (strictNullHandling) { - return Utils.encode(prefix); - } - - obj = ''; - } - - if (typeof obj === 'string' || - typeof obj === 'number' || - typeof obj === 'boolean') { - - return [Utils.encode(prefix) + '=' + Utils.encode(obj)]; - } - - var values = []; - - if (typeof obj === 'undefined') { - return values; - } - - var objKeys = Array.isArray(filter) ? filter : Object.keys(obj); - for (var i = 0, il = objKeys.length; i < il; ++i) { - var key = objKeys[i]; - - if (Array.isArray(obj)) { - values = values.concat(internals.stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, filter)); - } - else { - values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', generateArrayPrefix, strictNullHandling, filter)); - } - } - - return values; -}; - - -module.exports = function (obj, options) { - - options = options || {}; - var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter; - var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : internals.strictNullHandling; - var objKeys; - var filter; - if (typeof options.filter === 'function') { - filter = options.filter; - obj = filter('', obj); - } - else if (Array.isArray(options.filter)) { - objKeys = filter = options.filter; - } - - var keys = []; - - if (typeof obj !== 'object' || - obj === null) { - - return ''; - } - - var arrayFormat; - if (options.arrayFormat in internals.arrayPrefixGenerators) { - arrayFormat = options.arrayFormat; - } - else if ('indices' in options) { - arrayFormat = options.indices ? 'indices' : 'repeat'; - } - else { - arrayFormat = 'indices'; - } - - var generateArrayPrefix = internals.arrayPrefixGenerators[arrayFormat]; - - if (!objKeys) { - objKeys = Object.keys(obj); - } - for (var i = 0, il = objKeys.length; i < il; ++i) { - var key = objKeys[i]; - keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix, strictNullHandling, filter)); - } - - return keys.join(delimiter); -}; diff --git a/node_modules/twit/node_modules/request/node_modules/qs/lib/utils.js b/node_modules/twit/node_modules/request/node_modules/qs/lib/utils.js deleted file mode 100644 index ec93afc..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/lib/utils.js +++ /dev/null @@ -1,190 +0,0 @@ -// Load modules - - -// Declare internals - -var internals = {}; -internals.hexTable = new Array(256); -for (var i = 0; i < 256; ++i) { - internals.hexTable[i] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase(); -} - - -exports.arrayToObject = function (source) { - - var obj = Object.create(null); - for (var i = 0, il = source.length; i < il; ++i) { - if (typeof source[i] !== 'undefined') { - - obj[i] = source[i]; - } - } - - return obj; -}; - - -exports.merge = function (target, source) { - - if (!source) { - return target; - } - - if (typeof source !== 'object') { - if (Array.isArray(target)) { - target.push(source); - } - else if (typeof target === 'object') { - target[source] = true; - } - else { - target = [target, source]; - } - - return target; - } - - if (typeof target !== 'object') { - target = [target].concat(source); - return target; - } - - if (Array.isArray(target) && - !Array.isArray(source)) { - - target = exports.arrayToObject(target); - } - - var keys = Object.keys(source); - for (var k = 0, kl = keys.length; k < kl; ++k) { - var key = keys[k]; - var value = source[key]; - - if (!target[key]) { - target[key] = value; - } - else { - target[key] = exports.merge(target[key], value); - } - } - - return target; -}; - - -exports.decode = function (str) { - - try { - return decodeURIComponent(str.replace(/\+/g, ' ')); - } catch (e) { - return str; - } -}; - -exports.encode = function (str) { - - // This code was originally written by Brian White (mscdex) for the io.js core querystring library. - // It has been adapted here for stricter adherence to RFC 3986 - if (str.length === 0) { - return str; - } - - if (typeof str !== 'string') { - str = '' + str; - } - - var out = ''; - for (var i = 0, il = str.length; i < il; ++i) { - var c = str.charCodeAt(i); - - if (c === 0x2D || // - - c === 0x2E || // . - c === 0x5F || // _ - c === 0x7E || // ~ - (c >= 0x30 && c <= 0x39) || // 0-9 - (c >= 0x41 && c <= 0x5A) || // a-z - (c >= 0x61 && c <= 0x7A)) { // A-Z - - out += str[i]; - continue; - } - - if (c < 0x80) { - out += internals.hexTable[c]; - continue; - } - - if (c < 0x800) { - out += internals.hexTable[0xC0 | (c >> 6)] + internals.hexTable[0x80 | (c & 0x3F)]; - continue; - } - - if (c < 0xD800 || c >= 0xE000) { - out += internals.hexTable[0xE0 | (c >> 12)] + internals.hexTable[0x80 | ((c >> 6) & 0x3F)] + internals.hexTable[0x80 | (c & 0x3F)]; - continue; - } - - ++i; - c = 0x10000 + (((c & 0x3FF) << 10) | (str.charCodeAt(i) & 0x3FF)); - out += internals.hexTable[0xF0 | (c >> 18)] + internals.hexTable[0x80 | ((c >> 12) & 0x3F)] + internals.hexTable[0x80 | ((c >> 6) & 0x3F)] + internals.hexTable[0x80 | (c & 0x3F)]; - } - - return out; -}; - -exports.compact = function (obj, refs) { - - if (typeof obj !== 'object' || - obj === null) { - - return obj; - } - - refs = refs || []; - var lookup = refs.indexOf(obj); - if (lookup !== -1) { - return refs[lookup]; - } - - refs.push(obj); - - if (Array.isArray(obj)) { - var compacted = []; - - for (var i = 0, il = obj.length; i < il; ++i) { - if (typeof obj[i] !== 'undefined') { - compacted.push(obj[i]); - } - } - - return compacted; - } - - var keys = Object.keys(obj); - for (i = 0, il = keys.length; i < il; ++i) { - var key = keys[i]; - obj[key] = exports.compact(obj[key], refs); - } - - return obj; -}; - - -exports.isRegExp = function (obj) { - - return Object.prototype.toString.call(obj) === '[object RegExp]'; -}; - - -exports.isBuffer = function (obj) { - - if (obj === null || - typeof obj === 'undefined') { - - return false; - } - - return !!(obj.constructor && - obj.constructor.isBuffer && - obj.constructor.isBuffer(obj)); -}; diff --git a/node_modules/twit/node_modules/request/node_modules/qs/package.json b/node_modules/twit/node_modules/request/node_modules/qs/package.json deleted file mode 100644 index 0776b6e..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "qs", - "version": "3.1.0", - "description": "A querystring parser that supports nesting and arrays, with a depth limit", - "homepage": "https://github.com/hapijs/qs", - "main": "index.js", - "dependencies": {}, - "devDependencies": { - "browserify": "^10.2.1", - "code": "1.x.x", - "lab": "5.x.x" - }, - "scripts": { - "test": "make test-cov", - "dist": "browserify --standalone Qs index.js > dist/qs.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/hapijs/qs.git" - }, - "keywords": [ - "querystring", - "qs" - ], - "license": "BSD-3-Clause", - "gitHead": "e53b1b242a55f886531954ebdd78b3b20efadaf0", - "bugs": { - "url": "https://github.com/hapijs/qs/issues" - }, - "_id": "qs@3.1.0", - "_shasum": "d0e9ae745233a12dc43fb4f3055bba446261153c", - "_from": "qs@>=3.1.0 <3.2.0", - "_npmVersion": "2.9.0", - "_nodeVersion": "0.12.2", - "_npmUser": { - "name": "nlf", - "email": "quitlahok@gmail.com" - }, - "dist": { - "shasum": "d0e9ae745233a12dc43fb4f3055bba446261153c", - "tarball": "https://registry.npmjs.org/qs/-/qs-3.1.0.tgz" - }, - "maintainers": [ - { - "name": "nlf", - "email": "quitlahok@gmail.com" - }, - { - "name": "hueniverse", - "email": "eran@hueniverse.com" - } - ], - "directories": {}, - "_resolved": "https://registry.npmjs.org/qs/-/qs-3.1.0.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/twit/node_modules/request/node_modules/qs/test/parse.js b/node_modules/twit/node_modules/request/node_modules/qs/test/parse.js deleted file mode 100644 index 9afbf35..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/test/parse.js +++ /dev/null @@ -1,455 +0,0 @@ -/* eslint no-extend-native:0 */ -// Load modules - -var Code = require('code'); -var Lab = require('lab'); -var Qs = require('../'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var lab = exports.lab = Lab.script(); -var expect = Code.expect; -var describe = lab.experiment; -var it = lab.test; - - -describe('parse()', function () { - - it('parses a simple string', function (done) { - - expect(Qs.parse('0=foo')).to.deep.equal({ '0': 'foo' }, { prototype: false }); - expect(Qs.parse('foo=c++')).to.deep.equal({ foo: 'c ' }, { prototype: false }); - expect(Qs.parse('a[>=]=23')).to.deep.equal({ a: { '>=': '23' } }, { prototype: false }); - expect(Qs.parse('a[<=>]==23')).to.deep.equal({ a: { '<=>': '=23' } }, { prototype: false }); - expect(Qs.parse('a[==]=23')).to.deep.equal({ a: { '==': '23' } }, { prototype: false }); - expect(Qs.parse('foo', {strictNullHandling: true})).to.deep.equal({ foo: null }, { prototype: false }); - expect(Qs.parse('foo' )).to.deep.equal({ foo: '' }, { prototype: false }); - expect(Qs.parse('foo=')).to.deep.equal({ foo: '' }, { prototype: false }); - expect(Qs.parse('foo=bar')).to.deep.equal({ foo: 'bar' }, { prototype: false }); - expect(Qs.parse(' foo = bar = baz ')).to.deep.equal({ ' foo ': ' bar = baz ' }, { prototype: false }); - expect(Qs.parse('foo=bar=baz')).to.deep.equal({ foo: 'bar=baz' }, { prototype: false }); - expect(Qs.parse('foo=bar&bar=baz')).to.deep.equal({ foo: 'bar', bar: 'baz' }, { prototype: false }); - expect(Qs.parse('foo2=bar2&baz2=')).to.deep.equal({ foo2: 'bar2', baz2: '' }, { prototype: false }); - expect(Qs.parse('foo=bar&baz', {strictNullHandling: true})).to.deep.equal({ foo: 'bar', baz: null }, { prototype: false }); - expect(Qs.parse('foo=bar&baz')).to.deep.equal({ foo: 'bar', baz: '' }, { prototype: false }); - expect(Qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World')).to.deep.equal({ - cht: 'p3', - chd: 't:60,40', - chs: '250x100', - chl: 'Hello|World' - }, { prototype: false }); - done(); - }); - - it('allows disabling dot notation', function (done) { - - expect(Qs.parse('a.b=c')).to.deep.equal({ a: { b: 'c' } }, { prototype: false }); - expect(Qs.parse('a.b=c', { allowDots: false })).to.deep.equal({ 'a.b': 'c' }, { prototype: false }); - done(); - }); - - it('parses a single nested string', function (done) { - - expect(Qs.parse('a[b]=c')).to.deep.equal({ a: { b: 'c' } }, { prototype: false }); - done(); - }); - - it('parses a double nested string', function (done) { - - expect(Qs.parse('a[b][c]=d')).to.deep.equal({ a: { b: { c: 'd' } } }, { prototype: false }); - done(); - }); - - it('defaults to a depth of 5', function (done) { - - expect(Qs.parse('a[b][c][d][e][f][g][h]=i')).to.deep.equal({ a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } }, { prototype: false }); - done(); - }); - - it('only parses one level when depth = 1', function (done) { - - expect(Qs.parse('a[b][c]=d', { depth: 1 })).to.deep.equal({ a: { b: { '[c]': 'd' } } }, { prototype: false }); - expect(Qs.parse('a[b][c][d]=e', { depth: 1 })).to.deep.equal({ a: { b: { '[c][d]': 'e' } } }, { prototype: false }); - done(); - }); - - it('parses a simple array', function (done) { - - expect(Qs.parse('a=b&a=c')).to.deep.equal({ a: ['b', 'c'] }, { prototype: false }); - done(); - }); - - it('parses an explicit array', function (done) { - - expect(Qs.parse('a[]=b')).to.deep.equal({ a: ['b'] }, { prototype: false }); - expect(Qs.parse('a[]=b&a[]=c')).to.deep.equal({ a: ['b', 'c'] }, { prototype: false }); - expect(Qs.parse('a[]=b&a[]=c&a[]=d')).to.deep.equal({ a: ['b', 'c', 'd'] }, { prototype: false }); - done(); - }); - - it('parses a mix of simple and explicit arrays', function (done) { - - expect(Qs.parse('a=b&a[]=c')).to.deep.equal({ a: ['b', 'c'] }, { prototype: false }); - expect(Qs.parse('a[]=b&a=c')).to.deep.equal({ a: ['b', 'c'] }, { prototype: false }); - expect(Qs.parse('a[0]=b&a=c')).to.deep.equal({ a: ['b', 'c'] }, { prototype: false }); - expect(Qs.parse('a=b&a[0]=c')).to.deep.equal({ a: ['b', 'c'] }, { prototype: false }); - expect(Qs.parse('a[1]=b&a=c')).to.deep.equal({ a: ['b', 'c'] }, { prototype: false }); - expect(Qs.parse('a=b&a[1]=c')).to.deep.equal({ a: ['b', 'c'] }, { prototype: false }); - done(); - }); - - it('parses a nested array', function (done) { - - expect(Qs.parse('a[b][]=c&a[b][]=d')).to.deep.equal({ a: { b: ['c', 'd'] } }, { prototype: false }); - expect(Qs.parse('a[>=]=25')).to.deep.equal({ a: { '>=': '25' } }, { prototype: false }); - done(); - }); - - it('allows to specify array indices', function (done) { - - expect(Qs.parse('a[1]=c&a[0]=b&a[2]=d')).to.deep.equal({ a: ['b', 'c', 'd'] }, { prototype: false }); - expect(Qs.parse('a[1]=c&a[0]=b')).to.deep.equal({ a: ['b', 'c'] }, { prototype: false }); - expect(Qs.parse('a[1]=c')).to.deep.equal({ a: ['c'] }, { prototype: false }); - done(); - }); - - it('limits specific array indices to 20', function (done) { - - expect(Qs.parse('a[20]=a')).to.deep.equal({ a: ['a'] }, { prototype: false }); - expect(Qs.parse('a[21]=a')).to.deep.equal({ a: { '21': 'a' } }, { prototype: false }); - done(); - }); - - it('supports keys that begin with a number', function (done) { - - expect(Qs.parse('a[12b]=c')).to.deep.equal({ a: { '12b': 'c' } }, { prototype: false }); - done(); - }); - - it('supports encoded = signs', function (done) { - - expect(Qs.parse('he%3Dllo=th%3Dere')).to.deep.equal({ 'he=llo': 'th=ere' }, { prototype: false }); - done(); - }); - - it('is ok with url encoded strings', function (done) { - - expect(Qs.parse('a[b%20c]=d')).to.deep.equal({ a: { 'b c': 'd' } }, { prototype: false }); - expect(Qs.parse('a[b]=c%20d')).to.deep.equal({ a: { b: 'c d' } }, { prototype: false }); - done(); - }); - - it('allows brackets in the value', function (done) { - - expect(Qs.parse('pets=["tobi"]')).to.deep.equal({ pets: '["tobi"]' }, { prototype: false }); - expect(Qs.parse('operators=[">=", "<="]')).to.deep.equal({ operators: '[">=", "<="]' }, { prototype: false }); - done(); - }); - - it('allows empty values', function (done) { - - expect(Qs.parse('')).to.deep.equal({}, { prototype: false }); - expect(Qs.parse(null)).to.deep.equal({}, { prototype: false }); - expect(Qs.parse(undefined)).to.deep.equal({}, { prototype: false }); - done(); - }); - - it('transforms arrays to objects', function (done) { - - expect(Qs.parse('foo[0]=bar&foo[bad]=baz')).to.deep.equal({ foo: { '0': 'bar', bad: 'baz' } }, { prototype: false }); - expect(Qs.parse('foo[bad]=baz&foo[0]=bar')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar' } }, { prototype: false }); - expect(Qs.parse('foo[bad]=baz&foo[]=bar')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar' } }, { prototype: false }); - expect(Qs.parse('foo[]=bar&foo[bad]=baz')).to.deep.equal({ foo: { '0': 'bar', bad: 'baz' } }, { prototype: false }); - expect(Qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar', '1': 'foo' } }, { prototype: false }); - expect(Qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb')).to.deep.equal({foo: [ {a: 'a', b: 'b'}, {a: 'aa', b: 'bb'} ]}, { prototype: false }); - expect(Qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c')).to.deep.equal({ a: { '0': 'b', t: 'u', hasOwnProperty: 'c' } }, { prototype: false }); - expect(Qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y')).to.deep.equal({ a: { '0': 'b', hasOwnProperty: 'c', x: 'y' } }, { prototype: false }); - done(); - }); - - it('transforms arrays to objects (dot notation)', function (done) { - - expect(Qs.parse('foo[0].baz=bar&fool.bad=baz')).to.deep.equal({ foo: [ { baz: 'bar'} ], fool: { bad: 'baz' } }, { prototype: false }); - expect(Qs.parse('foo[0].baz=bar&fool.bad.boo=baz')).to.deep.equal({ foo: [ { baz: 'bar'} ], fool: { bad: { boo: 'baz' } } }, { prototype: false }); - expect(Qs.parse('foo[0][0].baz=bar&fool.bad=baz')).to.deep.equal({ foo: [[ { baz: 'bar'} ]], fool: { bad: 'baz' } }, { prototype: false }); - expect(Qs.parse('foo[0].baz[0]=15&foo[0].bar=2')).to.deep.equal({ foo: [{ baz: ['15'], bar: '2' }] }, { prototype: false }); - expect(Qs.parse('foo[0].baz[0]=15&foo[0].baz[1]=16&foo[0].bar=2')).to.deep.equal({ foo: [{ baz: ['15', '16'], bar: '2' }] }, { prototype: false }); - expect(Qs.parse('foo.bad=baz&foo[0]=bar')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar' } }, { prototype: false }); - expect(Qs.parse('foo.bad=baz&foo[]=bar')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar' } }, { prototype: false }); - expect(Qs.parse('foo[]=bar&foo.bad=baz')).to.deep.equal({ foo: { '0': 'bar', bad: 'baz' } }, { prototype: false }); - expect(Qs.parse('foo.bad=baz&foo[]=bar&foo[]=foo')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar', '1': 'foo' } }, { prototype: false }); - expect(Qs.parse('foo[0].a=a&foo[0].b=b&foo[1].a=aa&foo[1].b=bb')).to.deep.equal({foo: [ {a: 'a', b: 'b'}, {a: 'aa', b: 'bb'} ]}, { prototype: false }); - done(); - }); - - it('can add keys to objects', function (done) { - - expect(Qs.parse('a[b]=c&a=d')).to.deep.equal({ a: { b: 'c', d: true } }, { prototype: false }); - done(); - }); - - it('correctly prunes undefined values when converting an array to an object', function (done) { - - expect(Qs.parse('a[2]=b&a[99999999]=c')).to.deep.equal({ a: { '2': 'b', '99999999': 'c' } }, { prototype: false }); - done(); - }); - - it('supports malformed uri characters', function (done) { - - expect(Qs.parse('{%:%}', {strictNullHandling: true})).to.deep.equal({ '{%:%}': null }, { prototype: false }); - expect(Qs.parse('{%:%}=')).to.deep.equal({ '{%:%}': '' }, { prototype: false }); - expect(Qs.parse('foo=%:%}')).to.deep.equal({ foo: '%:%}' }, { prototype: false }); - done(); - }); - - it('doesn\'t produce empty keys', function (done) { - - expect(Qs.parse('_r=1&')).to.deep.equal({ '_r': '1' }, { prototype: false }); - done(); - }); - - it('cannot access Object prototype', function (done) { - - Qs.parse('constructor[prototype][bad]=bad'); - Qs.parse('bad[constructor][prototype][bad]=bad'); - expect(typeof Object.prototype.bad).to.equal('undefined'); - done(); - }); - - it('parses arrays of objects', function (done) { - - expect(Qs.parse('a[][b]=c')).to.deep.equal({ a: [{ b: 'c' }] }, { prototype: false }); - expect(Qs.parse('a[0][b]=c')).to.deep.equal({ a: [{ b: 'c' }] }, { prototype: false }); - done(); - }); - - it('allows for empty strings in arrays', function (done) { - - expect(Qs.parse('a[]=b&a[]=&a[]=c')).to.deep.equal({ a: ['b', '', 'c'] }, { prototype: false }); - expect(Qs.parse('a[0]=b&a[1]&a[2]=c&a[19]=', {strictNullHandling: true})).to.deep.equal({ a: ['b', null, 'c', ''] }, { prototype: false }); - expect(Qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]', {strictNullHandling: true})).to.deep.equal({ a: ['b', '', 'c', null] }, { prototype: false }); - expect(Qs.parse('a[]=&a[]=b&a[]=c')).to.deep.equal({ a: ['', 'b', 'c'] }, { prototype: false }); - done(); - }); - - it('compacts sparse arrays', function (done) { - - expect(Qs.parse('a[10]=1&a[2]=2')).to.deep.equal({ a: ['2', '1'] }, { prototype: false }); - done(); - }); - - it('parses semi-parsed strings', function (done) { - - expect(Qs.parse({ 'a[b]': 'c' })).to.deep.equal({ a: { b: 'c' } }, { prototype: false }); - expect(Qs.parse({ 'a[b]': 'c', 'a[d]': 'e' })).to.deep.equal({ a: { b: 'c', d: 'e' } }, { prototype: false }); - done(); - }); - - it('parses buffers correctly', function (done) { - - var b = new Buffer('test'); - expect(Qs.parse({ a: b })).to.deep.equal({ a: b }, { prototype: false }); - done(); - }); - - it('continues parsing when no parent is found', function (done) { - - expect(Qs.parse('[]=&a=b')).to.deep.equal({ '0': '', a: 'b' }, { prototype: false }); - expect(Qs.parse('[]&a=b', {strictNullHandling: true})).to.deep.equal({ '0': null, a: 'b' }, { prototype: false }); - expect(Qs.parse('[foo]=bar')).to.deep.equal({ foo: 'bar' }, { prototype: false }); - done(); - }); - - it('does not error when parsing a very long array', function (done) { - - var str = 'a[]=a'; - while (Buffer.byteLength(str) < 128 * 1024) { - str += '&' + str; - } - - expect(function () { - - Qs.parse(str); - }).to.not.throw(); - - done(); - }); - - it('should not throw when a native prototype has an enumerable property', { parallel: false }, function (done) { - - Object.prototype.crash = ''; - Array.prototype.crash = ''; - expect(Qs.parse.bind(null, 'a=b')).to.not.throw(); - expect(Qs.parse('a=b')).to.deep.equal({ a: 'b' }, { prototype: false }); - expect(Qs.parse.bind(null, 'a[][b]=c')).to.not.throw(); - expect(Qs.parse('a[][b]=c')).to.deep.equal({ a: [{ b: 'c' }] }, { prototype: false }); - delete Object.prototype.crash; - delete Array.prototype.crash; - done(); - }); - - it('parses a string with an alternative string delimiter', function (done) { - - expect(Qs.parse('a=b;c=d', { delimiter: ';' })).to.deep.equal({ a: 'b', c: 'd' }, { prototype: false }); - done(); - }); - - it('parses a string with an alternative RegExp delimiter', function (done) { - - expect(Qs.parse('a=b; c=d', { delimiter: /[;,] */ })).to.deep.equal({ a: 'b', c: 'd' }, { prototype: false }); - done(); - }); - - it('does not use non-splittable objects as delimiters', function (done) { - - expect(Qs.parse('a=b&c=d', { delimiter: true })).to.deep.equal({ a: 'b', c: 'd' }, { prototype: false }); - done(); - }); - - it('allows overriding parameter limit', function (done) { - - expect(Qs.parse('a=b&c=d', { parameterLimit: 1 })).to.deep.equal({ a: 'b' }, { prototype: false }); - done(); - }); - - it('allows setting the parameter limit to Infinity', function (done) { - - expect(Qs.parse('a=b&c=d', { parameterLimit: Infinity })).to.deep.equal({ a: 'b', c: 'd' }, { prototype: false }); - done(); - }); - - it('allows overriding array limit', function (done) { - - expect(Qs.parse('a[0]=b', { arrayLimit: -1 })).to.deep.equal({ a: { '0': 'b' } }, { prototype: false }); - expect(Qs.parse('a[-1]=b', { arrayLimit: -1 })).to.deep.equal({ a: { '-1': 'b' } }, { prototype: false }); - expect(Qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 })).to.deep.equal({ a: { '0': 'b', '1': 'c' } }, { prototype: false }); - done(); - }); - - it('allows disabling array parsing', function (done) { - - expect(Qs.parse('a[0]=b&a[1]=c', { parseArrays: false })).to.deep.equal({ a: { '0': 'b', '1': 'c' } }, { prototype: false }); - done(); - }); - - it('parses an object', function (done) { - - var input = { - 'user[name]': {'pop[bob]': 3}, - 'user[email]': null - }; - - var expected = { - 'user': { - 'name': {'pop[bob]': 3}, - 'email': null - } - }; - - var result = Qs.parse(input); - - expect(result).to.deep.equal(expected, { prototype: false }); - done(); - }); - - it('parses an object in dot notation', function (done) { - - var input = { - 'user.name': {'pop[bob]': 3}, - 'user.email.': null - }; - - var expected = { - 'user': { - 'name': {'pop[bob]': 3}, - 'email': null - } - }; - - var result = Qs.parse(input); - - expect(result).to.deep.equal(expected, { prototype: false }); - done(); - }); - - it('parses an object and not child values', function (done) { - - var input = { - 'user[name]': {'pop[bob]': { 'test': 3 }}, - 'user[email]': null - }; - - var expected = { - 'user': { - 'name': {'pop[bob]': { 'test': 3 }}, - 'email': null - } - }; - - var result = Qs.parse(input); - - expect(result).to.deep.equal(expected, { prototype: false }); - done(); - }); - - it('does not blow up when Buffer global is missing', function (done) { - - var tempBuffer = global.Buffer; - delete global.Buffer; - var result = Qs.parse('a=b&c=d'); - global.Buffer = tempBuffer; - expect(result).to.deep.equal({ a: 'b', c: 'd' }, { prototype: false }); - done(); - }); - - it('does not crash when parsing circular references', function (done) { - - var a = {}; - a.b = a; - - var parsed; - - expect(function () { - - parsed = Qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a }); - }).to.not.throw(); - - expect(parsed).to.contain('foo'); - expect(parsed.foo).to.contain('bar', 'baz'); - expect(parsed.foo.bar).to.equal('baz'); - expect(parsed.foo.baz).to.deep.equal(a, { prototype: false }); - done(); - }); - - it('parses plain objects correctly', function (done) { - - var a = Object.create(null); - a.b = 'c'; - - expect(Qs.parse(a)).to.deep.equal({ b: 'c' }, { prototype: false }); - var result = Qs.parse({ a: a }); - expect(result).to.contain('a'); - expect(result.a).to.deep.equal(a, { prototype: false }); - done(); - }); - - it('parses dates correctly', function (done) { - - var now = new Date(); - expect(Qs.parse({ a: now })).to.deep.equal({ a: now }, { prototype: false }); - done(); - }); - - it('parses regular expressions correctly', function (done) { - - var re = /^test$/; - expect(Qs.parse({ a: re })).to.deep.equal({ a: re }, { prototype: false }); - done(); - }); -}); diff --git a/node_modules/twit/node_modules/request/node_modules/qs/test/stringify.js b/node_modules/twit/node_modules/request/node_modules/qs/test/stringify.js deleted file mode 100644 index 7a80c6c..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/test/stringify.js +++ /dev/null @@ -1,259 +0,0 @@ -/* eslint no-extend-native:0 */ -// Load modules - -var Code = require('code'); -var Lab = require('lab'); -var Qs = require('../'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var lab = exports.lab = Lab.script(); -var expect = Code.expect; -var describe = lab.experiment; -var it = lab.test; - - -describe('stringify()', function () { - - it('stringifies a querystring object', function (done) { - - expect(Qs.stringify({ a: 'b' })).to.equal('a=b'); - expect(Qs.stringify({ a: 1 })).to.equal('a=1'); - expect(Qs.stringify({ a: 1, b: 2 })).to.equal('a=1&b=2'); - expect(Qs.stringify({ a: 'A_Z' })).to.equal('a=A_Z'); - expect(Qs.stringify({ a: '€' })).to.equal('a=%E2%82%AC'); - expect(Qs.stringify({ a: '' })).to.equal('a=%EE%80%80'); - expect(Qs.stringify({ a: 'א' })).to.equal('a=%D7%90'); - expect(Qs.stringify({ a: '𐐷' })).to.equal('a=%F0%90%90%B7'); - done(); - }); - - it('stringifies a nested object', function (done) { - - expect(Qs.stringify({ a: { b: 'c' } })).to.equal('a%5Bb%5D=c'); - expect(Qs.stringify({ a: { b: { c: { d: 'e' } } } })).to.equal('a%5Bb%5D%5Bc%5D%5Bd%5D=e'); - done(); - }); - - it('stringifies an array value', function (done) { - - expect(Qs.stringify({ a: ['b', 'c', 'd'] })).to.equal('a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d'); - done(); - }); - - it('omits array indices when asked', function (done) { - - expect(Qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false })).to.equal('a=b&a=c&a=d'); - done(); - }); - - it('stringifies a nested array value', function (done) { - - expect(Qs.stringify({ a: { b: ['c', 'd'] } })).to.equal('a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); - done(); - }); - - it('stringifies an object inside an array', function (done) { - - expect(Qs.stringify({ a: [{ b: 'c' }] })).to.equal('a%5B0%5D%5Bb%5D=c'); - expect(Qs.stringify({ a: [{ b: { c: [1] } }] })).to.equal('a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1'); - done(); - }); - - it('does not omit object keys when indices = false', function (done) { - - expect(Qs.stringify({ a: [{ b: 'c' }] }, { indices: false })).to.equal('a%5Bb%5D=c'); - done(); - }); - - it('uses indices notation for arrays when indices=true', function (done) { - - expect(Qs.stringify({ a: ['b', 'c'] }, { indices: true })).to.equal('a%5B0%5D=b&a%5B1%5D=c'); - done(); - }); - - it('uses indices notation for arrays when no arrayFormat is specified', function (done) { - - expect(Qs.stringify({ a: ['b', 'c'] })).to.equal('a%5B0%5D=b&a%5B1%5D=c'); - done(); - }); - - it('uses indices notation for arrays when no arrayFormat=indices', function (done) { - - expect(Qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' })).to.equal('a%5B0%5D=b&a%5B1%5D=c'); - done(); - }); - - it('uses repeat notation for arrays when no arrayFormat=repeat', function (done) { - - expect(Qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' })).to.equal('a=b&a=c'); - done(); - }); - - it('uses brackets notation for arrays when no arrayFormat=brackets', function (done) { - - expect(Qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' })).to.equal('a%5B%5D=b&a%5B%5D=c'); - done(); - }); - - it('stringifies a complicated object', function (done) { - - expect(Qs.stringify({ a: { b: 'c', d: 'e' } })).to.equal('a%5Bb%5D=c&a%5Bd%5D=e'); - done(); - }); - - it('stringifies an empty value', function (done) { - - expect(Qs.stringify({ a: '' })).to.equal('a='); - expect(Qs.stringify({ a: null }, {strictNullHandling: true})).to.equal('a'); - - expect(Qs.stringify({ a: '', b: '' })).to.equal('a=&b='); - expect(Qs.stringify({ a: null, b: '' }, {strictNullHandling: true})).to.equal('a&b='); - - expect(Qs.stringify({ a: { b: '' } })).to.equal('a%5Bb%5D='); - expect(Qs.stringify({ a: { b: null } }, {strictNullHandling: true})).to.equal('a%5Bb%5D'); - expect(Qs.stringify({ a: { b: null } }, {strictNullHandling: false})).to.equal('a%5Bb%5D='); - - done(); - }); - - it('stringifies an empty object', function (done) { - - var obj = Object.create(null); - obj.a = 'b'; - expect(Qs.stringify(obj)).to.equal('a=b'); - done(); - }); - - it('returns an empty string for invalid input', function (done) { - - expect(Qs.stringify(undefined)).to.equal(''); - expect(Qs.stringify(false)).to.equal(''); - expect(Qs.stringify(null)).to.equal(''); - expect(Qs.stringify('')).to.equal(''); - done(); - }); - - it('stringifies an object with an empty object as a child', function (done) { - - var obj = { - a: Object.create(null) - }; - - obj.a.b = 'c'; - expect(Qs.stringify(obj)).to.equal('a%5Bb%5D=c'); - done(); - }); - - it('drops keys with a value of undefined', function (done) { - - expect(Qs.stringify({ a: undefined })).to.equal(''); - - expect(Qs.stringify({ a: { b: undefined, c: null } }, {strictNullHandling: true})).to.equal('a%5Bc%5D'); - expect(Qs.stringify({ a: { b: undefined, c: null } }, {strictNullHandling: false})).to.equal('a%5Bc%5D='); - expect(Qs.stringify({ a: { b: undefined, c: '' } })).to.equal('a%5Bc%5D='); - done(); - }); - - it('url encodes values', function (done) { - - expect(Qs.stringify({ a: 'b c' })).to.equal('a=b%20c'); - done(); - }); - - it('stringifies a date', function (done) { - - var now = new Date(); - var str = 'a=' + encodeURIComponent(now.toISOString()); - expect(Qs.stringify({ a: now })).to.equal(str); - done(); - }); - - it('stringifies the weird object from qs', function (done) { - - expect(Qs.stringify({ 'my weird field': '~q1!2"\'w$5&7/z8)?' })).to.equal('my%20weird%20field=~q1%212%22%27w%245%267%2Fz8%29%3F'); - done(); - }); - - it('skips properties that are part of the object prototype', function (done) { - - Object.prototype.crash = 'test'; - expect(Qs.stringify({ a: 'b'})).to.equal('a=b'); - expect(Qs.stringify({ a: { b: 'c' } })).to.equal('a%5Bb%5D=c'); - delete Object.prototype.crash; - done(); - }); - - it('stringifies boolean values', function (done) { - - expect(Qs.stringify({ a: true })).to.equal('a=true'); - expect(Qs.stringify({ a: { b: true } })).to.equal('a%5Bb%5D=true'); - expect(Qs.stringify({ b: false })).to.equal('b=false'); - expect(Qs.stringify({ b: { c: false } })).to.equal('b%5Bc%5D=false'); - done(); - }); - - it('stringifies buffer values', function (done) { - - expect(Qs.stringify({ a: new Buffer('test') })).to.equal('a=test'); - expect(Qs.stringify({ a: { b: new Buffer('test') } })).to.equal('a%5Bb%5D=test'); - done(); - }); - - it('stringifies an object using an alternative delimiter', function (done) { - - expect(Qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' })).to.equal('a=b;c=d'); - done(); - }); - - it('doesn\'t blow up when Buffer global is missing', function (done) { - - var tempBuffer = global.Buffer; - delete global.Buffer; - expect(Qs.stringify({ a: 'b', c: 'd' })).to.equal('a=b&c=d'); - global.Buffer = tempBuffer; - done(); - }); - - it('selects properties when filter=array', function (done) { - - expect(Qs.stringify({ a: 'b' }, { filter: ['a'] })).to.equal('a=b'); - expect(Qs.stringify({ a: 1}, { filter: [] })).to.equal(''); - expect(Qs.stringify({ a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, { filter: ['a', 'b', 0, 2]})).to.equal('a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3'); - done(); - - }); - - it('supports custom representations when filter=function', function (done) { - - var calls = 0; - var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } }; - var filterFunc = function (prefix, value) { - - calls++; - if (calls === 1) { - expect(prefix).to.be.empty(); - expect(value).to.equal(obj); - } - else if (prefix === 'c') { - return; - } - else if (value instanceof Date) { - expect(prefix).to.equal('e[f]'); - return value.getTime(); - } - return value; - }; - - expect(Qs.stringify(obj, { filter: filterFunc })).to.equal('a=b&e%5Bf%5D=1257894000000'); - expect(calls).to.equal(5); - done(); - - }); -}); diff --git a/node_modules/twit/node_modules/request/node_modules/qs/test/utils.js b/node_modules/twit/node_modules/request/node_modules/qs/test/utils.js deleted file mode 100644 index a9a6b52..0000000 --- a/node_modules/twit/node_modules/request/node_modules/qs/test/utils.js +++ /dev/null @@ -1,28 +0,0 @@ -// Load modules - -var Code = require('code'); -var Lab = require('lab'); -var Utils = require('../lib/utils'); - - -// Declare internals - -var internals = {}; - - -// Test shortcuts - -var lab = exports.lab = Lab.script(); -var expect = Code.expect; -var describe = lab.experiment; -var it = lab.test; - - -describe('merge()', function () { - - it('can merge two objects with the same key', function (done) { - - expect(Utils.merge({ a: 'b' }, { a: 'c' })).to.deep.equal({ a: ['b', 'c'] }); - done(); - }); -}); diff --git a/node_modules/twit/node_modules/request/node_modules/stringstream/.npmignore b/node_modules/twit/node_modules/request/node_modules/stringstream/.npmignore deleted file mode 100644 index 7dccd97..0000000 --- a/node_modules/twit/node_modules/request/node_modules/stringstream/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -lib-cov -*.seed -*.log -*.csv -*.dat -*.out -*.pid -*.gz - -pids -logs -results - -node_modules -npm-debug.log \ No newline at end of file diff --git a/node_modules/twit/node_modules/request/node_modules/stringstream/.travis.yml b/node_modules/twit/node_modules/request/node_modules/stringstream/.travis.yml deleted file mode 100644 index f1d0f13..0000000 --- a/node_modules/twit/node_modules/request/node_modules/stringstream/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.4 - - 0.6 diff --git a/node_modules/twit/node_modules/request/node_modules/stringstream/LICENSE.txt b/node_modules/twit/node_modules/request/node_modules/stringstream/LICENSE.txt deleted file mode 100644 index ab861ac..0000000 --- a/node_modules/twit/node_modules/request/node_modules/stringstream/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 Michael Hart (michael.hart.au@gmail.com) - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/twit/node_modules/request/node_modules/stringstream/README.md b/node_modules/twit/node_modules/request/node_modules/stringstream/README.md deleted file mode 100644 index 32fc982..0000000 --- a/node_modules/twit/node_modules/request/node_modules/stringstream/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# Decode streams into strings The Right Way(tm) - -```javascript -var fs = require('fs') -var zlib = require('zlib') -var strs = require('stringstream') - -var utf8Stream = fs.createReadStream('massiveLogFile.gz') - .pipe(zlib.createGunzip()) - .pipe(strs('utf8')) -``` - -No need to deal with `setEncoding()` weirdness, just compose streams -like they were supposed to be! - -Handles input and output encoding: - -```javascript -// Stream from utf8 to hex to base64... Why not, ay. -var hex64Stream = fs.createReadStream('myFile') - .pipe(strs('utf8', 'hex')) - .pipe(strs('hex', 'base64')) -``` - -Also deals with `base64` output correctly by aligning each emitted data -chunk so that there are no dangling `=` characters: - -```javascript -var stream = fs.createReadStream('myFile').pipe(strs('base64')) - -var base64Str = '' - -stream.on('data', function(data) { base64Str += data }) -stream.on('end', function() { - console.log('My base64 encoded file is: ' + base64Str) // Wouldn't work with setEncoding() - console.log('Original file is: ' + new Buffer(base64Str, 'base64')) -}) -``` diff --git a/node_modules/twit/node_modules/request/node_modules/stringstream/example.js b/node_modules/twit/node_modules/request/node_modules/stringstream/example.js deleted file mode 100644 index f82b85e..0000000 --- a/node_modules/twit/node_modules/request/node_modules/stringstream/example.js +++ /dev/null @@ -1,27 +0,0 @@ -var fs = require('fs') -var zlib = require('zlib') -var strs = require('stringstream') - -var utf8Stream = fs.createReadStream('massiveLogFile.gz') - .pipe(zlib.createGunzip()) - .pipe(strs('utf8')) - -utf8Stream.pipe(process.stdout) - -// Stream from utf8 to hex to base64... Why not, ay. -var hex64Stream = fs.createReadStream('myFile') - .pipe(strs('utf8', 'hex')) - .pipe(strs('hex', 'base64')) - -hex64Stream.pipe(process.stdout) - -// Deals with base64 correctly by aligning chunks -var stream = fs.createReadStream('myFile').pipe(strs('base64')) - -var base64Str = '' - -stream.on('data', function(data) { base64Str += data }) -stream.on('end', function() { - console.log('My base64 encoded file is: ' + base64Str) // Wouldn't work with setEncoding() - console.log('Original file is: ' + new Buffer(base64Str, 'base64')) -}) diff --git a/node_modules/twit/node_modules/request/node_modules/stringstream/package.json b/node_modules/twit/node_modules/request/node_modules/stringstream/package.json deleted file mode 100644 index 2c6d7cd..0000000 --- a/node_modules/twit/node_modules/request/node_modules/stringstream/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "stringstream", - "version": "0.0.5", - "description": "Encode and decode streams into string streams", - "author": { - "name": "Michael Hart", - "email": "michael.hart.au@gmail.com", - "url": "http://github.com/mhart" - }, - "main": "stringstream.js", - "keywords": [ - "string", - "stream", - "base64", - "gzip" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/mhart/StringStream.git" - }, - "license": "MIT", - "gitHead": "1efe3bf507bf3a1161f8473908b60e881d41422b", - "bugs": { - "url": "https://github.com/mhart/StringStream/issues" - }, - "homepage": "https://github.com/mhart/StringStream#readme", - "_id": "stringstream@0.0.5", - "scripts": {}, - "_shasum": "4e484cd4de5a0bbbee18e46307710a8a81621878", - "_from": "stringstream@>=0.0.4 <0.1.0", - "_npmVersion": "2.14.8", - "_nodeVersion": "4.2.1", - "_npmUser": { - "name": "hichaelmart", - "email": "michael.hart.au@gmail.com" - }, - "maintainers": [ - { - "name": "hichaelmart", - "email": "michael.hart.au@gmail.com" - } - ], - "dist": { - "shasum": "4e484cd4de5a0bbbee18e46307710a8a81621878", - "tarball": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/twit/node_modules/request/node_modules/stringstream/stringstream.js b/node_modules/twit/node_modules/request/node_modules/stringstream/stringstream.js deleted file mode 100644 index 4ece127..0000000 --- a/node_modules/twit/node_modules/request/node_modules/stringstream/stringstream.js +++ /dev/null @@ -1,102 +0,0 @@ -var util = require('util') -var Stream = require('stream') -var StringDecoder = require('string_decoder').StringDecoder - -module.exports = StringStream -module.exports.AlignedStringDecoder = AlignedStringDecoder - -function StringStream(from, to) { - if (!(this instanceof StringStream)) return new StringStream(from, to) - - Stream.call(this) - - if (from == null) from = 'utf8' - - this.readable = this.writable = true - this.paused = false - this.toEncoding = (to == null ? from : to) - this.fromEncoding = (to == null ? '' : from) - this.decoder = new AlignedStringDecoder(this.toEncoding) -} -util.inherits(StringStream, Stream) - -StringStream.prototype.write = function(data) { - if (!this.writable) { - var err = new Error('stream not writable') - err.code = 'EPIPE' - this.emit('error', err) - return false - } - if (this.fromEncoding) { - if (Buffer.isBuffer(data)) data = data.toString() - data = new Buffer(data, this.fromEncoding) - } - var string = this.decoder.write(data) - if (string.length) this.emit('data', string) - return !this.paused -} - -StringStream.prototype.flush = function() { - if (this.decoder.flush) { - var string = this.decoder.flush() - if (string.length) this.emit('data', string) - } -} - -StringStream.prototype.end = function() { - if (!this.writable && !this.readable) return - this.flush() - this.emit('end') - this.writable = this.readable = false - this.destroy() -} - -StringStream.prototype.destroy = function() { - this.decoder = null - this.writable = this.readable = false - this.emit('close') -} - -StringStream.prototype.pause = function() { - this.paused = true -} - -StringStream.prototype.resume = function () { - if (this.paused) this.emit('drain') - this.paused = false -} - -function AlignedStringDecoder(encoding) { - StringDecoder.call(this, encoding) - - switch (this.encoding) { - case 'base64': - this.write = alignedWrite - this.alignedBuffer = new Buffer(3) - this.alignedBytes = 0 - break - } -} -util.inherits(AlignedStringDecoder, StringDecoder) - -AlignedStringDecoder.prototype.flush = function() { - if (!this.alignedBuffer || !this.alignedBytes) return '' - var leftover = this.alignedBuffer.toString(this.encoding, 0, this.alignedBytes) - this.alignedBytes = 0 - return leftover -} - -function alignedWrite(buffer) { - var rem = (this.alignedBytes + buffer.length) % this.alignedBuffer.length - if (!rem && !this.alignedBytes) return buffer.toString(this.encoding) - - var returnBuffer = new Buffer(this.alignedBytes + buffer.length - rem) - - this.alignedBuffer.copy(returnBuffer, 0, 0, this.alignedBytes) - buffer.copy(returnBuffer, this.alignedBytes, 0, buffer.length - rem) - - buffer.copy(this.alignedBuffer, 0, buffer.length - rem, buffer.length) - this.alignedBytes = rem - - return returnBuffer.toString(this.encoding) -} diff --git a/node_modules/twit/node_modules/request/node_modules/tough-cookie/LICENSE b/node_modules/twit/node_modules/request/node_modules/tough-cookie/LICENSE deleted file mode 100644 index 1bc286f..0000000 --- a/node_modules/twit/node_modules/request/node_modules/tough-cookie/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2015, Salesforce.com, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=== - -The following exceptions apply: - -=== - -`public_suffix_list.dat` was obtained from - via -. The license for this file is MPL/2.0. The header of -that file reads as follows: - - // This Source Code Form is subject to the terms of the Mozilla Public - // License, v. 2.0. If a copy of the MPL was not distributed with this - // file, You can obtain one at http://mozilla.org/MPL/2.0/. diff --git a/node_modules/twit/node_modules/request/node_modules/tough-cookie/README.md b/node_modules/twit/node_modules/request/node_modules/tough-cookie/README.md deleted file mode 100644 index 9899dbf..0000000 --- a/node_modules/twit/node_modules/request/node_modules/tough-cookie/README.md +++ /dev/null @@ -1,492 +0,0 @@ -[RFC6265](https://tools.ietf.org/html/rfc6265) Cookies and CookieJar for Node.js - -[![Build Status](https://travis-ci.org/SalesforceEng/tough-cookie.png?branch=master)](https://travis-ci.org/SalesforceEng/tough-cookie) - -[![NPM Stats](https://nodei.co/npm/tough-cookie.png?downloads=true&stars=true)](https://npmjs.org/package/tough-cookie) -![NPM Downloads](https://nodei.co/npm-dl/tough-cookie.png?months=9) - -# Synopsis - -``` javascript -var tough = require('tough-cookie'); -var Cookie = tough.Cookie; -var cookie = Cookie.parse(header); -cookie.value = 'somethingdifferent'; -header = cookie.toString(); - -var cookiejar = new tough.CookieJar(); -cookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb); -// ... -cookiejar.getCookies('http://example.com/otherpath',function(err,cookies) { - res.headers['cookie'] = cookies.join('; '); -}); -``` - -# Installation - -It's _so_ easy! - -`npm install tough-cookie` - -Why the name? NPM modules `cookie`, `cookies` and `cookiejar` were already taken. - -# API - -## tough - -Functions on the module you get from `require('tough-cookie')`. All can be used as pure functions and don't need to be "bound". - -**Note**: prior to 1.0.x, several of these functions took a `strict` parameter. This has since been removed from the API as it was no longer necessary. - -### `parseDate(string)` - -Parse a cookie date string into a `Date`. Parses according to RFC6265 Section 5.1.1, not `Date.parse()`. - -### `formatDate(date)` - -Format a Date into a RFC1123 string (the RFC6265-recommended format). - -### `canonicalDomain(str)` - -Transforms a domain-name into a canonical domain-name. The canonical domain-name is a trimmed, lowercased, stripped-of-leading-dot and optionally punycode-encoded domain-name (Section 5.1.2 of RFC6265). For the most part, this function is idempotent (can be run again on its output without ill effects). - -### `domainMatch(str,domStr[,canonicalize=true])` - -Answers "does this real domain match the domain in a cookie?". The `str` is the "current" domain-name and the `domStr` is the "cookie" domain-name. Matches according to RFC6265 Section 5.1.3, but it helps to think of it as a "suffix match". - -The `canonicalize` parameter will run the other two paramters through `canonicalDomain` or not. - -### `defaultPath(path)` - -Given a current request/response path, gives the Path apropriate for storing in a cookie. This is basically the "directory" of a "file" in the path, but is specified by Section 5.1.4 of the RFC. - -The `path` parameter MUST be _only_ the pathname part of a URI (i.e. excludes the hostname, query, fragment, etc.). This is the `.pathname` property of node's `uri.parse()` output. - -### `pathMatch(reqPath,cookiePath)` - -Answers "does the request-path path-match a given cookie-path?" as per RFC6265 Section 5.1.4. Returns a boolean. - -This is essentially a prefix-match where `cookiePath` is a prefix of `reqPath`. - -### `parse(cookieString[, options])` - -alias for `Cookie.parse(cookieString[, options])` - -### `fromJSON(string)` - -alias for `Cookie.fromJSON(string)` - -### `getPublicSuffix(hostname)` - -Returns the public suffix of this hostname. The public suffix is the shortest domain-name upon which a cookie can be set. Returns `null` if the hostname cannot have cookies set for it. - -For example: `www.example.com` and `www.subdomain.example.com` both have public suffix `example.com`. - -For further information, see http://publicsuffix.org/. This module derives its list from that site. - -### `cookieCompare(a,b)` - -For use with `.sort()`, sorts a list of cookies into the recommended order given in the RFC (Section 5.4 step 2). The sort algorithm is, in order of precedence: - -* Longest `.path` -* oldest `.creation` (which has a 1ms precision, same as `Date`) -* lowest `.creationIndex` (to get beyond the 1ms precision) - -``` javascript -var cookies = [ /* unsorted array of Cookie objects */ ]; -cookies = cookies.sort(cookieCompare); -``` - -**Note**: Since JavaScript's `Date` is limited to a 1ms precision, cookies within the same milisecond are entirely possible. This is especially true when using the `now` option to `.setCookie()`. The `.creationIndex` property is a per-process global counter, assigned during construction with `new Cookie()`. This preserves the spirit of the RFC sorting: older cookies go first. This works great for `MemoryCookieStore`, since `Set-Cookie` headers are parsed in order, but may not be so great for distributed systems. Sophisticated `Store`s may wish to set this to some other _logical clock_ such that if cookies A and B are created in the same millisecond, but cookie A is created before cookie B, then `A.creationIndex < B.creationIndex`. If you want to alter the global counter, which you probably _shouldn't_ do, it's stored in `Cookie.cookiesCreated`. - -### `permuteDomain(domain)` - -Generates a list of all possible domains that `domainMatch()` the parameter. May be handy for implementing cookie stores. - -### `permutePath(path)` - -Generates a list of all possible paths that `pathMatch()` the parameter. May be handy for implementing cookie stores. - - -## Cookie - -Exported via `tough.Cookie`. - -### `Cookie.parse(cookieString[, options])` - -Parses a single Cookie or Set-Cookie HTTP header into a `Cookie` object. Returns `undefined` if the string can't be parsed. - -The options parameter is not required and currently has only one property: - - * _loose_ - boolean - if `true` enable parsing of key-less cookies like `=abc` and `=`, which are not RFC-compliant. - -If options is not an object, it is ignored, which means you can use `Array#map` with it. - -Here's how to process the Set-Cookie header(s) on a node HTTP/HTTPS response: - -``` javascript -if (res.headers['set-cookie'] instanceof Array) - cookies = res.headers['set-cookie'].map(Cookie.parse); -else - cookies = [Cookie.parse(res.headers['set-cookie'])]; -``` - -### Properties - -Cookie object properties: - - * _key_ - string - the name or key of the cookie (default "") - * _value_ - string - the value of the cookie (default "") - * _expires_ - `Date` - if set, the `Expires=` attribute of the cookie (defaults to the string `"Infinity"`). See `setExpires()` - * _maxAge_ - seconds - if set, the `Max-Age=` attribute _in seconds_ of the cookie. May also be set to strings `"Infinity"` and `"-Infinity"` for non-expiry and immediate-expiry, respectively. See `setMaxAge()` - * _domain_ - string - the `Domain=` attribute of the cookie - * _path_ - string - the `Path=` of the cookie - * _secure_ - boolean - the `Secure` cookie flag - * _httpOnly_ - boolean - the `HttpOnly` cookie flag - * _extensions_ - `Array` - any unrecognized cookie attributes as strings (even if equal-signs inside) - * _creation_ - `Date` - when this cookie was constructed - * _creationIndex_ - number - set at construction, used to provide greater sort precision (please see `cookieCompare(a,b)` for a full explanation) - -After a cookie has been passed through `CookieJar.setCookie()` it will have the following additional attributes: - - * _hostOnly_ - boolean - is this a host-only cookie (i.e. no Domain field was set, but was instead implied) - * _pathIsDefault_ - boolean - if true, there was no Path field on the cookie and `defaultPath()` was used to derive one. - * _creation_ - `Date` - **modified** from construction to when the cookie was added to the jar - * _lastAccessed_ - `Date` - last time the cookie got accessed. Will affect cookie cleaning once implemented. Using `cookiejar.getCookies(...)` will update this attribute. - -### `Cookie([{properties}])` - -Receives an options object that can contain any of the above Cookie properties, uses the default for unspecified properties. - -### `.toString()` - -encode to a Set-Cookie header value. The Expires cookie field is set using `formatDate()`, but is omitted entirely if `.expires` is `Infinity`. - -### `.cookieString()` - -encode to a Cookie header value (i.e. the `.key` and `.value` properties joined with '='). - -### `.setExpires(String)` - -sets the expiry based on a date-string passed through `parseDate()`. If parseDate returns `null` (i.e. can't parse this date string), `.expires` is set to `"Infinity"` (a string) is set. - -### `.setMaxAge(number)` - -sets the maxAge in seconds. Coerces `-Infinity` to `"-Infinity"` and `Infinity` to `"Infinity"` so it JSON serializes correctly. - -### `.expiryTime([now=Date.now()])` - -### `.expiryDate([now=Date.now()])` - -expiryTime() Computes the absolute unix-epoch milliseconds that this cookie expires. expiryDate() works similarly, except it returns a `Date` object. Note that in both cases the `now` parameter should be milliseconds. - -Max-Age takes precedence over Expires (as per the RFC). The `.creation` attribute -- or, by default, the `now` paramter -- is used to offset the `.maxAge` attribute. - -If Expires (`.expires`) is set, that's returned. - -Otherwise, `expiryTime()` returns `Infinity` and `expiryDate()` returns a `Date` object for "Tue, 19 Jan 2038 03:14:07 GMT" (latest date that can be expressed by a 32-bit `time_t`; the common limit for most user-agents). - -### `.TTL([now=Date.now()])` - -compute the TTL relative to `now` (milliseconds). The same precedence rules as for `expiryTime`/`expiryDate` apply. - -The "number" `Infinity` is returned for cookies without an explicit expiry and `0` is returned if the cookie is expired. Otherwise a time-to-live in milliseconds is returned. - -### `.canonicalizedDoman()` - -### `.cdomain()` - -return the canonicalized `.domain` field. This is lower-cased and punycode (RFC3490) encoded if the domain has any non-ASCII characters. - -### `.toJSON()` - -For convenience in using `JSON.serialize(cookie)`. Returns a plain-old `Object` that can be JSON-serialized. - -Any `Date` properties (i.e., `.expires`, `.creation`, and `.lastAccessed`) are exported in ISO format (`.toISOString()`). - -**NOTE**: Custom `Cookie` properties will be discarded. In tough-cookie 1.x, since there was no `.toJSON` method explicitly defined, all enumerable properties were captured. If you want a property to be serialized, add the property name to the `Cookie.serializableProperties` Array. - -### `Cookie.fromJSON(strOrObj)` - -Does the reverse of `cookie.toJSON()`. If passed a string, will `JSON.parse()` that first. - -Any `Date` properties (i.e., `.expires`, `.creation`, and `.lastAccessed`) are parsed via `Date.parse()`, not the tough-cookie `parseDate`, since it's JavaScript/JSON-y timestamps being handled at this layer. - -Returns `null` upon JSON parsing error. - -### `.clone()` - -Does a deep clone of this cookie, exactly implemented as `Cookie.fromJSON(cookie.toJSON())`. - -### `.validate()` - -Status: *IN PROGRESS*. Works for a few things, but is by no means comprehensive. - -validates cookie attributes for semantic correctness. Useful for "lint" checking any Set-Cookie headers you generate. For now, it returns a boolean, but eventually could return a reason string -- you can future-proof with this construct: - -``` javascript -if (cookie.validate() === true) { - // it's tasty -} else { - // yuck! -} -``` - - -## CookieJar - -Exported via `tough.CookieJar`. - -### `CookieJar([store],[options])` - -Simply use `new CookieJar()`. If you'd like to use a custom store, pass that to the constructor otherwise a `MemoryCookieStore` will be created and used. - -The `options` object can be omitted and can have the following properties: - - * _rejectPublicSuffixes_ - boolean - default `true` - reject cookies with domains like "com" and "co.uk" - * _looseMode_ - boolean - default `false` - accept malformed cookies like `bar` and `=bar`, which have an implied empty name. - This is not in the standard, but is used sometimes on the web and is accepted by (most) browsers. - -Since eventually this module would like to support database/remote/etc. CookieJars, continuation passing style is used for CookieJar methods. - -### `.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie))` - -Attempt to set the cookie in the cookie jar. If the operation fails, an error will be given to the callback `cb`, otherwise the cookie is passed through. The cookie will have updated `.creation`, `.lastAccessed` and `.hostOnly` properties. - -The `options` object can be omitted and can have the following properties: - - * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. - * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. - * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies - * _ignoreError_ - boolean - default `false` - silently ignore things like parse errors and invalid domains. `Store` errors aren't ignored by this option. - -As per the RFC, the `.hostOnly` property is set if there was no "Domain=" parameter in the cookie string (or `.domain` was null on the Cookie object). The `.domain` property is set to the fully-qualified hostname of `currentUrl` in this case. Matching this cookie requires an exact hostname match (not a `domainMatch` as per usual). - -### `.setCookieSync(cookieOrString, currentUrl, [{options}])` - -Synchronous version of `setCookie`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). - -### `.getCookies(currentUrl, [{options},] cb(err,cookies))` - -Retrieve the list of cookies that can be sent in a Cookie header for the current url. - -If an error is encountered, that's passed as `err` to the callback, otherwise an `Array` of `Cookie` objects is passed. The array is sorted with `cookieCompare()` unless the `{sort:false}` option is given. - -The `options` object can be omitted and can have the following properties: - - * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. - * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. - * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies - * _expire_ - boolean - default `true` - perform expiry-time checking of cookies and asynchronously remove expired cookies from the store. Using `false` will return expired cookies and **not** remove them from the store (which is useful for replaying Set-Cookie headers, potentially). - * _allPaths_ - boolean - default `false` - if `true`, do not scope cookies by path. The default uses RFC-compliant path scoping. **Note**: may not be supported by the underlying store (the default `MemoryCookieStore` supports it). - -The `.lastAccessed` property of the returned cookies will have been updated. - -### `.getCookiesSync(currentUrl, [{options}])` - -Synchronous version of `getCookies`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). - -### `.getCookieString(...)` - -Accepts the same options as `.getCookies()` but passes a string suitable for a Cookie header rather than an array to the callback. Simply maps the `Cookie` array via `.cookieString()`. - -### `.getCookieStringSync(...)` - -Synchronous version of `getCookieString`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). - -### `.getSetCookieStrings(...)` - -Returns an array of strings suitable for **Set-Cookie** headers. Accepts the same options as `.getCookies()`. Simply maps the cookie array via `.toString()`. - -### `.getSetCookieStringsSync(...)` - -Synchronous version of `getSetCookieStrings`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). - -### `.serialize(cb(err,serializedObject))` - -Serialize the Jar if the underlying store supports `.getAllCookies`. - -**NOTE**: Custom `Cookie` properties will be discarded. If you want a property to be serialized, add the property name to the `Cookie.serializableProperties` Array. - -See [Serialization Format]. - -### `.serializeSync()` - -Sync version of .serialize - -### `.toJSON()` - -Alias of .serializeSync() for the convenience of `JSON.stringify(cookiejar)`. - -### `CookieJar.deserialize(serialized, [store], cb(err,object))` - -A new Jar is created and the serialized Cookies are added to the underlying store. Each `Cookie` is added via `store.putCookie` in the order in which they appear in the serialization. - -The `store` argument is optional, but should be an instance of `Store`. By default, a new instance of `MemoryCookieStore` is created. - -As a convenience, if `serialized` is a string, it is passed through `JSON.parse` first. If that throws an error, this is passed to the callback. - -### `CookieJar.deserializeSync(serialized, [store])` - -Sync version of `.deserialize`. _Note_ that the `store` must be synchronous for this to work. - -### `CookieJar.fromJSON(string)` - -Alias of `.deserializeSync` to provide consistency with `Cookie.fromJSON()`. - -### `.clone([store,]cb(err,newJar))` - -Produces a deep clone of this jar. Modifications to the original won't affect the clone, and vice versa. - -The `store` argument is optional, but should be an instance of `Store`. By default, a new instance of `MemoryCookieStore` is created. Transferring between store types is supported so long as the source implements `.getAllCookies()` and the destination implements `.putCookie()`. - -### `.cloneSync([store])` - -Synchronous version of `.clone`, returning a new `CookieJar` instance. - -The `store` argument is optional, but must be a _synchronous_ `Store` instance if specified. If not passed, a new instance of `MemoryCookieStore` is used. - -The _source_ and _destination_ must both be synchronous `Store`s. If one or both stores are asynchronous, use `.clone` instead. Recall that `MemoryCookieStore` supports both synchronous and asynchronous API calls. - -## Store - -Base class for CookieJar stores. Available as `tough.Store`. - -## Store API - -The storage model for each `CookieJar` instance can be replaced with a custom implementation. The default is `MemoryCookieStore` which can be found in the `lib/memstore.js` file. The API uses continuation-passing-style to allow for asynchronous stores. - -Stores should inherit from the base `Store` class, which is available as `require('tough-cookie').Store`. - -Stores are asynchronous by default, but if `store.synchronous` is set to `true`, then the `*Sync` methods on the of the containing `CookieJar` can be used (however, the continuation-passing style - -All `domain` parameters will have been normalized before calling. - -The Cookie store must have all of the following methods. - -### `store.findCookie(domain, path, key, cb(err,cookie))` - -Retrieve a cookie with the given domain, path and key (a.k.a. name). The RFC maintains that exactly one of these cookies should exist in a store. If the store is using versioning, this means that the latest/newest such cookie should be returned. - -Callback takes an error and the resulting `Cookie` object. If no cookie is found then `null` MUST be passed instead (i.e. not an error). - -### `store.findCookies(domain, path, cb(err,cookies))` - -Locates cookies matching the given domain and path. This is most often called in the context of `cookiejar.getCookies()` above. - -If no cookies are found, the callback MUST be passed an empty array. - -The resulting list will be checked for applicability to the current request according to the RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, etc.), so it's OK to use an optimistic search algorithm when implementing this method. However, the search algorithm used SHOULD try to find cookies that `domainMatch()` the domain and `pathMatch()` the path in order to limit the amount of checking that needs to be done. - -As of version 0.9.12, the `allPaths` option to `cookiejar.getCookies()` above will cause the path here to be `null`. If the path is `null`, path-matching MUST NOT be performed (i.e. domain-matching only). - -### `store.putCookie(cookie, cb(err))` - -Adds a new cookie to the store. The implementation SHOULD replace any existing cookie with the same `.domain`, `.path`, and `.key` properties -- depending on the nature of the implementation, it's possible that between the call to `fetchCookie` and `putCookie` that a duplicate `putCookie` can occur. - -The `cookie` object MUST NOT be modified; the caller will have already updated the `.creation` and `.lastAccessed` properties. - -Pass an error if the cookie cannot be stored. - -### `store.updateCookie(oldCookie, newCookie, cb(err))` - -Update an existing cookie. The implementation MUST update the `.value` for a cookie with the same `domain`, `.path` and `.key`. The implementation SHOULD check that the old value in the store is equivalent to `oldCookie` - how the conflict is resolved is up to the store. - -The `.lastAccessed` property will always be different between the two objects (to the precision possible via JavaScript's clock). Both `.creation` and `.creationIndex` are guaranteed to be the same. Stores MAY ignore or defer the `.lastAccessed` change at the cost of affecting how cookies are selected for automatic deletion (e.g., least-recently-used, which is up to the store to implement). - -Stores may wish to optimize changing the `.value` of the cookie in the store versus storing a new cookie. If the implementation doesn't define this method a stub that calls `putCookie(newCookie,cb)` will be added to the store object. - -The `newCookie` and `oldCookie` objects MUST NOT be modified. - -Pass an error if the newCookie cannot be stored. - -### `store.removeCookie(domain, path, key, cb(err))` - -Remove a cookie from the store (see notes on `findCookie` about the uniqueness constraint). - -The implementation MUST NOT pass an error if the cookie doesn't exist; only pass an error due to the failure to remove an existing cookie. - -### `store.removeCookies(domain, path, cb(err))` - -Removes matching cookies from the store. The `path` parameter is optional, and if missing means all paths in a domain should be removed. - -Pass an error ONLY if removing any existing cookies failed. - -### `store.getAllCookies(cb(err, cookies))` - -Produces an `Array` of all cookies during `jar.serialize()`. The items in the array can be true `Cookie` objects or generic `Object`s with the [Serialization Format] data structure. - -Cookies SHOULD be returned in creation order to preserve sorting via `compareCookies()`. For reference, `MemoryCookieStore` will sort by `.creationIndex` since it uses true `Cookie` objects internally. If you don't return the cookies in creation order, they'll still be sorted by creation time, but this only has a precision of 1ms. See `compareCookies` for more detail. - -Pass an error if retrieval fails. - -## MemoryCookieStore - -Inherits from `Store`. - -A just-in-memory CookieJar synchronous store implementation, used by default. Despite being a synchronous implementation, it's usable with both the synchronous and asynchronous forms of the `CookieJar` API. - -# Serialization Format - -**NOTE**: if you want to have custom `Cookie` properties serialized, add the property name to `Cookie.serializableProperties`. - -```js - { - // The version of tough-cookie that serialized this jar. - version: 'tough-cookie@1.x.y', - - // add the store type, to make humans happy: - storeType: 'MemoryCookieStore', - - // CookieJar configuration: - rejectPublicSuffixes: true, - // ... future items go here - - // Gets filled from jar.store.getAllCookies(): - cookies: [ - { - key: 'string', - value: 'string', - // ... - /* other Cookie.serializableProperties go here */ - } - ] - } -``` - -# Copyright and License - -(tl;dr: BSD-3-Clause with some MPL/2.0) - -```text - Copyright (c) 2015, Salesforce.com, Inc. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of Salesforce.com nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -``` - -Portions may be licensed under different licenses (in particular `public_suffix_list.dat` is MPL/2.0); please read that file and the LICENSE file for full details. diff --git a/node_modules/twit/node_modules/request/node_modules/tough-cookie/lib/cookie.js b/node_modules/twit/node_modules/request/node_modules/tough-cookie/lib/cookie.js deleted file mode 100644 index 12da297..0000000 --- a/node_modules/twit/node_modules/request/node_modules/tough-cookie/lib/cookie.js +++ /dev/null @@ -1,1342 +0,0 @@ -/*! - * Copyright (c) 2015, Salesforce.com, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of Salesforce.com nor the names of its contributors may - * be used to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -'use strict'; -var net = require('net'); -var urlParse = require('url').parse; -var pubsuffix = require('./pubsuffix'); -var Store = require('./store').Store; -var MemoryCookieStore = require('./memstore').MemoryCookieStore; -var pathMatch = require('./pathMatch').pathMatch; -var VERSION = require('../package.json').version; - -var punycode; -try { - punycode = require('punycode'); -} catch(e) { - console.warn("cookie: can't load punycode; won't use punycode for domain normalization"); -} - -var DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/; - -// From RFC6265 S4.1.1 -// note that it excludes \x3B ";" -var COOKIE_OCTET = /[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]/; -var COOKIE_OCTETS = new RegExp('^'+COOKIE_OCTET.source+'+$'); - -var CONTROL_CHARS = /[\x00-\x1F]/; - -// Double quotes are part of the value (see: S4.1.1). -// '\r', '\n' and '\0' should be treated as a terminator in the "relaxed" mode -// (see: https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60) -// '=' and ';' are attribute/values separators -// (see: https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L64) -var COOKIE_PAIR = /^(([^=;]+))\s*=\s*([^\n\r\0]*)/; - -// Used to parse non-RFC-compliant cookies like '=abc' when given the `loose` -// option in Cookie.parse: -var LOOSE_COOKIE_PAIR = /^((?:=)?([^=;]*)\s*=\s*)?([^\n\r\0]*)/; - -// RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or ";"' -// Note ';' is \x3B -var PATH_VALUE = /[\x20-\x3A\x3C-\x7E]+/; - -// Used for checking whether or not there is a trailing semi-colon -var TRAILING_SEMICOLON = /;+$/; - -var DAY_OF_MONTH = /^(\d{1,2})[^\d]*$/; -var TIME = /^(\d{1,2})[^\d]*:(\d{1,2})[^\d]*:(\d{1,2})[^\d]*$/; -var MONTH = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)/i; - -var MONTH_TO_NUM = { - jan:0, feb:1, mar:2, apr:3, may:4, jun:5, - jul:6, aug:7, sep:8, oct:9, nov:10, dec:11 -}; -var NUM_TO_MONTH = [ - 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec' -]; -var NUM_TO_DAY = [ - 'Sun','Mon','Tue','Wed','Thu','Fri','Sat' -]; - -var YEAR = /^(\d{2}|\d{4})$/; // 2 to 4 digits - -var MAX_TIME = 2147483647000; // 31-bit max -var MIN_TIME = 0; // 31-bit min - - -// RFC6265 S5.1.1 date parser: -function parseDate(str) { - if (!str) { - return; - } - - /* RFC6265 S5.1.1: - * 2. Process each date-token sequentially in the order the date-tokens - * appear in the cookie-date - */ - var tokens = str.split(DATE_DELIM); - if (!tokens) { - return; - } - - var hour = null; - var minutes = null; - var seconds = null; - var day = null; - var month = null; - var year = null; - - for (var i=0; i 23 || minutes > 59 || seconds > 59) { - return; - } - - continue; - } - } - - /* 2.2. If the found-day-of-month flag is not set and the date-token matches - * the day-of-month production, set the found-day-of- month flag and set - * the day-of-month-value to the number denoted by the date-token. Skip - * the remaining sub-steps and continue to the next date-token. - */ - if (day === null) { - result = DAY_OF_MONTH.exec(token); - if (result) { - day = parseInt(result, 10); - /* RFC6265 S5.1.1.5: - * [fail if] the day-of-month-value is less than 1 or greater than 31 - */ - if(day < 1 || day > 31) { - return; - } - continue; - } - } - - /* 2.3. If the found-month flag is not set and the date-token matches the - * month production, set the found-month flag and set the month-value to - * the month denoted by the date-token. Skip the remaining sub-steps and - * continue to the next date-token. - */ - if (month === null) { - result = MONTH.exec(token); - if (result) { - month = MONTH_TO_NUM[result[1].toLowerCase()]; - continue; - } - } - - /* 2.4. If the found-year flag is not set and the date-token matches the year - * production, set the found-year flag and set the year-value to the number - * denoted by the date-token. Skip the remaining sub-steps and continue to - * the next date-token. - */ - if (year === null) { - result = YEAR.exec(token); - if (result) { - year = parseInt(result[0], 10); - /* From S5.1.1: - * 3. If the year-value is greater than or equal to 70 and less - * than or equal to 99, increment the year-value by 1900. - * 4. If the year-value is greater than or equal to 0 and less - * than or equal to 69, increment the year-value by 2000. - */ - if (70 <= year && year <= 99) { - year += 1900; - } else if (0 <= year && year <= 69) { - year += 2000; - } - - if (year < 1601) { - return; // 5. ... the year-value is less than 1601 - } - } - } - } - - if (seconds === null || day === null || month === null || year === null) { - return; // 5. ... at least one of the found-day-of-month, found-month, found- - // year, or found-time flags is not set, - } - - return new Date(Date.UTC(year, month, day, hour, minutes, seconds)); -} - -function formatDate(date) { - var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d; - var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h; - var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m; - var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s; - return NUM_TO_DAY[date.getUTCDay()] + ', ' + - d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+ - h+':'+m+':'+s+' GMT'; -} - -// S5.1.2 Canonicalized Host Names -function canonicalDomain(str) { - if (str == null) { - return null; - } - str = str.trim().replace(/^\./,''); // S4.1.2.3 & S5.2.3: ignore leading . - - // convert to IDN if any non-ASCII characters - if (punycode && /[^\u0001-\u007f]/.test(str)) { - str = punycode.toASCII(str); - } - - return str.toLowerCase(); -} - -// S5.1.3 Domain Matching -function domainMatch(str, domStr, canonicalize) { - if (str == null || domStr == null) { - return null; - } - if (canonicalize !== false) { - str = canonicalDomain(str); - domStr = canonicalDomain(domStr); - } - - /* - * "The domain string and the string are identical. (Note that both the - * domain string and the string will have been canonicalized to lower case at - * this point)" - */ - if (str == domStr) { - return true; - } - - /* "All of the following [three] conditions hold:" (order adjusted from the RFC) */ - - /* "* The string is a host name (i.e., not an IP address)." */ - if (net.isIP(str)) { - return false; - } - - /* "* The domain string is a suffix of the string" */ - var idx = str.indexOf(domStr); - if (idx <= 0) { - return false; // it's a non-match (-1) or prefix (0) - } - - // e.g "a.b.c".indexOf("b.c") === 2 - // 5 === 3+2 - if (str.length !== domStr.length + idx) { // it's not a suffix - return false; - } - - /* "* The last character of the string that is not included in the domain - * string is a %x2E (".") character." */ - if (str.substr(idx-1,1) !== '.') { - return false; - } - - return true; -} - - -// RFC6265 S5.1.4 Paths and Path-Match - -/* - * "The user agent MUST use an algorithm equivalent to the following algorithm - * to compute the default-path of a cookie:" - * - * Assumption: the path (and not query part or absolute uri) is passed in. - */ -function defaultPath(path) { - // "2. If the uri-path is empty or if the first character of the uri-path is not - // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps. - if (!path || path.substr(0,1) !== "/") { - return "/"; - } - - // "3. If the uri-path contains no more than one %x2F ("/") character, output - // %x2F ("/") and skip the remaining step." - if (path === "/") { - return path; - } - - var rightSlash = path.lastIndexOf("/"); - if (rightSlash === 0) { - return "/"; - } - - // "4. Output the characters of the uri-path from the first character up to, - // but not including, the right-most %x2F ("/")." - return path.slice(0, rightSlash); -} - - -function parse(str, options) { - if (!options || typeof options !== 'object') { - options = {}; - } - str = str.trim(); - - // S4.1.1 Trailing semi-colons are not part of the specification. - var semiColonCheck = TRAILING_SEMICOLON.exec(str); - if (semiColonCheck) { - str = str.slice(0, semiColonCheck.index); - } - - // We use a regex to parse the "name-value-pair" part of S5.2 - var firstSemi = str.indexOf(';'); // S5.2 step 1 - var pairRe = options.loose ? LOOSE_COOKIE_PAIR : COOKIE_PAIR; - var result = pairRe.exec(firstSemi === -1 ? str : str.substr(0,firstSemi)); - - // Rx satisfies the "the name string is empty" and "lacks a %x3D ("=")" - // constraints as well as trimming any whitespace. - if (!result) { - return; - } - - var c = new Cookie(); - if (result[1]) { - c.key = result[2].trim(); - } else { - c.key = ''; - } - c.value = result[3].trim(); - if (CONTROL_CHARS.test(c.key) || CONTROL_CHARS.test(c.value)) { - return; - } - - if (firstSemi === -1) { - return c; - } - - // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string - // (including the %x3B (";") in question)." plus later on in the same section - // "discard the first ";" and trim". - var unparsed = str.slice(firstSemi).replace(/^\s*;\s*/,'').trim(); - - // "If the unparsed-attributes string is empty, skip the rest of these - // steps." - if (unparsed.length === 0) { - return c; - } - - /* - * S5.2 says that when looping over the items "[p]rocess the attribute-name - * and attribute-value according to the requirements in the following - * subsections" for every item. Plus, for many of the individual attributes - * in S5.3 it says to use the "attribute-value of the last attribute in the - * cookie-attribute-list". Therefore, in this implementation, we overwrite - * the previous value. - */ - var cookie_avs = unparsed.split(/\s*;\s*/); - while (cookie_avs.length) { - var av = cookie_avs.shift(); - var av_sep = av.indexOf('='); - var av_key, av_value; - - if (av_sep === -1) { - av_key = av; - av_value = null; - } else { - av_key = av.substr(0,av_sep); - av_value = av.substr(av_sep+1); - } - - av_key = av_key.trim().toLowerCase(); - - if (av_value) { - av_value = av_value.trim(); - } - - switch(av_key) { - case 'expires': // S5.2.1 - if (av_value) { - var exp = parseDate(av_value); - // "If the attribute-value failed to parse as a cookie date, ignore the - // cookie-av." - if (exp) { - // over and underflow not realistically a concern: V8's getTime() seems to - // store something larger than a 32-bit time_t (even with 32-bit node) - c.expires = exp; - } - } - break; - - case 'max-age': // S5.2.2 - if (av_value) { - // "If the first character of the attribute-value is not a DIGIT or a "-" - // character ...[or]... If the remainder of attribute-value contains a - // non-DIGIT character, ignore the cookie-av." - if (/^-?[0-9]+$/.test(av_value)) { - var delta = parseInt(av_value, 10); - // "If delta-seconds is less than or equal to zero (0), let expiry-time - // be the earliest representable date and time." - c.setMaxAge(delta); - } - } - break; - - case 'domain': // S5.2.3 - // "If the attribute-value is empty, the behavior is undefined. However, - // the user agent SHOULD ignore the cookie-av entirely." - if (av_value) { - // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E - // (".") character." - var domain = av_value.trim().replace(/^\./, ''); - if (domain) { - // "Convert the cookie-domain to lower case." - c.domain = domain.toLowerCase(); - } - } - break; - - case 'path': // S5.2.4 - /* - * "If the attribute-value is empty or if the first character of the - * attribute-value is not %x2F ("/"): - * Let cookie-path be the default-path. - * Otherwise: - * Let cookie-path be the attribute-value." - * - * We'll represent the default-path as null since it depends on the - * context of the parsing. - */ - c.path = av_value && av_value[0] === "/" ? av_value : null; - break; - - case 'secure': // S5.2.5 - /* - * "If the attribute-name case-insensitively matches the string "Secure", - * the user agent MUST append an attribute to the cookie-attribute-list - * with an attribute-name of Secure and an empty attribute-value." - */ - c.secure = true; - break; - - case 'httponly': // S5.2.6 -- effectively the same as 'secure' - c.httpOnly = true; - break; - - default: - c.extensions = c.extensions || []; - c.extensions.push(av); - break; - } - } - - return c; -} - -// avoid the V8 deoptimization monster! -function jsonParse(str) { - var obj; - try { - obj = JSON.parse(str); - } catch (e) { - return e; - } - return obj; -} - -function fromJSON(str) { - if (!str) { - return null; - } - - var obj; - if (typeof str === 'string') { - obj = jsonParse(str); - if (obj instanceof Error) { - return null; - } - } else { - // assume it's an Object - obj = str; - } - - var c = new Cookie(); - for (var i=0; i 1) { - var lindex = path.lastIndexOf('/'); - if (lindex === 0) { - break; - } - path = path.substr(0,lindex); - permutations.push(path); - } - permutations.push('/'); - return permutations; -} - -function getCookieContext(url) { - if (url instanceof Object) { - return url; - } - // NOTE: decodeURI will throw on malformed URIs (see GH-32). - // Therefore, we will just skip decoding for such URIs. - try { - url = decodeURI(url); - } - catch(err) { - // Silently swallow error - } - - return urlParse(url); -} - -function Cookie(options) { - options = options || {}; - - Object.keys(options).forEach(function(prop) { - if (Cookie.prototype.hasOwnProperty(prop) && - Cookie.prototype[prop] !== options[prop] && - prop.substr(0,1) !== '_') - { - this[prop] = options[prop]; - } - }, this); - - this.creation = this.creation || new Date(); - - // used to break creation ties in cookieCompare(): - Object.defineProperty(this, 'creationIndex', { - configurable: false, - enumerable: false, // important for assert.deepEqual checks - writable: true, - value: ++Cookie.cookiesCreated - }); -} - -Cookie.cookiesCreated = 0; // incremented each time a cookie is created - -Cookie.parse = parse; -Cookie.fromJSON = fromJSON; - -Cookie.prototype.key = ""; -Cookie.prototype.value = ""; - -// the order in which the RFC has them: -Cookie.prototype.expires = "Infinity"; // coerces to literal Infinity -Cookie.prototype.maxAge = null; // takes precedence over expires for TTL -Cookie.prototype.domain = null; -Cookie.prototype.path = null; -Cookie.prototype.secure = false; -Cookie.prototype.httpOnly = false; -Cookie.prototype.extensions = null; - -// set by the CookieJar: -Cookie.prototype.hostOnly = null; // boolean when set -Cookie.prototype.pathIsDefault = null; // boolean when set -Cookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse -Cookie.prototype.lastAccessed = null; // Date when set -Object.defineProperty(Cookie.prototype, 'creationIndex', { - configurable: true, - enumerable: false, - writable: true, - value: 0 -}); - -Cookie.serializableProperties = Object.keys(Cookie.prototype) - .filter(function(prop) { - return !( - Cookie.prototype[prop] instanceof Function || - prop === 'creationIndex' || - prop.substr(0,1) === '_' - ); - }); - -Cookie.prototype.inspect = function inspect() { - var now = Date.now(); - return 'Cookie="'+this.toString() + - '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') + - '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') + - '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') + - '"'; -}; - -Cookie.prototype.toJSON = function() { - var obj = {}; - - var props = Cookie.serializableProperties; - for (var i=0; i suffixLen) { - var publicSuffix = parts.slice(0,suffixLen+1).reverse().join('.'); - return converted ? punycode.toUnicode(publicSuffix) : publicSuffix; - } - - return null; -}; - -// The following generated structure is used under the MPL version 2.0 -// See public-suffix.txt for more information - -var index = module.exports.index = Object.freeze( -{"ac":true,"com.ac":true,"edu.ac":true,"gov.ac":true,"net.ac":true,"mil.ac":true,"org.ac":true,"ad":true,"nom.ad":true,"ae":true,"co.ae":true,"net.ae":true,"org.ae":true,"sch.ae":true,"ac.ae":true,"gov.ae":true,"mil.ae":true,"aero":true,"accident-investigation.aero":true,"accident-prevention.aero":true,"aerobatic.aero":true,"aeroclub.aero":true,"aerodrome.aero":true,"agents.aero":true,"aircraft.aero":true,"airline.aero":true,"airport.aero":true,"air-surveillance.aero":true,"airtraffic.aero":true,"air-traffic-control.aero":true,"ambulance.aero":true,"amusement.aero":true,"association.aero":true,"author.aero":true,"ballooning.aero":true,"broker.aero":true,"caa.aero":true,"cargo.aero":true,"catering.aero":true,"certification.aero":true,"championship.aero":true,"charter.aero":true,"civilaviation.aero":true,"club.aero":true,"conference.aero":true,"consultant.aero":true,"consulting.aero":true,"control.aero":true,"council.aero":true,"crew.aero":true,"design.aero":true,"dgca.aero":true,"educator.aero":true,"emergency.aero":true,"engine.aero":true,"engineer.aero":true,"entertainment.aero":true,"equipment.aero":true,"exchange.aero":true,"express.aero":true,"federation.aero":true,"flight.aero":true,"freight.aero":true,"fuel.aero":true,"gliding.aero":true,"government.aero":true,"groundhandling.aero":true,"group.aero":true,"hanggliding.aero":true,"homebuilt.aero":true,"insurance.aero":true,"journal.aero":true,"journalist.aero":true,"leasing.aero":true,"logistics.aero":true,"magazine.aero":true,"maintenance.aero":true,"marketplace.aero":true,"media.aero":true,"microlight.aero":true,"modelling.aero":true,"navigation.aero":true,"parachuting.aero":true,"paragliding.aero":true,"passenger-association.aero":true,"pilot.aero":true,"press.aero":true,"production.aero":true,"recreation.aero":true,"repbody.aero":true,"res.aero":true,"research.aero":true,"rotorcraft.aero":true,"safety.aero":true,"scientist.aero":true,"services.aero":true,"show.aero":true,"skydiving.aero":true,"software.aero":true,"student.aero":true,"taxi.aero":true,"trader.aero":true,"trading.aero":true,"trainer.aero":true,"union.aero":true,"workinggroup.aero":true,"works.aero":true,"af":true,"gov.af":true,"com.af":true,"org.af":true,"net.af":true,"edu.af":true,"ag":true,"com.ag":true,"org.ag":true,"net.ag":true,"co.ag":true,"nom.ag":true,"ai":true,"off.ai":true,"com.ai":true,"net.ai":true,"org.ai":true,"al":true,"com.al":true,"edu.al":true,"gov.al":true,"mil.al":true,"net.al":true,"org.al":true,"am":true,"an":true,"com.an":true,"net.an":true,"org.an":true,"edu.an":true,"ao":true,"ed.ao":true,"gv.ao":true,"og.ao":true,"co.ao":true,"pb.ao":true,"it.ao":true,"aq":true,"ar":true,"com.ar":true,"edu.ar":true,"gob.ar":true,"gov.ar":true,"int.ar":true,"mil.ar":true,"net.ar":true,"org.ar":true,"tur.ar":true,"arpa":true,"e164.arpa":true,"in-addr.arpa":true,"ip6.arpa":true,"iris.arpa":true,"uri.arpa":true,"urn.arpa":true,"as":true,"gov.as":true,"asia":true,"at":true,"ac.at":true,"co.at":true,"gv.at":true,"or.at":true,"au":true,"com.au":true,"net.au":true,"org.au":true,"edu.au":true,"gov.au":true,"asn.au":true,"id.au":true,"info.au":true,"conf.au":true,"oz.au":true,"act.au":true,"nsw.au":true,"nt.au":true,"qld.au":true,"sa.au":true,"tas.au":true,"vic.au":true,"wa.au":true,"act.edu.au":true,"nsw.edu.au":true,"nt.edu.au":true,"qld.edu.au":true,"sa.edu.au":true,"tas.edu.au":true,"vic.edu.au":true,"wa.edu.au":true,"qld.gov.au":true,"sa.gov.au":true,"tas.gov.au":true,"vic.gov.au":true,"wa.gov.au":true,"aw":true,"com.aw":true,"ax":true,"az":true,"com.az":true,"net.az":true,"int.az":true,"gov.az":true,"org.az":true,"edu.az":true,"info.az":true,"pp.az":true,"mil.az":true,"name.az":true,"pro.az":true,"biz.az":true,"ba":true,"org.ba":true,"net.ba":true,"edu.ba":true,"gov.ba":true,"mil.ba":true,"unsa.ba":true,"unbi.ba":true,"co.ba":true,"com.ba":true,"rs.ba":true,"bb":true,"biz.bb":true,"co.bb":true,"com.bb":true,"edu.bb":true,"gov.bb":true,"info.bb":true,"net.bb":true,"org.bb":true,"store.bb":true,"tv.bb":true,"*.bd":true,"be":true,"ac.be":true,"bf":true,"gov.bf":true,"bg":true,"a.bg":true,"b.bg":true,"c.bg":true,"d.bg":true,"e.bg":true,"f.bg":true,"g.bg":true,"h.bg":true,"i.bg":true,"j.bg":true,"k.bg":true,"l.bg":true,"m.bg":true,"n.bg":true,"o.bg":true,"p.bg":true,"q.bg":true,"r.bg":true,"s.bg":true,"t.bg":true,"u.bg":true,"v.bg":true,"w.bg":true,"x.bg":true,"y.bg":true,"z.bg":true,"0.bg":true,"1.bg":true,"2.bg":true,"3.bg":true,"4.bg":true,"5.bg":true,"6.bg":true,"7.bg":true,"8.bg":true,"9.bg":true,"bh":true,"com.bh":true,"edu.bh":true,"net.bh":true,"org.bh":true,"gov.bh":true,"bi":true,"co.bi":true,"com.bi":true,"edu.bi":true,"or.bi":true,"org.bi":true,"biz":true,"bj":true,"asso.bj":true,"barreau.bj":true,"gouv.bj":true,"bm":true,"com.bm":true,"edu.bm":true,"gov.bm":true,"net.bm":true,"org.bm":true,"*.bn":true,"bo":true,"com.bo":true,"edu.bo":true,"gov.bo":true,"gob.bo":true,"int.bo":true,"org.bo":true,"net.bo":true,"mil.bo":true,"tv.bo":true,"br":true,"adm.br":true,"adv.br":true,"agr.br":true,"am.br":true,"arq.br":true,"art.br":true,"ato.br":true,"b.br":true,"bio.br":true,"blog.br":true,"bmd.br":true,"cim.br":true,"cng.br":true,"cnt.br":true,"com.br":true,"coop.br":true,"ecn.br":true,"eco.br":true,"edu.br":true,"emp.br":true,"eng.br":true,"esp.br":true,"etc.br":true,"eti.br":true,"far.br":true,"flog.br":true,"fm.br":true,"fnd.br":true,"fot.br":true,"fst.br":true,"g12.br":true,"ggf.br":true,"gov.br":true,"imb.br":true,"ind.br":true,"inf.br":true,"jor.br":true,"jus.br":true,"leg.br":true,"lel.br":true,"mat.br":true,"med.br":true,"mil.br":true,"mp.br":true,"mus.br":true,"net.br":true,"*.nom.br":true,"not.br":true,"ntr.br":true,"odo.br":true,"org.br":true,"ppg.br":true,"pro.br":true,"psc.br":true,"psi.br":true,"qsl.br":true,"radio.br":true,"rec.br":true,"slg.br":true,"srv.br":true,"taxi.br":true,"teo.br":true,"tmp.br":true,"trd.br":true,"tur.br":true,"tv.br":true,"vet.br":true,"vlog.br":true,"wiki.br":true,"zlg.br":true,"bs":true,"com.bs":true,"net.bs":true,"org.bs":true,"edu.bs":true,"gov.bs":true,"bt":true,"com.bt":true,"edu.bt":true,"gov.bt":true,"net.bt":true,"org.bt":true,"bv":true,"bw":true,"co.bw":true,"org.bw":true,"by":true,"gov.by":true,"mil.by":true,"com.by":true,"of.by":true,"bz":true,"com.bz":true,"net.bz":true,"org.bz":true,"edu.bz":true,"gov.bz":true,"ca":true,"ab.ca":true,"bc.ca":true,"mb.ca":true,"nb.ca":true,"nf.ca":true,"nl.ca":true,"ns.ca":true,"nt.ca":true,"nu.ca":true,"on.ca":true,"pe.ca":true,"qc.ca":true,"sk.ca":true,"yk.ca":true,"gc.ca":true,"cat":true,"cc":true,"cd":true,"gov.cd":true,"cf":true,"cg":true,"ch":true,"ci":true,"org.ci":true,"or.ci":true,"com.ci":true,"co.ci":true,"edu.ci":true,"ed.ci":true,"ac.ci":true,"net.ci":true,"go.ci":true,"asso.ci":true,"xn--aroport-bya.ci":true,"int.ci":true,"presse.ci":true,"md.ci":true,"gouv.ci":true,"*.ck":true,"www.ck":false,"cl":true,"gov.cl":true,"gob.cl":true,"co.cl":true,"mil.cl":true,"cm":true,"co.cm":true,"com.cm":true,"gov.cm":true,"net.cm":true,"cn":true,"ac.cn":true,"com.cn":true,"edu.cn":true,"gov.cn":true,"net.cn":true,"org.cn":true,"mil.cn":true,"xn--55qx5d.cn":true,"xn--io0a7i.cn":true,"xn--od0alg.cn":true,"ah.cn":true,"bj.cn":true,"cq.cn":true,"fj.cn":true,"gd.cn":true,"gs.cn":true,"gz.cn":true,"gx.cn":true,"ha.cn":true,"hb.cn":true,"he.cn":true,"hi.cn":true,"hl.cn":true,"hn.cn":true,"jl.cn":true,"js.cn":true,"jx.cn":true,"ln.cn":true,"nm.cn":true,"nx.cn":true,"qh.cn":true,"sc.cn":true,"sd.cn":true,"sh.cn":true,"sn.cn":true,"sx.cn":true,"tj.cn":true,"xj.cn":true,"xz.cn":true,"yn.cn":true,"zj.cn":true,"hk.cn":true,"mo.cn":true,"tw.cn":true,"co":true,"arts.co":true,"com.co":true,"edu.co":true,"firm.co":true,"gov.co":true,"info.co":true,"int.co":true,"mil.co":true,"net.co":true,"nom.co":true,"org.co":true,"rec.co":true,"web.co":true,"com":true,"coop":true,"cr":true,"ac.cr":true,"co.cr":true,"ed.cr":true,"fi.cr":true,"go.cr":true,"or.cr":true,"sa.cr":true,"cu":true,"com.cu":true,"edu.cu":true,"org.cu":true,"net.cu":true,"gov.cu":true,"inf.cu":true,"cv":true,"cw":true,"com.cw":true,"edu.cw":true,"net.cw":true,"org.cw":true,"cx":true,"gov.cx":true,"ac.cy":true,"biz.cy":true,"com.cy":true,"ekloges.cy":true,"gov.cy":true,"ltd.cy":true,"name.cy":true,"net.cy":true,"org.cy":true,"parliament.cy":true,"press.cy":true,"pro.cy":true,"tm.cy":true,"cz":true,"de":true,"dj":true,"dk":true,"dm":true,"com.dm":true,"net.dm":true,"org.dm":true,"edu.dm":true,"gov.dm":true,"do":true,"art.do":true,"com.do":true,"edu.do":true,"gob.do":true,"gov.do":true,"mil.do":true,"net.do":true,"org.do":true,"sld.do":true,"web.do":true,"dz":true,"com.dz":true,"org.dz":true,"net.dz":true,"gov.dz":true,"edu.dz":true,"asso.dz":true,"pol.dz":true,"art.dz":true,"ec":true,"com.ec":true,"info.ec":true,"net.ec":true,"fin.ec":true,"k12.ec":true,"med.ec":true,"pro.ec":true,"org.ec":true,"edu.ec":true,"gov.ec":true,"gob.ec":true,"mil.ec":true,"edu":true,"ee":true,"edu.ee":true,"gov.ee":true,"riik.ee":true,"lib.ee":true,"med.ee":true,"com.ee":true,"pri.ee":true,"aip.ee":true,"org.ee":true,"fie.ee":true,"eg":true,"com.eg":true,"edu.eg":true,"eun.eg":true,"gov.eg":true,"mil.eg":true,"name.eg":true,"net.eg":true,"org.eg":true,"sci.eg":true,"*.er":true,"es":true,"com.es":true,"nom.es":true,"org.es":true,"gob.es":true,"edu.es":true,"et":true,"com.et":true,"gov.et":true,"org.et":true,"edu.et":true,"biz.et":true,"name.et":true,"info.et":true,"net.et":true,"eu":true,"fi":true,"aland.fi":true,"*.fj":true,"*.fk":true,"fm":true,"fo":true,"fr":true,"com.fr":true,"asso.fr":true,"nom.fr":true,"prd.fr":true,"presse.fr":true,"tm.fr":true,"aeroport.fr":true,"assedic.fr":true,"avocat.fr":true,"avoues.fr":true,"cci.fr":true,"chambagri.fr":true,"chirurgiens-dentistes.fr":true,"experts-comptables.fr":true,"geometre-expert.fr":true,"gouv.fr":true,"greta.fr":true,"huissier-justice.fr":true,"medecin.fr":true,"notaires.fr":true,"pharmacien.fr":true,"port.fr":true,"veterinaire.fr":true,"ga":true,"gb":true,"gd":true,"ge":true,"com.ge":true,"edu.ge":true,"gov.ge":true,"org.ge":true,"mil.ge":true,"net.ge":true,"pvt.ge":true,"gf":true,"gg":true,"co.gg":true,"net.gg":true,"org.gg":true,"gh":true,"com.gh":true,"edu.gh":true,"gov.gh":true,"org.gh":true,"mil.gh":true,"gi":true,"com.gi":true,"ltd.gi":true,"gov.gi":true,"mod.gi":true,"edu.gi":true,"org.gi":true,"gl":true,"co.gl":true,"com.gl":true,"edu.gl":true,"net.gl":true,"org.gl":true,"gm":true,"gn":true,"ac.gn":true,"com.gn":true,"edu.gn":true,"gov.gn":true,"org.gn":true,"net.gn":true,"gov":true,"gp":true,"com.gp":true,"net.gp":true,"mobi.gp":true,"edu.gp":true,"org.gp":true,"asso.gp":true,"gq":true,"gr":true,"com.gr":true,"edu.gr":true,"net.gr":true,"org.gr":true,"gov.gr":true,"gs":true,"gt":true,"com.gt":true,"edu.gt":true,"gob.gt":true,"ind.gt":true,"mil.gt":true,"net.gt":true,"org.gt":true,"*.gu":true,"gw":true,"gy":true,"co.gy":true,"com.gy":true,"net.gy":true,"hk":true,"com.hk":true,"edu.hk":true,"gov.hk":true,"idv.hk":true,"net.hk":true,"org.hk":true,"xn--55qx5d.hk":true,"xn--wcvs22d.hk":true,"xn--lcvr32d.hk":true,"xn--mxtq1m.hk":true,"xn--gmqw5a.hk":true,"xn--ciqpn.hk":true,"xn--gmq050i.hk":true,"xn--zf0avx.hk":true,"xn--io0a7i.hk":true,"xn--mk0axi.hk":true,"xn--od0alg.hk":true,"xn--od0aq3b.hk":true,"xn--tn0ag.hk":true,"xn--uc0atv.hk":true,"xn--uc0ay4a.hk":true,"hm":true,"hn":true,"com.hn":true,"edu.hn":true,"org.hn":true,"net.hn":true,"mil.hn":true,"gob.hn":true,"hr":true,"iz.hr":true,"from.hr":true,"name.hr":true,"com.hr":true,"ht":true,"com.ht":true,"shop.ht":true,"firm.ht":true,"info.ht":true,"adult.ht":true,"net.ht":true,"pro.ht":true,"org.ht":true,"med.ht":true,"art.ht":true,"coop.ht":true,"pol.ht":true,"asso.ht":true,"edu.ht":true,"rel.ht":true,"gouv.ht":true,"perso.ht":true,"hu":true,"co.hu":true,"info.hu":true,"org.hu":true,"priv.hu":true,"sport.hu":true,"tm.hu":true,"2000.hu":true,"agrar.hu":true,"bolt.hu":true,"casino.hu":true,"city.hu":true,"erotica.hu":true,"erotika.hu":true,"film.hu":true,"forum.hu":true,"games.hu":true,"hotel.hu":true,"ingatlan.hu":true,"jogasz.hu":true,"konyvelo.hu":true,"lakas.hu":true,"media.hu":true,"news.hu":true,"reklam.hu":true,"sex.hu":true,"shop.hu":true,"suli.hu":true,"szex.hu":true,"tozsde.hu":true,"utazas.hu":true,"video.hu":true,"id":true,"ac.id":true,"biz.id":true,"co.id":true,"desa.id":true,"go.id":true,"mil.id":true,"my.id":true,"net.id":true,"or.id":true,"sch.id":true,"web.id":true,"ie":true,"gov.ie":true,"il":true,"ac.il":true,"co.il":true,"gov.il":true,"idf.il":true,"k12.il":true,"muni.il":true,"net.il":true,"org.il":true,"im":true,"ac.im":true,"co.im":true,"com.im":true,"ltd.co.im":true,"net.im":true,"org.im":true,"plc.co.im":true,"tt.im":true,"tv.im":true,"in":true,"co.in":true,"firm.in":true,"net.in":true,"org.in":true,"gen.in":true,"ind.in":true,"nic.in":true,"ac.in":true,"edu.in":true,"res.in":true,"gov.in":true,"mil.in":true,"info":true,"int":true,"eu.int":true,"io":true,"com.io":true,"iq":true,"gov.iq":true,"edu.iq":true,"mil.iq":true,"com.iq":true,"org.iq":true,"net.iq":true,"ir":true,"ac.ir":true,"co.ir":true,"gov.ir":true,"id.ir":true,"net.ir":true,"org.ir":true,"sch.ir":true,"xn--mgba3a4f16a.ir":true,"xn--mgba3a4fra.ir":true,"is":true,"net.is":true,"com.is":true,"edu.is":true,"gov.is":true,"org.is":true,"int.is":true,"it":true,"gov.it":true,"edu.it":true,"abr.it":true,"abruzzo.it":true,"aosta-valley.it":true,"aostavalley.it":true,"bas.it":true,"basilicata.it":true,"cal.it":true,"calabria.it":true,"cam.it":true,"campania.it":true,"emilia-romagna.it":true,"emiliaromagna.it":true,"emr.it":true,"friuli-v-giulia.it":true,"friuli-ve-giulia.it":true,"friuli-vegiulia.it":true,"friuli-venezia-giulia.it":true,"friuli-veneziagiulia.it":true,"friuli-vgiulia.it":true,"friuliv-giulia.it":true,"friulive-giulia.it":true,"friulivegiulia.it":true,"friulivenezia-giulia.it":true,"friuliveneziagiulia.it":true,"friulivgiulia.it":true,"fvg.it":true,"laz.it":true,"lazio.it":true,"lig.it":true,"liguria.it":true,"lom.it":true,"lombardia.it":true,"lombardy.it":true,"lucania.it":true,"mar.it":true,"marche.it":true,"mol.it":true,"molise.it":true,"piedmont.it":true,"piemonte.it":true,"pmn.it":true,"pug.it":true,"puglia.it":true,"sar.it":true,"sardegna.it":true,"sardinia.it":true,"sic.it":true,"sicilia.it":true,"sicily.it":true,"taa.it":true,"tos.it":true,"toscana.it":true,"trentino-a-adige.it":true,"trentino-aadige.it":true,"trentino-alto-adige.it":true,"trentino-altoadige.it":true,"trentino-s-tirol.it":true,"trentino-stirol.it":true,"trentino-sud-tirol.it":true,"trentino-sudtirol.it":true,"trentino-sued-tirol.it":true,"trentino-suedtirol.it":true,"trentinoa-adige.it":true,"trentinoaadige.it":true,"trentinoalto-adige.it":true,"trentinoaltoadige.it":true,"trentinos-tirol.it":true,"trentinostirol.it":true,"trentinosud-tirol.it":true,"trentinosudtirol.it":true,"trentinosued-tirol.it":true,"trentinosuedtirol.it":true,"tuscany.it":true,"umb.it":true,"umbria.it":true,"val-d-aosta.it":true,"val-daosta.it":true,"vald-aosta.it":true,"valdaosta.it":true,"valle-aosta.it":true,"valle-d-aosta.it":true,"valle-daosta.it":true,"valleaosta.it":true,"valled-aosta.it":true,"valledaosta.it":true,"vallee-aoste.it":true,"valleeaoste.it":true,"vao.it":true,"vda.it":true,"ven.it":true,"veneto.it":true,"ag.it":true,"agrigento.it":true,"al.it":true,"alessandria.it":true,"alto-adige.it":true,"altoadige.it":true,"an.it":true,"ancona.it":true,"andria-barletta-trani.it":true,"andria-trani-barletta.it":true,"andriabarlettatrani.it":true,"andriatranibarletta.it":true,"ao.it":true,"aosta.it":true,"aoste.it":true,"ap.it":true,"aq.it":true,"aquila.it":true,"ar.it":true,"arezzo.it":true,"ascoli-piceno.it":true,"ascolipiceno.it":true,"asti.it":true,"at.it":true,"av.it":true,"avellino.it":true,"ba.it":true,"balsan.it":true,"bari.it":true,"barletta-trani-andria.it":true,"barlettatraniandria.it":true,"belluno.it":true,"benevento.it":true,"bergamo.it":true,"bg.it":true,"bi.it":true,"biella.it":true,"bl.it":true,"bn.it":true,"bo.it":true,"bologna.it":true,"bolzano.it":true,"bozen.it":true,"br.it":true,"brescia.it":true,"brindisi.it":true,"bs.it":true,"bt.it":true,"bz.it":true,"ca.it":true,"cagliari.it":true,"caltanissetta.it":true,"campidano-medio.it":true,"campidanomedio.it":true,"campobasso.it":true,"carbonia-iglesias.it":true,"carboniaiglesias.it":true,"carrara-massa.it":true,"carraramassa.it":true,"caserta.it":true,"catania.it":true,"catanzaro.it":true,"cb.it":true,"ce.it":true,"cesena-forli.it":true,"cesenaforli.it":true,"ch.it":true,"chieti.it":true,"ci.it":true,"cl.it":true,"cn.it":true,"co.it":true,"como.it":true,"cosenza.it":true,"cr.it":true,"cremona.it":true,"crotone.it":true,"cs.it":true,"ct.it":true,"cuneo.it":true,"cz.it":true,"dell-ogliastra.it":true,"dellogliastra.it":true,"en.it":true,"enna.it":true,"fc.it":true,"fe.it":true,"fermo.it":true,"ferrara.it":true,"fg.it":true,"fi.it":true,"firenze.it":true,"florence.it":true,"fm.it":true,"foggia.it":true,"forli-cesena.it":true,"forlicesena.it":true,"fr.it":true,"frosinone.it":true,"ge.it":true,"genoa.it":true,"genova.it":true,"go.it":true,"gorizia.it":true,"gr.it":true,"grosseto.it":true,"iglesias-carbonia.it":true,"iglesiascarbonia.it":true,"im.it":true,"imperia.it":true,"is.it":true,"isernia.it":true,"kr.it":true,"la-spezia.it":true,"laquila.it":true,"laspezia.it":true,"latina.it":true,"lc.it":true,"le.it":true,"lecce.it":true,"lecco.it":true,"li.it":true,"livorno.it":true,"lo.it":true,"lodi.it":true,"lt.it":true,"lu.it":true,"lucca.it":true,"macerata.it":true,"mantova.it":true,"massa-carrara.it":true,"massacarrara.it":true,"matera.it":true,"mb.it":true,"mc.it":true,"me.it":true,"medio-campidano.it":true,"mediocampidano.it":true,"messina.it":true,"mi.it":true,"milan.it":true,"milano.it":true,"mn.it":true,"mo.it":true,"modena.it":true,"monza-brianza.it":true,"monza-e-della-brianza.it":true,"monza.it":true,"monzabrianza.it":true,"monzaebrianza.it":true,"monzaedellabrianza.it":true,"ms.it":true,"mt.it":true,"na.it":true,"naples.it":true,"napoli.it":true,"no.it":true,"novara.it":true,"nu.it":true,"nuoro.it":true,"og.it":true,"ogliastra.it":true,"olbia-tempio.it":true,"olbiatempio.it":true,"or.it":true,"oristano.it":true,"ot.it":true,"pa.it":true,"padova.it":true,"padua.it":true,"palermo.it":true,"parma.it":true,"pavia.it":true,"pc.it":true,"pd.it":true,"pe.it":true,"perugia.it":true,"pesaro-urbino.it":true,"pesarourbino.it":true,"pescara.it":true,"pg.it":true,"pi.it":true,"piacenza.it":true,"pisa.it":true,"pistoia.it":true,"pn.it":true,"po.it":true,"pordenone.it":true,"potenza.it":true,"pr.it":true,"prato.it":true,"pt.it":true,"pu.it":true,"pv.it":true,"pz.it":true,"ra.it":true,"ragusa.it":true,"ravenna.it":true,"rc.it":true,"re.it":true,"reggio-calabria.it":true,"reggio-emilia.it":true,"reggiocalabria.it":true,"reggioemilia.it":true,"rg.it":true,"ri.it":true,"rieti.it":true,"rimini.it":true,"rm.it":true,"rn.it":true,"ro.it":true,"roma.it":true,"rome.it":true,"rovigo.it":true,"sa.it":true,"salerno.it":true,"sassari.it":true,"savona.it":true,"si.it":true,"siena.it":true,"siracusa.it":true,"so.it":true,"sondrio.it":true,"sp.it":true,"sr.it":true,"ss.it":true,"suedtirol.it":true,"sv.it":true,"ta.it":true,"taranto.it":true,"te.it":true,"tempio-olbia.it":true,"tempioolbia.it":true,"teramo.it":true,"terni.it":true,"tn.it":true,"to.it":true,"torino.it":true,"tp.it":true,"tr.it":true,"trani-andria-barletta.it":true,"trani-barletta-andria.it":true,"traniandriabarletta.it":true,"tranibarlettaandria.it":true,"trapani.it":true,"trentino.it":true,"trento.it":true,"treviso.it":true,"trieste.it":true,"ts.it":true,"turin.it":true,"tv.it":true,"ud.it":true,"udine.it":true,"urbino-pesaro.it":true,"urbinopesaro.it":true,"va.it":true,"varese.it":true,"vb.it":true,"vc.it":true,"ve.it":true,"venezia.it":true,"venice.it":true,"verbania.it":true,"vercelli.it":true,"verona.it":true,"vi.it":true,"vibo-valentia.it":true,"vibovalentia.it":true,"vicenza.it":true,"viterbo.it":true,"vr.it":true,"vs.it":true,"vt.it":true,"vv.it":true,"je":true,"co.je":true,"net.je":true,"org.je":true,"*.jm":true,"jo":true,"com.jo":true,"org.jo":true,"net.jo":true,"edu.jo":true,"sch.jo":true,"gov.jo":true,"mil.jo":true,"name.jo":true,"jobs":true,"jp":true,"ac.jp":true,"ad.jp":true,"co.jp":true,"ed.jp":true,"go.jp":true,"gr.jp":true,"lg.jp":true,"ne.jp":true,"or.jp":true,"aichi.jp":true,"akita.jp":true,"aomori.jp":true,"chiba.jp":true,"ehime.jp":true,"fukui.jp":true,"fukuoka.jp":true,"fukushima.jp":true,"gifu.jp":true,"gunma.jp":true,"hiroshima.jp":true,"hokkaido.jp":true,"hyogo.jp":true,"ibaraki.jp":true,"ishikawa.jp":true,"iwate.jp":true,"kagawa.jp":true,"kagoshima.jp":true,"kanagawa.jp":true,"kochi.jp":true,"kumamoto.jp":true,"kyoto.jp":true,"mie.jp":true,"miyagi.jp":true,"miyazaki.jp":true,"nagano.jp":true,"nagasaki.jp":true,"nara.jp":true,"niigata.jp":true,"oita.jp":true,"okayama.jp":true,"okinawa.jp":true,"osaka.jp":true,"saga.jp":true,"saitama.jp":true,"shiga.jp":true,"shimane.jp":true,"shizuoka.jp":true,"tochigi.jp":true,"tokushima.jp":true,"tokyo.jp":true,"tottori.jp":true,"toyama.jp":true,"wakayama.jp":true,"yamagata.jp":true,"yamaguchi.jp":true,"yamanashi.jp":true,"xn--4pvxs.jp":true,"xn--vgu402c.jp":true,"xn--c3s14m.jp":true,"xn--f6qx53a.jp":true,"xn--8pvr4u.jp":true,"xn--uist22h.jp":true,"xn--djrs72d6uy.jp":true,"xn--mkru45i.jp":true,"xn--0trq7p7nn.jp":true,"xn--8ltr62k.jp":true,"xn--2m4a15e.jp":true,"xn--efvn9s.jp":true,"xn--32vp30h.jp":true,"xn--4it797k.jp":true,"xn--1lqs71d.jp":true,"xn--5rtp49c.jp":true,"xn--5js045d.jp":true,"xn--ehqz56n.jp":true,"xn--1lqs03n.jp":true,"xn--qqqt11m.jp":true,"xn--kbrq7o.jp":true,"xn--pssu33l.jp":true,"xn--ntsq17g.jp":true,"xn--uisz3g.jp":true,"xn--6btw5a.jp":true,"xn--1ctwo.jp":true,"xn--6orx2r.jp":true,"xn--rht61e.jp":true,"xn--rht27z.jp":true,"xn--djty4k.jp":true,"xn--nit225k.jp":true,"xn--rht3d.jp":true,"xn--klty5x.jp":true,"xn--kltx9a.jp":true,"xn--kltp7d.jp":true,"xn--uuwu58a.jp":true,"xn--zbx025d.jp":true,"xn--ntso0iqx3a.jp":true,"xn--elqq16h.jp":true,"xn--4it168d.jp":true,"xn--klt787d.jp":true,"xn--rny31h.jp":true,"xn--7t0a264c.jp":true,"xn--5rtq34k.jp":true,"xn--k7yn95e.jp":true,"xn--tor131o.jp":true,"xn--d5qv7z876c.jp":true,"*.kawasaki.jp":true,"*.kitakyushu.jp":true,"*.kobe.jp":true,"*.nagoya.jp":true,"*.sapporo.jp":true,"*.sendai.jp":true,"*.yokohama.jp":true,"city.kawasaki.jp":false,"city.kitakyushu.jp":false,"city.kobe.jp":false,"city.nagoya.jp":false,"city.sapporo.jp":false,"city.sendai.jp":false,"city.yokohama.jp":false,"aisai.aichi.jp":true,"ama.aichi.jp":true,"anjo.aichi.jp":true,"asuke.aichi.jp":true,"chiryu.aichi.jp":true,"chita.aichi.jp":true,"fuso.aichi.jp":true,"gamagori.aichi.jp":true,"handa.aichi.jp":true,"hazu.aichi.jp":true,"hekinan.aichi.jp":true,"higashiura.aichi.jp":true,"ichinomiya.aichi.jp":true,"inazawa.aichi.jp":true,"inuyama.aichi.jp":true,"isshiki.aichi.jp":true,"iwakura.aichi.jp":true,"kanie.aichi.jp":true,"kariya.aichi.jp":true,"kasugai.aichi.jp":true,"kira.aichi.jp":true,"kiyosu.aichi.jp":true,"komaki.aichi.jp":true,"konan.aichi.jp":true,"kota.aichi.jp":true,"mihama.aichi.jp":true,"miyoshi.aichi.jp":true,"nishio.aichi.jp":true,"nisshin.aichi.jp":true,"obu.aichi.jp":true,"oguchi.aichi.jp":true,"oharu.aichi.jp":true,"okazaki.aichi.jp":true,"owariasahi.aichi.jp":true,"seto.aichi.jp":true,"shikatsu.aichi.jp":true,"shinshiro.aichi.jp":true,"shitara.aichi.jp":true,"tahara.aichi.jp":true,"takahama.aichi.jp":true,"tobishima.aichi.jp":true,"toei.aichi.jp":true,"togo.aichi.jp":true,"tokai.aichi.jp":true,"tokoname.aichi.jp":true,"toyoake.aichi.jp":true,"toyohashi.aichi.jp":true,"toyokawa.aichi.jp":true,"toyone.aichi.jp":true,"toyota.aichi.jp":true,"tsushima.aichi.jp":true,"yatomi.aichi.jp":true,"akita.akita.jp":true,"daisen.akita.jp":true,"fujisato.akita.jp":true,"gojome.akita.jp":true,"hachirogata.akita.jp":true,"happou.akita.jp":true,"higashinaruse.akita.jp":true,"honjo.akita.jp":true,"honjyo.akita.jp":true,"ikawa.akita.jp":true,"kamikoani.akita.jp":true,"kamioka.akita.jp":true,"katagami.akita.jp":true,"kazuno.akita.jp":true,"kitaakita.akita.jp":true,"kosaka.akita.jp":true,"kyowa.akita.jp":true,"misato.akita.jp":true,"mitane.akita.jp":true,"moriyoshi.akita.jp":true,"nikaho.akita.jp":true,"noshiro.akita.jp":true,"odate.akita.jp":true,"oga.akita.jp":true,"ogata.akita.jp":true,"semboku.akita.jp":true,"yokote.akita.jp":true,"yurihonjo.akita.jp":true,"aomori.aomori.jp":true,"gonohe.aomori.jp":true,"hachinohe.aomori.jp":true,"hashikami.aomori.jp":true,"hiranai.aomori.jp":true,"hirosaki.aomori.jp":true,"itayanagi.aomori.jp":true,"kuroishi.aomori.jp":true,"misawa.aomori.jp":true,"mutsu.aomori.jp":true,"nakadomari.aomori.jp":true,"noheji.aomori.jp":true,"oirase.aomori.jp":true,"owani.aomori.jp":true,"rokunohe.aomori.jp":true,"sannohe.aomori.jp":true,"shichinohe.aomori.jp":true,"shingo.aomori.jp":true,"takko.aomori.jp":true,"towada.aomori.jp":true,"tsugaru.aomori.jp":true,"tsuruta.aomori.jp":true,"abiko.chiba.jp":true,"asahi.chiba.jp":true,"chonan.chiba.jp":true,"chosei.chiba.jp":true,"choshi.chiba.jp":true,"chuo.chiba.jp":true,"funabashi.chiba.jp":true,"futtsu.chiba.jp":true,"hanamigawa.chiba.jp":true,"ichihara.chiba.jp":true,"ichikawa.chiba.jp":true,"ichinomiya.chiba.jp":true,"inzai.chiba.jp":true,"isumi.chiba.jp":true,"kamagaya.chiba.jp":true,"kamogawa.chiba.jp":true,"kashiwa.chiba.jp":true,"katori.chiba.jp":true,"katsuura.chiba.jp":true,"kimitsu.chiba.jp":true,"kisarazu.chiba.jp":true,"kozaki.chiba.jp":true,"kujukuri.chiba.jp":true,"kyonan.chiba.jp":true,"matsudo.chiba.jp":true,"midori.chiba.jp":true,"mihama.chiba.jp":true,"minamiboso.chiba.jp":true,"mobara.chiba.jp":true,"mutsuzawa.chiba.jp":true,"nagara.chiba.jp":true,"nagareyama.chiba.jp":true,"narashino.chiba.jp":true,"narita.chiba.jp":true,"noda.chiba.jp":true,"oamishirasato.chiba.jp":true,"omigawa.chiba.jp":true,"onjuku.chiba.jp":true,"otaki.chiba.jp":true,"sakae.chiba.jp":true,"sakura.chiba.jp":true,"shimofusa.chiba.jp":true,"shirako.chiba.jp":true,"shiroi.chiba.jp":true,"shisui.chiba.jp":true,"sodegaura.chiba.jp":true,"sosa.chiba.jp":true,"tako.chiba.jp":true,"tateyama.chiba.jp":true,"togane.chiba.jp":true,"tohnosho.chiba.jp":true,"tomisato.chiba.jp":true,"urayasu.chiba.jp":true,"yachimata.chiba.jp":true,"yachiyo.chiba.jp":true,"yokaichiba.chiba.jp":true,"yokoshibahikari.chiba.jp":true,"yotsukaido.chiba.jp":true,"ainan.ehime.jp":true,"honai.ehime.jp":true,"ikata.ehime.jp":true,"imabari.ehime.jp":true,"iyo.ehime.jp":true,"kamijima.ehime.jp":true,"kihoku.ehime.jp":true,"kumakogen.ehime.jp":true,"masaki.ehime.jp":true,"matsuno.ehime.jp":true,"matsuyama.ehime.jp":true,"namikata.ehime.jp":true,"niihama.ehime.jp":true,"ozu.ehime.jp":true,"saijo.ehime.jp":true,"seiyo.ehime.jp":true,"shikokuchuo.ehime.jp":true,"tobe.ehime.jp":true,"toon.ehime.jp":true,"uchiko.ehime.jp":true,"uwajima.ehime.jp":true,"yawatahama.ehime.jp":true,"echizen.fukui.jp":true,"eiheiji.fukui.jp":true,"fukui.fukui.jp":true,"ikeda.fukui.jp":true,"katsuyama.fukui.jp":true,"mihama.fukui.jp":true,"minamiechizen.fukui.jp":true,"obama.fukui.jp":true,"ohi.fukui.jp":true,"ono.fukui.jp":true,"sabae.fukui.jp":true,"sakai.fukui.jp":true,"takahama.fukui.jp":true,"tsuruga.fukui.jp":true,"wakasa.fukui.jp":true,"ashiya.fukuoka.jp":true,"buzen.fukuoka.jp":true,"chikugo.fukuoka.jp":true,"chikuho.fukuoka.jp":true,"chikujo.fukuoka.jp":true,"chikushino.fukuoka.jp":true,"chikuzen.fukuoka.jp":true,"chuo.fukuoka.jp":true,"dazaifu.fukuoka.jp":true,"fukuchi.fukuoka.jp":true,"hakata.fukuoka.jp":true,"higashi.fukuoka.jp":true,"hirokawa.fukuoka.jp":true,"hisayama.fukuoka.jp":true,"iizuka.fukuoka.jp":true,"inatsuki.fukuoka.jp":true,"kaho.fukuoka.jp":true,"kasuga.fukuoka.jp":true,"kasuya.fukuoka.jp":true,"kawara.fukuoka.jp":true,"keisen.fukuoka.jp":true,"koga.fukuoka.jp":true,"kurate.fukuoka.jp":true,"kurogi.fukuoka.jp":true,"kurume.fukuoka.jp":true,"minami.fukuoka.jp":true,"miyako.fukuoka.jp":true,"miyama.fukuoka.jp":true,"miyawaka.fukuoka.jp":true,"mizumaki.fukuoka.jp":true,"munakata.fukuoka.jp":true,"nakagawa.fukuoka.jp":true,"nakama.fukuoka.jp":true,"nishi.fukuoka.jp":true,"nogata.fukuoka.jp":true,"ogori.fukuoka.jp":true,"okagaki.fukuoka.jp":true,"okawa.fukuoka.jp":true,"oki.fukuoka.jp":true,"omuta.fukuoka.jp":true,"onga.fukuoka.jp":true,"onojo.fukuoka.jp":true,"oto.fukuoka.jp":true,"saigawa.fukuoka.jp":true,"sasaguri.fukuoka.jp":true,"shingu.fukuoka.jp":true,"shinyoshitomi.fukuoka.jp":true,"shonai.fukuoka.jp":true,"soeda.fukuoka.jp":true,"sue.fukuoka.jp":true,"tachiarai.fukuoka.jp":true,"tagawa.fukuoka.jp":true,"takata.fukuoka.jp":true,"toho.fukuoka.jp":true,"toyotsu.fukuoka.jp":true,"tsuiki.fukuoka.jp":true,"ukiha.fukuoka.jp":true,"umi.fukuoka.jp":true,"usui.fukuoka.jp":true,"yamada.fukuoka.jp":true,"yame.fukuoka.jp":true,"yanagawa.fukuoka.jp":true,"yukuhashi.fukuoka.jp":true,"aizubange.fukushima.jp":true,"aizumisato.fukushima.jp":true,"aizuwakamatsu.fukushima.jp":true,"asakawa.fukushima.jp":true,"bandai.fukushima.jp":true,"date.fukushima.jp":true,"fukushima.fukushima.jp":true,"furudono.fukushima.jp":true,"futaba.fukushima.jp":true,"hanawa.fukushima.jp":true,"higashi.fukushima.jp":true,"hirata.fukushima.jp":true,"hirono.fukushima.jp":true,"iitate.fukushima.jp":true,"inawashiro.fukushima.jp":true,"ishikawa.fukushima.jp":true,"iwaki.fukushima.jp":true,"izumizaki.fukushima.jp":true,"kagamiishi.fukushima.jp":true,"kaneyama.fukushima.jp":true,"kawamata.fukushima.jp":true,"kitakata.fukushima.jp":true,"kitashiobara.fukushima.jp":true,"koori.fukushima.jp":true,"koriyama.fukushima.jp":true,"kunimi.fukushima.jp":true,"miharu.fukushima.jp":true,"mishima.fukushima.jp":true,"namie.fukushima.jp":true,"nango.fukushima.jp":true,"nishiaizu.fukushima.jp":true,"nishigo.fukushima.jp":true,"okuma.fukushima.jp":true,"omotego.fukushima.jp":true,"ono.fukushima.jp":true,"otama.fukushima.jp":true,"samegawa.fukushima.jp":true,"shimogo.fukushima.jp":true,"shirakawa.fukushima.jp":true,"showa.fukushima.jp":true,"soma.fukushima.jp":true,"sukagawa.fukushima.jp":true,"taishin.fukushima.jp":true,"tamakawa.fukushima.jp":true,"tanagura.fukushima.jp":true,"tenei.fukushima.jp":true,"yabuki.fukushima.jp":true,"yamato.fukushima.jp":true,"yamatsuri.fukushima.jp":true,"yanaizu.fukushima.jp":true,"yugawa.fukushima.jp":true,"anpachi.gifu.jp":true,"ena.gifu.jp":true,"gifu.gifu.jp":true,"ginan.gifu.jp":true,"godo.gifu.jp":true,"gujo.gifu.jp":true,"hashima.gifu.jp":true,"hichiso.gifu.jp":true,"hida.gifu.jp":true,"higashishirakawa.gifu.jp":true,"ibigawa.gifu.jp":true,"ikeda.gifu.jp":true,"kakamigahara.gifu.jp":true,"kani.gifu.jp":true,"kasahara.gifu.jp":true,"kasamatsu.gifu.jp":true,"kawaue.gifu.jp":true,"kitagata.gifu.jp":true,"mino.gifu.jp":true,"minokamo.gifu.jp":true,"mitake.gifu.jp":true,"mizunami.gifu.jp":true,"motosu.gifu.jp":true,"nakatsugawa.gifu.jp":true,"ogaki.gifu.jp":true,"sakahogi.gifu.jp":true,"seki.gifu.jp":true,"sekigahara.gifu.jp":true,"shirakawa.gifu.jp":true,"tajimi.gifu.jp":true,"takayama.gifu.jp":true,"tarui.gifu.jp":true,"toki.gifu.jp":true,"tomika.gifu.jp":true,"wanouchi.gifu.jp":true,"yamagata.gifu.jp":true,"yaotsu.gifu.jp":true,"yoro.gifu.jp":true,"annaka.gunma.jp":true,"chiyoda.gunma.jp":true,"fujioka.gunma.jp":true,"higashiagatsuma.gunma.jp":true,"isesaki.gunma.jp":true,"itakura.gunma.jp":true,"kanna.gunma.jp":true,"kanra.gunma.jp":true,"katashina.gunma.jp":true,"kawaba.gunma.jp":true,"kiryu.gunma.jp":true,"kusatsu.gunma.jp":true,"maebashi.gunma.jp":true,"meiwa.gunma.jp":true,"midori.gunma.jp":true,"minakami.gunma.jp":true,"naganohara.gunma.jp":true,"nakanojo.gunma.jp":true,"nanmoku.gunma.jp":true,"numata.gunma.jp":true,"oizumi.gunma.jp":true,"ora.gunma.jp":true,"ota.gunma.jp":true,"shibukawa.gunma.jp":true,"shimonita.gunma.jp":true,"shinto.gunma.jp":true,"showa.gunma.jp":true,"takasaki.gunma.jp":true,"takayama.gunma.jp":true,"tamamura.gunma.jp":true,"tatebayashi.gunma.jp":true,"tomioka.gunma.jp":true,"tsukiyono.gunma.jp":true,"tsumagoi.gunma.jp":true,"ueno.gunma.jp":true,"yoshioka.gunma.jp":true,"asaminami.hiroshima.jp":true,"daiwa.hiroshima.jp":true,"etajima.hiroshima.jp":true,"fuchu.hiroshima.jp":true,"fukuyama.hiroshima.jp":true,"hatsukaichi.hiroshima.jp":true,"higashihiroshima.hiroshima.jp":true,"hongo.hiroshima.jp":true,"jinsekikogen.hiroshima.jp":true,"kaita.hiroshima.jp":true,"kui.hiroshima.jp":true,"kumano.hiroshima.jp":true,"kure.hiroshima.jp":true,"mihara.hiroshima.jp":true,"miyoshi.hiroshima.jp":true,"naka.hiroshima.jp":true,"onomichi.hiroshima.jp":true,"osakikamijima.hiroshima.jp":true,"otake.hiroshima.jp":true,"saka.hiroshima.jp":true,"sera.hiroshima.jp":true,"seranishi.hiroshima.jp":true,"shinichi.hiroshima.jp":true,"shobara.hiroshima.jp":true,"takehara.hiroshima.jp":true,"abashiri.hokkaido.jp":true,"abira.hokkaido.jp":true,"aibetsu.hokkaido.jp":true,"akabira.hokkaido.jp":true,"akkeshi.hokkaido.jp":true,"asahikawa.hokkaido.jp":true,"ashibetsu.hokkaido.jp":true,"ashoro.hokkaido.jp":true,"assabu.hokkaido.jp":true,"atsuma.hokkaido.jp":true,"bibai.hokkaido.jp":true,"biei.hokkaido.jp":true,"bifuka.hokkaido.jp":true,"bihoro.hokkaido.jp":true,"biratori.hokkaido.jp":true,"chippubetsu.hokkaido.jp":true,"chitose.hokkaido.jp":true,"date.hokkaido.jp":true,"ebetsu.hokkaido.jp":true,"embetsu.hokkaido.jp":true,"eniwa.hokkaido.jp":true,"erimo.hokkaido.jp":true,"esan.hokkaido.jp":true,"esashi.hokkaido.jp":true,"fukagawa.hokkaido.jp":true,"fukushima.hokkaido.jp":true,"furano.hokkaido.jp":true,"furubira.hokkaido.jp":true,"haboro.hokkaido.jp":true,"hakodate.hokkaido.jp":true,"hamatonbetsu.hokkaido.jp":true,"hidaka.hokkaido.jp":true,"higashikagura.hokkaido.jp":true,"higashikawa.hokkaido.jp":true,"hiroo.hokkaido.jp":true,"hokuryu.hokkaido.jp":true,"hokuto.hokkaido.jp":true,"honbetsu.hokkaido.jp":true,"horokanai.hokkaido.jp":true,"horonobe.hokkaido.jp":true,"ikeda.hokkaido.jp":true,"imakane.hokkaido.jp":true,"ishikari.hokkaido.jp":true,"iwamizawa.hokkaido.jp":true,"iwanai.hokkaido.jp":true,"kamifurano.hokkaido.jp":true,"kamikawa.hokkaido.jp":true,"kamishihoro.hokkaido.jp":true,"kamisunagawa.hokkaido.jp":true,"kamoenai.hokkaido.jp":true,"kayabe.hokkaido.jp":true,"kembuchi.hokkaido.jp":true,"kikonai.hokkaido.jp":true,"kimobetsu.hokkaido.jp":true,"kitahiroshima.hokkaido.jp":true,"kitami.hokkaido.jp":true,"kiyosato.hokkaido.jp":true,"koshimizu.hokkaido.jp":true,"kunneppu.hokkaido.jp":true,"kuriyama.hokkaido.jp":true,"kuromatsunai.hokkaido.jp":true,"kushiro.hokkaido.jp":true,"kutchan.hokkaido.jp":true,"kyowa.hokkaido.jp":true,"mashike.hokkaido.jp":true,"matsumae.hokkaido.jp":true,"mikasa.hokkaido.jp":true,"minamifurano.hokkaido.jp":true,"mombetsu.hokkaido.jp":true,"moseushi.hokkaido.jp":true,"mukawa.hokkaido.jp":true,"muroran.hokkaido.jp":true,"naie.hokkaido.jp":true,"nakagawa.hokkaido.jp":true,"nakasatsunai.hokkaido.jp":true,"nakatombetsu.hokkaido.jp":true,"nanae.hokkaido.jp":true,"nanporo.hokkaido.jp":true,"nayoro.hokkaido.jp":true,"nemuro.hokkaido.jp":true,"niikappu.hokkaido.jp":true,"niki.hokkaido.jp":true,"nishiokoppe.hokkaido.jp":true,"noboribetsu.hokkaido.jp":true,"numata.hokkaido.jp":true,"obihiro.hokkaido.jp":true,"obira.hokkaido.jp":true,"oketo.hokkaido.jp":true,"okoppe.hokkaido.jp":true,"otaru.hokkaido.jp":true,"otobe.hokkaido.jp":true,"otofuke.hokkaido.jp":true,"otoineppu.hokkaido.jp":true,"oumu.hokkaido.jp":true,"ozora.hokkaido.jp":true,"pippu.hokkaido.jp":true,"rankoshi.hokkaido.jp":true,"rebun.hokkaido.jp":true,"rikubetsu.hokkaido.jp":true,"rishiri.hokkaido.jp":true,"rishirifuji.hokkaido.jp":true,"saroma.hokkaido.jp":true,"sarufutsu.hokkaido.jp":true,"shakotan.hokkaido.jp":true,"shari.hokkaido.jp":true,"shibecha.hokkaido.jp":true,"shibetsu.hokkaido.jp":true,"shikabe.hokkaido.jp":true,"shikaoi.hokkaido.jp":true,"shimamaki.hokkaido.jp":true,"shimizu.hokkaido.jp":true,"shimokawa.hokkaido.jp":true,"shinshinotsu.hokkaido.jp":true,"shintoku.hokkaido.jp":true,"shiranuka.hokkaido.jp":true,"shiraoi.hokkaido.jp":true,"shiriuchi.hokkaido.jp":true,"sobetsu.hokkaido.jp":true,"sunagawa.hokkaido.jp":true,"taiki.hokkaido.jp":true,"takasu.hokkaido.jp":true,"takikawa.hokkaido.jp":true,"takinoue.hokkaido.jp":true,"teshikaga.hokkaido.jp":true,"tobetsu.hokkaido.jp":true,"tohma.hokkaido.jp":true,"tomakomai.hokkaido.jp":true,"tomari.hokkaido.jp":true,"toya.hokkaido.jp":true,"toyako.hokkaido.jp":true,"toyotomi.hokkaido.jp":true,"toyoura.hokkaido.jp":true,"tsubetsu.hokkaido.jp":true,"tsukigata.hokkaido.jp":true,"urakawa.hokkaido.jp":true,"urausu.hokkaido.jp":true,"uryu.hokkaido.jp":true,"utashinai.hokkaido.jp":true,"wakkanai.hokkaido.jp":true,"wassamu.hokkaido.jp":true,"yakumo.hokkaido.jp":true,"yoichi.hokkaido.jp":true,"aioi.hyogo.jp":true,"akashi.hyogo.jp":true,"ako.hyogo.jp":true,"amagasaki.hyogo.jp":true,"aogaki.hyogo.jp":true,"asago.hyogo.jp":true,"ashiya.hyogo.jp":true,"awaji.hyogo.jp":true,"fukusaki.hyogo.jp":true,"goshiki.hyogo.jp":true,"harima.hyogo.jp":true,"himeji.hyogo.jp":true,"ichikawa.hyogo.jp":true,"inagawa.hyogo.jp":true,"itami.hyogo.jp":true,"kakogawa.hyogo.jp":true,"kamigori.hyogo.jp":true,"kamikawa.hyogo.jp":true,"kasai.hyogo.jp":true,"kasuga.hyogo.jp":true,"kawanishi.hyogo.jp":true,"miki.hyogo.jp":true,"minamiawaji.hyogo.jp":true,"nishinomiya.hyogo.jp":true,"nishiwaki.hyogo.jp":true,"ono.hyogo.jp":true,"sanda.hyogo.jp":true,"sannan.hyogo.jp":true,"sasayama.hyogo.jp":true,"sayo.hyogo.jp":true,"shingu.hyogo.jp":true,"shinonsen.hyogo.jp":true,"shiso.hyogo.jp":true,"sumoto.hyogo.jp":true,"taishi.hyogo.jp":true,"taka.hyogo.jp":true,"takarazuka.hyogo.jp":true,"takasago.hyogo.jp":true,"takino.hyogo.jp":true,"tamba.hyogo.jp":true,"tatsuno.hyogo.jp":true,"toyooka.hyogo.jp":true,"yabu.hyogo.jp":true,"yashiro.hyogo.jp":true,"yoka.hyogo.jp":true,"yokawa.hyogo.jp":true,"ami.ibaraki.jp":true,"asahi.ibaraki.jp":true,"bando.ibaraki.jp":true,"chikusei.ibaraki.jp":true,"daigo.ibaraki.jp":true,"fujishiro.ibaraki.jp":true,"hitachi.ibaraki.jp":true,"hitachinaka.ibaraki.jp":true,"hitachiomiya.ibaraki.jp":true,"hitachiota.ibaraki.jp":true,"ibaraki.ibaraki.jp":true,"ina.ibaraki.jp":true,"inashiki.ibaraki.jp":true,"itako.ibaraki.jp":true,"iwama.ibaraki.jp":true,"joso.ibaraki.jp":true,"kamisu.ibaraki.jp":true,"kasama.ibaraki.jp":true,"kashima.ibaraki.jp":true,"kasumigaura.ibaraki.jp":true,"koga.ibaraki.jp":true,"miho.ibaraki.jp":true,"mito.ibaraki.jp":true,"moriya.ibaraki.jp":true,"naka.ibaraki.jp":true,"namegata.ibaraki.jp":true,"oarai.ibaraki.jp":true,"ogawa.ibaraki.jp":true,"omitama.ibaraki.jp":true,"ryugasaki.ibaraki.jp":true,"sakai.ibaraki.jp":true,"sakuragawa.ibaraki.jp":true,"shimodate.ibaraki.jp":true,"shimotsuma.ibaraki.jp":true,"shirosato.ibaraki.jp":true,"sowa.ibaraki.jp":true,"suifu.ibaraki.jp":true,"takahagi.ibaraki.jp":true,"tamatsukuri.ibaraki.jp":true,"tokai.ibaraki.jp":true,"tomobe.ibaraki.jp":true,"tone.ibaraki.jp":true,"toride.ibaraki.jp":true,"tsuchiura.ibaraki.jp":true,"tsukuba.ibaraki.jp":true,"uchihara.ibaraki.jp":true,"ushiku.ibaraki.jp":true,"yachiyo.ibaraki.jp":true,"yamagata.ibaraki.jp":true,"yawara.ibaraki.jp":true,"yuki.ibaraki.jp":true,"anamizu.ishikawa.jp":true,"hakui.ishikawa.jp":true,"hakusan.ishikawa.jp":true,"kaga.ishikawa.jp":true,"kahoku.ishikawa.jp":true,"kanazawa.ishikawa.jp":true,"kawakita.ishikawa.jp":true,"komatsu.ishikawa.jp":true,"nakanoto.ishikawa.jp":true,"nanao.ishikawa.jp":true,"nomi.ishikawa.jp":true,"nonoichi.ishikawa.jp":true,"noto.ishikawa.jp":true,"shika.ishikawa.jp":true,"suzu.ishikawa.jp":true,"tsubata.ishikawa.jp":true,"tsurugi.ishikawa.jp":true,"uchinada.ishikawa.jp":true,"wajima.ishikawa.jp":true,"fudai.iwate.jp":true,"fujisawa.iwate.jp":true,"hanamaki.iwate.jp":true,"hiraizumi.iwate.jp":true,"hirono.iwate.jp":true,"ichinohe.iwate.jp":true,"ichinoseki.iwate.jp":true,"iwaizumi.iwate.jp":true,"iwate.iwate.jp":true,"joboji.iwate.jp":true,"kamaishi.iwate.jp":true,"kanegasaki.iwate.jp":true,"karumai.iwate.jp":true,"kawai.iwate.jp":true,"kitakami.iwate.jp":true,"kuji.iwate.jp":true,"kunohe.iwate.jp":true,"kuzumaki.iwate.jp":true,"miyako.iwate.jp":true,"mizusawa.iwate.jp":true,"morioka.iwate.jp":true,"ninohe.iwate.jp":true,"noda.iwate.jp":true,"ofunato.iwate.jp":true,"oshu.iwate.jp":true,"otsuchi.iwate.jp":true,"rikuzentakata.iwate.jp":true,"shiwa.iwate.jp":true,"shizukuishi.iwate.jp":true,"sumita.iwate.jp":true,"tanohata.iwate.jp":true,"tono.iwate.jp":true,"yahaba.iwate.jp":true,"yamada.iwate.jp":true,"ayagawa.kagawa.jp":true,"higashikagawa.kagawa.jp":true,"kanonji.kagawa.jp":true,"kotohira.kagawa.jp":true,"manno.kagawa.jp":true,"marugame.kagawa.jp":true,"mitoyo.kagawa.jp":true,"naoshima.kagawa.jp":true,"sanuki.kagawa.jp":true,"tadotsu.kagawa.jp":true,"takamatsu.kagawa.jp":true,"tonosho.kagawa.jp":true,"uchinomi.kagawa.jp":true,"utazu.kagawa.jp":true,"zentsuji.kagawa.jp":true,"akune.kagoshima.jp":true,"amami.kagoshima.jp":true,"hioki.kagoshima.jp":true,"isa.kagoshima.jp":true,"isen.kagoshima.jp":true,"izumi.kagoshima.jp":true,"kagoshima.kagoshima.jp":true,"kanoya.kagoshima.jp":true,"kawanabe.kagoshima.jp":true,"kinko.kagoshima.jp":true,"kouyama.kagoshima.jp":true,"makurazaki.kagoshima.jp":true,"matsumoto.kagoshima.jp":true,"minamitane.kagoshima.jp":true,"nakatane.kagoshima.jp":true,"nishinoomote.kagoshima.jp":true,"satsumasendai.kagoshima.jp":true,"soo.kagoshima.jp":true,"tarumizu.kagoshima.jp":true,"yusui.kagoshima.jp":true,"aikawa.kanagawa.jp":true,"atsugi.kanagawa.jp":true,"ayase.kanagawa.jp":true,"chigasaki.kanagawa.jp":true,"ebina.kanagawa.jp":true,"fujisawa.kanagawa.jp":true,"hadano.kanagawa.jp":true,"hakone.kanagawa.jp":true,"hiratsuka.kanagawa.jp":true,"isehara.kanagawa.jp":true,"kaisei.kanagawa.jp":true,"kamakura.kanagawa.jp":true,"kiyokawa.kanagawa.jp":true,"matsuda.kanagawa.jp":true,"minamiashigara.kanagawa.jp":true,"miura.kanagawa.jp":true,"nakai.kanagawa.jp":true,"ninomiya.kanagawa.jp":true,"odawara.kanagawa.jp":true,"oi.kanagawa.jp":true,"oiso.kanagawa.jp":true,"sagamihara.kanagawa.jp":true,"samukawa.kanagawa.jp":true,"tsukui.kanagawa.jp":true,"yamakita.kanagawa.jp":true,"yamato.kanagawa.jp":true,"yokosuka.kanagawa.jp":true,"yugawara.kanagawa.jp":true,"zama.kanagawa.jp":true,"zushi.kanagawa.jp":true,"aki.kochi.jp":true,"geisei.kochi.jp":true,"hidaka.kochi.jp":true,"higashitsuno.kochi.jp":true,"ino.kochi.jp":true,"kagami.kochi.jp":true,"kami.kochi.jp":true,"kitagawa.kochi.jp":true,"kochi.kochi.jp":true,"mihara.kochi.jp":true,"motoyama.kochi.jp":true,"muroto.kochi.jp":true,"nahari.kochi.jp":true,"nakamura.kochi.jp":true,"nankoku.kochi.jp":true,"nishitosa.kochi.jp":true,"niyodogawa.kochi.jp":true,"ochi.kochi.jp":true,"okawa.kochi.jp":true,"otoyo.kochi.jp":true,"otsuki.kochi.jp":true,"sakawa.kochi.jp":true,"sukumo.kochi.jp":true,"susaki.kochi.jp":true,"tosa.kochi.jp":true,"tosashimizu.kochi.jp":true,"toyo.kochi.jp":true,"tsuno.kochi.jp":true,"umaji.kochi.jp":true,"yasuda.kochi.jp":true,"yusuhara.kochi.jp":true,"amakusa.kumamoto.jp":true,"arao.kumamoto.jp":true,"aso.kumamoto.jp":true,"choyo.kumamoto.jp":true,"gyokuto.kumamoto.jp":true,"hitoyoshi.kumamoto.jp":true,"kamiamakusa.kumamoto.jp":true,"kashima.kumamoto.jp":true,"kikuchi.kumamoto.jp":true,"kosa.kumamoto.jp":true,"kumamoto.kumamoto.jp":true,"mashiki.kumamoto.jp":true,"mifune.kumamoto.jp":true,"minamata.kumamoto.jp":true,"minamioguni.kumamoto.jp":true,"nagasu.kumamoto.jp":true,"nishihara.kumamoto.jp":true,"oguni.kumamoto.jp":true,"ozu.kumamoto.jp":true,"sumoto.kumamoto.jp":true,"takamori.kumamoto.jp":true,"uki.kumamoto.jp":true,"uto.kumamoto.jp":true,"yamaga.kumamoto.jp":true,"yamato.kumamoto.jp":true,"yatsushiro.kumamoto.jp":true,"ayabe.kyoto.jp":true,"fukuchiyama.kyoto.jp":true,"higashiyama.kyoto.jp":true,"ide.kyoto.jp":true,"ine.kyoto.jp":true,"joyo.kyoto.jp":true,"kameoka.kyoto.jp":true,"kamo.kyoto.jp":true,"kita.kyoto.jp":true,"kizu.kyoto.jp":true,"kumiyama.kyoto.jp":true,"kyotamba.kyoto.jp":true,"kyotanabe.kyoto.jp":true,"kyotango.kyoto.jp":true,"maizuru.kyoto.jp":true,"minami.kyoto.jp":true,"minamiyamashiro.kyoto.jp":true,"miyazu.kyoto.jp":true,"muko.kyoto.jp":true,"nagaokakyo.kyoto.jp":true,"nakagyo.kyoto.jp":true,"nantan.kyoto.jp":true,"oyamazaki.kyoto.jp":true,"sakyo.kyoto.jp":true,"seika.kyoto.jp":true,"tanabe.kyoto.jp":true,"uji.kyoto.jp":true,"ujitawara.kyoto.jp":true,"wazuka.kyoto.jp":true,"yamashina.kyoto.jp":true,"yawata.kyoto.jp":true,"asahi.mie.jp":true,"inabe.mie.jp":true,"ise.mie.jp":true,"kameyama.mie.jp":true,"kawagoe.mie.jp":true,"kiho.mie.jp":true,"kisosaki.mie.jp":true,"kiwa.mie.jp":true,"komono.mie.jp":true,"kumano.mie.jp":true,"kuwana.mie.jp":true,"matsusaka.mie.jp":true,"meiwa.mie.jp":true,"mihama.mie.jp":true,"minamiise.mie.jp":true,"misugi.mie.jp":true,"miyama.mie.jp":true,"nabari.mie.jp":true,"shima.mie.jp":true,"suzuka.mie.jp":true,"tado.mie.jp":true,"taiki.mie.jp":true,"taki.mie.jp":true,"tamaki.mie.jp":true,"toba.mie.jp":true,"tsu.mie.jp":true,"udono.mie.jp":true,"ureshino.mie.jp":true,"watarai.mie.jp":true,"yokkaichi.mie.jp":true,"furukawa.miyagi.jp":true,"higashimatsushima.miyagi.jp":true,"ishinomaki.miyagi.jp":true,"iwanuma.miyagi.jp":true,"kakuda.miyagi.jp":true,"kami.miyagi.jp":true,"kawasaki.miyagi.jp":true,"kesennuma.miyagi.jp":true,"marumori.miyagi.jp":true,"matsushima.miyagi.jp":true,"minamisanriku.miyagi.jp":true,"misato.miyagi.jp":true,"murata.miyagi.jp":true,"natori.miyagi.jp":true,"ogawara.miyagi.jp":true,"ohira.miyagi.jp":true,"onagawa.miyagi.jp":true,"osaki.miyagi.jp":true,"rifu.miyagi.jp":true,"semine.miyagi.jp":true,"shibata.miyagi.jp":true,"shichikashuku.miyagi.jp":true,"shikama.miyagi.jp":true,"shiogama.miyagi.jp":true,"shiroishi.miyagi.jp":true,"tagajo.miyagi.jp":true,"taiwa.miyagi.jp":true,"tome.miyagi.jp":true,"tomiya.miyagi.jp":true,"wakuya.miyagi.jp":true,"watari.miyagi.jp":true,"yamamoto.miyagi.jp":true,"zao.miyagi.jp":true,"aya.miyazaki.jp":true,"ebino.miyazaki.jp":true,"gokase.miyazaki.jp":true,"hyuga.miyazaki.jp":true,"kadogawa.miyazaki.jp":true,"kawaminami.miyazaki.jp":true,"kijo.miyazaki.jp":true,"kitagawa.miyazaki.jp":true,"kitakata.miyazaki.jp":true,"kitaura.miyazaki.jp":true,"kobayashi.miyazaki.jp":true,"kunitomi.miyazaki.jp":true,"kushima.miyazaki.jp":true,"mimata.miyazaki.jp":true,"miyakonojo.miyazaki.jp":true,"miyazaki.miyazaki.jp":true,"morotsuka.miyazaki.jp":true,"nichinan.miyazaki.jp":true,"nishimera.miyazaki.jp":true,"nobeoka.miyazaki.jp":true,"saito.miyazaki.jp":true,"shiiba.miyazaki.jp":true,"shintomi.miyazaki.jp":true,"takaharu.miyazaki.jp":true,"takanabe.miyazaki.jp":true,"takazaki.miyazaki.jp":true,"tsuno.miyazaki.jp":true,"achi.nagano.jp":true,"agematsu.nagano.jp":true,"anan.nagano.jp":true,"aoki.nagano.jp":true,"asahi.nagano.jp":true,"azumino.nagano.jp":true,"chikuhoku.nagano.jp":true,"chikuma.nagano.jp":true,"chino.nagano.jp":true,"fujimi.nagano.jp":true,"hakuba.nagano.jp":true,"hara.nagano.jp":true,"hiraya.nagano.jp":true,"iida.nagano.jp":true,"iijima.nagano.jp":true,"iiyama.nagano.jp":true,"iizuna.nagano.jp":true,"ikeda.nagano.jp":true,"ikusaka.nagano.jp":true,"ina.nagano.jp":true,"karuizawa.nagano.jp":true,"kawakami.nagano.jp":true,"kiso.nagano.jp":true,"kisofukushima.nagano.jp":true,"kitaaiki.nagano.jp":true,"komagane.nagano.jp":true,"komoro.nagano.jp":true,"matsukawa.nagano.jp":true,"matsumoto.nagano.jp":true,"miasa.nagano.jp":true,"minamiaiki.nagano.jp":true,"minamimaki.nagano.jp":true,"minamiminowa.nagano.jp":true,"minowa.nagano.jp":true,"miyada.nagano.jp":true,"miyota.nagano.jp":true,"mochizuki.nagano.jp":true,"nagano.nagano.jp":true,"nagawa.nagano.jp":true,"nagiso.nagano.jp":true,"nakagawa.nagano.jp":true,"nakano.nagano.jp":true,"nozawaonsen.nagano.jp":true,"obuse.nagano.jp":true,"ogawa.nagano.jp":true,"okaya.nagano.jp":true,"omachi.nagano.jp":true,"omi.nagano.jp":true,"ookuwa.nagano.jp":true,"ooshika.nagano.jp":true,"otaki.nagano.jp":true,"otari.nagano.jp":true,"sakae.nagano.jp":true,"sakaki.nagano.jp":true,"saku.nagano.jp":true,"sakuho.nagano.jp":true,"shimosuwa.nagano.jp":true,"shinanomachi.nagano.jp":true,"shiojiri.nagano.jp":true,"suwa.nagano.jp":true,"suzaka.nagano.jp":true,"takagi.nagano.jp":true,"takamori.nagano.jp":true,"takayama.nagano.jp":true,"tateshina.nagano.jp":true,"tatsuno.nagano.jp":true,"togakushi.nagano.jp":true,"togura.nagano.jp":true,"tomi.nagano.jp":true,"ueda.nagano.jp":true,"wada.nagano.jp":true,"yamagata.nagano.jp":true,"yamanouchi.nagano.jp":true,"yasaka.nagano.jp":true,"yasuoka.nagano.jp":true,"chijiwa.nagasaki.jp":true,"futsu.nagasaki.jp":true,"goto.nagasaki.jp":true,"hasami.nagasaki.jp":true,"hirado.nagasaki.jp":true,"iki.nagasaki.jp":true,"isahaya.nagasaki.jp":true,"kawatana.nagasaki.jp":true,"kuchinotsu.nagasaki.jp":true,"matsuura.nagasaki.jp":true,"nagasaki.nagasaki.jp":true,"obama.nagasaki.jp":true,"omura.nagasaki.jp":true,"oseto.nagasaki.jp":true,"saikai.nagasaki.jp":true,"sasebo.nagasaki.jp":true,"seihi.nagasaki.jp":true,"shimabara.nagasaki.jp":true,"shinkamigoto.nagasaki.jp":true,"togitsu.nagasaki.jp":true,"tsushima.nagasaki.jp":true,"unzen.nagasaki.jp":true,"ando.nara.jp":true,"gose.nara.jp":true,"heguri.nara.jp":true,"higashiyoshino.nara.jp":true,"ikaruga.nara.jp":true,"ikoma.nara.jp":true,"kamikitayama.nara.jp":true,"kanmaki.nara.jp":true,"kashiba.nara.jp":true,"kashihara.nara.jp":true,"katsuragi.nara.jp":true,"kawai.nara.jp":true,"kawakami.nara.jp":true,"kawanishi.nara.jp":true,"koryo.nara.jp":true,"kurotaki.nara.jp":true,"mitsue.nara.jp":true,"miyake.nara.jp":true,"nara.nara.jp":true,"nosegawa.nara.jp":true,"oji.nara.jp":true,"ouda.nara.jp":true,"oyodo.nara.jp":true,"sakurai.nara.jp":true,"sango.nara.jp":true,"shimoichi.nara.jp":true,"shimokitayama.nara.jp":true,"shinjo.nara.jp":true,"soni.nara.jp":true,"takatori.nara.jp":true,"tawaramoto.nara.jp":true,"tenkawa.nara.jp":true,"tenri.nara.jp":true,"uda.nara.jp":true,"yamatokoriyama.nara.jp":true,"yamatotakada.nara.jp":true,"yamazoe.nara.jp":true,"yoshino.nara.jp":true,"aga.niigata.jp":true,"agano.niigata.jp":true,"gosen.niigata.jp":true,"itoigawa.niigata.jp":true,"izumozaki.niigata.jp":true,"joetsu.niigata.jp":true,"kamo.niigata.jp":true,"kariwa.niigata.jp":true,"kashiwazaki.niigata.jp":true,"minamiuonuma.niigata.jp":true,"mitsuke.niigata.jp":true,"muika.niigata.jp":true,"murakami.niigata.jp":true,"myoko.niigata.jp":true,"nagaoka.niigata.jp":true,"niigata.niigata.jp":true,"ojiya.niigata.jp":true,"omi.niigata.jp":true,"sado.niigata.jp":true,"sanjo.niigata.jp":true,"seiro.niigata.jp":true,"seirou.niigata.jp":true,"sekikawa.niigata.jp":true,"shibata.niigata.jp":true,"tagami.niigata.jp":true,"tainai.niigata.jp":true,"tochio.niigata.jp":true,"tokamachi.niigata.jp":true,"tsubame.niigata.jp":true,"tsunan.niigata.jp":true,"uonuma.niigata.jp":true,"yahiko.niigata.jp":true,"yoita.niigata.jp":true,"yuzawa.niigata.jp":true,"beppu.oita.jp":true,"bungoono.oita.jp":true,"bungotakada.oita.jp":true,"hasama.oita.jp":true,"hiji.oita.jp":true,"himeshima.oita.jp":true,"hita.oita.jp":true,"kamitsue.oita.jp":true,"kokonoe.oita.jp":true,"kuju.oita.jp":true,"kunisaki.oita.jp":true,"kusu.oita.jp":true,"oita.oita.jp":true,"saiki.oita.jp":true,"taketa.oita.jp":true,"tsukumi.oita.jp":true,"usa.oita.jp":true,"usuki.oita.jp":true,"yufu.oita.jp":true,"akaiwa.okayama.jp":true,"asakuchi.okayama.jp":true,"bizen.okayama.jp":true,"hayashima.okayama.jp":true,"ibara.okayama.jp":true,"kagamino.okayama.jp":true,"kasaoka.okayama.jp":true,"kibichuo.okayama.jp":true,"kumenan.okayama.jp":true,"kurashiki.okayama.jp":true,"maniwa.okayama.jp":true,"misaki.okayama.jp":true,"nagi.okayama.jp":true,"niimi.okayama.jp":true,"nishiawakura.okayama.jp":true,"okayama.okayama.jp":true,"satosho.okayama.jp":true,"setouchi.okayama.jp":true,"shinjo.okayama.jp":true,"shoo.okayama.jp":true,"soja.okayama.jp":true,"takahashi.okayama.jp":true,"tamano.okayama.jp":true,"tsuyama.okayama.jp":true,"wake.okayama.jp":true,"yakage.okayama.jp":true,"aguni.okinawa.jp":true,"ginowan.okinawa.jp":true,"ginoza.okinawa.jp":true,"gushikami.okinawa.jp":true,"haebaru.okinawa.jp":true,"higashi.okinawa.jp":true,"hirara.okinawa.jp":true,"iheya.okinawa.jp":true,"ishigaki.okinawa.jp":true,"ishikawa.okinawa.jp":true,"itoman.okinawa.jp":true,"izena.okinawa.jp":true,"kadena.okinawa.jp":true,"kin.okinawa.jp":true,"kitadaito.okinawa.jp":true,"kitanakagusuku.okinawa.jp":true,"kumejima.okinawa.jp":true,"kunigami.okinawa.jp":true,"minamidaito.okinawa.jp":true,"motobu.okinawa.jp":true,"nago.okinawa.jp":true,"naha.okinawa.jp":true,"nakagusuku.okinawa.jp":true,"nakijin.okinawa.jp":true,"nanjo.okinawa.jp":true,"nishihara.okinawa.jp":true,"ogimi.okinawa.jp":true,"okinawa.okinawa.jp":true,"onna.okinawa.jp":true,"shimoji.okinawa.jp":true,"taketomi.okinawa.jp":true,"tarama.okinawa.jp":true,"tokashiki.okinawa.jp":true,"tomigusuku.okinawa.jp":true,"tonaki.okinawa.jp":true,"urasoe.okinawa.jp":true,"uruma.okinawa.jp":true,"yaese.okinawa.jp":true,"yomitan.okinawa.jp":true,"yonabaru.okinawa.jp":true,"yonaguni.okinawa.jp":true,"zamami.okinawa.jp":true,"abeno.osaka.jp":true,"chihayaakasaka.osaka.jp":true,"chuo.osaka.jp":true,"daito.osaka.jp":true,"fujiidera.osaka.jp":true,"habikino.osaka.jp":true,"hannan.osaka.jp":true,"higashiosaka.osaka.jp":true,"higashisumiyoshi.osaka.jp":true,"higashiyodogawa.osaka.jp":true,"hirakata.osaka.jp":true,"ibaraki.osaka.jp":true,"ikeda.osaka.jp":true,"izumi.osaka.jp":true,"izumiotsu.osaka.jp":true,"izumisano.osaka.jp":true,"kadoma.osaka.jp":true,"kaizuka.osaka.jp":true,"kanan.osaka.jp":true,"kashiwara.osaka.jp":true,"katano.osaka.jp":true,"kawachinagano.osaka.jp":true,"kishiwada.osaka.jp":true,"kita.osaka.jp":true,"kumatori.osaka.jp":true,"matsubara.osaka.jp":true,"minato.osaka.jp":true,"minoh.osaka.jp":true,"misaki.osaka.jp":true,"moriguchi.osaka.jp":true,"neyagawa.osaka.jp":true,"nishi.osaka.jp":true,"nose.osaka.jp":true,"osakasayama.osaka.jp":true,"sakai.osaka.jp":true,"sayama.osaka.jp":true,"sennan.osaka.jp":true,"settsu.osaka.jp":true,"shijonawate.osaka.jp":true,"shimamoto.osaka.jp":true,"suita.osaka.jp":true,"tadaoka.osaka.jp":true,"taishi.osaka.jp":true,"tajiri.osaka.jp":true,"takaishi.osaka.jp":true,"takatsuki.osaka.jp":true,"tondabayashi.osaka.jp":true,"toyonaka.osaka.jp":true,"toyono.osaka.jp":true,"yao.osaka.jp":true,"ariake.saga.jp":true,"arita.saga.jp":true,"fukudomi.saga.jp":true,"genkai.saga.jp":true,"hamatama.saga.jp":true,"hizen.saga.jp":true,"imari.saga.jp":true,"kamimine.saga.jp":true,"kanzaki.saga.jp":true,"karatsu.saga.jp":true,"kashima.saga.jp":true,"kitagata.saga.jp":true,"kitahata.saga.jp":true,"kiyama.saga.jp":true,"kouhoku.saga.jp":true,"kyuragi.saga.jp":true,"nishiarita.saga.jp":true,"ogi.saga.jp":true,"omachi.saga.jp":true,"ouchi.saga.jp":true,"saga.saga.jp":true,"shiroishi.saga.jp":true,"taku.saga.jp":true,"tara.saga.jp":true,"tosu.saga.jp":true,"yoshinogari.saga.jp":true,"arakawa.saitama.jp":true,"asaka.saitama.jp":true,"chichibu.saitama.jp":true,"fujimi.saitama.jp":true,"fujimino.saitama.jp":true,"fukaya.saitama.jp":true,"hanno.saitama.jp":true,"hanyu.saitama.jp":true,"hasuda.saitama.jp":true,"hatogaya.saitama.jp":true,"hatoyama.saitama.jp":true,"hidaka.saitama.jp":true,"higashichichibu.saitama.jp":true,"higashimatsuyama.saitama.jp":true,"honjo.saitama.jp":true,"ina.saitama.jp":true,"iruma.saitama.jp":true,"iwatsuki.saitama.jp":true,"kamiizumi.saitama.jp":true,"kamikawa.saitama.jp":true,"kamisato.saitama.jp":true,"kasukabe.saitama.jp":true,"kawagoe.saitama.jp":true,"kawaguchi.saitama.jp":true,"kawajima.saitama.jp":true,"kazo.saitama.jp":true,"kitamoto.saitama.jp":true,"koshigaya.saitama.jp":true,"kounosu.saitama.jp":true,"kuki.saitama.jp":true,"kumagaya.saitama.jp":true,"matsubushi.saitama.jp":true,"minano.saitama.jp":true,"misato.saitama.jp":true,"miyashiro.saitama.jp":true,"miyoshi.saitama.jp":true,"moroyama.saitama.jp":true,"nagatoro.saitama.jp":true,"namegawa.saitama.jp":true,"niiza.saitama.jp":true,"ogano.saitama.jp":true,"ogawa.saitama.jp":true,"ogose.saitama.jp":true,"okegawa.saitama.jp":true,"omiya.saitama.jp":true,"otaki.saitama.jp":true,"ranzan.saitama.jp":true,"ryokami.saitama.jp":true,"saitama.saitama.jp":true,"sakado.saitama.jp":true,"satte.saitama.jp":true,"sayama.saitama.jp":true,"shiki.saitama.jp":true,"shiraoka.saitama.jp":true,"soka.saitama.jp":true,"sugito.saitama.jp":true,"toda.saitama.jp":true,"tokigawa.saitama.jp":true,"tokorozawa.saitama.jp":true,"tsurugashima.saitama.jp":true,"urawa.saitama.jp":true,"warabi.saitama.jp":true,"yashio.saitama.jp":true,"yokoze.saitama.jp":true,"yono.saitama.jp":true,"yorii.saitama.jp":true,"yoshida.saitama.jp":true,"yoshikawa.saitama.jp":true,"yoshimi.saitama.jp":true,"aisho.shiga.jp":true,"gamo.shiga.jp":true,"higashiomi.shiga.jp":true,"hikone.shiga.jp":true,"koka.shiga.jp":true,"konan.shiga.jp":true,"kosei.shiga.jp":true,"koto.shiga.jp":true,"kusatsu.shiga.jp":true,"maibara.shiga.jp":true,"moriyama.shiga.jp":true,"nagahama.shiga.jp":true,"nishiazai.shiga.jp":true,"notogawa.shiga.jp":true,"omihachiman.shiga.jp":true,"otsu.shiga.jp":true,"ritto.shiga.jp":true,"ryuoh.shiga.jp":true,"takashima.shiga.jp":true,"takatsuki.shiga.jp":true,"torahime.shiga.jp":true,"toyosato.shiga.jp":true,"yasu.shiga.jp":true,"akagi.shimane.jp":true,"ama.shimane.jp":true,"gotsu.shimane.jp":true,"hamada.shimane.jp":true,"higashiizumo.shimane.jp":true,"hikawa.shimane.jp":true,"hikimi.shimane.jp":true,"izumo.shimane.jp":true,"kakinoki.shimane.jp":true,"masuda.shimane.jp":true,"matsue.shimane.jp":true,"misato.shimane.jp":true,"nishinoshima.shimane.jp":true,"ohda.shimane.jp":true,"okinoshima.shimane.jp":true,"okuizumo.shimane.jp":true,"shimane.shimane.jp":true,"tamayu.shimane.jp":true,"tsuwano.shimane.jp":true,"unnan.shimane.jp":true,"yakumo.shimane.jp":true,"yasugi.shimane.jp":true,"yatsuka.shimane.jp":true,"arai.shizuoka.jp":true,"atami.shizuoka.jp":true,"fuji.shizuoka.jp":true,"fujieda.shizuoka.jp":true,"fujikawa.shizuoka.jp":true,"fujinomiya.shizuoka.jp":true,"fukuroi.shizuoka.jp":true,"gotemba.shizuoka.jp":true,"haibara.shizuoka.jp":true,"hamamatsu.shizuoka.jp":true,"higashiizu.shizuoka.jp":true,"ito.shizuoka.jp":true,"iwata.shizuoka.jp":true,"izu.shizuoka.jp":true,"izunokuni.shizuoka.jp":true,"kakegawa.shizuoka.jp":true,"kannami.shizuoka.jp":true,"kawanehon.shizuoka.jp":true,"kawazu.shizuoka.jp":true,"kikugawa.shizuoka.jp":true,"kosai.shizuoka.jp":true,"makinohara.shizuoka.jp":true,"matsuzaki.shizuoka.jp":true,"minamiizu.shizuoka.jp":true,"mishima.shizuoka.jp":true,"morimachi.shizuoka.jp":true,"nishiizu.shizuoka.jp":true,"numazu.shizuoka.jp":true,"omaezaki.shizuoka.jp":true,"shimada.shizuoka.jp":true,"shimizu.shizuoka.jp":true,"shimoda.shizuoka.jp":true,"shizuoka.shizuoka.jp":true,"susono.shizuoka.jp":true,"yaizu.shizuoka.jp":true,"yoshida.shizuoka.jp":true,"ashikaga.tochigi.jp":true,"bato.tochigi.jp":true,"haga.tochigi.jp":true,"ichikai.tochigi.jp":true,"iwafune.tochigi.jp":true,"kaminokawa.tochigi.jp":true,"kanuma.tochigi.jp":true,"karasuyama.tochigi.jp":true,"kuroiso.tochigi.jp":true,"mashiko.tochigi.jp":true,"mibu.tochigi.jp":true,"moka.tochigi.jp":true,"motegi.tochigi.jp":true,"nasu.tochigi.jp":true,"nasushiobara.tochigi.jp":true,"nikko.tochigi.jp":true,"nishikata.tochigi.jp":true,"nogi.tochigi.jp":true,"ohira.tochigi.jp":true,"ohtawara.tochigi.jp":true,"oyama.tochigi.jp":true,"sakura.tochigi.jp":true,"sano.tochigi.jp":true,"shimotsuke.tochigi.jp":true,"shioya.tochigi.jp":true,"takanezawa.tochigi.jp":true,"tochigi.tochigi.jp":true,"tsuga.tochigi.jp":true,"ujiie.tochigi.jp":true,"utsunomiya.tochigi.jp":true,"yaita.tochigi.jp":true,"aizumi.tokushima.jp":true,"anan.tokushima.jp":true,"ichiba.tokushima.jp":true,"itano.tokushima.jp":true,"kainan.tokushima.jp":true,"komatsushima.tokushima.jp":true,"matsushige.tokushima.jp":true,"mima.tokushima.jp":true,"minami.tokushima.jp":true,"miyoshi.tokushima.jp":true,"mugi.tokushima.jp":true,"nakagawa.tokushima.jp":true,"naruto.tokushima.jp":true,"sanagochi.tokushima.jp":true,"shishikui.tokushima.jp":true,"tokushima.tokushima.jp":true,"wajiki.tokushima.jp":true,"adachi.tokyo.jp":true,"akiruno.tokyo.jp":true,"akishima.tokyo.jp":true,"aogashima.tokyo.jp":true,"arakawa.tokyo.jp":true,"bunkyo.tokyo.jp":true,"chiyoda.tokyo.jp":true,"chofu.tokyo.jp":true,"chuo.tokyo.jp":true,"edogawa.tokyo.jp":true,"fuchu.tokyo.jp":true,"fussa.tokyo.jp":true,"hachijo.tokyo.jp":true,"hachioji.tokyo.jp":true,"hamura.tokyo.jp":true,"higashikurume.tokyo.jp":true,"higashimurayama.tokyo.jp":true,"higashiyamato.tokyo.jp":true,"hino.tokyo.jp":true,"hinode.tokyo.jp":true,"hinohara.tokyo.jp":true,"inagi.tokyo.jp":true,"itabashi.tokyo.jp":true,"katsushika.tokyo.jp":true,"kita.tokyo.jp":true,"kiyose.tokyo.jp":true,"kodaira.tokyo.jp":true,"koganei.tokyo.jp":true,"kokubunji.tokyo.jp":true,"komae.tokyo.jp":true,"koto.tokyo.jp":true,"kouzushima.tokyo.jp":true,"kunitachi.tokyo.jp":true,"machida.tokyo.jp":true,"meguro.tokyo.jp":true,"minato.tokyo.jp":true,"mitaka.tokyo.jp":true,"mizuho.tokyo.jp":true,"musashimurayama.tokyo.jp":true,"musashino.tokyo.jp":true,"nakano.tokyo.jp":true,"nerima.tokyo.jp":true,"ogasawara.tokyo.jp":true,"okutama.tokyo.jp":true,"ome.tokyo.jp":true,"oshima.tokyo.jp":true,"ota.tokyo.jp":true,"setagaya.tokyo.jp":true,"shibuya.tokyo.jp":true,"shinagawa.tokyo.jp":true,"shinjuku.tokyo.jp":true,"suginami.tokyo.jp":true,"sumida.tokyo.jp":true,"tachikawa.tokyo.jp":true,"taito.tokyo.jp":true,"tama.tokyo.jp":true,"toshima.tokyo.jp":true,"chizu.tottori.jp":true,"hino.tottori.jp":true,"kawahara.tottori.jp":true,"koge.tottori.jp":true,"kotoura.tottori.jp":true,"misasa.tottori.jp":true,"nanbu.tottori.jp":true,"nichinan.tottori.jp":true,"sakaiminato.tottori.jp":true,"tottori.tottori.jp":true,"wakasa.tottori.jp":true,"yazu.tottori.jp":true,"yonago.tottori.jp":true,"asahi.toyama.jp":true,"fuchu.toyama.jp":true,"fukumitsu.toyama.jp":true,"funahashi.toyama.jp":true,"himi.toyama.jp":true,"imizu.toyama.jp":true,"inami.toyama.jp":true,"johana.toyama.jp":true,"kamiichi.toyama.jp":true,"kurobe.toyama.jp":true,"nakaniikawa.toyama.jp":true,"namerikawa.toyama.jp":true,"nanto.toyama.jp":true,"nyuzen.toyama.jp":true,"oyabe.toyama.jp":true,"taira.toyama.jp":true,"takaoka.toyama.jp":true,"tateyama.toyama.jp":true,"toga.toyama.jp":true,"tonami.toyama.jp":true,"toyama.toyama.jp":true,"unazuki.toyama.jp":true,"uozu.toyama.jp":true,"yamada.toyama.jp":true,"arida.wakayama.jp":true,"aridagawa.wakayama.jp":true,"gobo.wakayama.jp":true,"hashimoto.wakayama.jp":true,"hidaka.wakayama.jp":true,"hirogawa.wakayama.jp":true,"inami.wakayama.jp":true,"iwade.wakayama.jp":true,"kainan.wakayama.jp":true,"kamitonda.wakayama.jp":true,"katsuragi.wakayama.jp":true,"kimino.wakayama.jp":true,"kinokawa.wakayama.jp":true,"kitayama.wakayama.jp":true,"koya.wakayama.jp":true,"koza.wakayama.jp":true,"kozagawa.wakayama.jp":true,"kudoyama.wakayama.jp":true,"kushimoto.wakayama.jp":true,"mihama.wakayama.jp":true,"misato.wakayama.jp":true,"nachikatsuura.wakayama.jp":true,"shingu.wakayama.jp":true,"shirahama.wakayama.jp":true,"taiji.wakayama.jp":true,"tanabe.wakayama.jp":true,"wakayama.wakayama.jp":true,"yuasa.wakayama.jp":true,"yura.wakayama.jp":true,"asahi.yamagata.jp":true,"funagata.yamagata.jp":true,"higashine.yamagata.jp":true,"iide.yamagata.jp":true,"kahoku.yamagata.jp":true,"kaminoyama.yamagata.jp":true,"kaneyama.yamagata.jp":true,"kawanishi.yamagata.jp":true,"mamurogawa.yamagata.jp":true,"mikawa.yamagata.jp":true,"murayama.yamagata.jp":true,"nagai.yamagata.jp":true,"nakayama.yamagata.jp":true,"nanyo.yamagata.jp":true,"nishikawa.yamagata.jp":true,"obanazawa.yamagata.jp":true,"oe.yamagata.jp":true,"oguni.yamagata.jp":true,"ohkura.yamagata.jp":true,"oishida.yamagata.jp":true,"sagae.yamagata.jp":true,"sakata.yamagata.jp":true,"sakegawa.yamagata.jp":true,"shinjo.yamagata.jp":true,"shirataka.yamagata.jp":true,"shonai.yamagata.jp":true,"takahata.yamagata.jp":true,"tendo.yamagata.jp":true,"tozawa.yamagata.jp":true,"tsuruoka.yamagata.jp":true,"yamagata.yamagata.jp":true,"yamanobe.yamagata.jp":true,"yonezawa.yamagata.jp":true,"yuza.yamagata.jp":true,"abu.yamaguchi.jp":true,"hagi.yamaguchi.jp":true,"hikari.yamaguchi.jp":true,"hofu.yamaguchi.jp":true,"iwakuni.yamaguchi.jp":true,"kudamatsu.yamaguchi.jp":true,"mitou.yamaguchi.jp":true,"nagato.yamaguchi.jp":true,"oshima.yamaguchi.jp":true,"shimonoseki.yamaguchi.jp":true,"shunan.yamaguchi.jp":true,"tabuse.yamaguchi.jp":true,"tokuyama.yamaguchi.jp":true,"toyota.yamaguchi.jp":true,"ube.yamaguchi.jp":true,"yuu.yamaguchi.jp":true,"chuo.yamanashi.jp":true,"doshi.yamanashi.jp":true,"fuefuki.yamanashi.jp":true,"fujikawa.yamanashi.jp":true,"fujikawaguchiko.yamanashi.jp":true,"fujiyoshida.yamanashi.jp":true,"hayakawa.yamanashi.jp":true,"hokuto.yamanashi.jp":true,"ichikawamisato.yamanashi.jp":true,"kai.yamanashi.jp":true,"kofu.yamanashi.jp":true,"koshu.yamanashi.jp":true,"kosuge.yamanashi.jp":true,"minami-alps.yamanashi.jp":true,"minobu.yamanashi.jp":true,"nakamichi.yamanashi.jp":true,"nanbu.yamanashi.jp":true,"narusawa.yamanashi.jp":true,"nirasaki.yamanashi.jp":true,"nishikatsura.yamanashi.jp":true,"oshino.yamanashi.jp":true,"otsuki.yamanashi.jp":true,"showa.yamanashi.jp":true,"tabayama.yamanashi.jp":true,"tsuru.yamanashi.jp":true,"uenohara.yamanashi.jp":true,"yamanakako.yamanashi.jp":true,"yamanashi.yamanashi.jp":true,"*.ke":true,"kg":true,"org.kg":true,"net.kg":true,"com.kg":true,"edu.kg":true,"gov.kg":true,"mil.kg":true,"*.kh":true,"ki":true,"edu.ki":true,"biz.ki":true,"net.ki":true,"org.ki":true,"gov.ki":true,"info.ki":true,"com.ki":true,"km":true,"org.km":true,"nom.km":true,"gov.km":true,"prd.km":true,"tm.km":true,"edu.km":true,"mil.km":true,"ass.km":true,"com.km":true,"coop.km":true,"asso.km":true,"presse.km":true,"medecin.km":true,"notaires.km":true,"pharmaciens.km":true,"veterinaire.km":true,"gouv.km":true,"kn":true,"net.kn":true,"org.kn":true,"edu.kn":true,"gov.kn":true,"kp":true,"com.kp":true,"edu.kp":true,"gov.kp":true,"org.kp":true,"rep.kp":true,"tra.kp":true,"kr":true,"ac.kr":true,"co.kr":true,"es.kr":true,"go.kr":true,"hs.kr":true,"kg.kr":true,"mil.kr":true,"ms.kr":true,"ne.kr":true,"or.kr":true,"pe.kr":true,"re.kr":true,"sc.kr":true,"busan.kr":true,"chungbuk.kr":true,"chungnam.kr":true,"daegu.kr":true,"daejeon.kr":true,"gangwon.kr":true,"gwangju.kr":true,"gyeongbuk.kr":true,"gyeonggi.kr":true,"gyeongnam.kr":true,"incheon.kr":true,"jeju.kr":true,"jeonbuk.kr":true,"jeonnam.kr":true,"seoul.kr":true,"ulsan.kr":true,"*.kw":true,"ky":true,"edu.ky":true,"gov.ky":true,"com.ky":true,"org.ky":true,"net.ky":true,"kz":true,"org.kz":true,"edu.kz":true,"net.kz":true,"gov.kz":true,"mil.kz":true,"com.kz":true,"la":true,"int.la":true,"net.la":true,"info.la":true,"edu.la":true,"gov.la":true,"per.la":true,"com.la":true,"org.la":true,"lb":true,"com.lb":true,"edu.lb":true,"gov.lb":true,"net.lb":true,"org.lb":true,"lc":true,"com.lc":true,"net.lc":true,"co.lc":true,"org.lc":true,"edu.lc":true,"gov.lc":true,"li":true,"lk":true,"gov.lk":true,"sch.lk":true,"net.lk":true,"int.lk":true,"com.lk":true,"org.lk":true,"edu.lk":true,"ngo.lk":true,"soc.lk":true,"web.lk":true,"ltd.lk":true,"assn.lk":true,"grp.lk":true,"hotel.lk":true,"ac.lk":true,"lr":true,"com.lr":true,"edu.lr":true,"gov.lr":true,"org.lr":true,"net.lr":true,"ls":true,"co.ls":true,"org.ls":true,"lt":true,"gov.lt":true,"lu":true,"lv":true,"com.lv":true,"edu.lv":true,"gov.lv":true,"org.lv":true,"mil.lv":true,"id.lv":true,"net.lv":true,"asn.lv":true,"conf.lv":true,"ly":true,"com.ly":true,"net.ly":true,"gov.ly":true,"plc.ly":true,"edu.ly":true,"sch.ly":true,"med.ly":true,"org.ly":true,"id.ly":true,"ma":true,"co.ma":true,"net.ma":true,"gov.ma":true,"org.ma":true,"ac.ma":true,"press.ma":true,"mc":true,"tm.mc":true,"asso.mc":true,"md":true,"me":true,"co.me":true,"net.me":true,"org.me":true,"edu.me":true,"ac.me":true,"gov.me":true,"its.me":true,"priv.me":true,"mg":true,"org.mg":true,"nom.mg":true,"gov.mg":true,"prd.mg":true,"tm.mg":true,"edu.mg":true,"mil.mg":true,"com.mg":true,"co.mg":true,"mh":true,"mil":true,"mk":true,"com.mk":true,"org.mk":true,"net.mk":true,"edu.mk":true,"gov.mk":true,"inf.mk":true,"name.mk":true,"ml":true,"com.ml":true,"edu.ml":true,"gouv.ml":true,"gov.ml":true,"net.ml":true,"org.ml":true,"presse.ml":true,"*.mm":true,"mn":true,"gov.mn":true,"edu.mn":true,"org.mn":true,"mo":true,"com.mo":true,"net.mo":true,"org.mo":true,"edu.mo":true,"gov.mo":true,"mobi":true,"mp":true,"mq":true,"mr":true,"gov.mr":true,"ms":true,"com.ms":true,"edu.ms":true,"gov.ms":true,"net.ms":true,"org.ms":true,"mt":true,"com.mt":true,"edu.mt":true,"net.mt":true,"org.mt":true,"mu":true,"com.mu":true,"net.mu":true,"org.mu":true,"gov.mu":true,"ac.mu":true,"co.mu":true,"or.mu":true,"museum":true,"academy.museum":true,"agriculture.museum":true,"air.museum":true,"airguard.museum":true,"alabama.museum":true,"alaska.museum":true,"amber.museum":true,"ambulance.museum":true,"american.museum":true,"americana.museum":true,"americanantiques.museum":true,"americanart.museum":true,"amsterdam.museum":true,"and.museum":true,"annefrank.museum":true,"anthro.museum":true,"anthropology.museum":true,"antiques.museum":true,"aquarium.museum":true,"arboretum.museum":true,"archaeological.museum":true,"archaeology.museum":true,"architecture.museum":true,"art.museum":true,"artanddesign.museum":true,"artcenter.museum":true,"artdeco.museum":true,"arteducation.museum":true,"artgallery.museum":true,"arts.museum":true,"artsandcrafts.museum":true,"asmatart.museum":true,"assassination.museum":true,"assisi.museum":true,"association.museum":true,"astronomy.museum":true,"atlanta.museum":true,"austin.museum":true,"australia.museum":true,"automotive.museum":true,"aviation.museum":true,"axis.museum":true,"badajoz.museum":true,"baghdad.museum":true,"bahn.museum":true,"bale.museum":true,"baltimore.museum":true,"barcelona.museum":true,"baseball.museum":true,"basel.museum":true,"baths.museum":true,"bauern.museum":true,"beauxarts.museum":true,"beeldengeluid.museum":true,"bellevue.museum":true,"bergbau.museum":true,"berkeley.museum":true,"berlin.museum":true,"bern.museum":true,"bible.museum":true,"bilbao.museum":true,"bill.museum":true,"birdart.museum":true,"birthplace.museum":true,"bonn.museum":true,"boston.museum":true,"botanical.museum":true,"botanicalgarden.museum":true,"botanicgarden.museum":true,"botany.museum":true,"brandywinevalley.museum":true,"brasil.museum":true,"bristol.museum":true,"british.museum":true,"britishcolumbia.museum":true,"broadcast.museum":true,"brunel.museum":true,"brussel.museum":true,"brussels.museum":true,"bruxelles.museum":true,"building.museum":true,"burghof.museum":true,"bus.museum":true,"bushey.museum":true,"cadaques.museum":true,"california.museum":true,"cambridge.museum":true,"can.museum":true,"canada.museum":true,"capebreton.museum":true,"carrier.museum":true,"cartoonart.museum":true,"casadelamoneda.museum":true,"castle.museum":true,"castres.museum":true,"celtic.museum":true,"center.museum":true,"chattanooga.museum":true,"cheltenham.museum":true,"chesapeakebay.museum":true,"chicago.museum":true,"children.museum":true,"childrens.museum":true,"childrensgarden.museum":true,"chiropractic.museum":true,"chocolate.museum":true,"christiansburg.museum":true,"cincinnati.museum":true,"cinema.museum":true,"circus.museum":true,"civilisation.museum":true,"civilization.museum":true,"civilwar.museum":true,"clinton.museum":true,"clock.museum":true,"coal.museum":true,"coastaldefence.museum":true,"cody.museum":true,"coldwar.museum":true,"collection.museum":true,"colonialwilliamsburg.museum":true,"coloradoplateau.museum":true,"columbia.museum":true,"columbus.museum":true,"communication.museum":true,"communications.museum":true,"community.museum":true,"computer.museum":true,"computerhistory.museum":true,"xn--comunicaes-v6a2o.museum":true,"contemporary.museum":true,"contemporaryart.museum":true,"convent.museum":true,"copenhagen.museum":true,"corporation.museum":true,"xn--correios-e-telecomunicaes-ghc29a.museum":true,"corvette.museum":true,"costume.museum":true,"countryestate.museum":true,"county.museum":true,"crafts.museum":true,"cranbrook.museum":true,"creation.museum":true,"cultural.museum":true,"culturalcenter.museum":true,"culture.museum":true,"cyber.museum":true,"cymru.museum":true,"dali.museum":true,"dallas.museum":true,"database.museum":true,"ddr.museum":true,"decorativearts.museum":true,"delaware.museum":true,"delmenhorst.museum":true,"denmark.museum":true,"depot.museum":true,"design.museum":true,"detroit.museum":true,"dinosaur.museum":true,"discovery.museum":true,"dolls.museum":true,"donostia.museum":true,"durham.museum":true,"eastafrica.museum":true,"eastcoast.museum":true,"education.museum":true,"educational.museum":true,"egyptian.museum":true,"eisenbahn.museum":true,"elburg.museum":true,"elvendrell.museum":true,"embroidery.museum":true,"encyclopedic.museum":true,"england.museum":true,"entomology.museum":true,"environment.museum":true,"environmentalconservation.museum":true,"epilepsy.museum":true,"essex.museum":true,"estate.museum":true,"ethnology.museum":true,"exeter.museum":true,"exhibition.museum":true,"family.museum":true,"farm.museum":true,"farmequipment.museum":true,"farmers.museum":true,"farmstead.museum":true,"field.museum":true,"figueres.museum":true,"filatelia.museum":true,"film.museum":true,"fineart.museum":true,"finearts.museum":true,"finland.museum":true,"flanders.museum":true,"florida.museum":true,"force.museum":true,"fortmissoula.museum":true,"fortworth.museum":true,"foundation.museum":true,"francaise.museum":true,"frankfurt.museum":true,"franziskaner.museum":true,"freemasonry.museum":true,"freiburg.museum":true,"fribourg.museum":true,"frog.museum":true,"fundacio.museum":true,"furniture.museum":true,"gallery.museum":true,"garden.museum":true,"gateway.museum":true,"geelvinck.museum":true,"gemological.museum":true,"geology.museum":true,"georgia.museum":true,"giessen.museum":true,"glas.museum":true,"glass.museum":true,"gorge.museum":true,"grandrapids.museum":true,"graz.museum":true,"guernsey.museum":true,"halloffame.museum":true,"hamburg.museum":true,"handson.museum":true,"harvestcelebration.museum":true,"hawaii.museum":true,"health.museum":true,"heimatunduhren.museum":true,"hellas.museum":true,"helsinki.museum":true,"hembygdsforbund.museum":true,"heritage.museum":true,"histoire.museum":true,"historical.museum":true,"historicalsociety.museum":true,"historichouses.museum":true,"historisch.museum":true,"historisches.museum":true,"history.museum":true,"historyofscience.museum":true,"horology.museum":true,"house.museum":true,"humanities.museum":true,"illustration.museum":true,"imageandsound.museum":true,"indian.museum":true,"indiana.museum":true,"indianapolis.museum":true,"indianmarket.museum":true,"intelligence.museum":true,"interactive.museum":true,"iraq.museum":true,"iron.museum":true,"isleofman.museum":true,"jamison.museum":true,"jefferson.museum":true,"jerusalem.museum":true,"jewelry.museum":true,"jewish.museum":true,"jewishart.museum":true,"jfk.museum":true,"journalism.museum":true,"judaica.museum":true,"judygarland.museum":true,"juedisches.museum":true,"juif.museum":true,"karate.museum":true,"karikatur.museum":true,"kids.museum":true,"koebenhavn.museum":true,"koeln.museum":true,"kunst.museum":true,"kunstsammlung.museum":true,"kunstunddesign.museum":true,"labor.museum":true,"labour.museum":true,"lajolla.museum":true,"lancashire.museum":true,"landes.museum":true,"lans.museum":true,"xn--lns-qla.museum":true,"larsson.museum":true,"lewismiller.museum":true,"lincoln.museum":true,"linz.museum":true,"living.museum":true,"livinghistory.museum":true,"localhistory.museum":true,"london.museum":true,"losangeles.museum":true,"louvre.museum":true,"loyalist.museum":true,"lucerne.museum":true,"luxembourg.museum":true,"luzern.museum":true,"mad.museum":true,"madrid.museum":true,"mallorca.museum":true,"manchester.museum":true,"mansion.museum":true,"mansions.museum":true,"manx.museum":true,"marburg.museum":true,"maritime.museum":true,"maritimo.museum":true,"maryland.museum":true,"marylhurst.museum":true,"media.museum":true,"medical.museum":true,"medizinhistorisches.museum":true,"meeres.museum":true,"memorial.museum":true,"mesaverde.museum":true,"michigan.museum":true,"midatlantic.museum":true,"military.museum":true,"mill.museum":true,"miners.museum":true,"mining.museum":true,"minnesota.museum":true,"missile.museum":true,"missoula.museum":true,"modern.museum":true,"moma.museum":true,"money.museum":true,"monmouth.museum":true,"monticello.museum":true,"montreal.museum":true,"moscow.museum":true,"motorcycle.museum":true,"muenchen.museum":true,"muenster.museum":true,"mulhouse.museum":true,"muncie.museum":true,"museet.museum":true,"museumcenter.museum":true,"museumvereniging.museum":true,"music.museum":true,"national.museum":true,"nationalfirearms.museum":true,"nationalheritage.museum":true,"nativeamerican.museum":true,"naturalhistory.museum":true,"naturalhistorymuseum.museum":true,"naturalsciences.museum":true,"nature.museum":true,"naturhistorisches.museum":true,"natuurwetenschappen.museum":true,"naumburg.museum":true,"naval.museum":true,"nebraska.museum":true,"neues.museum":true,"newhampshire.museum":true,"newjersey.museum":true,"newmexico.museum":true,"newport.museum":true,"newspaper.museum":true,"newyork.museum":true,"niepce.museum":true,"norfolk.museum":true,"north.museum":true,"nrw.museum":true,"nuernberg.museum":true,"nuremberg.museum":true,"nyc.museum":true,"nyny.museum":true,"oceanographic.museum":true,"oceanographique.museum":true,"omaha.museum":true,"online.museum":true,"ontario.museum":true,"openair.museum":true,"oregon.museum":true,"oregontrail.museum":true,"otago.museum":true,"oxford.museum":true,"pacific.museum":true,"paderborn.museum":true,"palace.museum":true,"paleo.museum":true,"palmsprings.museum":true,"panama.museum":true,"paris.museum":true,"pasadena.museum":true,"pharmacy.museum":true,"philadelphia.museum":true,"philadelphiaarea.museum":true,"philately.museum":true,"phoenix.museum":true,"photography.museum":true,"pilots.museum":true,"pittsburgh.museum":true,"planetarium.museum":true,"plantation.museum":true,"plants.museum":true,"plaza.museum":true,"portal.museum":true,"portland.museum":true,"portlligat.museum":true,"posts-and-telecommunications.museum":true,"preservation.museum":true,"presidio.museum":true,"press.museum":true,"project.museum":true,"public.museum":true,"pubol.museum":true,"quebec.museum":true,"railroad.museum":true,"railway.museum":true,"research.museum":true,"resistance.museum":true,"riodejaneiro.museum":true,"rochester.museum":true,"rockart.museum":true,"roma.museum":true,"russia.museum":true,"saintlouis.museum":true,"salem.museum":true,"salvadordali.museum":true,"salzburg.museum":true,"sandiego.museum":true,"sanfrancisco.museum":true,"santabarbara.museum":true,"santacruz.museum":true,"santafe.museum":true,"saskatchewan.museum":true,"satx.museum":true,"savannahga.museum":true,"schlesisches.museum":true,"schoenbrunn.museum":true,"schokoladen.museum":true,"school.museum":true,"schweiz.museum":true,"science.museum":true,"scienceandhistory.museum":true,"scienceandindustry.museum":true,"sciencecenter.museum":true,"sciencecenters.museum":true,"science-fiction.museum":true,"sciencehistory.museum":true,"sciences.museum":true,"sciencesnaturelles.museum":true,"scotland.museum":true,"seaport.museum":true,"settlement.museum":true,"settlers.museum":true,"shell.museum":true,"sherbrooke.museum":true,"sibenik.museum":true,"silk.museum":true,"ski.museum":true,"skole.museum":true,"society.museum":true,"sologne.museum":true,"soundandvision.museum":true,"southcarolina.museum":true,"southwest.museum":true,"space.museum":true,"spy.museum":true,"square.museum":true,"stadt.museum":true,"stalbans.museum":true,"starnberg.museum":true,"state.museum":true,"stateofdelaware.museum":true,"station.museum":true,"steam.museum":true,"steiermark.museum":true,"stjohn.museum":true,"stockholm.museum":true,"stpetersburg.museum":true,"stuttgart.museum":true,"suisse.museum":true,"surgeonshall.museum":true,"surrey.museum":true,"svizzera.museum":true,"sweden.museum":true,"sydney.museum":true,"tank.museum":true,"tcm.museum":true,"technology.museum":true,"telekommunikation.museum":true,"television.museum":true,"texas.museum":true,"textile.museum":true,"theater.museum":true,"time.museum":true,"timekeeping.museum":true,"topology.museum":true,"torino.museum":true,"touch.museum":true,"town.museum":true,"transport.museum":true,"tree.museum":true,"trolley.museum":true,"trust.museum":true,"trustee.museum":true,"uhren.museum":true,"ulm.museum":true,"undersea.museum":true,"university.museum":true,"usa.museum":true,"usantiques.museum":true,"usarts.museum":true,"uscountryestate.museum":true,"usculture.museum":true,"usdecorativearts.museum":true,"usgarden.museum":true,"ushistory.museum":true,"ushuaia.museum":true,"uslivinghistory.museum":true,"utah.museum":true,"uvic.museum":true,"valley.museum":true,"vantaa.museum":true,"versailles.museum":true,"viking.museum":true,"village.museum":true,"virginia.museum":true,"virtual.museum":true,"virtuel.museum":true,"vlaanderen.museum":true,"volkenkunde.museum":true,"wales.museum":true,"wallonie.museum":true,"war.museum":true,"washingtondc.museum":true,"watchandclock.museum":true,"watch-and-clock.museum":true,"western.museum":true,"westfalen.museum":true,"whaling.museum":true,"wildlife.museum":true,"williamsburg.museum":true,"windmill.museum":true,"workshop.museum":true,"york.museum":true,"yorkshire.museum":true,"yosemite.museum":true,"youth.museum":true,"zoological.museum":true,"zoology.museum":true,"xn--9dbhblg6di.museum":true,"xn--h1aegh.museum":true,"mv":true,"aero.mv":true,"biz.mv":true,"com.mv":true,"coop.mv":true,"edu.mv":true,"gov.mv":true,"info.mv":true,"int.mv":true,"mil.mv":true,"museum.mv":true,"name.mv":true,"net.mv":true,"org.mv":true,"pro.mv":true,"mw":true,"ac.mw":true,"biz.mw":true,"co.mw":true,"com.mw":true,"coop.mw":true,"edu.mw":true,"gov.mw":true,"int.mw":true,"museum.mw":true,"net.mw":true,"org.mw":true,"mx":true,"com.mx":true,"org.mx":true,"gob.mx":true,"edu.mx":true,"net.mx":true,"my":true,"com.my":true,"net.my":true,"org.my":true,"gov.my":true,"edu.my":true,"mil.my":true,"name.my":true,"*.mz":true,"teledata.mz":false,"na":true,"info.na":true,"pro.na":true,"name.na":true,"school.na":true,"or.na":true,"dr.na":true,"us.na":true,"mx.na":true,"ca.na":true,"in.na":true,"cc.na":true,"tv.na":true,"ws.na":true,"mobi.na":true,"co.na":true,"com.na":true,"org.na":true,"name":true,"nc":true,"asso.nc":true,"ne":true,"net":true,"nf":true,"com.nf":true,"net.nf":true,"per.nf":true,"rec.nf":true,"web.nf":true,"arts.nf":true,"firm.nf":true,"info.nf":true,"other.nf":true,"store.nf":true,"ng":true,"com.ng":true,"edu.ng":true,"name.ng":true,"net.ng":true,"org.ng":true,"sch.ng":true,"gov.ng":true,"mil.ng":true,"mobi.ng":true,"*.ni":true,"nl":true,"bv.nl":true,"no":true,"fhs.no":true,"vgs.no":true,"fylkesbibl.no":true,"folkebibl.no":true,"museum.no":true,"idrett.no":true,"priv.no":true,"mil.no":true,"stat.no":true,"dep.no":true,"kommune.no":true,"herad.no":true,"aa.no":true,"ah.no":true,"bu.no":true,"fm.no":true,"hl.no":true,"hm.no":true,"jan-mayen.no":true,"mr.no":true,"nl.no":true,"nt.no":true,"of.no":true,"ol.no":true,"oslo.no":true,"rl.no":true,"sf.no":true,"st.no":true,"svalbard.no":true,"tm.no":true,"tr.no":true,"va.no":true,"vf.no":true,"gs.aa.no":true,"gs.ah.no":true,"gs.bu.no":true,"gs.fm.no":true,"gs.hl.no":true,"gs.hm.no":true,"gs.jan-mayen.no":true,"gs.mr.no":true,"gs.nl.no":true,"gs.nt.no":true,"gs.of.no":true,"gs.ol.no":true,"gs.oslo.no":true,"gs.rl.no":true,"gs.sf.no":true,"gs.st.no":true,"gs.svalbard.no":true,"gs.tm.no":true,"gs.tr.no":true,"gs.va.no":true,"gs.vf.no":true,"akrehamn.no":true,"xn--krehamn-dxa.no":true,"algard.no":true,"xn--lgrd-poac.no":true,"arna.no":true,"brumunddal.no":true,"bryne.no":true,"bronnoysund.no":true,"xn--brnnysund-m8ac.no":true,"drobak.no":true,"xn--drbak-wua.no":true,"egersund.no":true,"fetsund.no":true,"floro.no":true,"xn--flor-jra.no":true,"fredrikstad.no":true,"hokksund.no":true,"honefoss.no":true,"xn--hnefoss-q1a.no":true,"jessheim.no":true,"jorpeland.no":true,"xn--jrpeland-54a.no":true,"kirkenes.no":true,"kopervik.no":true,"krokstadelva.no":true,"langevag.no":true,"xn--langevg-jxa.no":true,"leirvik.no":true,"mjondalen.no":true,"xn--mjndalen-64a.no":true,"mo-i-rana.no":true,"mosjoen.no":true,"xn--mosjen-eya.no":true,"nesoddtangen.no":true,"orkanger.no":true,"osoyro.no":true,"xn--osyro-wua.no":true,"raholt.no":true,"xn--rholt-mra.no":true,"sandnessjoen.no":true,"xn--sandnessjen-ogb.no":true,"skedsmokorset.no":true,"slattum.no":true,"spjelkavik.no":true,"stathelle.no":true,"stavern.no":true,"stjordalshalsen.no":true,"xn--stjrdalshalsen-sqb.no":true,"tananger.no":true,"tranby.no":true,"vossevangen.no":true,"afjord.no":true,"xn--fjord-lra.no":true,"agdenes.no":true,"al.no":true,"xn--l-1fa.no":true,"alesund.no":true,"xn--lesund-hua.no":true,"alstahaug.no":true,"alta.no":true,"xn--lt-liac.no":true,"alaheadju.no":true,"xn--laheadju-7ya.no":true,"alvdal.no":true,"amli.no":true,"xn--mli-tla.no":true,"amot.no":true,"xn--mot-tla.no":true,"andebu.no":true,"andoy.no":true,"xn--andy-ira.no":true,"andasuolo.no":true,"ardal.no":true,"xn--rdal-poa.no":true,"aremark.no":true,"arendal.no":true,"xn--s-1fa.no":true,"aseral.no":true,"xn--seral-lra.no":true,"asker.no":true,"askim.no":true,"askvoll.no":true,"askoy.no":true,"xn--asky-ira.no":true,"asnes.no":true,"xn--snes-poa.no":true,"audnedaln.no":true,"aukra.no":true,"aure.no":true,"aurland.no":true,"aurskog-holand.no":true,"xn--aurskog-hland-jnb.no":true,"austevoll.no":true,"austrheim.no":true,"averoy.no":true,"xn--avery-yua.no":true,"balestrand.no":true,"ballangen.no":true,"balat.no":true,"xn--blt-elab.no":true,"balsfjord.no":true,"bahccavuotna.no":true,"xn--bhccavuotna-k7a.no":true,"bamble.no":true,"bardu.no":true,"beardu.no":true,"beiarn.no":true,"bajddar.no":true,"xn--bjddar-pta.no":true,"baidar.no":true,"xn--bidr-5nac.no":true,"berg.no":true,"bergen.no":true,"berlevag.no":true,"xn--berlevg-jxa.no":true,"bearalvahki.no":true,"xn--bearalvhki-y4a.no":true,"bindal.no":true,"birkenes.no":true,"bjarkoy.no":true,"xn--bjarky-fya.no":true,"bjerkreim.no":true,"bjugn.no":true,"bodo.no":true,"xn--bod-2na.no":true,"badaddja.no":true,"xn--bdddj-mrabd.no":true,"budejju.no":true,"bokn.no":true,"bremanger.no":true,"bronnoy.no":true,"xn--brnny-wuac.no":true,"bygland.no":true,"bykle.no":true,"barum.no":true,"xn--brum-voa.no":true,"bo.telemark.no":true,"xn--b-5ga.telemark.no":true,"bo.nordland.no":true,"xn--b-5ga.nordland.no":true,"bievat.no":true,"xn--bievt-0qa.no":true,"bomlo.no":true,"xn--bmlo-gra.no":true,"batsfjord.no":true,"xn--btsfjord-9za.no":true,"bahcavuotna.no":true,"xn--bhcavuotna-s4a.no":true,"dovre.no":true,"drammen.no":true,"drangedal.no":true,"dyroy.no":true,"xn--dyry-ira.no":true,"donna.no":true,"xn--dnna-gra.no":true,"eid.no":true,"eidfjord.no":true,"eidsberg.no":true,"eidskog.no":true,"eidsvoll.no":true,"eigersund.no":true,"elverum.no":true,"enebakk.no":true,"engerdal.no":true,"etne.no":true,"etnedal.no":true,"evenes.no":true,"evenassi.no":true,"xn--eveni-0qa01ga.no":true,"evje-og-hornnes.no":true,"farsund.no":true,"fauske.no":true,"fuossko.no":true,"fuoisku.no":true,"fedje.no":true,"fet.no":true,"finnoy.no":true,"xn--finny-yua.no":true,"fitjar.no":true,"fjaler.no":true,"fjell.no":true,"flakstad.no":true,"flatanger.no":true,"flekkefjord.no":true,"flesberg.no":true,"flora.no":true,"fla.no":true,"xn--fl-zia.no":true,"folldal.no":true,"forsand.no":true,"fosnes.no":true,"frei.no":true,"frogn.no":true,"froland.no":true,"frosta.no":true,"frana.no":true,"xn--frna-woa.no":true,"froya.no":true,"xn--frya-hra.no":true,"fusa.no":true,"fyresdal.no":true,"forde.no":true,"xn--frde-gra.no":true,"gamvik.no":true,"gangaviika.no":true,"xn--ggaviika-8ya47h.no":true,"gaular.no":true,"gausdal.no":true,"gildeskal.no":true,"xn--gildeskl-g0a.no":true,"giske.no":true,"gjemnes.no":true,"gjerdrum.no":true,"gjerstad.no":true,"gjesdal.no":true,"gjovik.no":true,"xn--gjvik-wua.no":true,"gloppen.no":true,"gol.no":true,"gran.no":true,"grane.no":true,"granvin.no":true,"gratangen.no":true,"grimstad.no":true,"grong.no":true,"kraanghke.no":true,"xn--kranghke-b0a.no":true,"grue.no":true,"gulen.no":true,"hadsel.no":true,"halden.no":true,"halsa.no":true,"hamar.no":true,"hamaroy.no":true,"habmer.no":true,"xn--hbmer-xqa.no":true,"hapmir.no":true,"xn--hpmir-xqa.no":true,"hammerfest.no":true,"hammarfeasta.no":true,"xn--hmmrfeasta-s4ac.no":true,"haram.no":true,"hareid.no":true,"harstad.no":true,"hasvik.no":true,"aknoluokta.no":true,"xn--koluokta-7ya57h.no":true,"hattfjelldal.no":true,"aarborte.no":true,"haugesund.no":true,"hemne.no":true,"hemnes.no":true,"hemsedal.no":true,"heroy.more-og-romsdal.no":true,"xn--hery-ira.xn--mre-og-romsdal-qqb.no":true,"heroy.nordland.no":true,"xn--hery-ira.nordland.no":true,"hitra.no":true,"hjartdal.no":true,"hjelmeland.no":true,"hobol.no":true,"xn--hobl-ira.no":true,"hof.no":true,"hol.no":true,"hole.no":true,"holmestrand.no":true,"holtalen.no":true,"xn--holtlen-hxa.no":true,"hornindal.no":true,"horten.no":true,"hurdal.no":true,"hurum.no":true,"hvaler.no":true,"hyllestad.no":true,"hagebostad.no":true,"xn--hgebostad-g3a.no":true,"hoyanger.no":true,"xn--hyanger-q1a.no":true,"hoylandet.no":true,"xn--hylandet-54a.no":true,"ha.no":true,"xn--h-2fa.no":true,"ibestad.no":true,"inderoy.no":true,"xn--indery-fya.no":true,"iveland.no":true,"jevnaker.no":true,"jondal.no":true,"jolster.no":true,"xn--jlster-bya.no":true,"karasjok.no":true,"karasjohka.no":true,"xn--krjohka-hwab49j.no":true,"karlsoy.no":true,"galsa.no":true,"xn--gls-elac.no":true,"karmoy.no":true,"xn--karmy-yua.no":true,"kautokeino.no":true,"guovdageaidnu.no":true,"klepp.no":true,"klabu.no":true,"xn--klbu-woa.no":true,"kongsberg.no":true,"kongsvinger.no":true,"kragero.no":true,"xn--krager-gya.no":true,"kristiansand.no":true,"kristiansund.no":true,"krodsherad.no":true,"xn--krdsherad-m8a.no":true,"kvalsund.no":true,"rahkkeravju.no":true,"xn--rhkkervju-01af.no":true,"kvam.no":true,"kvinesdal.no":true,"kvinnherad.no":true,"kviteseid.no":true,"kvitsoy.no":true,"xn--kvitsy-fya.no":true,"kvafjord.no":true,"xn--kvfjord-nxa.no":true,"giehtavuoatna.no":true,"kvanangen.no":true,"xn--kvnangen-k0a.no":true,"navuotna.no":true,"xn--nvuotna-hwa.no":true,"kafjord.no":true,"xn--kfjord-iua.no":true,"gaivuotna.no":true,"xn--givuotna-8ya.no":true,"larvik.no":true,"lavangen.no":true,"lavagis.no":true,"loabat.no":true,"xn--loabt-0qa.no":true,"lebesby.no":true,"davvesiida.no":true,"leikanger.no":true,"leirfjord.no":true,"leka.no":true,"leksvik.no":true,"lenvik.no":true,"leangaviika.no":true,"xn--leagaviika-52b.no":true,"lesja.no":true,"levanger.no":true,"lier.no":true,"lierne.no":true,"lillehammer.no":true,"lillesand.no":true,"lindesnes.no":true,"lindas.no":true,"xn--linds-pra.no":true,"lom.no":true,"loppa.no":true,"lahppi.no":true,"xn--lhppi-xqa.no":true,"lund.no":true,"lunner.no":true,"luroy.no":true,"xn--lury-ira.no":true,"luster.no":true,"lyngdal.no":true,"lyngen.no":true,"ivgu.no":true,"lardal.no":true,"lerdal.no":true,"xn--lrdal-sra.no":true,"lodingen.no":true,"xn--ldingen-q1a.no":true,"lorenskog.no":true,"xn--lrenskog-54a.no":true,"loten.no":true,"xn--lten-gra.no":true,"malvik.no":true,"masoy.no":true,"xn--msy-ula0h.no":true,"muosat.no":true,"xn--muost-0qa.no":true,"mandal.no":true,"marker.no":true,"marnardal.no":true,"masfjorden.no":true,"meland.no":true,"meldal.no":true,"melhus.no":true,"meloy.no":true,"xn--mely-ira.no":true,"meraker.no":true,"xn--merker-kua.no":true,"moareke.no":true,"xn--moreke-jua.no":true,"midsund.no":true,"midtre-gauldal.no":true,"modalen.no":true,"modum.no":true,"molde.no":true,"moskenes.no":true,"moss.no":true,"mosvik.no":true,"malselv.no":true,"xn--mlselv-iua.no":true,"malatvuopmi.no":true,"xn--mlatvuopmi-s4a.no":true,"namdalseid.no":true,"aejrie.no":true,"namsos.no":true,"namsskogan.no":true,"naamesjevuemie.no":true,"xn--nmesjevuemie-tcba.no":true,"laakesvuemie.no":true,"nannestad.no":true,"narvik.no":true,"narviika.no":true,"naustdal.no":true,"nedre-eiker.no":true,"nes.akershus.no":true,"nes.buskerud.no":true,"nesna.no":true,"nesodden.no":true,"nesseby.no":true,"unjarga.no":true,"xn--unjrga-rta.no":true,"nesset.no":true,"nissedal.no":true,"nittedal.no":true,"nord-aurdal.no":true,"nord-fron.no":true,"nord-odal.no":true,"norddal.no":true,"nordkapp.no":true,"davvenjarga.no":true,"xn--davvenjrga-y4a.no":true,"nordre-land.no":true,"nordreisa.no":true,"raisa.no":true,"xn--risa-5na.no":true,"nore-og-uvdal.no":true,"notodden.no":true,"naroy.no":true,"xn--nry-yla5g.no":true,"notteroy.no":true,"xn--nttery-byae.no":true,"odda.no":true,"oksnes.no":true,"xn--ksnes-uua.no":true,"oppdal.no":true,"oppegard.no":true,"xn--oppegrd-ixa.no":true,"orkdal.no":true,"orland.no":true,"xn--rland-uua.no":true,"orskog.no":true,"xn--rskog-uua.no":true,"orsta.no":true,"xn--rsta-fra.no":true,"os.hedmark.no":true,"os.hordaland.no":true,"osen.no":true,"osteroy.no":true,"xn--ostery-fya.no":true,"ostre-toten.no":true,"xn--stre-toten-zcb.no":true,"overhalla.no":true,"ovre-eiker.no":true,"xn--vre-eiker-k8a.no":true,"oyer.no":true,"xn--yer-zna.no":true,"oygarden.no":true,"xn--ygarden-p1a.no":true,"oystre-slidre.no":true,"xn--ystre-slidre-ujb.no":true,"porsanger.no":true,"porsangu.no":true,"xn--porsgu-sta26f.no":true,"porsgrunn.no":true,"radoy.no":true,"xn--rady-ira.no":true,"rakkestad.no":true,"rana.no":true,"ruovat.no":true,"randaberg.no":true,"rauma.no":true,"rendalen.no":true,"rennebu.no":true,"rennesoy.no":true,"xn--rennesy-v1a.no":true,"rindal.no":true,"ringebu.no":true,"ringerike.no":true,"ringsaker.no":true,"rissa.no":true,"risor.no":true,"xn--risr-ira.no":true,"roan.no":true,"rollag.no":true,"rygge.no":true,"ralingen.no":true,"xn--rlingen-mxa.no":true,"rodoy.no":true,"xn--rdy-0nab.no":true,"romskog.no":true,"xn--rmskog-bya.no":true,"roros.no":true,"xn--rros-gra.no":true,"rost.no":true,"xn--rst-0na.no":true,"royken.no":true,"xn--ryken-vua.no":true,"royrvik.no":true,"xn--ryrvik-bya.no":true,"rade.no":true,"xn--rde-ula.no":true,"salangen.no":true,"siellak.no":true,"saltdal.no":true,"salat.no":true,"xn--slt-elab.no":true,"xn--slat-5na.no":true,"samnanger.no":true,"sande.more-og-romsdal.no":true,"sande.xn--mre-og-romsdal-qqb.no":true,"sande.vestfold.no":true,"sandefjord.no":true,"sandnes.no":true,"sandoy.no":true,"xn--sandy-yua.no":true,"sarpsborg.no":true,"sauda.no":true,"sauherad.no":true,"sel.no":true,"selbu.no":true,"selje.no":true,"seljord.no":true,"sigdal.no":true,"siljan.no":true,"sirdal.no":true,"skaun.no":true,"skedsmo.no":true,"ski.no":true,"skien.no":true,"skiptvet.no":true,"skjervoy.no":true,"xn--skjervy-v1a.no":true,"skierva.no":true,"xn--skierv-uta.no":true,"skjak.no":true,"xn--skjk-soa.no":true,"skodje.no":true,"skanland.no":true,"xn--sknland-fxa.no":true,"skanit.no":true,"xn--sknit-yqa.no":true,"smola.no":true,"xn--smla-hra.no":true,"snillfjord.no":true,"snasa.no":true,"xn--snsa-roa.no":true,"snoasa.no":true,"snaase.no":true,"xn--snase-nra.no":true,"sogndal.no":true,"sokndal.no":true,"sola.no":true,"solund.no":true,"songdalen.no":true,"sortland.no":true,"spydeberg.no":true,"stange.no":true,"stavanger.no":true,"steigen.no":true,"steinkjer.no":true,"stjordal.no":true,"xn--stjrdal-s1a.no":true,"stokke.no":true,"stor-elvdal.no":true,"stord.no":true,"stordal.no":true,"storfjord.no":true,"omasvuotna.no":true,"strand.no":true,"stranda.no":true,"stryn.no":true,"sula.no":true,"suldal.no":true,"sund.no":true,"sunndal.no":true,"surnadal.no":true,"sveio.no":true,"svelvik.no":true,"sykkylven.no":true,"sogne.no":true,"xn--sgne-gra.no":true,"somna.no":true,"xn--smna-gra.no":true,"sondre-land.no":true,"xn--sndre-land-0cb.no":true,"sor-aurdal.no":true,"xn--sr-aurdal-l8a.no":true,"sor-fron.no":true,"xn--sr-fron-q1a.no":true,"sor-odal.no":true,"xn--sr-odal-q1a.no":true,"sor-varanger.no":true,"xn--sr-varanger-ggb.no":true,"matta-varjjat.no":true,"xn--mtta-vrjjat-k7af.no":true,"sorfold.no":true,"xn--srfold-bya.no":true,"sorreisa.no":true,"xn--srreisa-q1a.no":true,"sorum.no":true,"xn--srum-gra.no":true,"tana.no":true,"deatnu.no":true,"time.no":true,"tingvoll.no":true,"tinn.no":true,"tjeldsund.no":true,"dielddanuorri.no":true,"tjome.no":true,"xn--tjme-hra.no":true,"tokke.no":true,"tolga.no":true,"torsken.no":true,"tranoy.no":true,"xn--trany-yua.no":true,"tromso.no":true,"xn--troms-zua.no":true,"tromsa.no":true,"romsa.no":true,"trondheim.no":true,"troandin.no":true,"trysil.no":true,"trana.no":true,"xn--trna-woa.no":true,"trogstad.no":true,"xn--trgstad-r1a.no":true,"tvedestrand.no":true,"tydal.no":true,"tynset.no":true,"tysfjord.no":true,"divtasvuodna.no":true,"divttasvuotna.no":true,"tysnes.no":true,"tysvar.no":true,"xn--tysvr-vra.no":true,"tonsberg.no":true,"xn--tnsberg-q1a.no":true,"ullensaker.no":true,"ullensvang.no":true,"ulvik.no":true,"utsira.no":true,"vadso.no":true,"xn--vads-jra.no":true,"cahcesuolo.no":true,"xn--hcesuolo-7ya35b.no":true,"vaksdal.no":true,"valle.no":true,"vang.no":true,"vanylven.no":true,"vardo.no":true,"xn--vard-jra.no":true,"varggat.no":true,"xn--vrggt-xqad.no":true,"vefsn.no":true,"vaapste.no":true,"vega.no":true,"vegarshei.no":true,"xn--vegrshei-c0a.no":true,"vennesla.no":true,"verdal.no":true,"verran.no":true,"vestby.no":true,"vestnes.no":true,"vestre-slidre.no":true,"vestre-toten.no":true,"vestvagoy.no":true,"xn--vestvgy-ixa6o.no":true,"vevelstad.no":true,"vik.no":true,"vikna.no":true,"vindafjord.no":true,"volda.no":true,"voss.no":true,"varoy.no":true,"xn--vry-yla5g.no":true,"vagan.no":true,"xn--vgan-qoa.no":true,"voagat.no":true,"vagsoy.no":true,"xn--vgsy-qoa0j.no":true,"vaga.no":true,"xn--vg-yiab.no":true,"valer.ostfold.no":true,"xn--vler-qoa.xn--stfold-9xa.no":true,"valer.hedmark.no":true,"xn--vler-qoa.hedmark.no":true,"*.np":true,"nr":true,"biz.nr":true,"info.nr":true,"gov.nr":true,"edu.nr":true,"org.nr":true,"net.nr":true,"com.nr":true,"nu":true,"nz":true,"ac.nz":true,"co.nz":true,"cri.nz":true,"geek.nz":true,"gen.nz":true,"govt.nz":true,"health.nz":true,"iwi.nz":true,"kiwi.nz":true,"maori.nz":true,"mil.nz":true,"xn--mori-qsa.nz":true,"net.nz":true,"org.nz":true,"parliament.nz":true,"school.nz":true,"om":true,"co.om":true,"com.om":true,"edu.om":true,"gov.om":true,"med.om":true,"museum.om":true,"net.om":true,"org.om":true,"pro.om":true,"org":true,"pa":true,"ac.pa":true,"gob.pa":true,"com.pa":true,"org.pa":true,"sld.pa":true,"edu.pa":true,"net.pa":true,"ing.pa":true,"abo.pa":true,"med.pa":true,"nom.pa":true,"pe":true,"edu.pe":true,"gob.pe":true,"nom.pe":true,"mil.pe":true,"org.pe":true,"com.pe":true,"net.pe":true,"pf":true,"com.pf":true,"org.pf":true,"edu.pf":true,"*.pg":true,"ph":true,"com.ph":true,"net.ph":true,"org.ph":true,"gov.ph":true,"edu.ph":true,"ngo.ph":true,"mil.ph":true,"i.ph":true,"pk":true,"com.pk":true,"net.pk":true,"edu.pk":true,"org.pk":true,"fam.pk":true,"biz.pk":true,"web.pk":true,"gov.pk":true,"gob.pk":true,"gok.pk":true,"gon.pk":true,"gop.pk":true,"gos.pk":true,"info.pk":true,"pl":true,"com.pl":true,"net.pl":true,"org.pl":true,"aid.pl":true,"agro.pl":true,"atm.pl":true,"auto.pl":true,"biz.pl":true,"edu.pl":true,"gmina.pl":true,"gsm.pl":true,"info.pl":true,"mail.pl":true,"miasta.pl":true,"media.pl":true,"mil.pl":true,"nieruchomosci.pl":true,"nom.pl":true,"pc.pl":true,"powiat.pl":true,"priv.pl":true,"realestate.pl":true,"rel.pl":true,"sex.pl":true,"shop.pl":true,"sklep.pl":true,"sos.pl":true,"szkola.pl":true,"targi.pl":true,"tm.pl":true,"tourism.pl":true,"travel.pl":true,"turystyka.pl":true,"gov.pl":true,"ap.gov.pl":true,"ic.gov.pl":true,"is.gov.pl":true,"us.gov.pl":true,"kmpsp.gov.pl":true,"kppsp.gov.pl":true,"kwpsp.gov.pl":true,"psp.gov.pl":true,"wskr.gov.pl":true,"kwp.gov.pl":true,"mw.gov.pl":true,"ug.gov.pl":true,"um.gov.pl":true,"umig.gov.pl":true,"ugim.gov.pl":true,"upow.gov.pl":true,"uw.gov.pl":true,"starostwo.gov.pl":true,"pa.gov.pl":true,"po.gov.pl":true,"psse.gov.pl":true,"pup.gov.pl":true,"rzgw.gov.pl":true,"sa.gov.pl":true,"so.gov.pl":true,"sr.gov.pl":true,"wsa.gov.pl":true,"sko.gov.pl":true,"uzs.gov.pl":true,"wiih.gov.pl":true,"winb.gov.pl":true,"pinb.gov.pl":true,"wios.gov.pl":true,"witd.gov.pl":true,"wzmiuw.gov.pl":true,"piw.gov.pl":true,"wiw.gov.pl":true,"griw.gov.pl":true,"wif.gov.pl":true,"oum.gov.pl":true,"sdn.gov.pl":true,"zp.gov.pl":true,"uppo.gov.pl":true,"mup.gov.pl":true,"wuoz.gov.pl":true,"konsulat.gov.pl":true,"oirm.gov.pl":true,"augustow.pl":true,"babia-gora.pl":true,"bedzin.pl":true,"beskidy.pl":true,"bialowieza.pl":true,"bialystok.pl":true,"bielawa.pl":true,"bieszczady.pl":true,"boleslawiec.pl":true,"bydgoszcz.pl":true,"bytom.pl":true,"cieszyn.pl":true,"czeladz.pl":true,"czest.pl":true,"dlugoleka.pl":true,"elblag.pl":true,"elk.pl":true,"glogow.pl":true,"gniezno.pl":true,"gorlice.pl":true,"grajewo.pl":true,"ilawa.pl":true,"jaworzno.pl":true,"jelenia-gora.pl":true,"jgora.pl":true,"kalisz.pl":true,"kazimierz-dolny.pl":true,"karpacz.pl":true,"kartuzy.pl":true,"kaszuby.pl":true,"katowice.pl":true,"kepno.pl":true,"ketrzyn.pl":true,"klodzko.pl":true,"kobierzyce.pl":true,"kolobrzeg.pl":true,"konin.pl":true,"konskowola.pl":true,"kutno.pl":true,"lapy.pl":true,"lebork.pl":true,"legnica.pl":true,"lezajsk.pl":true,"limanowa.pl":true,"lomza.pl":true,"lowicz.pl":true,"lubin.pl":true,"lukow.pl":true,"malbork.pl":true,"malopolska.pl":true,"mazowsze.pl":true,"mazury.pl":true,"mielec.pl":true,"mielno.pl":true,"mragowo.pl":true,"naklo.pl":true,"nowaruda.pl":true,"nysa.pl":true,"olawa.pl":true,"olecko.pl":true,"olkusz.pl":true,"olsztyn.pl":true,"opoczno.pl":true,"opole.pl":true,"ostroda.pl":true,"ostroleka.pl":true,"ostrowiec.pl":true,"ostrowwlkp.pl":true,"pila.pl":true,"pisz.pl":true,"podhale.pl":true,"podlasie.pl":true,"polkowice.pl":true,"pomorze.pl":true,"pomorskie.pl":true,"prochowice.pl":true,"pruszkow.pl":true,"przeworsk.pl":true,"pulawy.pl":true,"radom.pl":true,"rawa-maz.pl":true,"rybnik.pl":true,"rzeszow.pl":true,"sanok.pl":true,"sejny.pl":true,"slask.pl":true,"slupsk.pl":true,"sosnowiec.pl":true,"stalowa-wola.pl":true,"skoczow.pl":true,"starachowice.pl":true,"stargard.pl":true,"suwalki.pl":true,"swidnica.pl":true,"swiebodzin.pl":true,"swinoujscie.pl":true,"szczecin.pl":true,"szczytno.pl":true,"tarnobrzeg.pl":true,"tgory.pl":true,"turek.pl":true,"tychy.pl":true,"ustka.pl":true,"walbrzych.pl":true,"warmia.pl":true,"warszawa.pl":true,"waw.pl":true,"wegrow.pl":true,"wielun.pl":true,"wlocl.pl":true,"wloclawek.pl":true,"wodzislaw.pl":true,"wolomin.pl":true,"wroclaw.pl":true,"zachpomor.pl":true,"zagan.pl":true,"zarow.pl":true,"zgora.pl":true,"zgorzelec.pl":true,"pm":true,"pn":true,"gov.pn":true,"co.pn":true,"org.pn":true,"edu.pn":true,"net.pn":true,"post":true,"pr":true,"com.pr":true,"net.pr":true,"org.pr":true,"gov.pr":true,"edu.pr":true,"isla.pr":true,"pro.pr":true,"biz.pr":true,"info.pr":true,"name.pr":true,"est.pr":true,"prof.pr":true,"ac.pr":true,"pro":true,"aca.pro":true,"bar.pro":true,"cpa.pro":true,"jur.pro":true,"law.pro":true,"med.pro":true,"eng.pro":true,"ps":true,"edu.ps":true,"gov.ps":true,"sec.ps":true,"plo.ps":true,"com.ps":true,"org.ps":true,"net.ps":true,"pt":true,"net.pt":true,"gov.pt":true,"org.pt":true,"edu.pt":true,"int.pt":true,"publ.pt":true,"com.pt":true,"nome.pt":true,"pw":true,"co.pw":true,"ne.pw":true,"or.pw":true,"ed.pw":true,"go.pw":true,"belau.pw":true,"py":true,"com.py":true,"coop.py":true,"edu.py":true,"gov.py":true,"mil.py":true,"net.py":true,"org.py":true,"qa":true,"com.qa":true,"edu.qa":true,"gov.qa":true,"mil.qa":true,"name.qa":true,"net.qa":true,"org.qa":true,"sch.qa":true,"re":true,"com.re":true,"asso.re":true,"nom.re":true,"ro":true,"com.ro":true,"org.ro":true,"tm.ro":true,"nt.ro":true,"nom.ro":true,"info.ro":true,"rec.ro":true,"arts.ro":true,"firm.ro":true,"store.ro":true,"www.ro":true,"rs":true,"co.rs":true,"org.rs":true,"edu.rs":true,"ac.rs":true,"gov.rs":true,"in.rs":true,"ru":true,"ac.ru":true,"com.ru":true,"edu.ru":true,"int.ru":true,"net.ru":true,"org.ru":true,"pp.ru":true,"adygeya.ru":true,"altai.ru":true,"amur.ru":true,"arkhangelsk.ru":true,"astrakhan.ru":true,"bashkiria.ru":true,"belgorod.ru":true,"bir.ru":true,"bryansk.ru":true,"buryatia.ru":true,"cbg.ru":true,"chel.ru":true,"chelyabinsk.ru":true,"chita.ru":true,"chukotka.ru":true,"chuvashia.ru":true,"dagestan.ru":true,"dudinka.ru":true,"e-burg.ru":true,"grozny.ru":true,"irkutsk.ru":true,"ivanovo.ru":true,"izhevsk.ru":true,"jar.ru":true,"joshkar-ola.ru":true,"kalmykia.ru":true,"kaluga.ru":true,"kamchatka.ru":true,"karelia.ru":true,"kazan.ru":true,"kchr.ru":true,"kemerovo.ru":true,"khabarovsk.ru":true,"khakassia.ru":true,"khv.ru":true,"kirov.ru":true,"koenig.ru":true,"komi.ru":true,"kostroma.ru":true,"krasnoyarsk.ru":true,"kuban.ru":true,"kurgan.ru":true,"kursk.ru":true,"lipetsk.ru":true,"magadan.ru":true,"mari.ru":true,"mari-el.ru":true,"marine.ru":true,"mordovia.ru":true,"msk.ru":true,"murmansk.ru":true,"nalchik.ru":true,"nnov.ru":true,"nov.ru":true,"novosibirsk.ru":true,"nsk.ru":true,"omsk.ru":true,"orenburg.ru":true,"oryol.ru":true,"palana.ru":true,"penza.ru":true,"perm.ru":true,"ptz.ru":true,"rnd.ru":true,"ryazan.ru":true,"sakhalin.ru":true,"samara.ru":true,"saratov.ru":true,"simbirsk.ru":true,"smolensk.ru":true,"spb.ru":true,"stavropol.ru":true,"stv.ru":true,"surgut.ru":true,"tambov.ru":true,"tatarstan.ru":true,"tom.ru":true,"tomsk.ru":true,"tsaritsyn.ru":true,"tsk.ru":true,"tula.ru":true,"tuva.ru":true,"tver.ru":true,"tyumen.ru":true,"udm.ru":true,"udmurtia.ru":true,"ulan-ude.ru":true,"vladikavkaz.ru":true,"vladimir.ru":true,"vladivostok.ru":true,"volgograd.ru":true,"vologda.ru":true,"voronezh.ru":true,"vrn.ru":true,"vyatka.ru":true,"yakutia.ru":true,"yamal.ru":true,"yaroslavl.ru":true,"yekaterinburg.ru":true,"yuzhno-sakhalinsk.ru":true,"amursk.ru":true,"baikal.ru":true,"cmw.ru":true,"fareast.ru":true,"jamal.ru":true,"kms.ru":true,"k-uralsk.ru":true,"kustanai.ru":true,"kuzbass.ru":true,"magnitka.ru":true,"mytis.ru":true,"nakhodka.ru":true,"nkz.ru":true,"norilsk.ru":true,"oskol.ru":true,"pyatigorsk.ru":true,"rubtsovsk.ru":true,"snz.ru":true,"syzran.ru":true,"vdonsk.ru":true,"zgrad.ru":true,"gov.ru":true,"mil.ru":true,"test.ru":true,"rw":true,"gov.rw":true,"net.rw":true,"edu.rw":true,"ac.rw":true,"com.rw":true,"co.rw":true,"int.rw":true,"mil.rw":true,"gouv.rw":true,"sa":true,"com.sa":true,"net.sa":true,"org.sa":true,"gov.sa":true,"med.sa":true,"pub.sa":true,"edu.sa":true,"sch.sa":true,"sb":true,"com.sb":true,"edu.sb":true,"gov.sb":true,"net.sb":true,"org.sb":true,"sc":true,"com.sc":true,"gov.sc":true,"net.sc":true,"org.sc":true,"edu.sc":true,"sd":true,"com.sd":true,"net.sd":true,"org.sd":true,"edu.sd":true,"med.sd":true,"tv.sd":true,"gov.sd":true,"info.sd":true,"se":true,"a.se":true,"ac.se":true,"b.se":true,"bd.se":true,"brand.se":true,"c.se":true,"d.se":true,"e.se":true,"f.se":true,"fh.se":true,"fhsk.se":true,"fhv.se":true,"g.se":true,"h.se":true,"i.se":true,"k.se":true,"komforb.se":true,"kommunalforbund.se":true,"komvux.se":true,"l.se":true,"lanbib.se":true,"m.se":true,"n.se":true,"naturbruksgymn.se":true,"o.se":true,"org.se":true,"p.se":true,"parti.se":true,"pp.se":true,"press.se":true,"r.se":true,"s.se":true,"t.se":true,"tm.se":true,"u.se":true,"w.se":true,"x.se":true,"y.se":true,"z.se":true,"sg":true,"com.sg":true,"net.sg":true,"org.sg":true,"gov.sg":true,"edu.sg":true,"per.sg":true,"sh":true,"com.sh":true,"net.sh":true,"gov.sh":true,"org.sh":true,"mil.sh":true,"si":true,"sj":true,"sk":true,"sl":true,"com.sl":true,"net.sl":true,"edu.sl":true,"gov.sl":true,"org.sl":true,"sm":true,"sn":true,"art.sn":true,"com.sn":true,"edu.sn":true,"gouv.sn":true,"org.sn":true,"perso.sn":true,"univ.sn":true,"so":true,"com.so":true,"net.so":true,"org.so":true,"sr":true,"st":true,"co.st":true,"com.st":true,"consulado.st":true,"edu.st":true,"embaixada.st":true,"gov.st":true,"mil.st":true,"net.st":true,"org.st":true,"principe.st":true,"saotome.st":true,"store.st":true,"su":true,"adygeya.su":true,"arkhangelsk.su":true,"balashov.su":true,"bashkiria.su":true,"bryansk.su":true,"dagestan.su":true,"grozny.su":true,"ivanovo.su":true,"kalmykia.su":true,"kaluga.su":true,"karelia.su":true,"khakassia.su":true,"krasnodar.su":true,"kurgan.su":true,"lenug.su":true,"mordovia.su":true,"msk.su":true,"murmansk.su":true,"nalchik.su":true,"nov.su":true,"obninsk.su":true,"penza.su":true,"pokrovsk.su":true,"sochi.su":true,"spb.su":true,"togliatti.su":true,"troitsk.su":true,"tula.su":true,"tuva.su":true,"vladikavkaz.su":true,"vladimir.su":true,"vologda.su":true,"sv":true,"com.sv":true,"edu.sv":true,"gob.sv":true,"org.sv":true,"red.sv":true,"sx":true,"gov.sx":true,"sy":true,"edu.sy":true,"gov.sy":true,"net.sy":true,"mil.sy":true,"com.sy":true,"org.sy":true,"sz":true,"co.sz":true,"ac.sz":true,"org.sz":true,"tc":true,"td":true,"tel":true,"tf":true,"tg":true,"th":true,"ac.th":true,"co.th":true,"go.th":true,"in.th":true,"mi.th":true,"net.th":true,"or.th":true,"tj":true,"ac.tj":true,"biz.tj":true,"co.tj":true,"com.tj":true,"edu.tj":true,"go.tj":true,"gov.tj":true,"int.tj":true,"mil.tj":true,"name.tj":true,"net.tj":true,"nic.tj":true,"org.tj":true,"test.tj":true,"web.tj":true,"tk":true,"tl":true,"gov.tl":true,"tm":true,"com.tm":true,"co.tm":true,"org.tm":true,"net.tm":true,"nom.tm":true,"gov.tm":true,"mil.tm":true,"edu.tm":true,"tn":true,"com.tn":true,"ens.tn":true,"fin.tn":true,"gov.tn":true,"ind.tn":true,"intl.tn":true,"nat.tn":true,"net.tn":true,"org.tn":true,"info.tn":true,"perso.tn":true,"tourism.tn":true,"edunet.tn":true,"rnrt.tn":true,"rns.tn":true,"rnu.tn":true,"mincom.tn":true,"agrinet.tn":true,"defense.tn":true,"turen.tn":true,"to":true,"com.to":true,"gov.to":true,"net.to":true,"org.to":true,"edu.to":true,"mil.to":true,"tp":true,"tr":true,"com.tr":true,"info.tr":true,"biz.tr":true,"net.tr":true,"org.tr":true,"web.tr":true,"gen.tr":true,"tv.tr":true,"av.tr":true,"dr.tr":true,"bbs.tr":true,"name.tr":true,"tel.tr":true,"gov.tr":true,"bel.tr":true,"pol.tr":true,"mil.tr":true,"k12.tr":true,"edu.tr":true,"kep.tr":true,"nc.tr":true,"gov.nc.tr":true,"travel":true,"tt":true,"co.tt":true,"com.tt":true,"org.tt":true,"net.tt":true,"biz.tt":true,"info.tt":true,"pro.tt":true,"int.tt":true,"coop.tt":true,"jobs.tt":true,"mobi.tt":true,"travel.tt":true,"museum.tt":true,"aero.tt":true,"name.tt":true,"gov.tt":true,"edu.tt":true,"tv":true,"tw":true,"edu.tw":true,"gov.tw":true,"mil.tw":true,"com.tw":true,"net.tw":true,"org.tw":true,"idv.tw":true,"game.tw":true,"ebiz.tw":true,"club.tw":true,"xn--zf0ao64a.tw":true,"xn--uc0atv.tw":true,"xn--czrw28b.tw":true,"tz":true,"ac.tz":true,"co.tz":true,"go.tz":true,"hotel.tz":true,"info.tz":true,"me.tz":true,"mil.tz":true,"mobi.tz":true,"ne.tz":true,"or.tz":true,"sc.tz":true,"tv.tz":true,"ua":true,"com.ua":true,"edu.ua":true,"gov.ua":true,"in.ua":true,"net.ua":true,"org.ua":true,"cherkassy.ua":true,"cherkasy.ua":true,"chernigov.ua":true,"chernihiv.ua":true,"chernivtsi.ua":true,"chernovtsy.ua":true,"ck.ua":true,"cn.ua":true,"cr.ua":true,"crimea.ua":true,"cv.ua":true,"dn.ua":true,"dnepropetrovsk.ua":true,"dnipropetrovsk.ua":true,"dominic.ua":true,"donetsk.ua":true,"dp.ua":true,"if.ua":true,"ivano-frankivsk.ua":true,"kh.ua":true,"kharkiv.ua":true,"kharkov.ua":true,"kherson.ua":true,"khmelnitskiy.ua":true,"khmelnytskyi.ua":true,"kiev.ua":true,"kirovograd.ua":true,"km.ua":true,"kr.ua":true,"krym.ua":true,"ks.ua":true,"kv.ua":true,"kyiv.ua":true,"lg.ua":true,"lt.ua":true,"lugansk.ua":true,"lutsk.ua":true,"lv.ua":true,"lviv.ua":true,"mk.ua":true,"mykolaiv.ua":true,"nikolaev.ua":true,"od.ua":true,"odesa.ua":true,"odessa.ua":true,"pl.ua":true,"poltava.ua":true,"rivne.ua":true,"rovno.ua":true,"rv.ua":true,"sb.ua":true,"sebastopol.ua":true,"sevastopol.ua":true,"sm.ua":true,"sumy.ua":true,"te.ua":true,"ternopil.ua":true,"uz.ua":true,"uzhgorod.ua":true,"vinnica.ua":true,"vinnytsia.ua":true,"vn.ua":true,"volyn.ua":true,"yalta.ua":true,"zaporizhzhe.ua":true,"zaporizhzhia.ua":true,"zhitomir.ua":true,"zhytomyr.ua":true,"zp.ua":true,"zt.ua":true,"ug":true,"co.ug":true,"or.ug":true,"ac.ug":true,"sc.ug":true,"go.ug":true,"ne.ug":true,"com.ug":true,"org.ug":true,"uk":true,"ac.uk":true,"co.uk":true,"gov.uk":true,"ltd.uk":true,"me.uk":true,"net.uk":true,"nhs.uk":true,"org.uk":true,"plc.uk":true,"police.uk":true,"*.sch.uk":true,"us":true,"dni.us":true,"fed.us":true,"isa.us":true,"kids.us":true,"nsn.us":true,"ak.us":true,"al.us":true,"ar.us":true,"as.us":true,"az.us":true,"ca.us":true,"co.us":true,"ct.us":true,"dc.us":true,"de.us":true,"fl.us":true,"ga.us":true,"gu.us":true,"hi.us":true,"ia.us":true,"id.us":true,"il.us":true,"in.us":true,"ks.us":true,"ky.us":true,"la.us":true,"ma.us":true,"md.us":true,"me.us":true,"mi.us":true,"mn.us":true,"mo.us":true,"ms.us":true,"mt.us":true,"nc.us":true,"nd.us":true,"ne.us":true,"nh.us":true,"nj.us":true,"nm.us":true,"nv.us":true,"ny.us":true,"oh.us":true,"ok.us":true,"or.us":true,"pa.us":true,"pr.us":true,"ri.us":true,"sc.us":true,"sd.us":true,"tn.us":true,"tx.us":true,"ut.us":true,"vi.us":true,"vt.us":true,"va.us":true,"wa.us":true,"wi.us":true,"wv.us":true,"wy.us":true,"k12.ak.us":true,"k12.al.us":true,"k12.ar.us":true,"k12.as.us":true,"k12.az.us":true,"k12.ca.us":true,"k12.co.us":true,"k12.ct.us":true,"k12.dc.us":true,"k12.de.us":true,"k12.fl.us":true,"k12.ga.us":true,"k12.gu.us":true,"k12.ia.us":true,"k12.id.us":true,"k12.il.us":true,"k12.in.us":true,"k12.ks.us":true,"k12.ky.us":true,"k12.la.us":true,"k12.ma.us":true,"k12.md.us":true,"k12.me.us":true,"k12.mi.us":true,"k12.mn.us":true,"k12.mo.us":true,"k12.ms.us":true,"k12.mt.us":true,"k12.nc.us":true,"k12.ne.us":true,"k12.nh.us":true,"k12.nj.us":true,"k12.nm.us":true,"k12.nv.us":true,"k12.ny.us":true,"k12.oh.us":true,"k12.ok.us":true,"k12.or.us":true,"k12.pa.us":true,"k12.pr.us":true,"k12.ri.us":true,"k12.sc.us":true,"k12.tn.us":true,"k12.tx.us":true,"k12.ut.us":true,"k12.vi.us":true,"k12.vt.us":true,"k12.va.us":true,"k12.wa.us":true,"k12.wi.us":true,"k12.wy.us":true,"cc.ak.us":true,"cc.al.us":true,"cc.ar.us":true,"cc.as.us":true,"cc.az.us":true,"cc.ca.us":true,"cc.co.us":true,"cc.ct.us":true,"cc.dc.us":true,"cc.de.us":true,"cc.fl.us":true,"cc.ga.us":true,"cc.gu.us":true,"cc.hi.us":true,"cc.ia.us":true,"cc.id.us":true,"cc.il.us":true,"cc.in.us":true,"cc.ks.us":true,"cc.ky.us":true,"cc.la.us":true,"cc.ma.us":true,"cc.md.us":true,"cc.me.us":true,"cc.mi.us":true,"cc.mn.us":true,"cc.mo.us":true,"cc.ms.us":true,"cc.mt.us":true,"cc.nc.us":true,"cc.nd.us":true,"cc.ne.us":true,"cc.nh.us":true,"cc.nj.us":true,"cc.nm.us":true,"cc.nv.us":true,"cc.ny.us":true,"cc.oh.us":true,"cc.ok.us":true,"cc.or.us":true,"cc.pa.us":true,"cc.pr.us":true,"cc.ri.us":true,"cc.sc.us":true,"cc.sd.us":true,"cc.tn.us":true,"cc.tx.us":true,"cc.ut.us":true,"cc.vi.us":true,"cc.vt.us":true,"cc.va.us":true,"cc.wa.us":true,"cc.wi.us":true,"cc.wv.us":true,"cc.wy.us":true,"lib.ak.us":true,"lib.al.us":true,"lib.ar.us":true,"lib.as.us":true,"lib.az.us":true,"lib.ca.us":true,"lib.co.us":true,"lib.ct.us":true,"lib.dc.us":true,"lib.de.us":true,"lib.fl.us":true,"lib.ga.us":true,"lib.gu.us":true,"lib.hi.us":true,"lib.ia.us":true,"lib.id.us":true,"lib.il.us":true,"lib.in.us":true,"lib.ks.us":true,"lib.ky.us":true,"lib.la.us":true,"lib.ma.us":true,"lib.md.us":true,"lib.me.us":true,"lib.mi.us":true,"lib.mn.us":true,"lib.mo.us":true,"lib.ms.us":true,"lib.mt.us":true,"lib.nc.us":true,"lib.nd.us":true,"lib.ne.us":true,"lib.nh.us":true,"lib.nj.us":true,"lib.nm.us":true,"lib.nv.us":true,"lib.ny.us":true,"lib.oh.us":true,"lib.ok.us":true,"lib.or.us":true,"lib.pa.us":true,"lib.pr.us":true,"lib.ri.us":true,"lib.sc.us":true,"lib.sd.us":true,"lib.tn.us":true,"lib.tx.us":true,"lib.ut.us":true,"lib.vi.us":true,"lib.vt.us":true,"lib.va.us":true,"lib.wa.us":true,"lib.wi.us":true,"lib.wy.us":true,"pvt.k12.ma.us":true,"chtr.k12.ma.us":true,"paroch.k12.ma.us":true,"uy":true,"com.uy":true,"edu.uy":true,"gub.uy":true,"mil.uy":true,"net.uy":true,"org.uy":true,"uz":true,"co.uz":true,"com.uz":true,"net.uz":true,"org.uz":true,"va":true,"vc":true,"com.vc":true,"net.vc":true,"org.vc":true,"gov.vc":true,"mil.vc":true,"edu.vc":true,"ve":true,"arts.ve":true,"co.ve":true,"com.ve":true,"e12.ve":true,"edu.ve":true,"firm.ve":true,"gob.ve":true,"gov.ve":true,"info.ve":true,"int.ve":true,"mil.ve":true,"net.ve":true,"org.ve":true,"rec.ve":true,"store.ve":true,"tec.ve":true,"web.ve":true,"vg":true,"vi":true,"co.vi":true,"com.vi":true,"k12.vi":true,"net.vi":true,"org.vi":true,"vn":true,"com.vn":true,"net.vn":true,"org.vn":true,"edu.vn":true,"gov.vn":true,"int.vn":true,"ac.vn":true,"biz.vn":true,"info.vn":true,"name.vn":true,"pro.vn":true,"health.vn":true,"vu":true,"com.vu":true,"edu.vu":true,"net.vu":true,"org.vu":true,"wf":true,"ws":true,"com.ws":true,"net.ws":true,"org.ws":true,"gov.ws":true,"edu.ws":true,"yt":true,"xn--mgbaam7a8h":true,"xn--y9a3aq":true,"xn--54b7fta0cc":true,"xn--90ais":true,"xn--fiqs8s":true,"xn--fiqz9s":true,"xn--lgbbat1ad8j":true,"xn--wgbh1c":true,"xn--node":true,"xn--qxam":true,"xn--j6w193g":true,"xn--h2brj9c":true,"xn--mgbbh1a71e":true,"xn--fpcrj9c3d":true,"xn--gecrj9c":true,"xn--s9brj9c":true,"xn--45brj9c":true,"xn--xkc2dl3a5ee0h":true,"xn--mgba3a4f16a":true,"xn--mgba3a4fra":true,"xn--mgbtx2b":true,"xn--mgbayh7gpa":true,"xn--3e0b707e":true,"xn--80ao21a":true,"xn--fzc2c9e2c":true,"xn--xkc2al3hye2a":true,"xn--mgbc0a9azcg":true,"xn--d1alf":true,"xn--l1acc":true,"xn--mix891f":true,"xn--mix082f":true,"xn--mgbx4cd0ab":true,"xn--mgb9awbf":true,"xn--mgbai9azgqp6j":true,"xn--mgbai9a5eva00b":true,"xn--ygbi2ammx":true,"xn--90a3ac":true,"xn--o1ac.xn--90a3ac":true,"xn--c1avg.xn--90a3ac":true,"xn--90azh.xn--90a3ac":true,"xn--d1at.xn--90a3ac":true,"xn--o1ach.xn--90a3ac":true,"xn--80au.xn--90a3ac":true,"xn--p1ai":true,"xn--wgbl6a":true,"xn--mgberp4a5d4ar":true,"xn--mgberp4a5d4a87g":true,"xn--mgbqly7c0a67fbc":true,"xn--mgbqly7cvafr":true,"xn--mgbpl2fh":true,"xn--yfro4i67o":true,"xn--clchc0ea0b2g2a9gcd":true,"xn--ogbpf8fl":true,"xn--mgbtf8fl":true,"xn--o3cw4h":true,"xn--pgbs0dh":true,"xn--kpry57d":true,"xn--kprw13d":true,"xn--nnx388a":true,"xn--j1amh":true,"xn--mgb2ddes":true,"xxx":true,"*.ye":true,"ac.za":true,"agrica.za":true,"alt.za":true,"co.za":true,"edu.za":true,"gov.za":true,"grondar.za":true,"law.za":true,"mil.za":true,"net.za":true,"ngo.za":true,"nis.za":true,"nom.za":true,"org.za":true,"school.za":true,"tm.za":true,"web.za":true,"*.zm":true,"*.zw":true,"aaa":true,"aarp":true,"abarth":true,"abb":true,"abbott":true,"abbvie":true,"abc":true,"able":true,"abogado":true,"abudhabi":true,"academy":true,"accenture":true,"accountant":true,"accountants":true,"aco":true,"active":true,"actor":true,"adac":true,"ads":true,"adult":true,"aeg":true,"aetna":true,"afamilycompany":true,"afl":true,"africa":true,"africamagic":true,"agakhan":true,"agency":true,"aig":true,"aigo":true,"airbus":true,"airforce":true,"airtel":true,"akdn":true,"alfaromeo":true,"alibaba":true,"alipay":true,"allfinanz":true,"allstate":true,"ally":true,"alsace":true,"alstom":true,"americanexpress":true,"americanfamily":true,"amex":true,"amfam":true,"amica":true,"amsterdam":true,"analytics":true,"android":true,"anquan":true,"anz":true,"aol":true,"apartments":true,"app":true,"apple":true,"aquarelle":true,"aramco":true,"archi":true,"army":true,"arte":true,"asda":true,"associates":true,"athleta":true,"attorney":true,"auction":true,"audi":true,"audible":true,"audio":true,"auspost":true,"author":true,"auto":true,"autos":true,"avianca":true,"aws":true,"axa":true,"azure":true,"baby":true,"baidu":true,"banamex":true,"bananarepublic":true,"band":true,"bank":true,"bar":true,"barcelona":true,"barclaycard":true,"barclays":true,"barefoot":true,"bargains":true,"basketball":true,"bauhaus":true,"bayern":true,"bbc":true,"bbt":true,"bbva":true,"bcg":true,"bcn":true,"beats":true,"beer":true,"bentley":true,"berlin":true,"best":true,"bestbuy":true,"bet":true,"bharti":true,"bible":true,"bid":true,"bike":true,"bing":true,"bingo":true,"bio":true,"black":true,"blackfriday":true,"blanco":true,"blockbuster":true,"blog":true,"bloomberg":true,"blue":true,"bms":true,"bmw":true,"bnl":true,"bnpparibas":true,"boats":true,"boehringer":true,"bofa":true,"bom":true,"bond":true,"boo":true,"book":true,"booking":true,"boots":true,"bosch":true,"bostik":true,"bot":true,"boutique":true,"bradesco":true,"bridgestone":true,"broadway":true,"broker":true,"brother":true,"brussels":true,"budapest":true,"bugatti":true,"build":true,"builders":true,"business":true,"buy":true,"buzz":true,"bzh":true,"cab":true,"cafe":true,"cal":true,"call":true,"calvinklein":true,"camera":true,"camp":true,"cancerresearch":true,"canon":true,"capetown":true,"capital":true,"capitalone":true,"car":true,"caravan":true,"cards":true,"care":true,"career":true,"careers":true,"cars":true,"cartier":true,"casa":true,"case":true,"caseih":true,"cash":true,"casino":true,"catering":true,"cba":true,"cbn":true,"cbre":true,"cbs":true,"ceb":true,"center":true,"ceo":true,"cern":true,"cfa":true,"cfd":true,"chanel":true,"channel":true,"chase":true,"chat":true,"cheap":true,"chintai":true,"chloe":true,"christmas":true,"chrome":true,"chrysler":true,"church":true,"cipriani":true,"circle":true,"cisco":true,"citadel":true,"citi":true,"citic":true,"city":true,"cityeats":true,"claims":true,"cleaning":true,"click":true,"clinic":true,"clothing":true,"cloud":true,"club":true,"clubmed":true,"coach":true,"codes":true,"coffee":true,"college":true,"cologne":true,"comcast":true,"commbank":true,"community":true,"company":true,"computer":true,"comsec":true,"condos":true,"construction":true,"consulting":true,"contact":true,"contractors":true,"cooking":true,"cookingchannel":true,"cool":true,"corsica":true,"country":true,"coupon":true,"coupons":true,"courses":true,"credit":true,"creditcard":true,"creditunion":true,"cricket":true,"crown":true,"crs":true,"cruises":true,"csc":true,"cuisinella":true,"cymru":true,"cyou":true,"dabur":true,"dad":true,"dance":true,"date":true,"dating":true,"datsun":true,"day":true,"dclk":true,"dds":true,"deal":true,"dealer":true,"deals":true,"degree":true,"delivery":true,"dell":true,"deloitte":true,"delta":true,"democrat":true,"dental":true,"dentist":true,"desi":true,"design":true,"dev":true,"dhl":true,"diamonds":true,"diet":true,"digital":true,"direct":true,"directory":true,"discount":true,"discover":true,"dish":true,"dnp":true,"docs":true,"dodge":true,"dog":true,"doha":true,"domains":true,"doosan":true,"dot":true,"download":true,"drive":true,"dstv":true,"dtv":true,"dubai":true,"duck":true,"dunlop":true,"duns":true,"dupont":true,"durban":true,"dvag":true,"dwg":true,"earth":true,"eat":true,"edeka":true,"education":true,"email":true,"emerck":true,"emerson":true,"energy":true,"engineer":true,"engineering":true,"enterprises":true,"epost":true,"epson":true,"equipment":true,"ericsson":true,"erni":true,"esq":true,"estate":true,"esurance":true,"etisalat":true,"eurovision":true,"eus":true,"events":true,"everbank":true,"exchange":true,"expert":true,"exposed":true,"express":true,"extraspace":true,"fage":true,"fail":true,"fairwinds":true,"faith":true,"family":true,"fan":true,"fans":true,"farm":true,"farmers":true,"fashion":true,"fast":true,"fedex":true,"feedback":true,"ferrari":true,"ferrero":true,"fiat":true,"fidelity":true,"fido":true,"film":true,"final":true,"finance":true,"financial":true,"fire":true,"firestone":true,"firmdale":true,"fish":true,"fishing":true,"fit":true,"fitness":true,"flickr":true,"flights":true,"flir":true,"florist":true,"flowers":true,"flsmidth":true,"fly":true,"foo":true,"foodnetwork":true,"football":true,"ford":true,"forex":true,"forsale":true,"forum":true,"foundation":true,"fox":true,"fresenius":true,"frl":true,"frogans":true,"frontdoor":true,"frontier":true,"ftr":true,"fujitsu":true,"fujixerox":true,"fund":true,"furniture":true,"futbol":true,"fyi":true,"gal":true,"gallery":true,"gallo":true,"gallup":true,"game":true,"games":true,"gap":true,"garden":true,"gbiz":true,"gdn":true,"gea":true,"gent":true,"genting":true,"george":true,"ggee":true,"gift":true,"gifts":true,"gives":true,"giving":true,"glade":true,"glass":true,"gle":true,"global":true,"globo":true,"gmail":true,"gmo":true,"gmx":true,"godaddy":true,"gold":true,"goldpoint":true,"golf":true,"goo":true,"goodhands":true,"goodyear":true,"goog":true,"google":true,"gop":true,"got":true,"gotv":true,"grainger":true,"graphics":true,"gratis":true,"green":true,"gripe":true,"group":true,"guardian":true,"gucci":true,"guge":true,"guide":true,"guitars":true,"guru":true,"hamburg":true,"hangout":true,"haus":true,"hbo":true,"hdfc":true,"hdfcbank":true,"health":true,"healthcare":true,"help":true,"helsinki":true,"here":true,"hermes":true,"hgtv":true,"hiphop":true,"hisamitsu":true,"hitachi":true,"hiv":true,"hkt":true,"hockey":true,"holdings":true,"holiday":true,"homedepot":true,"homegoods":true,"homes":true,"homesense":true,"honda":true,"honeywell":true,"horse":true,"host":true,"hosting":true,"hot":true,"hoteles":true,"hotmail":true,"house":true,"how":true,"hsbc":true,"htc":true,"hughes":true,"hyatt":true,"hyundai":true,"ibm":true,"icbc":true,"ice":true,"icu":true,"ieee":true,"ifm":true,"iinet":true,"ikano":true,"imamat":true,"imdb":true,"immo":true,"immobilien":true,"industries":true,"infiniti":true,"ing":true,"ink":true,"institute":true,"insurance":true,"insure":true,"intel":true,"international":true,"intuit":true,"investments":true,"ipiranga":true,"irish":true,"iselect":true,"ismaili":true,"ist":true,"istanbul":true,"itau":true,"itv":true,"iveco":true,"iwc":true,"jaguar":true,"java":true,"jcb":true,"jcp":true,"jeep":true,"jetzt":true,"jewelry":true,"jio":true,"jlc":true,"jll":true,"jmp":true,"jnj":true,"joburg":true,"jot":true,"joy":true,"jpmorgan":true,"jprs":true,"juegos":true,"juniper":true,"kaufen":true,"kddi":true,"kerryhotels":true,"kerrylogistics":true,"kerryproperties":true,"kfh":true,"kia":true,"kim":true,"kinder":true,"kindle":true,"kitchen":true,"kiwi":true,"koeln":true,"komatsu":true,"kosher":true,"kpmg":true,"kpn":true,"krd":true,"kred":true,"kuokgroup":true,"kyknet":true,"kyoto":true,"lacaixa":true,"ladbrokes":true,"lamborghini":true,"lancaster":true,"lancia":true,"lancome":true,"land":true,"landrover":true,"lanxess":true,"lasalle":true,"lat":true,"latino":true,"latrobe":true,"law":true,"lawyer":true,"lds":true,"lease":true,"leclerc":true,"lefrak":true,"legal":true,"lego":true,"lexus":true,"lgbt":true,"liaison":true,"lidl":true,"life":true,"lifeinsurance":true,"lifestyle":true,"lighting":true,"like":true,"lilly":true,"limited":true,"limo":true,"lincoln":true,"linde":true,"link":true,"lipsy":true,"live":true,"living":true,"lixil":true,"loan":true,"loans":true,"locker":true,"locus":true,"loft":true,"lol":true,"london":true,"lotte":true,"lotto":true,"love":true,"lpl":true,"lplfinancial":true,"ltd":true,"ltda":true,"lundbeck":true,"lupin":true,"luxe":true,"luxury":true,"macys":true,"madrid":true,"maif":true,"maison":true,"makeup":true,"man":true,"management":true,"mango":true,"market":true,"marketing":true,"markets":true,"marriott":true,"marshalls":true,"maserati":true,"mattel":true,"mba":true,"mcd":true,"mcdonalds":true,"mckinsey":true,"med":true,"media":true,"meet":true,"melbourne":true,"meme":true,"memorial":true,"men":true,"menu":true,"meo":true,"metlife":true,"miami":true,"microsoft":true,"mini":true,"mint":true,"mit":true,"mitsubishi":true,"mlb":true,"mls":true,"mma":true,"mnet":true,"mobily":true,"moda":true,"moe":true,"moi":true,"mom":true,"monash":true,"money":true,"monster":true,"montblanc":true,"mopar":true,"mormon":true,"mortgage":true,"moscow":true,"moto":true,"motorcycles":true,"mov":true,"movie":true,"movistar":true,"msd":true,"mtn":true,"mtpc":true,"mtr":true,"multichoice":true,"mutual":true,"mutuelle":true,"mzansimagic":true,"nab":true,"nadex":true,"nagoya":true,"naspers":true,"nationwide":true,"natura":true,"navy":true,"nba":true,"nec":true,"netbank":true,"netflix":true,"network":true,"neustar":true,"new":true,"newholland":true,"news":true,"next":true,"nextdirect":true,"nexus":true,"nfl":true,"ngo":true,"nhk":true,"nico":true,"nike":true,"nikon":true,"ninja":true,"nissan":true,"nokia":true,"northwesternmutual":true,"norton":true,"now":true,"nowruz":true,"nowtv":true,"nra":true,"nrw":true,"ntt":true,"nyc":true,"obi":true,"observer":true,"off":true,"office":true,"okinawa":true,"olayan":true,"olayangroup":true,"oldnavy":true,"ollo":true,"omega":true,"one":true,"ong":true,"onl":true,"online":true,"onyourside":true,"ooo":true,"open":true,"oracle":true,"orange":true,"organic":true,"orientexpress":true,"osaka":true,"otsuka":true,"ott":true,"ovh":true,"page":true,"pamperedchef":true,"panasonic":true,"panerai":true,"paris":true,"pars":true,"partners":true,"parts":true,"party":true,"passagens":true,"pay":true,"payu":true,"pccw":true,"pet":true,"pfizer":true,"pharmacy":true,"philips":true,"photo":true,"photography":true,"photos":true,"physio":true,"piaget":true,"pics":true,"pictet":true,"pictures":true,"pid":true,"pin":true,"ping":true,"pink":true,"pioneer":true,"pizza":true,"place":true,"play":true,"playstation":true,"plumbing":true,"plus":true,"pnc":true,"pohl":true,"poker":true,"politie":true,"porn":true,"pramerica":true,"praxi":true,"press":true,"prime":true,"prod":true,"productions":true,"prof":true,"progressive":true,"promo":true,"properties":true,"property":true,"protection":true,"pru":true,"prudential":true,"pub":true,"qpon":true,"quebec":true,"quest":true,"qvc":true,"racing":true,"raid":true,"read":true,"realestate":true,"realtor":true,"realty":true,"recipes":true,"red":true,"redstone":true,"redumbrella":true,"rehab":true,"reise":true,"reisen":true,"reit":true,"reliance":true,"ren":true,"rent":true,"rentals":true,"repair":true,"report":true,"republican":true,"rest":true,"restaurant":true,"review":true,"reviews":true,"rexroth":true,"rich":true,"richardli":true,"ricoh":true,"rightathome":true,"ril":true,"rio":true,"rip":true,"rocher":true,"rocks":true,"rodeo":true,"rogers":true,"room":true,"rsvp":true,"ruhr":true,"run":true,"rwe":true,"ryukyu":true,"saarland":true,"safe":true,"safety":true,"sakura":true,"sale":true,"salon":true,"samsclub":true,"samsung":true,"sandvik":true,"sandvikcoromant":true,"sanofi":true,"sap":true,"sapo":true,"sarl":true,"sas":true,"save":true,"saxo":true,"sbi":true,"sbs":true,"sca":true,"scb":true,"schaeffler":true,"schmidt":true,"scholarships":true,"school":true,"schule":true,"schwarz":true,"science":true,"scjohnson":true,"scor":true,"scot":true,"seat":true,"secure":true,"security":true,"seek":true,"sener":true,"services":true,"ses":true,"seven":true,"sew":true,"sex":true,"sexy":true,"sfr":true,"shangrila":true,"sharp":true,"shaw":true,"shell":true,"shia":true,"shiksha":true,"shoes":true,"shouji":true,"show":true,"showtime":true,"shriram":true,"silk":true,"sina":true,"singles":true,"site":true,"ski":true,"skin":true,"sky":true,"skype":true,"sling":true,"smart":true,"smile":true,"sncf":true,"soccer":true,"social":true,"softbank":true,"software":true,"sohu":true,"solar":true,"solutions":true,"song":true,"sony":true,"soy":true,"space":true,"spiegel":true,"spot":true,"spreadbetting":true,"srl":true,"srt":true,"stada":true,"staples":true,"star":true,"starhub":true,"statebank":true,"statefarm":true,"statoil":true,"stc":true,"stcgroup":true,"stockholm":true,"storage":true,"store":true,"studio":true,"study":true,"style":true,"sucks":true,"supersport":true,"supplies":true,"supply":true,"support":true,"surf":true,"surgery":true,"suzuki":true,"swatch":true,"swiftcover":true,"swiss":true,"sydney":true,"symantec":true,"systems":true,"tab":true,"taipei":true,"talk":true,"taobao":true,"target":true,"tatamotors":true,"tatar":true,"tattoo":true,"tax":true,"taxi":true,"tci":true,"tdk":true,"team":true,"tech":true,"technology":true,"telecity":true,"telefonica":true,"temasek":true,"tennis":true,"teva":true,"thd":true,"theater":true,"theatre":true,"theguardian":true,"tiaa":true,"tickets":true,"tienda":true,"tiffany":true,"tips":true,"tires":true,"tirol":true,"tjmaxx":true,"tjx":true,"tkmaxx":true,"tmall":true,"today":true,"tokyo":true,"tools":true,"top":true,"toray":true,"toshiba":true,"total":true,"tours":true,"town":true,"toyota":true,"toys":true,"trade":true,"trading":true,"training":true,"travelchannel":true,"travelers":true,"travelersinsurance":true,"trust":true,"trv":true,"tube":true,"tui":true,"tunes":true,"tushu":true,"tvs":true,"ubank":true,"ubs":true,"uconnect":true,"university":true,"uno":true,"uol":true,"ups":true,"vacations":true,"vana":true,"vanguard":true,"vegas":true,"ventures":true,"verisign":true,"versicherung":true,"vet":true,"viajes":true,"video":true,"vig":true,"viking":true,"villas":true,"vin":true,"vip":true,"virgin":true,"visa":true,"vision":true,"vista":true,"vistaprint":true,"viva":true,"vivo":true,"vlaanderen":true,"vodka":true,"volkswagen":true,"vote":true,"voting":true,"voto":true,"voyage":true,"vuelos":true,"wales":true,"walmart":true,"walter":true,"wang":true,"wanggou":true,"warman":true,"watch":true,"watches":true,"weather":true,"weatherchannel":true,"webcam":true,"weber":true,"website":true,"wed":true,"wedding":true,"weibo":true,"weir":true,"whoswho":true,"wien":true,"wiki":true,"williamhill":true,"win":true,"windows":true,"wine":true,"winners":true,"wme":true,"wolterskluwer":true,"woodside":true,"work":true,"works":true,"world":true,"wtc":true,"wtf":true,"xbox":true,"xerox":true,"xfinity":true,"xihuan":true,"xin":true,"xn--11b4c3d":true,"xn--1ck2e1b":true,"xn--1qqw23a":true,"xn--30rr7y":true,"xn--3bst00m":true,"xn--3ds443g":true,"xn--3oq18vl8pn36a":true,"xn--3pxu8k":true,"xn--42c2d9a":true,"xn--45q11c":true,"xn--4gbrim":true,"xn--4gq48lf9j":true,"xn--55qw42g":true,"xn--55qx5d":true,"xn--5su34j936bgsg":true,"xn--5tzm5g":true,"xn--6frz82g":true,"xn--6qq986b3xl":true,"xn--80adxhks":true,"xn--80asehdb":true,"xn--80aswg":true,"xn--8y0a063a":true,"xn--9dbq2a":true,"xn--9et52u":true,"xn--9krt00a":true,"xn--b4w605ferd":true,"xn--bck1b9a5dre4c":true,"xn--c1avg":true,"xn--c2br7g":true,"xn--cck2b3b":true,"xn--cg4bki":true,"xn--czr694b":true,"xn--czrs0t":true,"xn--czru2d":true,"xn--d1acj3b":true,"xn--eckvdtc9d":true,"xn--efvy88h":true,"xn--estv75g":true,"xn--fct429k":true,"xn--fhbei":true,"xn--fiq228c5hs":true,"xn--fiq64b":true,"xn--fjq720a":true,"xn--flw351e":true,"xn--fzys8d69uvgm":true,"xn--g2xx48c":true,"xn--gckr3f0f":true,"xn--hxt814e":true,"xn--i1b6b1a6a2e":true,"xn--imr513n":true,"xn--io0a7i":true,"xn--j1aef":true,"xn--jlq61u9w7b":true,"xn--jvr189m":true,"xn--kcrx77d1x4a":true,"xn--kpu716f":true,"xn--kput3i":true,"xn--mgba3a3ejt":true,"xn--mgba7c0bbn0a":true,"xn--mgbaakc7dvf":true,"xn--mgbab2bd":true,"xn--mgbb9fbpob":true,"xn--mgbca7dzdo":true,"xn--mgbt3dhd":true,"xn--mk1bu44c":true,"xn--mxtq1m":true,"xn--ngbc5azd":true,"xn--ngbe9e0a":true,"xn--nqv7f":true,"xn--nqv7fs00ema":true,"xn--nyqy26a":true,"xn--p1acf":true,"xn--pbt977c":true,"xn--pssy2u":true,"xn--q9jyb4c":true,"xn--qcka1pmc":true,"xn--rhqv96g":true,"xn--rovu88b":true,"xn--ses554g":true,"xn--t60b56a":true,"xn--tckwe":true,"xn--unup4y":true,"xn--vermgensberater-ctb":true,"xn--vermgensberatung-pwb":true,"xn--vhquv":true,"xn--vuq861b":true,"xn--w4r85el8fhu5dnra":true,"xn--w4rs40l":true,"xn--xhq521b":true,"xn--zfr164b":true,"xperia":true,"xyz":true,"yachts":true,"yahoo":true,"yamaxun":true,"yandex":true,"yodobashi":true,"yoga":true,"yokohama":true,"you":true,"youtube":true,"yun":true,"zappos":true,"zara":true,"zero":true,"zip":true,"zippo":true,"zone":true,"zuerich":true,"cloudfront.net":true,"ap-northeast-1.compute.amazonaws.com":true,"ap-southeast-1.compute.amazonaws.com":true,"ap-southeast-2.compute.amazonaws.com":true,"cn-north-1.compute.amazonaws.cn":true,"compute.amazonaws.cn":true,"compute.amazonaws.com":true,"compute-1.amazonaws.com":true,"eu-west-1.compute.amazonaws.com":true,"eu-central-1.compute.amazonaws.com":true,"sa-east-1.compute.amazonaws.com":true,"us-east-1.amazonaws.com":true,"us-gov-west-1.compute.amazonaws.com":true,"us-west-1.compute.amazonaws.com":true,"us-west-2.compute.amazonaws.com":true,"z-1.compute-1.amazonaws.com":true,"z-2.compute-1.amazonaws.com":true,"elasticbeanstalk.com":true,"elb.amazonaws.com":true,"s3.amazonaws.com":true,"s3-ap-northeast-1.amazonaws.com":true,"s3-ap-southeast-1.amazonaws.com":true,"s3-ap-southeast-2.amazonaws.com":true,"s3-external-1.amazonaws.com":true,"s3-external-2.amazonaws.com":true,"s3-fips-us-gov-west-1.amazonaws.com":true,"s3-eu-central-1.amazonaws.com":true,"s3-eu-west-1.amazonaws.com":true,"s3-sa-east-1.amazonaws.com":true,"s3-us-gov-west-1.amazonaws.com":true,"s3-us-west-1.amazonaws.com":true,"s3-us-west-2.amazonaws.com":true,"s3.cn-north-1.amazonaws.com.cn":true,"s3.eu-central-1.amazonaws.com":true,"betainabox.com":true,"ae.org":true,"ar.com":true,"br.com":true,"cn.com":true,"com.de":true,"com.se":true,"de.com":true,"eu.com":true,"gb.com":true,"gb.net":true,"hu.com":true,"hu.net":true,"jp.net":true,"jpn.com":true,"kr.com":true,"mex.com":true,"no.com":true,"qc.com":true,"ru.com":true,"sa.com":true,"se.com":true,"se.net":true,"uk.com":true,"uk.net":true,"us.com":true,"uy.com":true,"za.bz":true,"za.com":true,"africa.com":true,"gr.com":true,"in.net":true,"us.org":true,"co.com":true,"c.la":true,"cloudcontrolled.com":true,"cloudcontrolapp.com":true,"co.ca":true,"c.cdn77.org":true,"cdn77-ssl.net":true,"r.cdn77.net":true,"rsc.cdn77.org":true,"ssl.origin.cdn77-secure.org":true,"co.nl":true,"co.no":true,"*.platform.sh":true,"cupcake.is":true,"dreamhosters.com":true,"duckdns.org":true,"dyndns-at-home.com":true,"dyndns-at-work.com":true,"dyndns-blog.com":true,"dyndns-free.com":true,"dyndns-home.com":true,"dyndns-ip.com":true,"dyndns-mail.com":true,"dyndns-office.com":true,"dyndns-pics.com":true,"dyndns-remote.com":true,"dyndns-server.com":true,"dyndns-web.com":true,"dyndns-wiki.com":true,"dyndns-work.com":true,"dyndns.biz":true,"dyndns.info":true,"dyndns.org":true,"dyndns.tv":true,"at-band-camp.net":true,"ath.cx":true,"barrel-of-knowledge.info":true,"barrell-of-knowledge.info":true,"better-than.tv":true,"blogdns.com":true,"blogdns.net":true,"blogdns.org":true,"blogsite.org":true,"boldlygoingnowhere.org":true,"broke-it.net":true,"buyshouses.net":true,"cechire.com":true,"dnsalias.com":true,"dnsalias.net":true,"dnsalias.org":true,"dnsdojo.com":true,"dnsdojo.net":true,"dnsdojo.org":true,"does-it.net":true,"doesntexist.com":true,"doesntexist.org":true,"dontexist.com":true,"dontexist.net":true,"dontexist.org":true,"doomdns.com":true,"doomdns.org":true,"dvrdns.org":true,"dyn-o-saur.com":true,"dynalias.com":true,"dynalias.net":true,"dynalias.org":true,"dynathome.net":true,"dyndns.ws":true,"endofinternet.net":true,"endofinternet.org":true,"endoftheinternet.org":true,"est-a-la-maison.com":true,"est-a-la-masion.com":true,"est-le-patron.com":true,"est-mon-blogueur.com":true,"for-better.biz":true,"for-more.biz":true,"for-our.info":true,"for-some.biz":true,"for-the.biz":true,"forgot.her.name":true,"forgot.his.name":true,"from-ak.com":true,"from-al.com":true,"from-ar.com":true,"from-az.net":true,"from-ca.com":true,"from-co.net":true,"from-ct.com":true,"from-dc.com":true,"from-de.com":true,"from-fl.com":true,"from-ga.com":true,"from-hi.com":true,"from-ia.com":true,"from-id.com":true,"from-il.com":true,"from-in.com":true,"from-ks.com":true,"from-ky.com":true,"from-la.net":true,"from-ma.com":true,"from-md.com":true,"from-me.org":true,"from-mi.com":true,"from-mn.com":true,"from-mo.com":true,"from-ms.com":true,"from-mt.com":true,"from-nc.com":true,"from-nd.com":true,"from-ne.com":true,"from-nh.com":true,"from-nj.com":true,"from-nm.com":true,"from-nv.com":true,"from-ny.net":true,"from-oh.com":true,"from-ok.com":true,"from-or.com":true,"from-pa.com":true,"from-pr.com":true,"from-ri.com":true,"from-sc.com":true,"from-sd.com":true,"from-tn.com":true,"from-tx.com":true,"from-ut.com":true,"from-va.com":true,"from-vt.com":true,"from-wa.com":true,"from-wi.com":true,"from-wv.com":true,"from-wy.com":true,"ftpaccess.cc":true,"fuettertdasnetz.de":true,"game-host.org":true,"game-server.cc":true,"getmyip.com":true,"gets-it.net":true,"go.dyndns.org":true,"gotdns.com":true,"gotdns.org":true,"groks-the.info":true,"groks-this.info":true,"ham-radio-op.net":true,"here-for-more.info":true,"hobby-site.com":true,"hobby-site.org":true,"home.dyndns.org":true,"homedns.org":true,"homeftp.net":true,"homeftp.org":true,"homeip.net":true,"homelinux.com":true,"homelinux.net":true,"homelinux.org":true,"homeunix.com":true,"homeunix.net":true,"homeunix.org":true,"iamallama.com":true,"in-the-band.net":true,"is-a-anarchist.com":true,"is-a-blogger.com":true,"is-a-bookkeeper.com":true,"is-a-bruinsfan.org":true,"is-a-bulls-fan.com":true,"is-a-candidate.org":true,"is-a-caterer.com":true,"is-a-celticsfan.org":true,"is-a-chef.com":true,"is-a-chef.net":true,"is-a-chef.org":true,"is-a-conservative.com":true,"is-a-cpa.com":true,"is-a-cubicle-slave.com":true,"is-a-democrat.com":true,"is-a-designer.com":true,"is-a-doctor.com":true,"is-a-financialadvisor.com":true,"is-a-geek.com":true,"is-a-geek.net":true,"is-a-geek.org":true,"is-a-green.com":true,"is-a-guru.com":true,"is-a-hard-worker.com":true,"is-a-hunter.com":true,"is-a-knight.org":true,"is-a-landscaper.com":true,"is-a-lawyer.com":true,"is-a-liberal.com":true,"is-a-libertarian.com":true,"is-a-linux-user.org":true,"is-a-llama.com":true,"is-a-musician.com":true,"is-a-nascarfan.com":true,"is-a-nurse.com":true,"is-a-painter.com":true,"is-a-patsfan.org":true,"is-a-personaltrainer.com":true,"is-a-photographer.com":true,"is-a-player.com":true,"is-a-republican.com":true,"is-a-rockstar.com":true,"is-a-socialist.com":true,"is-a-soxfan.org":true,"is-a-student.com":true,"is-a-teacher.com":true,"is-a-techie.com":true,"is-a-therapist.com":true,"is-an-accountant.com":true,"is-an-actor.com":true,"is-an-actress.com":true,"is-an-anarchist.com":true,"is-an-artist.com":true,"is-an-engineer.com":true,"is-an-entertainer.com":true,"is-by.us":true,"is-certified.com":true,"is-found.org":true,"is-gone.com":true,"is-into-anime.com":true,"is-into-cars.com":true,"is-into-cartoons.com":true,"is-into-games.com":true,"is-leet.com":true,"is-lost.org":true,"is-not-certified.com":true,"is-saved.org":true,"is-slick.com":true,"is-uberleet.com":true,"is-very-bad.org":true,"is-very-evil.org":true,"is-very-good.org":true,"is-very-nice.org":true,"is-very-sweet.org":true,"is-with-theband.com":true,"isa-geek.com":true,"isa-geek.net":true,"isa-geek.org":true,"isa-hockeynut.com":true,"issmarterthanyou.com":true,"isteingeek.de":true,"istmein.de":true,"kicks-ass.net":true,"kicks-ass.org":true,"knowsitall.info":true,"land-4-sale.us":true,"lebtimnetz.de":true,"leitungsen.de":true,"likes-pie.com":true,"likescandy.com":true,"merseine.nu":true,"mine.nu":true,"misconfused.org":true,"mypets.ws":true,"myphotos.cc":true,"neat-url.com":true,"office-on-the.net":true,"on-the-web.tv":true,"podzone.net":true,"podzone.org":true,"readmyblog.org":true,"saves-the-whales.com":true,"scrapper-site.net":true,"scrapping.cc":true,"selfip.biz":true,"selfip.com":true,"selfip.info":true,"selfip.net":true,"selfip.org":true,"sells-for-less.com":true,"sells-for-u.com":true,"sells-it.net":true,"sellsyourhome.org":true,"servebbs.com":true,"servebbs.net":true,"servebbs.org":true,"serveftp.net":true,"serveftp.org":true,"servegame.org":true,"shacknet.nu":true,"simple-url.com":true,"space-to-rent.com":true,"stuff-4-sale.org":true,"stuff-4-sale.us":true,"teaches-yoga.com":true,"thruhere.net":true,"traeumtgerade.de":true,"webhop.biz":true,"webhop.info":true,"webhop.net":true,"webhop.org":true,"worse-than.tv":true,"writesthisblog.com":true,"eu.org":true,"al.eu.org":true,"asso.eu.org":true,"at.eu.org":true,"au.eu.org":true,"be.eu.org":true,"bg.eu.org":true,"ca.eu.org":true,"cd.eu.org":true,"ch.eu.org":true,"cn.eu.org":true,"cy.eu.org":true,"cz.eu.org":true,"de.eu.org":true,"dk.eu.org":true,"edu.eu.org":true,"ee.eu.org":true,"es.eu.org":true,"fi.eu.org":true,"fr.eu.org":true,"gr.eu.org":true,"hr.eu.org":true,"hu.eu.org":true,"ie.eu.org":true,"il.eu.org":true,"in.eu.org":true,"int.eu.org":true,"is.eu.org":true,"it.eu.org":true,"jp.eu.org":true,"kr.eu.org":true,"lt.eu.org":true,"lu.eu.org":true,"lv.eu.org":true,"mc.eu.org":true,"me.eu.org":true,"mk.eu.org":true,"mt.eu.org":true,"my.eu.org":true,"net.eu.org":true,"ng.eu.org":true,"nl.eu.org":true,"no.eu.org":true,"nz.eu.org":true,"paris.eu.org":true,"pl.eu.org":true,"pt.eu.org":true,"q-a.eu.org":true,"ro.eu.org":true,"ru.eu.org":true,"se.eu.org":true,"si.eu.org":true,"sk.eu.org":true,"tr.eu.org":true,"uk.eu.org":true,"us.eu.org":true,"a.ssl.fastly.net":true,"b.ssl.fastly.net":true,"global.ssl.fastly.net":true,"a.prod.fastly.net":true,"global.prod.fastly.net":true,"firebaseapp.com":true,"flynnhub.com":true,"service.gov.uk":true,"github.io":true,"githubusercontent.com":true,"ro.com":true,"appspot.com":true,"blogspot.ae":true,"blogspot.al":true,"blogspot.am":true,"blogspot.ba":true,"blogspot.be":true,"blogspot.bg":true,"blogspot.bj":true,"blogspot.ca":true,"blogspot.cf":true,"blogspot.ch":true,"blogspot.cl":true,"blogspot.co.at":true,"blogspot.co.id":true,"blogspot.co.il":true,"blogspot.co.ke":true,"blogspot.co.nz":true,"blogspot.co.uk":true,"blogspot.co.za":true,"blogspot.com":true,"blogspot.com.ar":true,"blogspot.com.au":true,"blogspot.com.br":true,"blogspot.com.by":true,"blogspot.com.co":true,"blogspot.com.cy":true,"blogspot.com.ee":true,"blogspot.com.eg":true,"blogspot.com.es":true,"blogspot.com.mt":true,"blogspot.com.ng":true,"blogspot.com.tr":true,"blogspot.com.uy":true,"blogspot.cv":true,"blogspot.cz":true,"blogspot.de":true,"blogspot.dk":true,"blogspot.fi":true,"blogspot.fr":true,"blogspot.gr":true,"blogspot.hk":true,"blogspot.hr":true,"blogspot.hu":true,"blogspot.ie":true,"blogspot.in":true,"blogspot.is":true,"blogspot.it":true,"blogspot.jp":true,"blogspot.kr":true,"blogspot.li":true,"blogspot.lt":true,"blogspot.lu":true,"blogspot.md":true,"blogspot.mk":true,"blogspot.mr":true,"blogspot.mx":true,"blogspot.my":true,"blogspot.nl":true,"blogspot.no":true,"blogspot.pe":true,"blogspot.pt":true,"blogspot.qa":true,"blogspot.re":true,"blogspot.ro":true,"blogspot.rs":true,"blogspot.ru":true,"blogspot.se":true,"blogspot.sg":true,"blogspot.si":true,"blogspot.sk":true,"blogspot.sn":true,"blogspot.td":true,"blogspot.tw":true,"blogspot.ug":true,"blogspot.vn":true,"codespot.com":true,"googleapis.com":true,"googlecode.com":true,"pagespeedmobilizer.com":true,"withgoogle.com":true,"withyoutube.com":true,"herokuapp.com":true,"herokussl.com":true,"iki.fi":true,"biz.at":true,"info.at":true,"co.pl":true,"azurewebsites.net":true,"azure-mobile.net":true,"cloudapp.net":true,"bmoattachments.org":true,"4u.com":true,"nfshost.com":true,"nyc.mn":true,"nid.io":true,"operaunite.com":true,"outsystemscloud.com":true,"art.pl":true,"gliwice.pl":true,"krakow.pl":true,"poznan.pl":true,"wroc.pl":true,"zakopane.pl":true,"pantheon.io":true,"gotpantheon.com":true,"priv.at":true,"qa2.com":true,"rhcloud.com":true,"sandcats.io":true,"biz.ua":true,"co.ua":true,"pp.ua":true,"sinaapp.com":true,"vipsinaapp.com":true,"1kapp.com":true,"gda.pl":true,"gdansk.pl":true,"gdynia.pl":true,"med.pl":true,"sopot.pl":true,"hk.com":true,"hk.org":true,"ltd.hk":true,"inc.hk":true,"yolasite.com":true,"za.net":true,"za.org":true}); - -// END of automatically generated file diff --git a/node_modules/twit/node_modules/request/node_modules/tough-cookie/lib/store.js b/node_modules/twit/node_modules/request/node_modules/tough-cookie/lib/store.js deleted file mode 100644 index bce5292..0000000 --- a/node_modules/twit/node_modules/request/node_modules/tough-cookie/lib/store.js +++ /dev/null @@ -1,71 +0,0 @@ -/*! - * Copyright (c) 2015, Salesforce.com, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of Salesforce.com nor the names of its contributors may - * be used to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -'use strict'; -/*jshint unused:false */ - -function Store() { -} -exports.Store = Store; - -// Stores may be synchronous, but are still required to use a -// Continuation-Passing Style API. The CookieJar itself will expose a "*Sync" -// API that converts from synchronous-callbacks to imperative style. -Store.prototype.synchronous = false; - -Store.prototype.findCookie = function(domain, path, key, cb) { - throw new Error('findCookie is not implemented'); -}; - -Store.prototype.findCookies = function(domain, path, cb) { - throw new Error('findCookies is not implemented'); -}; - -Store.prototype.putCookie = function(cookie, cb) { - throw new Error('putCookie is not implemented'); -}; - -Store.prototype.updateCookie = function(oldCookie, newCookie, cb) { - // recommended default implementation: - // return this.putCookie(newCookie, cb); - throw new Error('updateCookie is not implemented'); -}; - -Store.prototype.removeCookie = function(domain, path, key, cb) { - throw new Error('removeCookie is not implemented'); -}; - -Store.prototype.removeCookies = function(domain, path, cb) { - throw new Error('removeCookies is not implemented'); -}; - -Store.prototype.getAllCookies = function(cb) { - throw new Error('getAllCookies is not implemented (therefore jar cannot be serialized)'); -}; diff --git a/node_modules/twit/node_modules/request/node_modules/tough-cookie/package.json b/node_modules/twit/node_modules/request/node_modules/tough-cookie/package.json deleted file mode 100644 index cb8266e..0000000 --- a/node_modules/twit/node_modules/request/node_modules/tough-cookie/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "author": { - "name": "Jeremy Stashewsky", - "email": "jstashewsky@salesforce.com" - }, - "contributors": [ - { - "name": "Alexander Savin" - }, - { - "name": "Ian Livingstone" - }, - { - "name": "Ivan Nikulin" - }, - { - "name": "Lalit Kapoor" - }, - { - "name": "Sam Thompson" - }, - { - "name": "Sebastian Mayr" - } - ], - "license": "BSD-3-Clause", - "name": "tough-cookie", - "description": "RFC6265 Cookies and Cookie Jar for node.js", - "keywords": [ - "HTTP", - "cookie", - "cookies", - "set-cookie", - "cookiejar", - "jar", - "RFC6265", - "RFC2965" - ], - "version": "2.2.2", - "homepage": "https://github.com/SalesforceEng/tough-cookie", - "repository": { - "type": "git", - "url": "git://github.com/SalesforceEng/tough-cookie.git" - }, - "bugs": { - "url": "https://github.com/SalesforceEng/tough-cookie/issues" - }, - "main": "./lib/cookie", - "files": [ - "lib" - ], - "scripts": { - "suffixup": "curl -o public_suffix_list.dat https://publicsuffix.org/list/public_suffix_list.dat && ./generate-pubsuffix.js", - "test": "vows test/*_test.js" - }, - "engines": { - "node": ">=0.10.0" - }, - "devDependencies": { - "async": "^1.4.2", - "vows": "^0.8.1" - }, - "gitHead": "cc46628c4d7d2e8c372ecba29293ca8a207ec192", - "_id": "tough-cookie@2.2.2", - "_shasum": "c83a1830f4e5ef0b93ef2a3488e724f8de016ac7", - "_from": "tough-cookie@>=0.12.0", - "_npmVersion": "3.3.12", - "_nodeVersion": "5.1.1", - "_npmUser": { - "name": "jstash", - "email": "jstash@gmail.com" - }, - "dist": { - "shasum": "c83a1830f4e5ef0b93ef2a3488e724f8de016ac7", - "tarball": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz" - }, - "maintainers": [ - { - "name": "jstash", - "email": "jeremy@goinstant.com" - }, - { - "name": "goinstant", - "email": "services@goinstant.com" - } - ], - "_npmOperationalInternal": { - "host": "packages-13-west.internal.npmjs.com", - "tmp": "tmp/tough-cookie-2.2.2.tgz_1457564639182_0.5129188685677946" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/twit/node_modules/request/node_modules/tunnel-agent/LICENSE b/node_modules/twit/node_modules/request/node_modules/tunnel-agent/LICENSE deleted file mode 100644 index a4a9aee..0000000 --- a/node_modules/twit/node_modules/request/node_modules/tunnel-agent/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/twit/node_modules/request/node_modules/tunnel-agent/README.md b/node_modules/twit/node_modules/request/node_modules/tunnel-agent/README.md deleted file mode 100644 index bb533d5..0000000 --- a/node_modules/twit/node_modules/request/node_modules/tunnel-agent/README.md +++ /dev/null @@ -1,4 +0,0 @@ -tunnel-agent -============ - -HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module. diff --git a/node_modules/twit/node_modules/request/node_modules/tunnel-agent/index.js b/node_modules/twit/node_modules/request/node_modules/tunnel-agent/index.js deleted file mode 100644 index 68013ac..0000000 --- a/node_modules/twit/node_modules/request/node_modules/tunnel-agent/index.js +++ /dev/null @@ -1,243 +0,0 @@ -'use strict' - -var net = require('net') - , tls = require('tls') - , http = require('http') - , https = require('https') - , events = require('events') - , assert = require('assert') - , util = require('util') - ; - -exports.httpOverHttp = httpOverHttp -exports.httpsOverHttp = httpsOverHttp -exports.httpOverHttps = httpOverHttps -exports.httpsOverHttps = httpsOverHttps - - -function httpOverHttp(options) { - var agent = new TunnelingAgent(options) - agent.request = http.request - return agent -} - -function httpsOverHttp(options) { - var agent = new TunnelingAgent(options) - agent.request = http.request - agent.createSocket = createSecureSocket - agent.defaultPort = 443 - return agent -} - -function httpOverHttps(options) { - var agent = new TunnelingAgent(options) - agent.request = https.request - return agent -} - -function httpsOverHttps(options) { - var agent = new TunnelingAgent(options) - agent.request = https.request - agent.createSocket = createSecureSocket - agent.defaultPort = 443 - return agent -} - - -function TunnelingAgent(options) { - var self = this - self.options = options || {} - self.proxyOptions = self.options.proxy || {} - self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets - self.requests = [] - self.sockets = [] - - self.on('free', function onFree(socket, host, port) { - for (var i = 0, len = self.requests.length; i < len; ++i) { - var pending = self.requests[i] - if (pending.host === host && pending.port === port) { - // Detect the request to connect same origin server, - // reuse the connection. - self.requests.splice(i, 1) - pending.request.onSocket(socket) - return - } - } - socket.destroy() - self.removeSocket(socket) - }) -} -util.inherits(TunnelingAgent, events.EventEmitter) - -TunnelingAgent.prototype.addRequest = function addRequest(req, options) { - var self = this - - // Legacy API: addRequest(req, host, port, path) - if (typeof options === 'string') { - options = { - host: options, - port: arguments[2], - path: arguments[3] - }; - } - - if (self.sockets.length >= this.maxSockets) { - // We are over limit so we'll add it to the queue. - self.requests.push({host: options.host, port: options.port, request: req}) - return - } - - // If we are under maxSockets create a new one. - self.createConnection({host: options.host, port: options.port, request: req}) -} - -TunnelingAgent.prototype.createConnection = function createConnection(pending) { - var self = this - - self.createSocket(pending, function(socket) { - socket.on('free', onFree) - socket.on('close', onCloseOrRemove) - socket.on('agentRemove', onCloseOrRemove) - pending.request.onSocket(socket) - - function onFree() { - self.emit('free', socket, pending.host, pending.port) - } - - function onCloseOrRemove(err) { - self.removeSocket(socket) - socket.removeListener('free', onFree) - socket.removeListener('close', onCloseOrRemove) - socket.removeListener('agentRemove', onCloseOrRemove) - } - }) -} - -TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { - var self = this - var placeholder = {} - self.sockets.push(placeholder) - - var connectOptions = mergeOptions({}, self.proxyOptions, - { method: 'CONNECT' - , path: options.host + ':' + options.port - , agent: false - } - ) - if (connectOptions.proxyAuth) { - connectOptions.headers = connectOptions.headers || {} - connectOptions.headers['Proxy-Authorization'] = 'Basic ' + - new Buffer(connectOptions.proxyAuth).toString('base64') - } - - debug('making CONNECT request') - var connectReq = self.request(connectOptions) - connectReq.useChunkedEncodingByDefault = false // for v0.6 - connectReq.once('response', onResponse) // for v0.6 - connectReq.once('upgrade', onUpgrade) // for v0.6 - connectReq.once('connect', onConnect) // for v0.7 or later - connectReq.once('error', onError) - connectReq.end() - - function onResponse(res) { - // Very hacky. This is necessary to avoid http-parser leaks. - res.upgrade = true - } - - function onUpgrade(res, socket, head) { - // Hacky. - process.nextTick(function() { - onConnect(res, socket, head) - }) - } - - function onConnect(res, socket, head) { - connectReq.removeAllListeners() - socket.removeAllListeners() - - if (res.statusCode === 200) { - assert.equal(head.length, 0) - debug('tunneling connection has established') - self.sockets[self.sockets.indexOf(placeholder)] = socket - cb(socket) - } else { - debug('tunneling socket could not be established, statusCode=%d', res.statusCode) - var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode) - error.code = 'ECONNRESET' - options.request.emit('error', error) - self.removeSocket(placeholder) - } - } - - function onError(cause) { - connectReq.removeAllListeners() - - debug('tunneling socket could not be established, cause=%s\n', cause.message, cause.stack) - var error = new Error('tunneling socket could not be established, ' + 'cause=' + cause.message) - error.code = 'ECONNRESET' - options.request.emit('error', error) - self.removeSocket(placeholder) - } -} - -TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { - var pos = this.sockets.indexOf(socket) - if (pos === -1) return - - this.sockets.splice(pos, 1) - - var pending = this.requests.shift() - if (pending) { - // If we have pending requests and a socket gets closed a new one - // needs to be created to take over in the pool for the one that closed. - this.createConnection(pending) - } -} - -function createSecureSocket(options, cb) { - var self = this - TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { - // 0 is dummy port for v0.6 - var secureSocket = tls.connect(0, mergeOptions({}, self.options, - { servername: options.host - , socket: socket - } - )) - self.sockets[self.sockets.indexOf(socket)] = secureSocket - cb(secureSocket) - }) -} - - -function mergeOptions(target) { - for (var i = 1, len = arguments.length; i < len; ++i) { - var overrides = arguments[i] - if (typeof overrides === 'object') { - var keys = Object.keys(overrides) - for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { - var k = keys[j] - if (overrides[k] !== undefined) { - target[k] = overrides[k] - } - } - } - } - return target -} - - -var debug -if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { - debug = function() { - var args = Array.prototype.slice.call(arguments) - if (typeof args[0] === 'string') { - args[0] = 'TUNNEL: ' + args[0] - } else { - args.unshift('TUNNEL:') - } - console.error.apply(console, args) - } -} else { - debug = function() {} -} -exports.debug = debug // for test diff --git a/node_modules/twit/node_modules/request/node_modules/tunnel-agent/package.json b/node_modules/twit/node_modules/request/node_modules/tunnel-agent/package.json deleted file mode 100644 index a433509..0000000 --- a/node_modules/twit/node_modules/request/node_modules/tunnel-agent/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "tunnel-agent", - "license": "Apache-2.0", - "description": "HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.", - "version": "0.4.3", - "repository": { - "url": "git+https://github.com/mikeal/tunnel-agent.git" - }, - "main": "index.js", - "files": [ - "index.js" - ], - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "gitHead": "e72d830f5ed388a2a71d37ce062c38e3fb34bdde", - "bugs": { - "url": "https://github.com/mikeal/tunnel-agent/issues" - }, - "homepage": "https://github.com/mikeal/tunnel-agent#readme", - "_id": "tunnel-agent@0.4.3", - "scripts": {}, - "_shasum": "6373db76909fe570e08d73583365ed828a74eeeb", - "_from": "tunnel-agent@>=0.4.0 <0.5.0", - "_npmVersion": "2.15.3", - "_nodeVersion": "5.9.0", - "_npmUser": { - "name": "simov", - "email": "simeonvelichkov@gmail.com" - }, - "dist": { - "shasum": "6373db76909fe570e08d73583365ed828a74eeeb", - "tarball": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz" - }, - "maintainers": [ - { - "name": "mikeal", - "email": "mikeal.rogers@gmail.com" - }, - { - "name": "nylen", - "email": "jnylen@gmail.com" - }, - { - "name": "fredkschott", - "email": "fkschott@gmail.com" - }, - { - "name": "simov", - "email": "simeonvelichkov@gmail.com" - } - ], - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/tunnel-agent-0.4.3.tgz_1462396470295_0.23639482469297945" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/twit/node_modules/request/package.json b/node_modules/twit/node_modules/request/package.json deleted file mode 100644 index 0a119d2..0000000 --- a/node_modules/twit/node_modules/request/package.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "name": "request", - "description": "Simplified HTTP request client.", - "tags": [ - "http", - "simple", - "util", - "utility" - ], - "version": "2.58.0", - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/request/request.git" - }, - "bugs": { - "url": "http://github.com/request/request/issues" - }, - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - }, - "main": "index.js", - "dependencies": { - "bl": "~0.9.0", - "caseless": "~0.10.0", - "extend": "~2.0.1", - "forever-agent": "~0.6.0", - "form-data": "~1.0.0-rc1", - "json-stringify-safe": "~5.0.0", - "mime-types": "~2.0.1", - "node-uuid": "~1.4.0", - "qs": "~3.1.0", - "tunnel-agent": "~0.4.0", - "tough-cookie": ">=0.12.0", - "http-signature": "~0.11.0", - "oauth-sign": "~0.8.0", - "hawk": "~2.3.0", - "aws-sign2": "~0.5.0", - "stringstream": "~0.0.4", - "combined-stream": "~1.0.1", - "isstream": "~0.1.1", - "har-validator": "^1.6.1" - }, - "scripts": { - "test": "npm run lint && npm run test-ci && npm run test-browser", - "test-ci": "taper tests/test-*.js", - "test-cov": "istanbul cover tape tests/test-*.js", - "test-browser": "node tests/browser/start.js", - "lint": "eslint lib/ *.js tests/ && echo Lint passed." - }, - "devDependencies": { - "browserify": "~5.9.1", - "browserify-istanbul": "~0.1.3", - "buffer-equal": "0.0.1", - "codecov.io": "~0.1.2", - "coveralls": "~2.11.2", - "eslint": "0.18.0", - "function-bind": "~1.0.0", - "istanbul": "~0.3.2", - "karma": "~0.12.21", - "karma-browserify": "~3.0.1", - "karma-cli": "0.0.4", - "karma-coverage": "0.2.6", - "karma-phantomjs-launcher": "~0.1.4", - "karma-tap": "~1.0.1", - "rimraf": "~2.2.8", - "server-destroy": "~1.0.0", - "tape": "~3.0.0", - "taper": "~0.4.0", - "bluebird": "~2.9.21" - }, - "gitHead": "ab40f9e61f813f9cc68257c17621b7879561486c", - "homepage": "https://github.com/request/request#readme", - "_id": "request@2.58.0", - "_shasum": "b5f49c0b94aab7fad388612a1fb6ad03b6cc1580", - "_from": "request@2.58.0", - "_npmVersion": "2.10.1", - "_nodeVersion": "0.12.4", - "_npmUser": { - "name": "simov", - "email": "simeonvelichkov@gmail.com" - }, - "maintainers": [ - { - "name": "mikeal", - "email": "mikeal.rogers@gmail.com" - }, - { - "name": "nylen", - "email": "jnylen@gmail.com" - }, - { - "name": "fredkschott", - "email": "fkschott@gmail.com" - }, - { - "name": "simov", - "email": "simeonvelichkov@gmail.com" - } - ], - "dist": { - "shasum": "b5f49c0b94aab7fad388612a1fb6ad03b6cc1580", - "tarball": "https://registry.npmjs.org/request/-/request-2.58.0.tgz" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/request/-/request-2.58.0.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/twit/node_modules/request/release.sh b/node_modules/twit/node_modules/request/release.sh deleted file mode 100755 index 7678bf8..0000000 --- a/node_modules/twit/node_modules/request/release.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/sh - -if [ -z "`which github-changes`" ]; then - # specify version because github-changes "is under heavy development. Things - # may break between releases" until 0.1.0 - echo "First, do: [sudo] npm install -g github-changes@0.0.14" - exit 1 -fi - -if [ -d .git/refs/remotes/upstream ]; then - remote=upstream -else - remote=origin -fi - -# Increment v2.x.y -> v2.x+1.0 -npm version minor || exit 1 - -# Generate changelog from pull requests -github-changes -o request -r request \ - --auth --verbose \ - --file CHANGELOG.md \ - --only-pulls --use-commit-body \ - --date-format '(YYYY/MM/DD)' \ - || exit 1 - -# Since the tag for the new version hasn't been pushed yet, any changes in it -# will be marked as "upcoming" -version="$(grep '"version"' package.json | cut -d'"' -f4)" -sed -i -e "s/^### upcoming/### v$version/" CHANGELOG.md - -# This may fail if no changelog updates -# TODO: would this ever actually happen? handle it better? -git add CHANGELOG.md; git commit -m 'Update changelog' - -# Publish the new version to npm -npm publish || exit 1 - -# Increment v2.x.0 -> v2.x.1 -# For rationale, see: -# https://github.com/request/oauth-sign/issues/10#issuecomment-58917018 -npm version patch || exit 1 - -# Push back to the main repo -git push $remote master --tags || exit 1 diff --git a/node_modules/twit/node_modules/request/request.js b/node_modules/twit/node_modules/request/request.js deleted file mode 100644 index c032ea8..0000000 --- a/node_modules/twit/node_modules/request/request.js +++ /dev/null @@ -1,1399 +0,0 @@ -'use strict' - -var http = require('http') - , https = require('https') - , url = require('url') - , util = require('util') - , stream = require('stream') - , zlib = require('zlib') - , bl = require('bl') - , hawk = require('hawk') - , aws = require('aws-sign2') - , httpSignature = require('http-signature') - , mime = require('mime-types') - , stringstream = require('stringstream') - , caseless = require('caseless') - , ForeverAgent = require('forever-agent') - , FormData = require('form-data') - , helpers = require('./lib/helpers') - , cookies = require('./lib/cookies') - , getProxyFromURI = require('./lib/getProxyFromURI') - , Querystring = require('./lib/querystring').Querystring - , Har = require('./lib/har').Har - , Auth = require('./lib/auth').Auth - , OAuth = require('./lib/oauth').OAuth - , Multipart = require('./lib/multipart').Multipart - , Redirect = require('./lib/redirect').Redirect - , Tunnel = require('./lib/tunnel').Tunnel - -var safeStringify = helpers.safeStringify - , isReadStream = helpers.isReadStream - , toBase64 = helpers.toBase64 - , defer = helpers.defer - , copy = helpers.copy - , globalCookieJar = cookies.jar() - - -var globalPool = {} - -function filterForNonReserved(reserved, options) { - // Filter out properties that are not reserved. - // Reserved values are passed in at call site. - - var object = {} - for (var i in options) { - var notReserved = (reserved.indexOf(i) === -1) - if (notReserved) { - object[i] = options[i] - } - } - return object -} - -function filterOutReservedFunctions(reserved, options) { - // Filter out properties that are functions and are reserved. - // Reserved values are passed in at call site. - - var object = {} - for (var i in options) { - var isReserved = !(reserved.indexOf(i) === -1) - var isFunction = (typeof options[i] === 'function') - if (!(isReserved && isFunction)) { - object[i] = options[i] - } - } - return object - -} - -// Function for properly handling a connection error -function connectionErrorHandler(error) { - var socket = this - if (socket.res) { - if (socket.res.request) { - socket.res.request.emit('error', error) - } else { - socket.res.emit('error', error) - } - } else { - socket._httpMessage.emit('error', error) - } -} - -// Return a simpler request object to allow serialization -function requestToJSON() { - var self = this - return { - uri: self.uri, - method: self.method, - headers: self.headers - } -} - -// Return a simpler response object to allow serialization -function responseToJSON() { - var self = this - return { - statusCode: self.statusCode, - body: self.body, - headers: self.headers, - request: requestToJSON.call(self.request) - } -} - -function Request (options) { - // if given the method property in options, set property explicitMethod to true - - // extend the Request instance with any non-reserved properties - // remove any reserved functions from the options object - // set Request instance to be readable and writable - // call init - - var self = this - - // start with HAR, then override with additional options - if (options.har) { - self._har = new Har(self) - options = self._har.options(options) - } - - stream.Stream.call(self) - var reserved = Object.keys(Request.prototype) - var nonReserved = filterForNonReserved(reserved, options) - - stream.Stream.call(self) - util._extend(self, nonReserved) - options = filterOutReservedFunctions(reserved, options) - - self.readable = true - self.writable = true - if (options.method) { - self.explicitMethod = true - } - self._qs = new Querystring(self) - self._auth = new Auth(self) - self._oauth = new OAuth(self) - self._multipart = new Multipart(self) - self._redirect = new Redirect(self) - self._tunnel = new Tunnel(self) - self.init(options) -} - -util.inherits(Request, stream.Stream) - -// Debugging -Request.debug = process.env.NODE_DEBUG && /\brequest\b/.test(process.env.NODE_DEBUG) -function debug() { - if (Request.debug) { - console.error('REQUEST %s', util.format.apply(util, arguments)) - } -} -Request.prototype.debug = debug - -Request.prototype.init = function (options) { - // init() contains all the code to setup the request object. - // the actual outgoing request is not started until start() is called - // this function is called from both the constructor and on redirect. - var self = this - if (!options) { - options = {} - } - self.headers = self.headers ? copy(self.headers) : {} - - // Delete headers with value undefined since they break - // ClientRequest.OutgoingMessage.setHeader in node 0.12 - for (var headerName in self.headers) { - if (typeof self.headers[headerName] === 'undefined') { - delete self.headers[headerName] - } - } - - caseless.httpify(self, self.headers) - - if (!self.method) { - self.method = options.method || 'GET' - } - if (!self.localAddress) { - self.localAddress = options.localAddress - } - - self._qs.init(options) - - debug(options) - if (!self.pool && self.pool !== false) { - self.pool = globalPool - } - self.dests = self.dests || [] - self.__isRequestRequest = true - - // Protect against double callback - if (!self._callback && self.callback) { - self._callback = self.callback - self.callback = function () { - if (self._callbackCalled) { - return // Print a warning maybe? - } - self._callbackCalled = true - self._callback.apply(self, arguments) - } - self.on('error', self.callback.bind()) - self.on('complete', self.callback.bind(self, null)) - } - - // People use this property instead all the time, so support it - if (!self.uri && self.url) { - self.uri = self.url - delete self.url - } - - // If there's a baseUrl, then use it as the base URL (i.e. uri must be - // specified as a relative path and is appended to baseUrl). - if (self.baseUrl) { - if (typeof self.baseUrl !== 'string') { - return self.emit('error', new Error('options.baseUrl must be a string')) - } - - if (typeof self.uri !== 'string') { - return self.emit('error', new Error('options.uri must be a string when using options.baseUrl')) - } - - if (self.uri.indexOf('//') === 0 || self.uri.indexOf('://') !== -1) { - return self.emit('error', new Error('options.uri must be a path when using options.baseUrl')) - } - - // Handle all cases to make sure that there's only one slash between - // baseUrl and uri. - var baseUrlEndsWithSlash = self.baseUrl.lastIndexOf('/') === self.baseUrl.length - 1 - var uriStartsWithSlash = self.uri.indexOf('/') === 0 - - if (baseUrlEndsWithSlash && uriStartsWithSlash) { - self.uri = self.baseUrl + self.uri.slice(1) - } else if (baseUrlEndsWithSlash || uriStartsWithSlash) { - self.uri = self.baseUrl + self.uri - } else if (self.uri === '') { - self.uri = self.baseUrl - } else { - self.uri = self.baseUrl + '/' + self.uri - } - delete self.baseUrl - } - - // A URI is needed by this point, emit error if we haven't been able to get one - if (!self.uri) { - return self.emit('error', new Error('options.uri is a required argument')) - } - - // If a string URI/URL was given, parse it into a URL object - if (typeof self.uri === 'string') { - self.uri = url.parse(self.uri) - } - - // DEPRECATED: Warning for users of the old Unix Sockets URL Scheme - if (self.uri.protocol === 'unix:') { - return self.emit('error', new Error('`unix://` URL scheme is no longer supported. Please use the format `http://unix:SOCKET:PATH`')) - } - - // Support Unix Sockets - if (self.uri.host === 'unix') { - // Get the socket & request paths from the URL - var unixParts = self.uri.path.split(':') - , host = unixParts[0] - , path = unixParts[1] - // Apply unix properties to request - self.socketPath = host - self.uri.pathname = path - self.uri.path = path - self.uri.host = host - self.uri.hostname = host - self.uri.isUnix = true - } - - if (self.strictSSL === false) { - self.rejectUnauthorized = false - } - - if (!self.uri.pathname) {self.uri.pathname = '/'} - - if (!(self.uri.host || (self.uri.hostname && self.uri.port)) && !self.uri.isUnix) { - // Invalid URI: it may generate lot of bad errors, like 'TypeError: Cannot call method `indexOf` of undefined' in CookieJar - // Detect and reject it as soon as possible - var faultyUri = url.format(self.uri) - var message = 'Invalid URI "' + faultyUri + '"' - if (Object.keys(options).length === 0) { - // No option ? This can be the sign of a redirect - // As this is a case where the user cannot do anything (they didn't call request directly with this URL) - // they should be warned that it can be caused by a redirection (can save some hair) - message += '. This can be caused by a crappy redirection.' - } - // This error was fatal - return self.emit('error', new Error(message)) - } - - if (!self.hasOwnProperty('proxy')) { - self.proxy = getProxyFromURI(self.uri) - } - - self.tunnel = self._tunnel.isEnabled(options) - if (self.proxy) { - self._tunnel.setup(options) - } - - self._redirect.onRequest(options) - - self.setHost = false - if (!self.hasHeader('host')) { - var hostHeaderName = self.originalHostHeaderName || 'host' - self.setHeader(hostHeaderName, self.uri.hostname) - if (self.uri.port) { - if ( !(self.uri.port === 80 && self.uri.protocol === 'http:') && - !(self.uri.port === 443 && self.uri.protocol === 'https:') ) { - self.setHeader(hostHeaderName, self.getHeader('host') + (':' + self.uri.port) ) - } - } - self.setHost = true - } - - self.jar(self._jar || options.jar) - - if (!self.uri.port) { - if (self.uri.protocol === 'http:') {self.uri.port = 80} - else if (self.uri.protocol === 'https:') {self.uri.port = 443} - } - - if (self.proxy && !self.tunnel) { - self.port = self.proxy.port - self.host = self.proxy.hostname - } else { - self.port = self.uri.port - self.host = self.uri.hostname - } - - if (options.form) { - self.form(options.form) - } - - if (options.formData) { - var formData = options.formData - var requestForm = self.form() - var appendFormValue = function (key, value) { - if (value.hasOwnProperty('value') && value.hasOwnProperty('options')) { - requestForm.append(key, value.value, value.options) - } else { - requestForm.append(key, value) - } - } - for (var formKey in formData) { - if (formData.hasOwnProperty(formKey)) { - var formValue = formData[formKey] - if (formValue instanceof Array) { - for (var j = 0; j < formValue.length; j++) { - appendFormValue(formKey, formValue[j]) - } - } else { - appendFormValue(formKey, formValue) - } - } - } - } - - if (options.qs) { - self.qs(options.qs) - } - - if (self.uri.path) { - self.path = self.uri.path - } else { - self.path = self.uri.pathname + (self.uri.search || '') - } - - if (self.path.length === 0) { - self.path = '/' - } - - // Auth must happen last in case signing is dependent on other headers - if (options.aws) { - self.aws(options.aws) - } - - if (options.hawk) { - self.hawk(options.hawk) - } - - if (options.httpSignature) { - self.httpSignature(options.httpSignature) - } - - if (options.auth) { - if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) { - options.auth.user = options.auth.username - } - if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) { - options.auth.pass = options.auth.password - } - - self.auth( - options.auth.user, - options.auth.pass, - options.auth.sendImmediately, - options.auth.bearer - ) - } - - if (self.gzip && !self.hasHeader('accept-encoding')) { - self.setHeader('accept-encoding', 'gzip') - } - - if (self.uri.auth && !self.hasHeader('authorization')) { - var uriAuthPieces = self.uri.auth.split(':').map(function(item) {return self._qs.unescape(item)}) - self.auth(uriAuthPieces[0], uriAuthPieces.slice(1).join(':'), true) - } - - if (!self.tunnel && self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization')) { - var proxyAuthPieces = self.proxy.auth.split(':').map(function(item) {return self._qs.unescape(item)}) - var authHeader = 'Basic ' + toBase64(proxyAuthPieces.join(':')) - self.setHeader('proxy-authorization', authHeader) - } - - if (self.proxy && !self.tunnel) { - self.path = (self.uri.protocol + '//' + self.uri.host + self.path) - } - - if (options.json) { - self.json(options.json) - } - if (options.multipart) { - self.multipart(options.multipart) - } - - if (options.time) { - self.timing = true - self.elapsedTime = self.elapsedTime || 0 - } - - if (self.body) { - var length = 0 - if (!Buffer.isBuffer(self.body)) { - if (Array.isArray(self.body)) { - for (var i = 0; i < self.body.length; i++) { - length += self.body[i].length - } - } else { - self.body = new Buffer(self.body) - length = self.body.length - } - } else { - length = self.body.length - } - if (length) { - if (!self.hasHeader('content-length')) { - self.setHeader('content-length', length) - } - } else { - self.emit('error', new Error('Argument error, options.body.')) - } - } - - if (options.oauth) { - self.oauth(options.oauth) - } else if (self._oauth.params && self.hasHeader('authorization')) { - self.oauth(self._oauth.params) - } - - var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol - , defaultModules = {'http:':http, 'https:':https} - , httpModules = self.httpModules || {} - - self.httpModule = httpModules[protocol] || defaultModules[protocol] - - if (!self.httpModule) { - return self.emit('error', new Error('Invalid protocol: ' + protocol)) - } - - if (options.ca) { - self.ca = options.ca - } - - if (!self.agent) { - if (options.agentOptions) { - self.agentOptions = options.agentOptions - } - - if (options.agentClass) { - self.agentClass = options.agentClass - } else if (options.forever) { - self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL - } else { - self.agentClass = self.httpModule.Agent - } - } - - if (self.pool === false) { - self.agent = false - } else { - self.agent = self.agent || self.getNewAgent() - } - - self.on('pipe', function (src) { - if (self.ntick && self._started) { - self.emit('error', new Error('You cannot pipe to this stream after the outbound request has started.')) - } - self.src = src - if (isReadStream(src)) { - if (!self.hasHeader('content-type')) { - self.setHeader('content-type', mime.lookup(src.path)) - } - } else { - if (src.headers) { - for (var i in src.headers) { - if (!self.hasHeader(i)) { - self.setHeader(i, src.headers[i]) - } - } - } - if (self._json && !self.hasHeader('content-type')) { - self.setHeader('content-type', 'application/json') - } - if (src.method && !self.explicitMethod) { - self.method = src.method - } - } - - // self.on('pipe', function () { - // console.error('You have already piped to this stream. Pipeing twice is likely to break the request.') - // }) - }) - - defer(function () { - if (self._aborted) { - return - } - - var end = function () { - if (self._form) { - if (!self._auth.hasAuth) { - self._form.pipe(self) - } - else if (self._auth.hasAuth && self._auth.sentAuth) { - self._form.pipe(self) - } - } - if (self._multipart && self._multipart.chunked) { - self._multipart.body.pipe(self) - } - if (self.body) { - if (Array.isArray(self.body)) { - self.body.forEach(function (part) { - self.write(part) - }) - } else { - self.write(self.body) - } - self.end() - } else if (self.requestBodyStream) { - console.warn('options.requestBodyStream is deprecated, please pass the request object to stream.pipe.') - self.requestBodyStream.pipe(self) - } else if (!self.src) { - if (self._auth.hasAuth && !self._auth.sentAuth) { - self.end() - return - } - if (self.method !== 'GET' && typeof self.method !== 'undefined') { - self.setHeader('content-length', 0) - } - self.end() - } - } - - if (self._form && !self.hasHeader('content-length')) { - // Before ending the request, we had to compute the length of the whole form, asyncly - self.setHeader(self._form.getHeaders()) - self._form.getLength(function (err, length) { - if (!err) { - self.setHeader('content-length', length) - } - end() - }) - } else { - end() - } - - self.ntick = true - }) - -} - -// Must call this when following a redirect from https to http or vice versa -// Attempts to keep everything as identical as possible, but update the -// httpModule, Tunneling agent, and/or Forever Agent in use. -Request.prototype._updateProtocol = function () { - var self = this - var protocol = self.uri.protocol - - if (protocol === 'https:' || self.tunnel) { - // previously was doing http, now doing https - // if it's https, then we might need to tunnel now. - if (self.proxy) { - if (self._tunnel.setup()) { - return - } - } - - self.httpModule = https - switch (self.agentClass) { - case ForeverAgent: - self.agentClass = ForeverAgent.SSL - break - case http.Agent: - self.agentClass = https.Agent - break - default: - // nothing we can do. Just hope for the best. - return - } - - // if there's an agent, we need to get a new one. - if (self.agent) { - self.agent = self.getNewAgent() - } - - } else { - // previously was doing https, now doing http - self.httpModule = http - switch (self.agentClass) { - case ForeverAgent.SSL: - self.agentClass = ForeverAgent - break - case https.Agent: - self.agentClass = http.Agent - break - default: - // nothing we can do. just hope for the best - return - } - - // if there's an agent, then get a new one. - if (self.agent) { - self.agent = null - self.agent = self.getNewAgent() - } - } -} - -Request.prototype.getNewAgent = function () { - var self = this - var Agent = self.agentClass - var options = {} - if (self.agentOptions) { - for (var i in self.agentOptions) { - options[i] = self.agentOptions[i] - } - } - if (self.ca) { - options.ca = self.ca - } - if (self.ciphers) { - options.ciphers = self.ciphers - } - if (self.secureProtocol) { - options.secureProtocol = self.secureProtocol - } - if (self.secureOptions) { - options.secureOptions = self.secureOptions - } - if (typeof self.rejectUnauthorized !== 'undefined') { - options.rejectUnauthorized = self.rejectUnauthorized - } - - if (self.cert && self.key) { - options.key = self.key - options.cert = self.cert - } - - if (self.pfx) { - options.pfx = self.pfx - } - - if (self.passphrase) { - options.passphrase = self.passphrase - } - - var poolKey = '' - - // different types of agents are in different pools - if (Agent !== self.httpModule.Agent) { - poolKey += Agent.name - } - - // ca option is only relevant if proxy or destination are https - var proxy = self.proxy - if (typeof proxy === 'string') { - proxy = url.parse(proxy) - } - var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:' - - if (isHttps) { - if (options.ca) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.ca - } - - if (typeof options.rejectUnauthorized !== 'undefined') { - if (poolKey) { - poolKey += ':' - } - poolKey += options.rejectUnauthorized - } - - if (options.cert) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.cert.toString('ascii') + options.key.toString('ascii') - } - - if (options.pfx) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.pfx.toString('ascii') - } - - if (options.ciphers) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.ciphers - } - - if (options.secureProtocol) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.secureProtocol - } - - if (options.secureOptions) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.secureOptions - } - } - - if (self.pool === globalPool && !poolKey && Object.keys(options).length === 0 && self.httpModule.globalAgent) { - // not doing anything special. Use the globalAgent - return self.httpModule.globalAgent - } - - // we're using a stored agent. Make sure it's protocol-specific - poolKey = self.uri.protocol + poolKey - - // generate a new agent for this setting if none yet exists - if (!self.pool[poolKey]) { - self.pool[poolKey] = new Agent(options) - // properly set maxSockets on new agents - if (self.pool.maxSockets) { - self.pool[poolKey].maxSockets = self.pool.maxSockets - } - } - - return self.pool[poolKey] -} - -Request.prototype.start = function () { - // start() is called once we are ready to send the outgoing HTTP request. - // this is usually called on the first write(), end() or on nextTick() - var self = this - - if (self._aborted) { - return - } - - self._started = true - self.method = self.method || 'GET' - self.href = self.uri.href - - if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) { - self.setHeader('content-length', self.src.stat.size) - } - if (self._aws) { - self.aws(self._aws, true) - } - - // We have a method named auth, which is completely different from the http.request - // auth option. If we don't remove it, we're gonna have a bad time. - var reqOptions = copy(self) - delete reqOptions.auth - - debug('make request', self.uri.href) - - self.req = self.httpModule.request(reqOptions) - - if (self.timing) { - self.startTime = new Date().getTime() - } - - if (self.timeout && !self.timeoutTimer) { - var timeout = self.timeout < 0 ? 0 : self.timeout - self.timeoutTimer = setTimeout(function () { - self.abort() - var e = new Error('ETIMEDOUT') - e.code = 'ETIMEDOUT' - self.emit('error', e) - }, timeout) - - // Set additional timeout on socket - in case if remote - // server freeze after sending headers - if (self.req.setTimeout) { // only works on node 0.6+ - self.req.setTimeout(timeout, function () { - if (self.req) { - self.req.abort() - var e = new Error('ESOCKETTIMEDOUT') - e.code = 'ESOCKETTIMEDOUT' - self.emit('error', e) - } - }) - } - } - - self.req.on('response', self.onRequestResponse.bind(self)) - self.req.on('error', self.onRequestError.bind(self)) - self.req.on('drain', function() { - self.emit('drain') - }) - self.req.on('socket', function(socket) { - self.emit('socket', socket) - }) - - self.on('end', function() { - if ( self.req.connection ) { - self.req.connection.removeListener('error', connectionErrorHandler) - } - }) - self.emit('request', self.req) -} - -Request.prototype.onRequestError = function (error) { - var self = this - if (self._aborted) { - return - } - if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET' - && self.agent.addRequestNoreuse) { - self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) } - self.start() - self.req.end() - return - } - if (self.timeout && self.timeoutTimer) { - clearTimeout(self.timeoutTimer) - self.timeoutTimer = null - } - self.emit('error', error) -} - -Request.prototype.onRequestResponse = function (response) { - var self = this - debug('onRequestResponse', self.uri.href, response.statusCode, response.headers) - response.on('end', function() { - if (self.timing) { - self.elapsedTime += (new Date().getTime() - self.startTime) - debug('elapsed time', self.elapsedTime) - response.elapsedTime = self.elapsedTime - } - debug('response end', self.uri.href, response.statusCode, response.headers) - }) - - // The check on response.connection is a workaround for browserify. - if (response.connection && response.connection.listeners('error').indexOf(connectionErrorHandler) === -1) { - response.connection.setMaxListeners(0) - response.connection.once('error', connectionErrorHandler) - } - if (self._aborted) { - debug('aborted', self.uri.href) - response.resume() - return - } - - self.response = response - response.request = self - response.toJSON = responseToJSON - - // XXX This is different on 0.10, because SSL is strict by default - if (self.httpModule === https && - self.strictSSL && (!response.hasOwnProperty('socket') || - !response.socket.authorized)) { - debug('strict ssl error', self.uri.href) - var sslErr = response.hasOwnProperty('socket') ? response.socket.authorizationError : self.uri.href + ' does not support SSL' - self.emit('error', new Error('SSL Error: ' + sslErr)) - return - } - - // Save the original host before any redirect (if it changes, we need to - // remove any authorization headers). Also remember the case of the header - // name because lots of broken servers expect Host instead of host and we - // want the caller to be able to specify this. - self.originalHost = self.getHeader('host') - if (!self.originalHostHeaderName) { - self.originalHostHeaderName = self.hasHeader('host') - } - if (self.setHost) { - self.removeHeader('host') - } - if (self.timeout && self.timeoutTimer) { - clearTimeout(self.timeoutTimer) - self.timeoutTimer = null - } - - var targetCookieJar = (self._jar && self._jar.setCookie) ? self._jar : globalCookieJar - var addCookie = function (cookie) { - //set the cookie if it's domain in the href's domain. - try { - targetCookieJar.setCookie(cookie, self.uri.href, {ignoreError: true}) - } catch (e) { - self.emit('error', e) - } - } - - response.caseless = caseless(response.headers) - - if (response.caseless.has('set-cookie') && (!self._disableCookies)) { - var headerName = response.caseless.has('set-cookie') - if (Array.isArray(response.headers[headerName])) { - response.headers[headerName].forEach(addCookie) - } else { - addCookie(response.headers[headerName]) - } - } - - if (self._redirect.onResponse(response)) { - return // Ignore the rest of the response - } else { - // Be a good stream and emit end when the response is finished. - // Hack to emit end on close because of a core bug that never fires end - response.on('close', function () { - if (!self._ended) { - self.response.emit('end') - } - }) - - response.on('end', function () { - self._ended = true - }) - - var responseContent - if (self.gzip) { - var contentEncoding = response.headers['content-encoding'] || 'identity' - contentEncoding = contentEncoding.trim().toLowerCase() - - if (contentEncoding === 'gzip') { - responseContent = zlib.createGunzip() - response.pipe(responseContent) - } else { - // Since previous versions didn't check for Content-Encoding header, - // ignore any invalid values to preserve backwards-compatibility - if (contentEncoding !== 'identity') { - debug('ignoring unrecognized Content-Encoding ' + contentEncoding) - } - responseContent = response - } - } else { - responseContent = response - } - - if (self.encoding) { - if (self.dests.length !== 0) { - console.error('Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.') - } else if (responseContent.setEncoding) { - responseContent.setEncoding(self.encoding) - } else { - // Should only occur on node pre-v0.9.4 (joyent/node@9b5abe5) with - // zlib streams. - // If/When support for 0.9.4 is dropped, this should be unnecessary. - responseContent = responseContent.pipe(stringstream(self.encoding)) - } - } - - if (self._paused) { - responseContent.pause() - } - - self.responseContent = responseContent - - self.emit('response', response) - - self.dests.forEach(function (dest) { - self.pipeDest(dest) - }) - - responseContent.on('data', function (chunk) { - self._destdata = true - self.emit('data', chunk) - }) - responseContent.on('end', function (chunk) { - self.emit('end', chunk) - }) - responseContent.on('error', function (error) { - self.emit('error', error) - }) - responseContent.on('close', function () {self.emit('close')}) - - if (self.callback) { - var buffer = bl() - , strings = [] - - self.on('data', function (chunk) { - if (Buffer.isBuffer(chunk)) { - buffer.append(chunk) - } else { - strings.push(chunk) - } - }) - self.on('end', function () { - debug('end event', self.uri.href) - if (self._aborted) { - debug('aborted', self.uri.href) - return - } - - if (buffer.length) { - debug('has body', self.uri.href, buffer.length) - if (self.encoding === null) { - // response.body = buffer - // can't move to this until https://github.com/rvagg/bl/issues/13 - response.body = buffer.slice() - } else { - response.body = buffer.toString(self.encoding) - } - } else if (strings.length) { - // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation. - // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse(). - if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') { - strings[0] = strings[0].substring(1) - } - response.body = strings.join('') - } - - if (self._json) { - try { - response.body = JSON.parse(response.body, self._jsonReviver) - } catch (e) { - // empty - } - } - debug('emitting complete', self.uri.href) - if (typeof response.body === 'undefined' && !self._json) { - response.body = self.encoding === null ? new Buffer(0) : '' - } - self.emit('complete', response, response.body) - }) - } - //if no callback - else { - self.on('end', function () { - if (self._aborted) { - debug('aborted', self.uri.href) - return - } - self.emit('complete', response) - }) - } - } - debug('finish init function', self.uri.href) -} - -Request.prototype.abort = function () { - var self = this - self._aborted = true - - if (self.req) { - self.req.abort() - } - else if (self.response) { - self.response.abort() - } - - self.emit('abort') -} - -Request.prototype.pipeDest = function (dest) { - var self = this - var response = self.response - // Called after the response is received - if (dest.headers && !dest.headersSent) { - if (response.caseless.has('content-type')) { - var ctname = response.caseless.has('content-type') - if (dest.setHeader) { - dest.setHeader(ctname, response.headers[ctname]) - } - else { - dest.headers[ctname] = response.headers[ctname] - } - } - - if (response.caseless.has('content-length')) { - var clname = response.caseless.has('content-length') - if (dest.setHeader) { - dest.setHeader(clname, response.headers[clname]) - } else { - dest.headers[clname] = response.headers[clname] - } - } - } - if (dest.setHeader && !dest.headersSent) { - for (var i in response.headers) { - // If the response content is being decoded, the Content-Encoding header - // of the response doesn't represent the piped content, so don't pass it. - if (!self.gzip || i !== 'content-encoding') { - dest.setHeader(i, response.headers[i]) - } - } - dest.statusCode = response.statusCode - } - if (self.pipefilter) { - self.pipefilter(response, dest) - } -} - -Request.prototype.qs = function (q, clobber) { - var self = this - var base - if (!clobber && self.uri.query) { - base = self._qs.parse(self.uri.query) - } else { - base = {} - } - - for (var i in q) { - base[i] = q[i] - } - - if (self._qs.stringify(base) === '') { - return self - } - - var qs = self._qs.stringify(base) - - self.uri = url.parse(self.uri.href.split('?')[0] + '?' + qs) - self.url = self.uri - self.path = self.uri.path - - return self -} -Request.prototype.form = function (form) { - var self = this - if (form) { - self.setHeader('content-type', 'application/x-www-form-urlencoded') - self.body = (typeof form === 'string') - ? self._qs.rfc3986(form.toString('utf8')) - : self._qs.stringify(form).toString('utf8') - return self - } - // create form-data object - self._form = new FormData() - self._form.on('error', function(err) { - err.message = 'form-data: ' + err.message - self.emit('error', err) - self.abort() - }) - return self._form -} -Request.prototype.multipart = function (multipart) { - var self = this - - self._multipart.onRequest(multipart) - - if (!self._multipart.chunked) { - self.body = self._multipart.body - } - - return self -} -Request.prototype.json = function (val) { - var self = this - - if (!self.hasHeader('accept')) { - self.setHeader('accept', 'application/json') - } - - self._json = true - if (typeof val === 'boolean') { - if (self.body !== undefined) { - if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) { - self.body = safeStringify(self.body) - } else { - self.body = self._qs.rfc3986(self.body) - } - if (!self.hasHeader('content-type')) { - self.setHeader('content-type', 'application/json') - } - } - } else { - self.body = safeStringify(val) - if (!self.hasHeader('content-type')) { - self.setHeader('content-type', 'application/json') - } - } - - if (typeof self.jsonReviver === 'function') { - self._jsonReviver = self.jsonReviver - } - - return self -} -Request.prototype.getHeader = function (name, headers) { - var self = this - var result, re, match - if (!headers) { - headers = self.headers - } - Object.keys(headers).forEach(function (key) { - if (key.length !== name.length) { - return - } - re = new RegExp(name, 'i') - match = key.match(re) - if (match) { - result = headers[key] - } - }) - return result -} - -Request.prototype.auth = function (user, pass, sendImmediately, bearer) { - var self = this - - self._auth.onRequest(user, pass, sendImmediately, bearer) - - return self -} -Request.prototype.aws = function (opts, now) { - var self = this - - if (!now) { - self._aws = opts - return self - } - var date = new Date() - self.setHeader('date', date.toUTCString()) - var auth = - { key: opts.key - , secret: opts.secret - , verb: self.method.toUpperCase() - , date: date - , contentType: self.getHeader('content-type') || '' - , md5: self.getHeader('content-md5') || '' - , amazonHeaders: aws.canonicalizeHeaders(self.headers) - } - var path = self.uri.path - if (opts.bucket && path) { - auth.resource = '/' + opts.bucket + path - } else if (opts.bucket && !path) { - auth.resource = '/' + opts.bucket - } else if (!opts.bucket && path) { - auth.resource = path - } else if (!opts.bucket && !path) { - auth.resource = '/' - } - auth.resource = aws.canonicalizeResource(auth.resource) - self.setHeader('authorization', aws.authorization(auth)) - - return self -} -Request.prototype.httpSignature = function (opts) { - var self = this - httpSignature.signRequest({ - getHeader: function(header) { - return self.getHeader(header, self.headers) - }, - setHeader: function(header, value) { - self.setHeader(header, value) - }, - method: self.method, - path: self.path - }, opts) - debug('httpSignature authorization', self.getHeader('authorization')) - - return self -} -Request.prototype.hawk = function (opts) { - var self = this - self.setHeader('Authorization', hawk.client.header(self.uri, self.method, opts).field) -} -Request.prototype.oauth = function (_oauth) { - var self = this - - self._oauth.onRequest(_oauth) - - return self -} - -Request.prototype.jar = function (jar) { - var self = this - var cookies - - if (self._redirect.redirectsFollowed === 0) { - self.originalCookieHeader = self.getHeader('cookie') - } - - if (!jar) { - // disable cookies - cookies = false - self._disableCookies = true - } else { - var targetCookieJar = (jar && jar.getCookieString) ? jar : globalCookieJar - var urihref = self.uri.href - //fetch cookie in the Specified host - if (targetCookieJar) { - cookies = targetCookieJar.getCookieString(urihref) - } - } - - //if need cookie and cookie is not empty - if (cookies && cookies.length) { - if (self.originalCookieHeader) { - // Don't overwrite existing Cookie header - self.setHeader('cookie', self.originalCookieHeader + '; ' + cookies) - } else { - self.setHeader('cookie', cookies) - } - } - self._jar = jar - return self -} - - -// Stream API -Request.prototype.pipe = function (dest, opts) { - var self = this - - if (self.response) { - if (self._destdata) { - self.emit('error', new Error('You cannot pipe after data has been emitted from the response.')) - } else if (self._ended) { - self.emit('error', new Error('You cannot pipe after the response has been ended.')) - } else { - stream.Stream.prototype.pipe.call(self, dest, opts) - self.pipeDest(dest) - return dest - } - } else { - self.dests.push(dest) - stream.Stream.prototype.pipe.call(self, dest, opts) - return dest - } -} -Request.prototype.write = function () { - var self = this - if (!self._started) { - self.start() - } - return self.req.write.apply(self.req, arguments) -} -Request.prototype.end = function (chunk) { - var self = this - if (chunk) { - self.write(chunk) - } - if (!self._started) { - self.start() - } - self.req.end() -} -Request.prototype.pause = function () { - var self = this - if (!self.responseContent) { - self._paused = true - } else { - self.responseContent.pause.apply(self.responseContent, arguments) - } -} -Request.prototype.resume = function () { - var self = this - if (!self.responseContent) { - self._paused = false - } else { - self.responseContent.resume.apply(self.responseContent, arguments) - } -} -Request.prototype.destroy = function () { - var self = this - if (!self._ended) { - self.end() - } else if (self.response) { - self.response.destroy() - } -} - -Request.defaultProxyHeaderWhiteList = - Tunnel.defaultProxyHeaderWhiteList.slice() - -Request.defaultProxyHeaderExclusiveList = - Tunnel.defaultProxyHeaderExclusiveList.slice() - -// Exports - -Request.prototype.toJSON = requestToJSON -module.exports = Request diff --git a/node_modules/twit/package.json b/node_modules/twit/package.json deleted file mode 100644 index 6943be5..0000000 --- a/node_modules/twit/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "twit", - "description": "Twitter API client for node (REST & Streaming)", - "version": "2.2.4", - "author": { - "name": "Tolga Tezel" - }, - "keywords": [ - "twitter", - "api", - "rest", - "stream", - "streaming", - "oauth" - ], - "dependencies": { - "bluebird": "^3.1.5", - "mime": "^1.3.4", - "request": "2.58.0" - }, - "devDependencies": { - "async": "0.2.9", - "colors": "0.6.x", - "commander": "2.6.0", - "mocha": "2.1.0", - "rewire": "2.3.4", - "sinon": "1.15.4" - }, - "engines": { - "node": ">=0.10.0" - }, - "license": "MIT", - "main": "./lib/twitter", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/ttezel/twit.git" - }, - "scripts": { - "test": "mocha tests/* -t 70000 -R spec --bail --globals domain,_events,_maxListeners" - }, - "gitHead": "3230bc88906cfcb2608fbee360cee98729a6580c", - "bugs": { - "url": "https://github.com/ttezel/twit/issues" - }, - "homepage": "https://github.com/ttezel/twit", - "_id": "twit@2.2.4", - "_shasum": "811e10092eb30ded476e21689dd8a90ee63963cb", - "_from": "twit@>=2.2.4 <3.0.0", - "_npmVersion": "2.5.1", - "_nodeVersion": "0.12.0", - "_npmUser": { - "name": "ttezel", - "email": "tolgatezel11@gmail.com" - }, - "dist": { - "shasum": "811e10092eb30ded476e21689dd8a90ee63963cb", - "tarball": "https://registry.npmjs.org/twit/-/twit-2.2.4.tgz" - }, - "maintainers": [ - { - "name": "ttezel", - "email": "tolgatezel11@gmail.com" - } - ], - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/twit-2.2.4.tgz_1462157237561_0.11102098692208529" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/twit/-/twit-2.2.4.tgz", - "readme": "ERROR: No README data found!" -} diff --git a/node_modules/twit/tests/helpers.js b/node_modules/twit/tests/helpers.js deleted file mode 100644 index 01b556a..0000000 --- a/node_modules/twit/tests/helpers.js +++ /dev/null @@ -1,46 +0,0 @@ -var EventEmitter = require('events').EventEmitter; -var stream = require('stream'); -var util = require('util'); - -// Used to stub out calls to `request`. -exports.FakeRequest = function () { - EventEmitter.call(this) -} -util.inherits(exports.FakeRequest, EventEmitter) -exports.FakeRequest.prototype.destroy = function () { - -} - -// Used to stub out the http.IncomingMessage object emitted by the "response" event on `request`. -exports.FakeResponse = function (statusCode, body) { - if (!body) { - body = ''; - } - this.statusCode = statusCode; - stream.Readable.call(this); - this.push(body); - this.push(null); -} -util.inherits(exports.FakeResponse, stream.Readable); - -exports.FakeResponse.prototype._read = function () { - -} -exports.FakeResponse.prototype.destroy = function () { - -} - -exports.generateRandomString = function generateRandomString (length) { - var length = length || 10 - var ret = '' - var alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789' - for (var i = 0; i < length; i++) { - // use an easy set of unicode as an alphabet - twitter won't reformat them - // which makes testing easier - ret += alphabet[Math.floor(Math.random()*alphabet.length)] - } - - ret = encodeURI(ret) - - return ret -} diff --git a/node_modules/twit/tests/img/bigbird.jpg b/node_modules/twit/tests/img/bigbird.jpg deleted file mode 100644 index dd5597d12432a1381e27cae56722ff84cd1aa193..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2864 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 diff --git a/node_modules/twit/tests/img/cutebird.png b/node_modules/twit/tests/img/cutebird.png deleted file mode 100644 index e14195af6e1fb888e1cb74e3939f48d13453e6a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28131 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 P8xkQK(wcfaMx z+Kin}n=4a8uYS#)oTC0MMv~t!&@-$;NL3`G*~6ftD84(~zNxQe!X(j*-l>xd9A>JQ z%(tBDZ8@VaC|PfrzH4orRsF)ba!Xcjnp|8yHOOsFw`cs`j);hDM~@vB6~yN7#Sn)F zGi*5@(_Rq2vvoygk^k=n8&>$O>E2~w+5dz4i$mnfYg|7Y%oaYIo~$(6>rC$tA2(gY ztgGfdxwEzBe>}}AJvVgj%vLw?_1+&>{|sAwWB8!^{yLd7OkDJ%4LPKzu%s& zNW-m1jvkW)y8GYzkc`Y?1$R$3g|y6^RE6@yVui%w;?&%voYWMB^30M9u$*&#UU5lL zX>v(sex5>bYKcNxQGTu!FBdPDV@`5LYHp>1Z)RRfd45rLv4Uq_vK}v2fS$jef>VBl zf~kQ4FPBqlYDs>cj)H$)Nn%lEJ};M#fxCjCBT&ZK(a+Jv5vYNe3+$5Q{M_8syb^_^ zoc!c$paXJp6!P**6cP&xQWJ|5GV{RBELKP^N=+<*xiC?oC^bE^xFod*C{mVMR19)u Lei~MnGgt!v)>{t< diff --git a/node_modules/twit/tests/img/twitterbird.gif b/node_modules/twit/tests/img/twitterbird.gif deleted file mode 100644 index 4d9edf4745b59fb69f288e0b0fafef701cda85e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1295 zcmeH`|5MX-0LI@N8;lzG0q$%W3>RM<0%cMilwKQ*Z*~wE6xxKb2ot*l35)Z*VuFaN z377e$OB-rLCJ7V?-Bm+(z{Zemu)#RM9T*G-I=+rE#*_AI|3a@Ho*$mqZ_nM6n4AzD zlN(OB#7@X|4fraAtMQTsFLYyz3NLnJTQ|0<5voFj8nIf0J+|F=S%c^vd@_Qzhp?_9 zvKwJ4+*`nnX?!z*KObRn4U-P^FQI!Lt+RNr0_h+=G~wV7cHD#A1(6mZD(p2PX8;L0 zoc|l?eXuy7o<~d%%FT$=;uQ^!jAC^ihlY`FLWLReTFkCuW)&%Vgmj^I0dMLd89=fQ z9dmfD0|i6aXT)6_GWxN$4y6r-C9DHYR{S!9Wf$~|NY*2F0F`DmSfQCmY9HS2#~ve! zhjC>Rx2(uA!nBOeIS6`Tb0W4E-%jB4IOd#qwFeUpyl2FU3kOVSw4z}eyZcc)iJiU3 zG2)s9_wA^gLfb3`mvMU*Uyj4!0$&Z?0*;R2XDhy&#HIzuQnp_l?eS=fm#wm2`n;l6M7j{K@Ir6Q9_Ys{dkSamrqjNi=`PMD&+ zlPwWH8y~ND|1X-RL_?R{*-!VDR$OvAwlWjxr^I(ijh7qarome=vNy8KBQUm}^4TI~ z@FI)t*`oqky`O(*f~`c-b~xQ*<6=znfjDK_Yn#L~x3e$Ao_uEG^UbAca@qV`R^Ua} zA)!tgaL~U>zab}*85e!#n39{rwsDU#vwY3`a+@UU^H`roh1b(ZB*e`i?@V|aMG$LLp^SshNARzCE@?;x6`;})9h}pWNeXamO z;t5|NPtVD0l_XLr6r~`pomUl1?gvsgK9fNaH^%9~A>tXKrKN7N@JOM{iy}0t)La{U zdGq<)!tYz&t@Pn~FM7B~)yo7l`b_eLuW6j>yMCvb1=XCw3_9znHQHu+Fl9~`x^vwb H 95) - - done() - }) - }) - - it('GET `search/tweets` with geocode', function (done) { - var params = { - q: 'apple', geocode: [ '37.781157', '-122.398720', '1mi' ] - } - - twit.get('search/tweets', params, function (err, reply) { - checkReply(err, reply) - - done() - }) - }) - - it('GET `direct_messages`', function (done) { - twit.get('direct_messages', function (err, reply, response) { - checkResponse(response) - checkReply(err, reply) - assert.ok(Array.isArray(reply)) - done() - }) - }) - - it('GET `followers/ids`', function (done) { - twit.get('followers/ids', function (err, reply, response) { - checkReply(err, reply) - assert.ok(Array.isArray(reply.ids)) - - checkResponse(response) - - done() - }) - }) - - it('GET `followers/ids` of screen_name tolga_tezel', function (done) { - twit.get('followers/ids', { screen_name: 'tolga_tezel' }, function (err, reply, response) { - checkReply(err, reply) - assert.ok(Array.isArray(reply.ids)) - - checkResponse(response) - - done() - }) - }) - - it('POST `statuses/retweet`', function (done) { - // search for a tweet to retweet - twit.get('search/tweets', { q: 'apple' }, function (err, reply, response) { - checkReply(err, reply) - assert.ok(reply.statuses) - - var tweet = reply.statuses[0] - checkTweet(tweet) - - var tweetId = tweet.id_str - assert(tweetId) - - twit.post('statuses/retweet/'+tweetId, function (err, reply, response) { - checkReply(err, reply) - - var retweetId = reply.id_str - assert(retweetId) - - twit.post('statuses/destroy/'+retweetId, function (err, reply, response) { - checkReply(err, reply) - - done() - }) - }) - }) - }) - - // 1.1.8 usage - it('POST `statuses/retweet/:id` without `id` in params returns error', function (done) { - twit.post('statuses/retweet/:id', function (err, reply, response) { - assert(err) - assert.equal(err.message, 'Twit: Params object is missing a required parameter for this request: `id`') - done() - }) - }) - - // 1.1.8 usage - it('POST `statuses/retweet/:id`', function (done) { - // search for a tweet to retweet - twit.get('search/tweets', { q: 'banana' }, function (err, reply, response) { - checkReply(err, reply) - assert.ok(reply.statuses) - - var tweet = reply.statuses[0] - checkTweet(tweet) - - var tweetId = tweet.id_str - assert(tweetId) - - twit.post('statuses/retweet/:id', { id: tweetId }, function (err, reply) { - checkReply(err, reply) - - var retweetId = reply.id_str - assert(retweetId) - - twit.post('statuses/destroy/:id', { id: retweetId }, function (err, reply, response) { - checkReply(err, reply) - - done() - }) - }) - }) - }) - - // 1.1.8 usage - // skip for now since this API call is having problems on Twitter's side (404) - it.skip('GET `users/suggestions/:slug`', function (done) { - twit.get('users/suggestions/:slug', { slug: 'funny' }, function (err, reply, res) { - checkReply(err, reply) - assert.equal(reply.slug, 'funny') - done() - }) - }) - - // 1.1.8 usage - // skip for now since this API call is having problems on Twitter's side (404) - it.skip('GET `users/suggestions/:slug/members`', function (done) { - twit.get('users/suggestions/:slug/members', { slug: 'funny' }, function (err, reply, res) { - checkReply(err, reply) - - assert(reply[0].id_str) - assert(reply[0].screen_name) - - done() - }) - }) - - // 1.1.8 usage - it('GET `geo/id/:place_id`', function (done) { - var placeId = 'df51dec6f4ee2b2c' - - twit.get('geo/id/:place_id', { place_id: placeId }, function (err, reply, res) { - checkReply(err, reply) - - assert(reply.country) - assert(reply.bounding_box) - assert.equal(reply.id, placeId) - - done() - }) - }) - - it('POST `direct_messages/new`', function (done) { - var dmId - - async.series({ - postDm: function (next) { - - var dmParams = { - screen_name: 'tolga_tezel', - text: 'hey this is a direct message from twit! :) ' + helpers.generateRandomString(15) - } - // post a direct message from the sender's account - twit.post('direct_messages/new', dmParams, function (err, reply) { - assert(!err, err) - assert(reply) - - dmId = reply.id_str - - exports.checkDm(reply) - - assert.equal(reply.text, dmParams.text) - assert(dmId) - - return next() - }) - }, - deleteDm: function (next) { - twit.post('direct_messages/destroy', { id: dmId }, function (err, reply) { - assert(!err, err) - exports.checkDm(reply) - assert.equal(reply.id, dmId) - - return next() - }) - } - }, done); - }) - - describe('Media Upload', function () { - var twit = null - - before(function () { - twit = new Twit(config1) - }) - - it('POST media/upload with png', function (done) { - var b64content = fs.readFileSync(__dirname + '/img/cutebird.png', { encoding: 'base64' }) - - twit.post('media/upload', { media_data: b64content }, function (err, data, response) { - assert.equal(response.statusCode, 200) - assert(!err, err) - exports.checkMediaUpload(data) - assert(data.image.image_type == 'image/png' || data.image.image_type == 'image\/png') - done() - }) - }) - - it('POST media/upload with JPG', function (done) { - var b64content = fs.readFileSync(__dirname + '/img/bigbird.jpg', { encoding: 'base64' }) - - twit.post('media/upload', { media_data: b64content }, function (err, data, response) { - assert(!err, err) - exports.checkMediaUpload(data) - assert.equal(data.image.image_type, 'image/jpeg') - done() - }) - }) - - it('POST media/upload with static GIF', function (done) { - var b64content = fs.readFileSync(__dirname + '/img/twitterbird.gif', { encoding: 'base64' }) - - twit.post('media/upload', { media_data: b64content }, function (err, data, response) { - assert(!err, err) - exports.checkMediaUpload(data) - assert.equal(data.image.image_type, 'image/gif') - done() - }) - }) - - it('POST media/upload with animated GIF using `media_data` parameter', function (done) { - var b64content = fs.readFileSync(__dirname + '/img/snoopy-animated.gif', { encoding: 'base64' }) - - twit.post('media/upload', { media_data: b64content }, function (err, data, response) { - assert(!err, err) - exports.checkMediaUpload(data) - var expected_image_types = ['image/gif', 'image/animatedgif'] - var image_type = data.image.image_type - assert.ok(expected_image_types.indexOf(image_type) !== -1, 'got unexpected image type:' + image_type) - done() - }) - }) - - it('POST media/upload with animated GIF, then POST a tweet referencing the media', function (done) { - var b64content = fs.readFileSync(__dirname + '/img/snoopy-animated.gif', { encoding: 'base64' }); - - twit.post('media/upload', { media_data: b64content }, function (err, data, response) { - assert(!err, err) - exports.checkMediaUpload(data) - var expected_image_types = ['image/gif', 'image/animatedgif'] - var image_type = data.image.image_type - assert.ok(expected_image_types.indexOf(image_type) !== -1, 'got unexpected image type:' + image_type) - - var mediaIdStr = data.media_id_string - assert(mediaIdStr) - var params = { status: '#nofilter', media_ids: [mediaIdStr] } - twit.post('statuses/update', params, function (err, data, response) { - assert(!err, err) - var tweetIdStr = data.id_str - assert(tweetIdStr) - - exports.req_with_retries(twit, 3, 'post', 'statuses/destroy/:id', { id: tweetIdStr }, [404], function (err, data, response) { - checkReply(err, data) - done() - }) - }) - }) - }) - - it('POST media/upload with animated GIF using `media` parameter', function (done) { - var b64Content = fs.readFileSync(__dirname + '/img/snoopy-animated.gif', { encoding: 'base64' }); - - twit.post('media/upload', { media: b64Content }, function (err, data, response) { - assert(!err, err) - exports.checkMediaUpload(data) - var expected_image_types = ['image/gif', 'image/animatedgif'] - var image_type = data.image.image_type - assert.ok(expected_image_types.indexOf(image_type) !== -1, 'got unexpected image type:' + image_type) - done() - }) - }) - - it('POST media/upload with JPG, then POST media/metadata/create with alt text', function (done) { - var b64content = fs.readFileSync(__dirname + '/img/bigbird.jpg', { encoding: 'base64' }) - - twit.post('media/upload', { media_data: b64content }, function (err, data, response) { - assert(!err, err) - exports.checkMediaUpload(data) - assert.equal(data.image.image_type, 'image/jpeg') - - var mediaIdStr = data.media_id_string - assert(mediaIdStr) - var altText = 'a very small Big Bird' - var params = { media_id: mediaIdStr, alt_text: { text: altText } } - twit.post('media/metadata/create', params, function (err, data, response) { - assert(!err, err) - // data is empty on media/metadata/create success; nothing more to assert - done(); - }) - }) - }) - }) - - it('POST account/update_profile_image', function (done) { - var b64content = fs.readFileSync(__dirname + '/img/snoopy-animated.gif', { encoding: 'base64' }) - - twit.post('account/update_profile_image', { image: b64content }, function (err, data, response) { - assert(!err, err); - exports.checkReply(err, data); - exports.checkUser(data); - - done() - }) - }) - - it('POST friendships/create', function (done) { - var params = { screen_name: 'tolga_tezel', follow: false }; - twit.post('friendships/create', params, function (err, data, resp) { - assert(!err, err); - exports.checkReply(err, data); - exports.checkUser(data); - done(); - }); - }) - - describe('Favorites', function () { - it('POST favorites/create and POST favorites/destroy work', function (done) { - twit.post('favorites/create', { id: '583531943624597504' }, function (err, data, resp) { - assert(!err, err); - exports.checkReply(err, data); - var tweetIdStr = data.id_str; - assert(tweetIdStr); - - twit.post('favorites/destroy', { id: tweetIdStr }, function (err, data, resp) { - assert(!err, err); - exports.checkReply(err, data); - assert(data.id_str); - assert(data.text); - - done(); - }) - }) - }) - }) - - describe('error handling', function () { - describe('handling errors from the twitter api', function () { - it('should callback with an Error object with all the info and a response object', function (done) { - var twit = new Twit({ - consumer_key: 'a', - consumer_secret: 'b', - access_token: 'c', - access_token_secret: 'd' - }) - twit.get('account/verify_credentials', function (err, reply, res) { - assert(err instanceof Error) - assert(err.statusCode === 401) - assert(err.code > 0) - assert(err.message.match(/token/)) - assert(err.twitterReply) - assert(err.allErrors) - assert(res) - assert(res.headers) - assert.equal(res.statusCode, 401) - done() - }) - }) - }) - describe('handling other errors', function () { - it('should just forward errors raised by underlying request lib', function (done) { - var twit = new Twit(config1); - var fakeError = new Error('derp') - - var FakeRequest = function () { - EventEmitter.call(this) - } - util.inherits(FakeRequest, EventEmitter) - - var stubGet = function () { - var fakeRequest = new FakeRequest() - process.nextTick(function () { - fakeRequest.emit('error', fakeError) - }) - return fakeRequest - } - - var request = require('request') - var stubGet = sinon.stub(request, 'get', stubGet) - - twit.get('account/verify_credentials', function (err, reply, res) { - assert(err === fakeError) - - // restore request.get - stubGet.restore() - - done() - }) - }) - }) - - describe('Request timeout', function () { - it('set to 1ms should return with a timeout error', function (done) { - config1.timeout_ms = 1; - var twit = new Twit(config1); - twit.get('account/verify_credentials', function (err, reply, res) { - assert(err) - assert.equal(err.message, 'ETIMEDOUT') - delete config1.timeout_ms - done() - }) - }) - }) - }); -}); - -describe('Twit agent_options config', function () { - it('config.trusted_cert_fingerprints works against cert fingerprint for api.twitter.com:443', function (done) { - config1.trusted_cert_fingerprints = [ - '66:EA:47:62:D9:B1:4F:1A:AE:89:5F:68:BA:6B:8E:BB:F8:1D:BF:8E' - ]; - var t = new Twit(config1); - - t.get('account/verify_credentials', function (err, data, resp) { - assert(!err, err) - assert(data) - assert(data.id_str) - assert(data.name) - assert(data.screen_name) - - delete config1.trusted_cert_fingerprints - done(); - }) - }) - - it('config.trusted_cert_fingerprints responds with Error when fingerprint mismatch occurs', function (done) { - config1.trusted_cert_fingerprints = [ - 'AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA' - ]; - var t = new Twit(config1); - - t.get('account/verify_credentials', function (err, data, resp) { - assert(err) - assert(err.toString().indexOf('Trusted fingerprints are: ' + config1.trusted_cert_fingerprints[0]) !== -1) - - delete config1.trusted_cert_fingerprints - done(); - }) - }) -}) - -describe('Local time offset compensation', function () { - it('Compensates for local time being behind', function (done) { - var t1 = Date.now(); - var t = new Twit(config2); - - var stubNow = function () { - return 0; - } - var stubDateNow = sinon.stub(Date, 'now', stubNow); - - t.get('account/verify_credentials', function (err, data, resp) { - assert(err); - - t.get('account/verify_credentials', function (err, data, resp) { - assert(!err, err); - exports.checkReply(err, data); - exports.checkUser(data); - assert(t._twitter_time_minus_local_time_ms > 0) - - stubDateNow.restore(); - - done(); - }) - }) - }) -}) - -/** - * Basic validation to verify we have no error and reply is an object - * - * @param {error} err error object (or null) - * @param {object} reply reply object received from twitter - */ -var checkReply = exports.checkReply = function (err, reply) { - assert.equal(err, null, 'reply err:'+util.inspect(err, true, 10, true)) - assert.equal(typeof reply, 'object') -} - -/** - * check the http response object and its headers - * @param {object} response http response object - */ -var checkResponse = exports.checkResponse = function (response) { - assert(response) - assert(response.headers) - assert.equal(response.statusCode, 200) -} - -/** - * validate that @tweet is a tweet object - * - * @param {object} tweet `tweet` object received from twitter - */ -var checkTweet = exports.checkTweet = function (tweet) { - assert.ok(tweet) - assert.equal('string', typeof tweet.id_str, 'id_str wasnt string:'+tweet.id_str) - assert.equal('string', typeof tweet.text) - - assert.ok(tweet.user) - assert.equal('string', typeof tweet.user.id_str) - assert.equal('string', typeof tweet.user.screen_name) -} - -/** - * Validate that @dm is a direct message object - * - * @param {object} dm `direct message` object received from twitter - */ -exports.checkDm = function checkDm (dm) { - assert.ok(dm) - assert.equal('string', typeof dm.id_str) - assert.equal('string', typeof dm.text) - - var recipient = dm.recipient - - assert.ok(recipient) - assert.equal('string', typeof recipient.id_str) - assert.equal('string', typeof recipient.screen_name) - - var sender = dm.sender - - assert.ok(sender) - assert.equal('string', typeof sender.id_str) - assert.equal('string', typeof sender.screen_name) - - assert.equal('string', typeof dm.text) -} - -exports.checkMediaUpload = function checkMediaUpload (data) { - assert.ok(data) - assert.ok(data.image) - assert.ok(data.image.w) - assert.ok(data.image.h) - assert.ok(data.media_id) - assert.equal('string', typeof data.media_id_string) - assert.ok(data.size) -} - -exports.checkUser = function checkUser (data) { - assert.ok(data) - assert.ok(data.id_str) - assert.ok(data.name) - assert.ok(data.screen_name) -} - -exports.assertTweetHasText = function (tweet, text) { - assert(tweet.text.toLowerCase().indexOf(text) !== -1, 'expected to find '+text+' in text: '+tweet.text); -} - -exports.req_with_retries = function (twit_instance, num_tries, verb, path, params, status_codes_to_retry, cb) { - twit_instance[verb](path, params, function (err, data, response) { - if (!num_tries || (status_codes_to_retry.indexOf(response.statusCode) === -1)) { - return cb(err, data, response) - } - - exports.req_with_retries(twit_instance, num_tries - 1, verb, path, params, status_codes_to_retry, cb) - }) -} diff --git a/node_modules/twit/tests/rest_app_only_auth.js b/node_modules/twit/tests/rest_app_only_auth.js deleted file mode 100644 index 55f3283..0000000 --- a/node_modules/twit/tests/rest_app_only_auth.js +++ /dev/null @@ -1,55 +0,0 @@ -var assert = require('assert') - -var config1 = require('../config1'); -var Twit = require('../lib/twitter'); -var checkReply = require('./rest').checkReply; -var checkResponse = require('./rest').checkResponse; -var checkTweet = require('./rest').checkTweet; - -describe('REST API using app-only auth', function () { - var twit = null - before(function () { - var config = { - consumer_key: config1.consumer_key, - consumer_secret: config1.consumer_secret, - app_only_auth: true, - } - twit = new Twit(config) - }) - - it('GET `application/rate_limit_status`', function (done) { - twit.get('application/rate_limit_status', function (err, body, response) { - checkReply(err, body) - checkResponse(response) - assert(body.rate_limit_context) - done() - }) - }) - - it('GET `application/rate_limit_status with specific resource`', function (done) { - var params = { resources: [ 'users', 'search' ]} - twit.get('application/rate_limit_status', params, function (err, body, response) { - checkReply(err, body) - checkResponse(response) - assert(body.rate_limit_context) - assert(body.resources.users) - assert(body.resources.search) - assert.equal(Object.keys(body.resources).length, 2) - done() - }) - }) - - it('GET `search/tweets` { q: "a", since_id: 12345 }', function (done) { - var params = { q: 'a', since_id: 12345 } - twit.get('search/tweets', params, function (err, reply, response) { - checkReply(err, reply) - assert.ok(reply.statuses) - checkTweet(reply.statuses[0]) - - checkResponse(response) - - done() - }) - }) -}) - diff --git a/node_modules/twit/tests/rest_chunked_upload.js b/node_modules/twit/tests/rest_chunked_upload.js deleted file mode 100644 index ded627a..0000000 --- a/node_modules/twit/tests/rest_chunked_upload.js +++ /dev/null @@ -1,90 +0,0 @@ -var assert = require('assert'); -var fs = require('fs'); -var mime = require('mime'); -var path = require('path'); - -var config = require('../config1'); -var Twit = require('../lib/twitter'); - -describe('twit.postMediaChunked', function () { - it('Posting media via twit.postMediaChunked works with .mp4', function (done) { - var twit = new Twit(config); - var mediaFilePath = path.join(__dirname, './video/station.mp4'); - twit.postMediaChunked({ file_path: mediaFilePath }, function (err, bodyObj, resp) { - exports.checkUploadMedia(err, bodyObj, resp) - done() - }) - }) - - it('POST media/upload via manual commands works with .mp4', function (done) { - var mediaFilePath = path.join(__dirname, './video/station.mp4'); - var mediaType = mime.lookup(mediaFilePath); - var mediaFileSizeBytes = fs.statSync(mediaFilePath).size; - - var twit = new Twit(config); - twit.post('media/upload', { - 'command': 'INIT', - 'media_type': mediaType, - 'total_bytes': mediaFileSizeBytes - }, function (err, bodyObj, resp) { - assert(!err, err); - var mediaIdStr = bodyObj.media_id_string; - - var isStreamingFile = true; - var isUploading = false; - var segmentIndex = 0; - var fStream = fs.createReadStream(mediaFilePath, { highWaterMark: 5 * 1024 * 1024 }); - - var _finalizeMedia = function (mediaIdStr, cb) { - twit.post('media/upload', { - 'command': 'FINALIZE', - 'media_id': mediaIdStr - }, cb) - } - - var _checkFinalizeResp = function (err, bodyObj, resp) { - exports.checkUploadMedia(err, bodyObj, resp) - done(); - } - - fStream.on('data', function (buff) { - fStream.pause(); - isStreamingFile = false; - isUploading = true; - - twit.post('media/upload', { - 'command': 'APPEND', - 'media_id': mediaIdStr, - 'segment_index': segmentIndex, - 'media': buff.toString('base64'), - }, function (err, bodyObj, resp) { - assert(!err, err); - isUploading = false; - - if (!isStreamingFile) { - _finalizeMedia(mediaIdStr, _checkFinalizeResp); - } - }); - }); - - fStream.on('end', function () { - isStreamingFile = false; - - if (!isUploading) { - _finalizeMedia(mediaIdStr, _checkFinalizeResp); - } - }); - }); - }) -}) - -exports.checkUploadMedia = function (err, bodyObj, resp) { - assert(!err, err) - - assert(bodyObj) - assert(bodyObj.media_id) - assert(bodyObj.media_id_string) - assert(bodyObj.size) - assert(bodyObj.video) - assert.equal(bodyObj.video.video_type, 'video/mp4') -} diff --git a/node_modules/twit/tests/streaming.js b/node_modules/twit/tests/streaming.js deleted file mode 100644 index 001cd53..0000000 --- a/node_modules/twit/tests/streaming.js +++ /dev/null @@ -1,646 +0,0 @@ -var assert = require('assert') - , http = require('http') - , EventEmitter = require('events').EventEmitter - , rewire = require('rewire') - , sinon = require('sinon') - , Twit = require('../lib/twitter') - , config1 = require('../config1') - , config2 = require('../config2') - , colors = require('colors') - , helpers = require('./helpers') - , util = require('util') - , zlib = require('zlib') - , async = require('async') - , restTest = require('./rest'); - -/** - * Stop the stream and check the tweet we got back. - * Call @done on completion. - * - * @param {object} stream object returned by twit.stream() - * @param {Function} done completion callback - */ -exports.checkStream = function (stream, done) { - stream.on('connected', function () { - console.log('\nconnected'.grey) - }); - - stream.once('tweet', function (tweet) { - stream.stop() - assert.ok(tweet) - assert.equal('string', typeof tweet.text) - assert.equal('string', typeof tweet.id_str) - - console.log(('\ntweet: '+tweet.text).grey) - - done() - }); - - stream.on('reconnecting', function (req, res, connectInterval) { - console.log('Got disconnected. Scheduling reconnect! statusCode:', res.statusCode, 'connectInterval', connectInterval) - }); - - stream.on('error', function (err) { - console.log('Stream emitted an error', err) - return done(err) - }) -} - -/** - * Check the stream state is correctly set for a stopped stream. - * - * @param {object} stream object returned by twit.stream() - */ -exports.checkStreamStopState = function (stream) { - assert.strictEqual(stream._connectInterval, 0) - assert.strictEqual(stream._usedFirstReconnect, false) - assert.strictEqual(stream._scheduledReconnect, undefined) - assert.strictEqual(stream._stallAbortTimeout, undefined) -} - -describe('Streaming API', function () { - - it('statuses/sample', function (done) { - var twit = new Twit(config1); - var stream = twit.stream('statuses/sample') - - exports.checkStream(stream, done) - }) - - it('statuses/filter using `track`', function (done) { - this.timeout(120000) - var twit = new Twit(config2); - var stream = twit.stream('statuses/filter', { track: 'fun' }) - - exports.checkStream(stream, done) - }) - - it('statuses/filter using `locations` string', function (done) { - var twit = new Twit(config1); - var world = '-180,-90,180,90'; - var stream = twit.stream('statuses/filter', { locations: world }) - - exports.checkStream(stream, done) - }) - - it('statuses/filter using `locations` array for San Francisco and New York', function (done) { - var twit = new Twit(config2); - var params = { - locations: [ '-122.75', '36.8', '121.75', '37.8', '-74', '40', '73', '41' ] - } - - var stream = twit.stream('statuses/filter', params) - - exports.checkStream(stream, done) - }) - - it('statuses/filter using `track` array', function (done) { - var twit = new Twit(config1); - var params = { - track: [ 'twitter', ':)', 'fun' ] - } - - var stream = twit.stream('statuses/filter', params) - - exports.checkStream(stream, done) - }) - - it('statuses/filter using `track` and `language`', function (done) { - var twit = new Twit(config1); - var params = { - track: [ 'twitter', '#apple', 'google', 'twitter', 'facebook', 'happy', 'party', ':)' ], - language: 'en' - } - - var stream = twit.stream('statuses/filter', params) - - exports.checkStream(stream, done) - }) - - it('stopping & restarting the stream works', function (done) { - var twit = new Twit(config2); - var stream = twit.stream('statuses/sample') - - //stop the stream after 2 seconds - setTimeout(function () { - stream.stop() - - exports.checkStreamStopState(stream) - - console.log('\nstopped stream') - }, 2000) - - //after 3 seconds, start the stream, and stop after 'connect' - setTimeout(function () { - stream.once('connected', function (req) { - console.log('\nrestarted stream') - stream.stop() - - exports.checkStreamStopState(stream) - - console.log('\nstopped stream') - done() - }) - - //restart the stream - stream.start() - }, 3000) - }) - - it('stopping & restarting stream emits to previously assigned callbacks', function (done) { - var twit = new Twit(config1); - var stream = twit.stream('statuses/sample') - - var started = false - var numTweets = 0 - stream.on('tweet', function (tweet) { - process.stdout.write('.') - if (!started) { - started = true - numTweets++ - console.log('received tweet', numTweets) - - console.log('stopping stream') - stream.stop() - - exports.checkStreamStopState(stream) - - // we've successfully received a new tweet after restarting, test successful - if (numTweets === 2) { - done() - } else { - started = false - console.log('restarting stream') - - setTimeout(function () { - stream.start() - }, 1000) - } - } - }) - - stream.on('limit', function (limitMsg) { - console.log('limit', limitMsg) - }) - - stream.on('disconnect', function (disconnMsg) { - console.log('disconnect', disconnMsg) - }) - - stream.on('reconnect', function (req, res, ival) { - console.log('reconnect. statusCode:', res.statusCode, 'interval:', ival) - }) - - stream.on('connect', function (req) { - console.log('connect') - }) - - }) -}) - -describe('streaming API direct message events', function () { - var senderScreenName; - var receiverScreenName; - var twitSender; - var twitReceiver; - - // before we send direct messages the user receiving the DM - // has to follow the sender. Make this so. - before(function (done) { - twitSender = new Twit(config1); - twitReceiver = new Twit(config2); - - // get sender/receiver names in parallel, then make the receiver follow the sender - async.parallel({ - // get sender screen name and set it for tests to use - getSenderScreenName: function (parNext) { - console.log('getting sender user screen_name') - - twitSender.get('account/verify_credentials', { twit_options: { retry: true } }, function (err, reply) { - assert(!err, err) - - assert(reply) - assert(reply.screen_name) - - senderScreenName = reply.screen_name - - return parNext() - }) - }, - // get receiver screen name and set it for tests to use - getReceiverScreenName: function (parNext) { - console.log('getting receiver user screen_name') - twitReceiver.get('account/verify_credentials', { twit_options: { retry: true } }, function (err, reply) { - assert(!err, err) - - assert(reply) - assert(reply.screen_name) - - receiverScreenName = reply.screen_name - - return parNext() - }) - } - }, function (err) { - assert(!err, err) - - var followParams = { screen_name: senderScreenName } - console.log('making receiver user follow the sender user') - // make receiver follow sender - twitReceiver.post('friendships/create', followParams, function (err, reply) { - assert(!err, err) - assert(reply.following) - - done() - }) - }) - }) - - it('user_stream `direct_message` event', function (done) { - // User A follows User B - // User A connects to their user stream - // User B posts a DM to User A - // User A receives it in their user stream - this.timeout(0); - - // build out DM params - function makeDmParams () { - return { - screen_name: receiverScreenName, - text: helpers.generateRandomString(10) + ' direct message streaming event test! :-) ' + helpers.generateRandomString(20), - twit_options: { - retry: true - } - } - } - - var dmIdsReceived = [] - var dmIdsSent = [] - var sentDmFound = false - - // start listening for user stream events - var receiverStream = twitReceiver.stream('user') - - console.log('\nlistening for DMs') - // listen for direct_message event and check DM once it's received - receiverStream.on('direct_message', function (directMsg) { - if (sentDmFound) { - // don't call `done` more than once - return - } - - console.log('got DM event. id:', directMsg.direct_message.id_str) - restTest.checkDm(directMsg.direct_message) - dmIdsReceived.push(directMsg.direct_message.id_str) - - // make sure one of the DMs sent was found - // (we can send multiple DMs if our stream has to reconnect) - sentDmFound = dmIdsSent.some(function (dmId) { - return dmId == directMsg.direct_message.id_str - }) - - if (!sentDmFound) { - console.log('this DM doesnt match our test DMs - still waiting for a matching one.') - console.log('dmIdsSent', dmIdsSent) - return - } - - receiverStream.stop() - return done() - }) - - var lastTimeSent = 0 - var msToWait = 0 - var postDmInterval = null - - receiverStream.on('connected', function () { - var dmParams = makeDmParams() - - console.log('sending a new DM:', dmParams.text) - twitSender.post('direct_messages/new', dmParams, function (err, reply) { - assert(!err, err) - assert(reply) - restTest.checkDm(reply) - assert(reply.id_str) - // we will check this dm against the reply recieved in the message event - dmIdsSent.push(reply.id_str) - - console.log('successfully posted DM:', reply.text, reply.id_str) - if (dmIdsReceived.indexOf(reply.id_str) !== -1) { - // our response to the DM posting lost the race against the direct_message - // listener (we already got the event). So we can finish the test. - done() - } - }) - }) - - after(function (done) { - console.log('cleaning up DMs:', dmIdsSent) - // delete the DMs we posted - var deleteDms = dmIdsSent.map(function (dmId) { - return function (next) { - assert.equal(typeof dmId, 'string') - console.log('\ndeleting DM', dmId) - var params = { id: dmId, twit_options: { retry: true } } - twitSender.post('direct_messages/destroy', params, function (err, reply) { - assert(!err, err) - restTest.checkDm(reply) - assert.equal(reply.id, dmId) - return next() - }) - } - }) - async.parallel(deleteDms, done) - }) - }) -}) - -describe('streaming API friends preamble', function () { - it('returns an array of strings if stringify_friend_ids is true', function (done) { - var twit = new Twit(config1); - var stream = twit.stream('user', { stringify_friend_ids: true }); - stream.on('friends', function (friendsObj) { - assert(friendsObj) - assert(friendsObj.friends_str) - if (friendsObj.friends_str.length) { - assert.equal(typeof friendsObj.friends_str[0], 'string') - } else { - console.log('\nEmpty friends preamble:', friendsObj, '. Make some friends on Twitter! ^_^') - } - done() - }) - }) -}) - -describe('streaming API bad request', function (done) { - it('emits an error for a 401 response', function (done) { - var badCredentials = { - consumer_key: 'a' - , consumer_secret: 'b' - , access_token: 'c' - , access_token_secret: 'd' - } - - var twit = new Twit(badCredentials); - - var stream = twit.stream('statuses/filter', { track : ['foo'] }); - - stream.on('parser-error', function (err) { - assert.equal(err.statusCode, 401) - assert(err.twitterReply) - - return done() - }) - }) -}) - -describe('streaming API `messages` event', function (done) { - var request = require('request'); - var originalPost = request.post; - var RewiredTwit = rewire('../lib/twitter'); - var RewiredStreamingApiConnection = rewire('../lib/streaming-api-connection'); - var revertParser, revertTwit; - - var MockParser = function () { - var self = this; - EventEmitter.call(self); - process.nextTick(function () { - self.emit('element', {scrub_geo: 'bar'}) - self.emit('element', {limit: 'buzz'}) - }); - } - util.inherits(MockParser, EventEmitter); - - before(function () { - revertTwit = RewiredTwit.__set__('StreamingAPIConnection', RewiredStreamingApiConnection); - revertParser = RewiredStreamingApiConnection.__set__('Parser', MockParser); - - request.post = function () { return new helpers.FakeRequest() } - }) - - after(function () { - request.post = originalPost; - revertTwit(); - revertParser(); - }) - - it('is returned for 2 different event types', function (done) { - var twit = new RewiredTwit(config1); - var stream = twit.stream('statuses/sample'); - var gotScrubGeo = false; - var gotLimit = false; - var numMessages = 0; - - var maybeDone = function () { - if (gotScrubGeo && gotLimit && numMessages == 2) { - done() - } - } - - stream.on('limit', function () { - gotLimit = true; - maybeDone(); - }); - stream.on('scrub_geo', function () { - gotScrubGeo = true; - maybeDone(); - }) - - stream.on('message', function (msg) { - numMessages++; - maybeDone(); - }) - }) -}) - -describe('streaming reconnect', function (done) { - it('correctly implements connection closing backoff', function (done) { - var stubPost = function () { - var fakeRequest = new helpers.FakeRequest() - process.nextTick(function () { - fakeRequest.emit('close') - }) - return fakeRequest - } - - var request = require('request') - var stubPost = sinon.stub(request, 'post', stubPost) - - var twit = new Twit(config1); - var stream = twit.stream('statuses/filter', { track: [ 'fun', 'yolo']}); - - var reconnects = [0, 250, 500, 750] - var reconnectCount = -1 - - var testDone = false - - stream.on('reconnect', function () { - if (testDone) { - return - } - reconnectCount += 1 - var expectedInterval = reconnects[reconnectCount] - - // make sure our connect interval is correct - assert.equal(stream._connectInterval, expectedInterval); - - // simulate immediate reconnect by forcing a new connection (`self._connectInterval` parameter unchanged) - stream._startPersistentConnection(); - - if (reconnectCount === reconnects.length -1) { - // restore request.post - stubPost.restore() - testDone = true - return done(); - } - }); - }); - - it('correctly implements 420 backoff', function (done) { - var stubPost = function () { - var fakeRequest = new helpers.FakeRequest() - process.nextTick(function () { - var fakeResponse = new helpers.FakeResponse(420) - fakeRequest.emit('response', fakeResponse) - fakeRequest.emit('close') - }) - return fakeRequest - } - - var request = require('request') - var stubPost = sinon.stub(request, 'post', stubPost) - - var twit = new Twit(config1); - var stream = twit.stream('statuses/filter', { track: [ 'fun', 'yolo']}); - - var reconnects = [60000, 120000, 240000, 480000] - var reconnectCount = -1 - var testComplete = false - - stream.on('reconnect', function (req, res, connectInterval) { - if (testComplete) { - // prevent race between last connection attempt firing a reconnect and us validating the final - // reconnect value in `reconnects` - return - } - - reconnectCount += 1 - var expectedInterval = reconnects[reconnectCount] - - // make sure our connect interval is correct - assert.equal(stream._connectInterval, connectInterval); - assert.equal(stream._connectInterval, expectedInterval); - // simulate immediate reconnect by forcing a new connection (`self._connectInterval` parameter unchanged) - stream._startPersistentConnection(); - - if (reconnectCount === reconnects.length -1) { - // restore request.post - stubPost.restore() - testComplete = true - return done(); - } - }); - }); -}); - -describe('Streaming API disconnect message', function (done) { - it('results in stopping the stream', function (done) { - var stubPost = function () { - var fakeRequest = new helpers.FakeRequest() - process.nextTick(function () { - var body = zlib.gzipSync(JSON.stringify({disconnect: true}) + '\r\n') - var fakeResponse = new helpers.FakeResponse(200, body) - fakeRequest.emit('response', fakeResponse); - fakeResponse.emit('close') - }); - return fakeRequest - } - - var request = require('request') - var origRequest = request.post - var stubs = sinon.collection - stubs.stub(request, 'post', stubPost) - - var twit = new Twit(config1); - var stream = twit.stream('statuses/filter', { track: ['fun']}); - - stream.on('disconnect', function (disconnMsg) { - stream.stop(); - // restore stub - request.post = origRequest - done(); - }) - }) -}); - -describe('Streaming API Connection limit exceeded message', function (done) { - it('results in an `error` event containing the message', function (done) { - var errMsg = 'Exceeded connection limit for user'; - - var stubPost = function () { - var fakeRequest = new helpers.FakeRequest(); - process.nextTick(function () { - var body = zlib.gzipSync(errMsg + '\r\n'); - var fakeResponse = new helpers.FakeResponse(200, body); - fakeRequest.emit('response', fakeResponse); - fakeResponse.emit('close'); - }); - return fakeRequest - } - - var request = require('request'); - var origRequest = request.post; - var stubs = sinon.collection; - stubs.stub(request, 'post', stubPost); - - var twit = new Twit(config1); - var stream = twit.stream('statuses/filter'); - - stream.on('error', function (err) { - assert(err.toString().indexOf(errMsg) !== -1, 'Unexpected error msg:' + errMsg + '.');; - stream.stop(); - // restore stub - request.post = origRequest; - done(); - }) - }) -}) - -describe('Streaming API connection management', function () { - it('.stop() works in all states', function (done) { - var stubPost = function () { - var fakeRequest = new helpers.FakeRequest(); - process.nextTick(function () { - var body = zlib.gzipSync('Foobar\r\n'); - var fakeResponse = new helpers.FakeResponse(200, body); - fakeRequest.emit('response', fakeResponse); - }); - return fakeRequest - } - - var request = require('request'); - var origRequest = request.post; - var stubs = sinon.collection; - stubs.stub(request, 'post', stubPost); - - var twit = new Twit(config1); - - var stream = twit.stream('statuses/sample'); - stream.stop(); - console.log('\nStopped. Restarting..'); - stream.start(); - stream.once('connect', function(request) { - console.log('Stream emitted `connect`. Stopping & starting stream..') - stream.stop(); - - stream.once('connected', function () { - console.log('Stream emitted `connected`. Stopping stream.'); - stream.stop(); - - stubs.restore(); - done(); - }); - stream.start(); - }); - }) -}) diff --git a/node_modules/twit/tests/test_helpers.js b/node_modules/twit/tests/test_helpers.js deleted file mode 100644 index 79d2a4c..0000000 --- a/node_modules/twit/tests/test_helpers.js +++ /dev/null @@ -1,13 +0,0 @@ -var assert = require('assert') -var helpers = require('../lib/helpers') - -describe('makeQueryString', function () { - it('correctly encodes Objects with String values', function () { - assert.equal(helpers.makeQueryString({a: 'Ladies + Gentlemen'}), 'a=Ladies%20%2B%20Gentlemen'); - assert.equal(helpers.makeQueryString({a: 'An encoded string!'}), 'a=An%20encoded%20string%21'); - assert.equal(helpers.makeQueryString({a: 'Dogs, Cats & Mice'}), 'a=Dogs%2C%20Cats%20%26%20Mice') - assert.equal(helpers.makeQueryString({a: '☃'}), 'a=%E2%98%83') - assert.equal(helpers.makeQueryString({a: '#haiku #poetry'}), 'a=%23haiku%20%23poetry') - assert.equal(helpers.makeQueryString({a: '"happy hour" :)'}), 'a=%22happy%20hour%22%20%3A%29') - }) -}) \ No newline at end of file diff --git a/node_modules/twit/tests/twit.js b/node_modules/twit/tests/twit.js deleted file mode 100644 index a057e57..0000000 --- a/node_modules/twit/tests/twit.js +++ /dev/null @@ -1,105 +0,0 @@ -var assert = require('assert') - , Twit = require('../lib/twitter') - , config1 = require('../config1') - -describe('twit', function () { - describe('instantiation', function () { - it('works with var twit = new Twit()', function () { - var twit = new Twit({ - consumer_key: 'a', - consumer_secret: 'b', - access_token: 'c', - access_token_secret: 'd' - }); - assert(twit.config) - assert.equal(typeof twit.get, 'function') - assert.equal(typeof twit.post, 'function') - assert.equal(typeof twit.stream, 'function') - }) - it('works with var twit = Twit()', function () { - var twit = Twit({ - consumer_key: 'a', - consumer_secret: 'b', - access_token: 'c', - access_token_secret: 'd' - }); - assert(twit.config) - assert.equal(typeof twit.get, 'function') - assert.equal(typeof twit.post, 'function') - assert.equal(typeof twit.stream, 'function') - }) - }) - - describe('config', function () { - it('throws when passing empty config', function (done) { - assert.throws(function () { - var twit = new Twit({}) - }, Error) - - done() - }) - - it('throws when config is missing a required key', function (done) { - assert.throws(function () { - var twit = new Twit({ - consumer_key: 'a' - , consumer_secret: 'a' - , access_token: 'a' - }) - }, Error) - - done() - }) - - it('throws when config provides all keys but they\'re empty strings', function (done) { - assert.throws(function () { - var twit = new Twit({ - consumer_key: '' - , consumer_secret: '' - , access_token: '' - , access_token_secret: '' - }) - }, Error) - - done() - }) - }) - - describe('setAuth()', function () { - var twit; - - beforeEach(function () { - twit = new Twit({ - consumer_key: 'a', - consumer_secret: 'b', - access_token: 'c', - access_token_secret: 'd' - }) - }) - - it('should update the client\'s auth config', function (done) { - // partial update - twit.setAuth({ - consumer_key: 'x', - consumer_secret: 'y' - }) - - assert(twit.config.consumer_key === 'x') - assert(twit.config.consumer_secret === 'y') - - // full update - twit.setAuth(config1) - - assert(twit.config.consumer_key === config1.consumer_key) - assert(twit.config.consumer_secret === config1.consumer_secret) - assert(twit.config.access_token === config1.access_token) - assert(twit.config.access_token_secret === config1.access_token_secret) - - twit.get('account/verify_credentials', { twit_options: { retry: true } }, function (err, reply, response) { - assert(!err, err); - assert(response.headers['x-rate-limit-limit']) - done() - }) - }) - }) -}); diff --git a/node_modules/twit/tests/user_stream.js b/node_modules/twit/tests/user_stream.js deleted file mode 100644 index 45a5661..0000000 --- a/node_modules/twit/tests/user_stream.js +++ /dev/null @@ -1,38 +0,0 @@ -var assert = require('assert') -var Twit = require('../lib/twitter') -var config1 = require('../config1') -var streaming = require('./streaming') - -//verify `friendsMsg` is a twitter 'friends' message object -function checkFriendsMsg (friendsMsg) { - var friendIds = friendsMsg.friends - - assert(friendIds) - assert(Array.isArray(friendIds)) - assert(friendIds[0]) -} - -describe('user events', function () { - it('friends', function (done) { - var twit = new Twit(config1); - var stream = twit.stream('user'); - - //make sure we're connected to the right endpoint - assert.equal(stream.reqOpts.url, 'https://userstream.twitter.com/1.1/user.json') - - stream.on('friends', function (friendsMsg) { - checkFriendsMsg(friendsMsg) - - stream.stop() - done() - }) - - stream.on('connect', function () { - console.log('\nuser stream connecting..') - }) - - stream.on('connected', function () { - console.log('user stream connected.') - }) - }) -}) \ No newline at end of file diff --git a/node_modules/twit/tests/video/station.mp4 b/node_modules/twit/tests/video/station.mp4 deleted file mode 100644 index 4b260bfab37fa0128001d09dd34b153b30d082cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 483626 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�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�BIl2GH!g- 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 z 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�lc&gc*<5*z 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≪ z7OAu-08&7$zgf0bF`36|0@@ye%2`T^%c{iU-ykDY-Nf=1ewD*e35ZG+y4{TRR1*Gj zJB-vilH~@Mb4qBt5iG7IkN0c1NqbT3k}5QrlT>z2*zjuVie9(TUzLD2Y<+!m!;Kylb>41D9PPa4?${AW`z2BZYZJ^vTcZ**ulsl zm(R)O5^G>{O~=t-Rni4ZORB|L%OeIrVpk=XA;;M~IZ%zFe0rSc&VdLx0&spfZ|`__ zDsoR+6Yw;gWA{>iD@d#mwIS^5mDc9GA#Qv+u-){U-+xL)dSW8*uMWX3^T58)d6uQ~ zs^12=+J5rGhiyK6b=_M(dY(7oJb^#GU=#3(&AZuq-Bf6%q#SUkCChHGSADZLZ+ zqQf9m;BvEXVI>XCS5cbE1{%{F<|z0f-m-V#0)j6P03K@!iTG3lJK84O1#Ks~%Typ~ zorlEom{ItWjtj*F2tC_M+)?nxovKCXV{VU$w9Glf2_hlsXB-{Uw}*kvJb#U>nE#?f zk4hWBbM|lP+rE>S&iYx7rr2W2LOS|`DacPPi`Q+SI{VseLGJ+l{>pZ0l+h3p$6X#>z ze4fU774F3-@hZw zQ(PAJ8>a++6buMp_fcOmZLxG4<-Yprno*cn4gh+Njw1+H2HA5a5m+@mXpd3weuQ>z zA7U_OCty&7;GQCreWJK3Q2_pN+udNsc3?OmIa?1O+OaZY)w_G1H(`AXOZg0@%}9@C z=Iu(&F>0XH7w><4b_vMVLRyxYe6*}T-kXr;20e;v+-6TNT!3DsOGL$=n3CCRTFRcK zPR+l8Bgf!W%0|SEuO!-;zl2G)Qqu;8zZx&TACjYBIp*8H9gkEc@*^K>dKc|QWG?2Y zkUIJ-pwS33WWaO*z-J~2(aYoxtml*11*KS+hU=&3rIsBwUMpGir>fK133+`nDp2l+ z1@(0vuV=ku%+p#JrxPi2g;(c*Q0mxGObE*YoJ+RSigSI65_mHRU=R!cXm^`5D%=6; zq|YowzeK<4jUr3>_(60F9f-DSxei|BbNr?wFln+VIWm+9Wo#=q9#f4NmUyt3g>uTS zYZ1rr>tdQuC|TfP8NPY9UQbVI{3d*t%$d5Ia`B4a5UT60p05$te=Q-iGeVn}J%Y-} z%03M4`S}dDmC=6}u9^N}dsIYn8w%k>!7tS!zseV>e$dPb@^80!`K`g8KbwdWJo z-^f^k2gPjwZZy#Y@@e&|!i4xNe|(5%qc_reJ8*AR^lho^ZOPe;h_j0lQ&FTIALApQ z-S~IKK9%4BCwJ^|OXc|ob=>D+3y#W+!NK4=*TNZe9Gysq#)Kj%V90P$auF(~Q(^hTod z?AK~VBPG1>5#TSH`ByS${}l&b8WG6hvSXeFFv+3k^s~dl*V;-l@v}tYVc}=>-=MB9 z;{y|5m``X3Zpj+iIuzFhA0IR8owA6N&CXu)_6@77sT)D}55C-LFscPk3$t3;QeW3Y z^3c+GGfO-n2jLZtV<6~}dilr6Ui0Q`CSk&Y*zI1z8=_q2nn#>ZPYF}avX+jeY&xs} zBfp+05?(h=L91{J*_%$>jRE}#k!O&|#SAd5nIC3?qzI1=xmYy>#ED7= zM@r}UD7){?VQ#Gu;z5v$2*5)A4p&VH9j$|_O;Ct8>9hhTkBHmLPAy9=>F{T7v|`}e z?BuHBmQ<#d#>V0MMAy+veq*CL?nbD#6Q~29r}KSSbEgF^v=^LuYIvA02qtUL8A~vw z6eR*+DED2%s#gdoDIvol+oCqp7sc`B*!+cX`X=g{jT#?bIrkBTj$F3XfpV`sOb=n2UOy^9(26ZBxqQWd{!CV*-JI4^yY6$s< z3MV6~k}!tyfx4XFN_7_0i-S21T$=lu#chNX>gY8|fWfN_#7#$^mm z5^7}x-2rJn1S7DBqxzc6`&tvk{-7el@D<{CFax4IzMx-hKe$X?+hEEU4Zj5(7;=QG zhp`jD678D?tgi=(dD(>Rd?yA&pdXE6n|Pw-Xq4*gD1PRjzy@K?eVCboCGHVwMLLmKn5IxOn3A zKVat@!hL&JG3fU$kZ4)If((FbZ0x%7Za_YbXzNpoGw>Oc(onOlVma{!eVU_M;r1EM zO~*;ow9MO0#M|5b_ zmm{eG&>x5eT2gy-=SxCW0~DMldya{8>IJyP-m{&aOCN)n1F#M&sD$71)(v`AU3n60 zI6X#+baZ;NNtLE*%Ax=ko+|dLSDt@udnb6OxkCC4o^|&UKxFs%X5Y`ywz>i!t{D3Q zTao~(2k~kz?DbNFP`|{Mq5@b4G3m|9*TG3A>(yhXKgj#wqm<*0h{Gn@DG|#9VrV?DO0t=plB#(-2ITYj=LXHRY7>lJqrQekW84(f=+C^{~3c zLf*OuPU7KBx1^7al`|jlf0JX_r;4~O3x-c>BwajMb3vU@*!4V@H}+!B+}ud|7B;HL z4?A7W!(WZ|RO-lAQUT%jIpYhoZjAKpR)PF95m0c2-|6=;pZiqO`JS}F!=uT-2-RAN zQ=kN+nHma290Bx*aM_RSS#BaN>kB3HyC)4>^NrN&+SsvhbJ)oNYubaq!tT z!Je_ovfS~}eiQjOzfMy)?)mHpp@}0uvOYvzy^hiNdyu1+8u{Yc@E}6$0co3o+Y?$d zioDRa5i>szDiHk>sJimhZJKI#gzpfmQTWSDU~xZ+tML|u*79zXVLtL2i%BN8z95j& z(KVVpy*_J~NGe7#iokhH>OWUHw|ki<$^h&pz{CM$7PJ=+ius;H=(u0%1i64$bqr${ z*HqSgz=ah3mZCPEC`I@551Z8ivA`xNZ+k;gSP$bwPzgHjs+##_?&wI z;a6vhD0RnA_Tm2$`>&CUD}kc;*NPXN%6s5RJUuffT=!guJiJ*iMzutO3~CWCp9%X8 ze;WNDzbPBly^Hm zyUsp>Pc>>n@btYS7n0EY3mA&lNmxqdIHe&}owmb4_Uzx*!0=AtmsGlf#P628JQt%O z9RzFZ7%4qQ(H!y5HunnWDdX=rjyUT|uBWTd=7P#o4!;6CQ(UCly=ezp0nQq4h8tpK z)fU0H0p8<+EyhV=IzJ{BM><#fV?`AC7pSs`iXw^TWvf3@3cdF=uYH;0hl6 zYOH8~w25@xH*KSOIL%^vtX~^d52HF_l9j88sbP+Z2j=UUP?rOXY`+!})UsmF*h%Sm zIF1M`NPq>_O|rb{Cp6i3Y^oBvtZfk^o?a|(Mu;)=0@X|Cw&m59E_;yS-=9c11N?&}bW1f8uIuiXZ@`0Ao)xChhzgO9`H-6 z3-!ONo)li@0p~6;_IeZ>r%$2)+%$lP%_JcvJ68c?!u~zo2~3iH`<;_v{wy+h#76^D zQ{EFJ!*S-MrCVG(Q2+k~hE19X%EU1gZM{zTpnFtbz=owau*SyquBGcTKA8s%)bNej zMsYALIo$dN8&!&(E8mppUUHWo!0I1g7x5J0Mooo4T@Ei7k?o^kz`qO`A|^?koVr!+ z8{hHn$5hxnvzEm1ObX<5DW<*6`i31o0rS?tx5Ut%Z`)_nS@8e>72iRgHZZbEA}%Zc z&+P+|t~7ujWGV%^_N1r@+smVL>gBE#n-vdZZ1=F4b(KgrWMc zrOQx)>w9-$aiEw@MhUJsZi6e9yJ$!YhU$p(2J`!`#{+)fc$d$GxP|{GadnrguW#)C zuLcwiQTOW>yuTt0by{AzCoE*RjllYpyc{E5nK-P$uVqP;sUk2G-Q{Ke7;%&A8PUSw zIJ2tP(G`w+Zz*P2jStzOR4uq!u!v@4c8K){i~s-BngSRHujLbY`Nl{WB>%>mquI53 z#a|u(q+*8Jn@{*10qEh@b2i4HTdO2vAVb^g#)5tB8~pnNWyjHNt9s`ZEhtSfUqx3X zNwr=&;AL${j9ZV+uiJi*TqxZV2m!AXZW-mmQ;%=W{Cv>fyX|W=7mN%352DTDoRB_V ztVAFEQrmEp`S>+^T-)Dd;us6*2DP94j4i8tJPy8%Oiyi}%?Z}+&%rk(LVtz0`4g%* zY^7uI&JLiUH_TTaB+>qYE!;69N1YrZFTvR(cI-891E8o5O*v(Mp%o!w+8SEoPSG;Wj!)unuv~u_XY3qLFNj855YW z9B~3}laWk}Z*!4M2o#qT4msG{CjCrY6uJvP#)zWNMBTHFatLA38fS#uahKP+8L305 zqf_JSgVvN{-Hc|55{Y()-B}4^8t0^O@Y!3O)dx)b!2UgF@}R>8bgm1M`$SL>SID0$ zxJ>y%s~C!tEBPP@Nhe1W`0mcRpSB>UyD~gVuk*|OEeB#6Lz)MOS@O&7PIN6+Y}lz^ z(OQIXJf!-8C9DS*vNXpe)ijrE8EN-2cQ|ev)%a6M-Reb$TPZfrq(%8Xr7`!fuaWX} z)5v{Bf_KOw1jh@I1v1*=d-k&j42IT`-EY!RPZK_#jeLq9rzSu)c?5R*@M_1?=ip_X z*$KH-OH741UKffpT^CCY;~zl8O^>c5ElRbO`)*|#rZ<@3uqpv)Th&;}!c{o(m+qba zpd6*^rifa7v_j;j$OjtvcQ-RS7LRefwL%0q_Yi3yLitrj%(-&pyNs*I4+sfAg^>;`-&hhu$CTm;56drdynwDY2Q3pSkvaEH(VTCfb01_OpfI6WGdTi6@a0)C+A40X*m*8F zqS^I$Ee)Xk|56QD+j?IA`K&08QmR1zx}7Z)FaqMN$5^H;lOv&D5wB@u^&S#F=jBqA zXtWR zzuZsJ1ci7A`7|+>Xw&;Js1L5YcQ>d(xO+M0HaJ5zg8}wUs7q?gks*Y# zdWEJKB}Akz4tRk`g~wi--SakeTv{(J({aZN3w3ZUD@zdGBldZS5ObcJXFurlwB>19 zLcEyhnup?}yt9spqdSh8Ub^SMZ(x- zi2&|LX1K8LK2Ib9U)FFw_@Io~%545{=)*vWzEyr9%BSwo49?*WeGcR^3~#3*RtUSi?fuQLwxeM^MH5G$Dc~ka((WM& zR`JQ*DhtWxfGj7bPj(RfSS7zH zMsuR4m&B^WJv~KUbz*!d6LSci6ZpSbbtZ2~Y^1PH!P#cE-!ae(Cy^?Ugp#OS18qar z$4KmYxvx99lHdhKvG?G);rrNpAL*@zJ_Au3c~p2lYUVv91v)`hz^7M!S?ENVca0jt zb6j3V?@XEXUb}%}0VxFcpahUt3@n;Ew32cPZO8+C!l;QEjQu1BWjzzE{+$xW{AdbC zk(moG*ZMwC(ha6)Yp*uBjn92VY`(9`kaBxY5z0#KAg(F(igKc17Dx1yW*d0%<$jZ8 zbI2RXZn#<|I?%r?ax(d@xyKI57RX~}!0JeQ*VO}jC9OvO!9nq2a-aREkCueHvw0&~ zJEeUy&N0teKwmJ+ z20jq1Szb{FlXzjABl~)x&U~j|DSwB-7VrW?E}HWB#7S)wPeG!VcTN#`x`_>2uT+N? z`c;eZvqkIpe0I@6uVtVSn>yCf|NfaUxPc`7-o2hI*8Bhxr_b0vUS8KPy~s zT@eN7J$}R3h15J;fkQmyu+7Kx8rX7IpdDgq$9Q)y6mDwGQ?FkkhjNdUgEn8T+@(je z`~*X7wPag0Bvi?GwT;YN=pYw+)EO$tt+5SIJvhh@_9pW#o2brTZMka}r6ju(@XR3Z zM2g$}gfsYoor8u~uVQlfebQpe9=zpf3cd0jIa;lxi=5Zqvbd60^oBXhD*R`5)7LdQ zEM`Vk%E=vi_OSGeiVFR{9|>x^L*@fS z0StdZVFG)xalwKy(E$U1^@Uyp{r9aO(C8y)=^$y1@Ih5o*4NNb_!#6qS*zfhHYTzD z-~MHC7m{{sG2#=5kLBTC3@>ZlQw`Xb+Axe+BM0ki;43AT3`2K5^6ik)NxyrU`{C*!_w)sxbS3g- zh+=Y=BbM{0nKgqn$a3@EpxF-ELkX|}vdr!&*b{CUKYK`i}agmLoNiBruPFXg9 zxYQ{kCk?~i#*ofVQ@5fa&BOBti=>I=wISZ)IjD!X()MI809@plrp(YjzIo=|F`rh@ z9D13QIx%zY{N{eLwNRv_6D#JVT#+y?>mP@|X1kWNx!o+XW0OpsYWgnBi0|&y*a3F{ zp_uo4MB;FV;(C8db7yVmb7l4N?23GrD?|nP@N!z1)UhvF#2?nn{~Lig@3HYejhi(B1t7oxfb zrgcQ8_!a1i<196Pn@ok|Y+WSHeet;QO)L_2@QnfagdArOOC}Q|=~LT-E&YOrth^AS z=zNdq(YSmZ02m+*EQh*@S2jPnZhAvH3vWTO;b8W|OHT&eATD-xc{NbD9b_MsolSzq ze;uQbi{6Q`1tg=U^~_jpwzg)rBv3U+Eh`sK>vhtMrgrU{7vTLEh{{9`tIe4ej&4wQ z3i%SeKm?MrN;}76GWm2mzXfCR%Wqk_gqsCxwV$l(2zX!Ev1m)cO&U?`WHCiQAut?J z**^h0F!WQW_=QObtbRO&jLImp^NuY4jHqaU?TC-Jx+0)HcPZjcc2{q6P5kxE?+KMu zRd15^WQ9~~q^a-4jQ9dT(bOThrXEVoAzFXO$2FqolcLsY$Hu?JJ?%^H39F{^dzpR~ z9uX!|Fvd4XMs#SA0i%P6=Jn22a^?#fHBoaKk%Crnwt04GLatJxWN3K|k{V%-8x5h4 zJ-L33cbk5C=xVsCb~py#fn?6MHBm^uh2~rpcT0B-ks*=hPQftEudmyppL?}5c$J&p=5pNoWHTrP zZek=wX9jlmw!n*ssxyM%RE`>ENuCZ*_!P({Th71+Bua6+}78 zl9B4Qdrpl%m$62pYEs{CJMePG?}lzlD~Jg2+igc!`Z%?oLrF(VXVXwO zzvg$E04q(J2s0~ucA0BVZ!5!|e2eN|P~A=R!4_q`W37cI<7q1!%A8W#-+o%;NIIc# z6bCmzId|w`FCL>)SU%5ANOQ6wB$>yGF?K|=mJYYSxG$-KK=kQL3n}BAo&9Qmv@xe` zNl^lf?@&tDytNpGsV*}gpK*3bd)H|f#h%ZRDQm5fC;Eh?bc5BE5t+Ud&N{ZkGx502 zBPhN5c&R}ODsKX6Nu0XyAvlO)C9fJNd8S%|ln6RF%oCS>9+Fxk)taOS*XfqOV6FW=9}_ z$@J5w`qU9HU`RVi!wz-%@;KIIC~F|wsA3s$Hu#$zaqqSgiV@R!MZW$#W>PqRefCa> z(Vzypp~CvfWB_kjs5kp@AG(fX3ZMMM#xd;c@5TuLxVorF?iCqyOtT>A*~a>qhau4Y z)q7YBFVtIX4=kt=Z4(Yqe!Db>N`>{i-L$}N{P)bpI$X%&xPgm==cM=HXTMz*> z(Pc(SB(IzYCUq6K1ZWgpYx{ng`n))}$ z9llvq2G2&+$FOBX9_0lZA~>Q|;;qe5Ko58K_UXs3$7h6qun=P%G`!GqCkeT^m+N2< z96<;wu`(xS2mIVF$j9%*`d0!zo-ABa2~sbRcKrNOMf;q!I*lflpSBqQ{M#RbiWp`N zqs{XGz#5e6mDR?)c;B`n?5auxXbPl#i+5%nGvmpk!<0y~Dq*vaY>rdV!^F4QY0rv@S>0n^REdsA_P$XFz`&V7V}+3l5igJ z8#9GB-tESy0zPtEtIisjllk|;>d0UpevnFaFNbDpWXT??JTb}(N@A6Y-ueFO?pt~t zf6UcETSOaPA%7!TJO!OZ2h#;mpPlPW7RXR%*OAL^r6Wzrl9L5w8v5$0E2$8y;vK{h zs6ZKgRJHx$iu}0Y%3K(8r~r{eV7s&Kk~Wxy&cT*mvoxrC{drhWJa?mQ+=v83u7ffO zgr1tH%A*VP9f!#@Z**#MnH(@kw-$0dv#gwR&4oYiFaAP3kps;_C%0TcbN4wJ-=U(A zB(@BbvUnyE9$x?5v>`eilwGx{{V3pt$JN`*LmSU{M!(X$Ld|)VQA|i{Q4DBv!xetJ zhN1F6l>}YMkk7mE00{O^qffCTnkTw}V{(1!lc$DXbN2}P@PKvHL%QfCRzsFh36vD1S(IZ67J@I@_6%Pw-Tf|p zHD4a@62ZZGb36^ya?Ze$Sg_K4Q)!bdR%hz-E`rievmqw>z$oXzqNlhykjGzcE9ypw znBscB9R%lvzeeOqf`cxkH7bvcYO53m7i?Ey zcth-&XOAU8rdveUM#wI9YrL^~vo#Q21cagH5pd2Ic^cUz7k<&%@vL~qL1_Yso z{N*AKf%#p3OeCk|nR86s;rNmPLO=YUH6~19EzKrp(ZRwetuYh9Rn$dYZYg%~r-pTPGD3lv*7#r^(sxM{vWHi$u2wo2h#J(!az zo2P>|t$QaA)6Z%(Gel%?6MiGN3YgI|o}|d-%_XBKhb*+K0mTYTV~kj^loOL(Nd&T% za9s?~3CEo=+L`hEt4!jt+9Hm4-vZqE0in`==8u=2_igW6&z5idB}T}FJ#J27oRu#t z%X^a$weneVMa74WOjt@qEb@``D(`WFuLVHv_3i!r=B{9{?}nlHUWE(<7zIToe^X^l z8$2}AyC#|NGT#e7R&=K<1R9v=kH;h$f_Gp?lqvFi*S5)K0Dcl3S(?`9p&F(xoEd7# zj{RJzr2y_7r6Yf&KsF1GsSNg81Oz6YZj2<3i}Bv}pm^sE#Qu^ajXGOK0t5u_Qonm4 z^VCz}SD@D7?C+-pnMrjMQBWazgR$om(f|MvApxE@Ff@p-&;c6Es%~Vqb`M%Hp!>N^ z`@EdwcGd2`$h7VjFU#lzM=^UmJ_%YL+ls6hD>bd5D~4QyS9!HxI=d<2`w)LCihDPv zxpe&*@ux<=8I9!U#Wv*O`tKh8a0yLQeeh8@)KEcQfKJaU8otWu2foA75Rk9K$iJSq znOmXGUJm!0|1<>$+7%-obl6m5U3ir5h(^3MGT_G-O(sAEvQ9rYJ3dxl+FTC z)br4iv}i8Mtw4kqH0Tze`@Lur-6MzNzh)K_M;}5!l;<&WeQQeGs^-3|PHv(TlEu@U z@8x|WTU1C^4~Y(N;$WkNNew=RIHfS@&DW=L&)U3qyzP3d?rY3Q+$)`w>S!q}!rMpD zR#jeLn`%{)Hq}ErOJgpe0XWe`CNEfz)XC^s++Dp6f}*&0Tqu%P%bGljYLz0HJqYL~ zVb7&>r%3jyf#E#G`<6Chp!GtTle&s}Z=9CR;#X>lltL0(S|NY4d$Pk5(X&irB{i6V zR(QCq@~Ml6n*xHQ?7mn;L>?VWqVZu+pxq`*b^o?YAW_OUgJ_zjp)hkBolW z%*1lA(_l)R3*v5bLIvDSD-Djty9^y=i#d>Xc|-@W{KoV^iXTg>cvb#(#Y(mvdj$@p z=$8gA6o21ob8leb0WSVFh%l?8epzQvWAYf8*7_0rHd4%8?aooIbBn= z6MBtG>L`2xruGP|nv8~$-=3}i-8@xjW0z~14 zgym>m`L83t1g?6r@1v>e49Zw`YE8A6kp8@?YXe-`Qqy#z6M_U&OKbOS?bMCG*k)Lw ziQWe^+3eFKHHaP%rU=?&BC*J`sRR*}G_NtjoL9u(`DoI}utPR`_}7S>dk>9fyQdbc zOpW)rWZF`_M0s$Jt5PeCx4fBGvqVcjm^U;>_~eOMbU~l+^asXml_CEWq(s8zfh~(~ zI6wv-Wjtd5KKbriLq@^fa@s(M))zjeu@wDeOmmKWUK7YH47T+i7@w_d*n(kH2onK* zPFB9PtY>Fg#7E= z`Ic^Ox|5#$5o&xdPuu4U8oS?2-#YG*_44oS4T??Fv}GG zd7Ul=#gbOwK5@TC!NSA(B4MN-AX_qEznfn$PULF~42&#L)+*H>!CHRO#re4l{UVCw zx>f}=lC!+x%7?C0M@ z-(jRMrYZ)?-_C^ew1)PfW*MQFE3pLTS3qBacTElPigCRDS5dR7yf?DU6O^y*O?jcx z(V7tHinx)rmGMUt-y^?CIV1jAJ?@!p-0vZSV&j+Fo11cd=}+T4TkZp#Jbl zE0BakM=~rHoCM*CPXN`09>2nVzBdEWp)H;v1oo9N3vX@q70?P~&l+0;tWhjhu3@4m zHW?^T37`cvH<+%EaS5lBPtgC~AzFpCEbWqH{g)N7&kQ>80dJQk500@r3$A=bSj2Ri(( zLWXlpvx_(zB237pImY|Bdr|8PJ@KSZ@5TG>3DOSYQU(*l{T@{j;8$g9^vK#v|N51w z99-4`^>4h2D}e*0gvZ{7BvAN>R}mVl%chrnCxZT~fBFY1je0P!yaqE}qNJG%`wnsq zpI}a}Z_}ODETS>oewJnW?AAuf$KWHJU0%cYwxwtOC%P1Zuv7NrUJWr}`M~!*2#9_a zme*~@>ku)&Ka8VF_V28d#nE%^vwWtFr!VXb+^%(E-FqRtoIR4VYm0! z7&C$h6Yz=QtIKt3=)wz!v zQ#P-B09S%lU)Z>S1)+Os6LwGN&}R7xq*!8v2-6l-k)Znln4d!Dhk09Nt%Vu)^>%T` zfg1}nBQ!(V=N-fB#(2?&_?%V?oujgaL@kF601_y)LmsZMn;2^PG`gmfUaP-po>*DN zPM#E)Dx9|rO46*`oS(rDm(L|6GR5_v_u`F?_zD9Dr(Am8`8a(g_W+IRvzXskBn0aI zXSpz%T8r5dKbmPtTCShh75%wP$(oCY<-jH}#h1rzD1H6S4wlyna@u@PdC>{at_Wj< zy#B-=e<_A5qRh;NLh@I*GaCuKMx%$v^pTK%s>kw(=8vc zGogtW$b?$AH)mJR+Bj>~S$anJ0S4(N`CR4Znr9~&OnQIfod~Rh#H#a)+rK>OSWKx zOby9QTw~@_ty|cd@}Q!GB;^CMr83!JtL~_xlSI^AL!JV7y=3M-gB&nIH#nF8#)#(u*NdXE3R8v_vv#^v4?d)zyoK#j8n<(V=%F-Bz&`&4TCaW*@ zG;Nxmv2xmf*l0gRbFuNJG;c6pCOs|L>Sg^_QTpL*5q0h97ojPGd?6`hY2o;bH)N#$ z*O>rElPCz}W_txARkc0PG3rCNe-#10$AhYmsQBid;&sY%_YHJ2K*claC+-#rIm=XO zHgf4c+;Wz_Iu+jO(YQ-TkGb0uQ$cAL^oNl4O! z({}>Ek;`E}`T!APS6wmTcBReqAu8@Pt$!B*q-to*JmWRe6&Dnmn4bL)ztX};1u2Iw?=K)`|&N)2thf5+JIh`rY=;hb3-*Q2Sho$1=ejB~wqh zkdGo!i3XueL#r3P+$+CvQu27(@HSV@mO$SCVH^#6?2v%TvNi~#EWN@*BE9QDgQ~(@eY*-C$&iH4DfsN{Fj~l}5Zu0yM zt2q2VV^(Pt8!zQw%O$ii*Lm)bKgqo4+)OV~oSR;1h_Di_GBs%QVWXG_n!+O*NnuDY zQxkkk=4T1A28vN)kBDJYvu0F`uzNKQ2oUQ}m`YzwqIFsoTL~BavLeec&7PnB4Q7yTY`$1Fl+=!rFnD6AJOLZmJ zKm&ikNZe}(8+3H*qiwR!B$yy2L{x~sd0^Of0NV`n!;cG0EroQSt*)G+OEwX_aUxn0 zq^5jmzEUc+4$^)QxwsTfJzF!mz{6MqvQ!{G9OzgtjAbM>o?<9gCtB%DHUrb30(!@0r&2fXTJK2)I;(u`R}0|}%OBq>Df zKGd_!h0sb(O=r!^p;qzN9X+duF^n2s?&2G>>JUJHiIjv`d-d*>mvbC~{}@Z*@C5B%6NsL>m)E{9ji z4a{slN2*Fv=Dv$I)Vz=sr3Nsv#F2Y)P9qd0#~UpMFRnX-{Pp}=P~Cl~6{+#0C)f)G zri=rBcZNXC;1()w$p1ve9}o-OR(4b#n)9a-5bOpV#oIC*7sF~>b04hFm$1@2D$65B zIo~b2R5ff1q?0m--W&`OUQsQ5jE+nt0KjLg{Y`S9+f<^A`)&#E1j%*CI*dwa^X9An zh%DKMP*l-Sq?;-ZYda*7+636e&yM_pYR9;Cr7bUstA^mu1orM5b|z*y()3Y9ur~5~ zJz_LWuDnc5K z9~H-?u;~XAm{6*3_PN`&&L$F~#>)`~OsD5ghxV{ae4@ zCa~|}%BTPIGvGm=Me^bsiao_T)Vq%0nj{uR3c486}H6Gv0~8#N2!CdRg_+v`dYf8gGx9JUEB<@p1PR2$=I z=Mv;VBz?t(ciJ06u}Ipncg(eHG-%mJ=F|t-G?M%#BI^M5-^bJrnKfb*(UQsO?QIj4 zN)DHQ1o>Si7JL2-iqyz-cL`FT<7F|0Y_mhhb&~x3p5Gl9bU@nv9mfN89oKq#GSRWEbwZ*x)r3QSY=^JOQYHH?;ejLCwY zs7QNO;@S6OTSJi=YCrP9gs6LP?ajn=a8r5V-s8SGgqK&%8{M!A=OKg2f&Q*DSZ7($ z`s&aT8g#ZU`Ak?U*S)t1P+RwrJO= z(sZhRkN=-u`!tNyRbWf-(k<8H0Vy>Rq!HiZReQA8Chmx{-DAl9 zqCWlXoQ4W;P?b$>&o)RZ9>GQnDsw>_HtpES5jk&(t!Gs{LLeyoKxyE48kUnpujsZ{ zoyM$`JA$dDPC)s~;ykA9k-4q*eV6aW62HJZ%ETEX9cFwxHof8sO7Xm$VDmbVRj1

5LRu093KB| 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 WF+ZK*&;oE3<6$i>B6wCzP~;y*4WF+7