diff --git a/addons/knobs/package.json b/addons/knobs/package.json
index 081effaf9397..097b5029e8ad 100644
--- a/addons/knobs/package.json
+++ b/addons/knobs/package.json
@@ -18,7 +18,7 @@
"deep-equal": "^1.0.1",
"global": "^4.3.2",
"insert-css": "^2.0.0",
- "lodash.debounce": "^4.0.8",
+ "lodash-es": "^4.17.4",
"moment": "^2.20.1",
"prop-types": "^15.6.0",
"react-color": "^2.11.4",
diff --git a/addons/knobs/src/components/Panel.js b/addons/knobs/src/components/Panel.js
index 062f660c23a1..141fc4e33746 100644
--- a/addons/knobs/src/components/Panel.js
+++ b/addons/knobs/src/components/Panel.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import debounce from 'lodash.debounce';
+import debounce from 'lodash-es/debounce';
import PropForm from './PropForm';
import Types from './types';
diff --git a/app/angular/package.json b/app/angular/package.json
index 8ccca16533ba..4a62b70b2c64 100644
--- a/app/angular/package.json
+++ b/app/angular/package.json
@@ -54,7 +54,7 @@
"json-loader": "^0.5.4",
"json-stringify-safe": "^5.0.1",
"json5": "^0.5.1",
- "lodash.pick": "^4.4.0",
+ "lodash-es": "^4.17.4",
"postcss-flexbugs-fixes": "^3.0.0",
"postcss-loader": "^2.0.5",
"prop-types": "^15.5.10",
@@ -79,6 +79,7 @@
"zone.js": "^0.8.14"
},
"devDependencies": {
+ "@types/lodash-es": "^4.17.0",
"babel-cli": "^6.26.0",
"babel-plugin-transform-decorators": "^6.24.1",
"babel-plugin-transform-decorators-legacy": "^1.3.4",
diff --git a/app/angular/src/client/preview/angular/components/app.component.ts b/app/angular/src/client/preview/angular/components/app.component.ts
index 5f9dffe3534d..f8a6f636f2f1 100644
--- a/app/angular/src/client/preview/angular/components/app.component.ts
+++ b/app/angular/src/client/preview/angular/components/app.component.ts
@@ -2,7 +2,16 @@
// to provide @Inputs and subscribe to @Outputs, see
// https://github.com/angular/angular/issues/15360
// For the time being, the ViewContainerRef approach works pretty well.
-import * as _ from 'lodash';
+
+import has from 'lodash-es/has';
+import get from 'lodash-es/get';
+import set from 'lodash-es/set';
+import isFunction from 'lodash-es/isFunction';
+import isUndefined from 'lodash-es/isUndefined';
+import isEmpty from 'lodash-es/isEmpty';
+import forEach from 'lodash-es/forEach';
+import invoke from 'lodash-es/invoke';
+
import {
Component,
Inject,
@@ -15,9 +24,12 @@ import {
SimpleChanges,
SimpleChange
} from '@angular/core';
+
import { STORY } from '../app.token';
import { NgStory, ICollection } from '../types';
+const _ = { has, get, set, isFunction, isUndefined, isEmpty , forEach, invoke };
+
@Component({
selector: 'app-root',
template: ''
@@ -25,6 +37,7 @@ import { NgStory, ICollection } from '../types';
export class AppComponent implements AfterViewInit, OnDestroy {
@ViewChild('target', { read: ViewContainerRef })
target: ViewContainerRef;
+
constructor(
private cfr: ComponentFactoryResolver,
@Inject(STORY) private data: NgStory
@@ -90,7 +103,7 @@ export class AppComponent implements AfterViewInit, OnDestroy {
}
if (_.isFunction(props.ngModelChange)) {
- _.invoke(instance, 'registerOnChange', props.ngModelChange);
+ _.invoke(instance, 'registerOnChange', props.ngModelChange);
}
}
}
diff --git a/app/angular/src/client/preview/angular/helpers.ts b/app/angular/src/client/preview/angular/helpers.ts
index 4870f525ff13..1c10dbbc98b5 100644
--- a/app/angular/src/client/preview/angular/helpers.ts
+++ b/app/angular/src/client/preview/angular/helpers.ts
@@ -7,6 +7,8 @@ import {
} from '@angular/core';
import {FormsModule} from '@angular/forms'
+import _debounce from 'lodash-es/debounce';
+
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './components/app.component';
@@ -31,28 +33,7 @@ interface IComponent extends Type {
propsMetadata: any[]
}
-// Taken from https://davidwalsh.name/javascript-debounce-function
-// We don't want to pull underscore
-const debounce = (func: IRenderStoryFn | IRenderErrorFn,
- wait: number = 100,
- immediate: boolean = false): () => void => {
- let timeout: any;
- return function () {
- const context = this, args = arguments;
- const later = function () {
- timeout = null;
- if (!immediate) {
- func.apply(context, args);
- }
- };
- const callNow = immediate && !timeout;
- clearTimeout(timeout);
- timeout = setTimeout(later, wait);
- if (callNow) {
- func.apply(context, args);
- }
- };
-};
+const debounce = (func: IRenderStoryFn | IRenderErrorFn) => _debounce(func, 100);
const getComponentMetadata = (
{ component, props = {}, propsMeta = {}, moduleMetadata = {
diff --git a/app/react/package.json b/app/react/package.json
index b690e4867c05..dc6f4d9e77d6 100644
--- a/app/react/package.json
+++ b/app/react/package.json
@@ -60,7 +60,7 @@
"json-loader": "^0.5.7",
"json-stringify-safe": "^5.0.1",
"json5": "^0.5.1",
- "lodash.flattendeep": "^4.4.0",
+ "lodash-es": "^4.17.4",
"markdown-loader": "^2.0.1",
"npmlog": "^4.1.2",
"postcss-flexbugs-fixes": "^3.2.0",
diff --git a/app/react/src/client/preview/element_check.js b/app/react/src/client/preview/element_check.js
index cbcb2f518da6..fdfa3168ab91 100644
--- a/app/react/src/client/preview/element_check.js
+++ b/app/react/src/client/preview/element_check.js
@@ -1,5 +1,5 @@
import React from 'react';
-import flattenDeep from 'lodash.flattendeep';
+import flattenDeep from 'lodash-es/flattenDeep';
// return true if the element is renderable with react fiber
export const isValidFiberElement = element =>
diff --git a/dangerfile.js b/dangerfile.js
index 6b8c437802cf..39f30cd6fd3a 100644
--- a/dangerfile.js
+++ b/dangerfile.js
@@ -1,5 +1,5 @@
import { fail, danger } from 'danger';
-import { flatten, intersection, isEmpty, includes } from 'lodash';
+import { flatten, intersection, isEmpty, includes } from 'lodash-es';
const pkg = require('./package.json'); // eslint-disable-line import/newline-after-import
const prLogConfig = pkg['pr-log'];
diff --git a/jest.config.js b/jest.config.js
index 5cbca1678f6c..62bfa9a4effe 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -14,6 +14,7 @@ module.exports = {
'/examples/cra-kitchen-sink',
'/examples/official-storybook',
],
+ transformIgnorePatterns: ['/node_modules/(?!lodash-es/.*)'],
testPathIgnorePatterns: ['/node_modules/', 'addon-jest.test.js', '/cli/test/'],
collectCoverage: false,
collectCoverageFrom: [
diff --git a/lib/ui/package.json b/lib/ui/package.json
index 4709f0e4a844..dcedbf334b75 100644
--- a/lib/ui/package.json
+++ b/lib/ui/package.json
@@ -24,9 +24,7 @@
"global": "^4.3.2",
"json-stringify-safe": "^5.0.1",
"keycode": "^2.1.9",
- "lodash.debounce": "^4.0.8",
- "lodash.pick": "^4.4.0",
- "lodash.sortby": "^4.7.0",
+ "lodash-es": "^4.17.4",
"podda": "^1.2.2",
"prop-types": "^15.6.0",
"qs": "^6.5.1",
diff --git a/lib/ui/src/modules/api/actions/api.js b/lib/ui/src/modules/api/actions/api.js
index d871a3d9bcfe..0a36f30bc4ac 100755
--- a/lib/ui/src/modules/api/actions/api.js
+++ b/lib/ui/src/modules/api/actions/api.js
@@ -1,4 +1,4 @@
-import pick from 'lodash.pick';
+import pick from 'lodash-es/pick';
export function jumpToStory(storyKinds, selectedKind, selectedStory, direction) {
const flatteredStories = [];
diff --git a/lib/ui/src/modules/shortcuts/actions/shortcuts.js b/lib/ui/src/modules/shortcuts/actions/shortcuts.js
index 1920b154e013..cc7e130bce57 100755
--- a/lib/ui/src/modules/shortcuts/actions/shortcuts.js
+++ b/lib/ui/src/modules/shortcuts/actions/shortcuts.js
@@ -1,4 +1,4 @@
-import pick from 'lodash.pick';
+import pick from 'lodash-es/pick';
import { features } from '../../../libs/key_events';
import apiActions from '../../api/actions';
diff --git a/lib/ui/src/modules/ui/components/stories_panel/index.js b/lib/ui/src/modules/ui/components/stories_panel/index.js
index e8282889dd5a..6e1bc12615a0 100755
--- a/lib/ui/src/modules/ui/components/stories_panel/index.js
+++ b/lib/ui/src/modules/ui/components/stories_panel/index.js
@@ -1,6 +1,6 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
-import pick from 'lodash.pick';
+import pick from 'lodash-es/pick';
import Header from './header';
import Stories from './stories_tree';
import TextFilter from './text_filter';
diff --git a/lib/ui/src/modules/ui/components/stories_panel/text_filter.js b/lib/ui/src/modules/ui/components/stories_panel/text_filter.js
index 0e88d0ffdc37..d30aa58c2c3e 100755
--- a/lib/ui/src/modules/ui/components/stories_panel/text_filter.js
+++ b/lib/ui/src/modules/ui/components/stories_panel/text_filter.js
@@ -1,6 +1,6 @@
import PropTypes from 'prop-types';
import React from 'react';
-import debounce from 'lodash.debounce';
+import debounce from 'lodash-es/debounce';
import { baseFonts } from '@storybook/components';
const defaultTextValue = '';
diff --git a/lib/ui/src/modules/ui/components/stories_panel/text_filter.test.js b/lib/ui/src/modules/ui/components/stories_panel/text_filter.test.js
index aa03026f0c82..bbb564fe1313 100755
--- a/lib/ui/src/modules/ui/components/stories_panel/text_filter.test.js
+++ b/lib/ui/src/modules/ui/components/stories_panel/text_filter.test.js
@@ -2,7 +2,7 @@ import { shallow, mount } from 'enzyme';
import React from 'react';
import TextFilter from './text_filter';
-jest.mock('lodash.debounce', () => jest.fn(fn => fn));
+jest.mock('lodash-es/debounce', () => jest.fn(fn => fn));
describe('manager.ui.components.stories_panel.test_filter', () => {
describe('render', () => {
diff --git a/lib/ui/src/modules/ui/containers/layout.js b/lib/ui/src/modules/ui/containers/layout.js
index cb89879735ea..4c65c72479d2 100755
--- a/lib/ui/src/modules/ui/containers/layout.js
+++ b/lib/ui/src/modules/ui/containers/layout.js
@@ -1,4 +1,4 @@
-import pick from 'lodash.pick';
+import pick from 'lodash-es/pick';
import Layout from '../components/layout';
import genPoddaLoader from '../libs/gen_podda_loader';
import compose from '../../../compose';
diff --git a/lib/ui/src/modules/ui/libs/filters.js b/lib/ui/src/modules/ui/libs/filters.js
index 358b2a3f6455..947f67f5d9a4 100755
--- a/lib/ui/src/modules/ui/libs/filters.js
+++ b/lib/ui/src/modules/ui/libs/filters.js
@@ -1,5 +1,5 @@
import Fuse from 'fuse.js';
-import sortBy from 'lodash.sortby';
+import sortBy from 'lodash-es/sortBy';
const searchOptions = {
shouldSort: false,
diff --git a/package.json b/package.json
index 62484c88406f..c2a17cf9511f 100644
--- a/package.json
+++ b/package.json
@@ -31,7 +31,6 @@
"test-latest-cra": "npm --prefix lib/cli run test-latest-cra"
},
"devDependencies": {
- "@types/lodash": "^4.14.91",
"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
"babel-eslint": "^8.1.0",
@@ -72,7 +71,7 @@
"jest-jasmine2": "^22.0.4",
"lerna": "^2.5.1",
"lint-staged": "^6.0.0",
- "lodash": "^4.17.4",
+ "lodash-es": "^4.17.4",
"nodemon": "^1.14.3",
"npmlog": "^4.1.2",
"prettier": "^1.9.2",
diff --git a/yarn.lock b/yarn.lock
index 31f8240688ae..78fe53f74f40 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -286,7 +286,13 @@
version "2.8.2"
resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.8.2.tgz#6ae4d8740c0da5d5a627df725b4eed71b8e36668"
-"@types/lodash@^4.14.91":
+"@types/lodash-es@^4.17.0":
+ version "4.17.0"
+ resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.0.tgz#ed9044d62ee36a93e0650b112701986b1c74c766"
+ dependencies:
+ "@types/lodash" "*"
+
+"@types/lodash@*":
version "4.14.91"
resolved "https://artifactory.iponweb.net:443/artifactory/api/npm/npm/@types/lodash/-/lodash-4.14.91.tgz#794611b28056d16b5436059c6d800b39d573cd3a"
@@ -8410,7 +8416,7 @@ lockfile@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79"
-lodash-es@^4.2.1:
+lodash-es@^4.17.4, lodash-es@^4.2.1:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7"
@@ -8489,10 +8495,6 @@ lodash.cond@^4.3.0:
version "4.5.2"
resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
-lodash.debounce@^4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
-
lodash.defaults@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"