From b2acd1e8a85e6979aafc0530359f8ff961ffd3f1 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Thu, 20 Dec 2018 11:21:15 +0100
Subject: [PATCH] Use specific methods from lodash to reduce bundle size

---
 front/src/App.vue                                   |  2 +-
 front/src/components/Pagination.vue                 |  2 +-
 front/src/components/audio/Search.vue               |  2 +-
 front/src/components/audio/Track.vue                |  2 +-
 front/src/components/audio/album/Widget.vue         |  2 +-
 front/src/components/audio/track/Widget.vue         |  4 ++--
 front/src/components/federation/LibraryWidget.vue   |  2 +-
 front/src/components/instance/Stats.vue             |  2 +-
 front/src/components/library/Artist.vue             |  2 +-
 front/src/components/library/Artists.vue            |  2 +-
 front/src/components/library/FileUpload.vue         |  1 +
 front/src/components/library/Radios.vue             |  2 +-
 front/src/components/library/radios/Builder.vue     |  2 +-
 front/src/components/library/radios/Filter.vue      |  2 +-
 front/src/components/manage/library/FilesTable.vue  |  2 +-
 .../components/manage/users/InvitationsTable.vue    |  2 +-
 front/src/components/manage/users/UsersTable.vue    |  2 +-
 front/src/components/playlists/PlaylistModal.vue    |  2 +-
 front/src/components/playlists/Widget.vue           |  2 +-
 front/src/lodash.js                                 | 13 +++++++++++++
 front/src/store/instance.js                         |  2 +-
 front/src/store/queue.js                            |  2 +-
 front/src/views/content/libraries/FilesTable.vue    |  2 +-
 front/src/views/playlists/List.vue                  |  2 +-
 front/tests/unit/specs/store/queue.spec.js          |  2 +-
 25 files changed, 38 insertions(+), 24 deletions(-)
 create mode 100644 front/src/lodash.js

diff --git a/front/src/App.vue b/front/src/App.vue
index 55cfab6e9f..d61e5a8375 100644
--- a/front/src/App.vue
+++ b/front/src/App.vue
@@ -52,7 +52,7 @@
 
 <script>
 import axios from 'axios'
-import _ from 'lodash'
+import _ from '@/lodash'
 import {mapState} from 'vuex'
 import { WebSocketBridge } from 'django-channels'
 import GlobalEvents from '@/components/utils/global-events'
diff --git a/front/src/components/Pagination.vue b/front/src/components/Pagination.vue
index 1064a827e8..57cac2815a 100644
--- a/front/src/components/Pagination.vue
+++ b/front/src/components/Pagination.vue
@@ -24,7 +24,7 @@
 </template>
 
 <script>
-import _ from "lodash"
+import _ from "@/lodash"
 
 export default {
   props: {
diff --git a/front/src/components/audio/Search.vue b/front/src/components/audio/Search.vue
index 06ae2c1cc7..e21a569bd9 100644
--- a/front/src/components/audio/Search.vue
+++ b/front/src/components/audio/Search.vue
@@ -29,7 +29,7 @@
 </template>
 
 <script>
-import _ from 'lodash'
+import _ from '@/lodash'
 import axios from 'axios'
 import logger from '@/logging'
 import AlbumCard from '@/components/audio/album/Card'
diff --git a/front/src/components/audio/Track.vue b/front/src/components/audio/Track.vue
index c847d4de1a..888a81c007 100644
--- a/front/src/components/audio/Track.vue
+++ b/front/src/components/audio/Track.vue
@@ -4,7 +4,7 @@
 
 <script>
 import {mapState} from 'vuex'
-import _ from 'lodash'
+import _ from '@/lodash'
 import url from '@/utils/url'
 import {Howl} from 'howler'
 
diff --git a/front/src/components/audio/album/Widget.vue b/front/src/components/audio/album/Widget.vue
index ccef492955..53f569c13b 100644
--- a/front/src/components/audio/album/Widget.vue
+++ b/front/src/components/audio/album/Widget.vue
@@ -36,7 +36,7 @@
 </template>
 
 <script>
-import _ from 'lodash'
+import _ from '@/lodash'
 import axios from 'axios'
 import PlayButton from '@/components/audio/PlayButton'
 
diff --git a/front/src/components/audio/track/Widget.vue b/front/src/components/audio/track/Widget.vue
index 5ed2809810..f909945f0f 100644
--- a/front/src/components/audio/track/Widget.vue
+++ b/front/src/components/audio/track/Widget.vue
@@ -47,7 +47,7 @@
 </template>
 
 <script>
-import _ from 'lodash'
+import _ from '@/lodash'
 import axios from 'axios'
 import PlayButton from '@/components/audio/PlayButton'
 
@@ -109,7 +109,7 @@ export default {
 </script>
 
 <style scoped lang="scss">
-@import '../../../style/vendor/media';
+@import "../../../style/vendor/media";
 
 .play-overlay {
   position: absolute;
diff --git a/front/src/components/federation/LibraryWidget.vue b/front/src/components/federation/LibraryWidget.vue
index abe993e466..0902b1b9d1 100644
--- a/front/src/components/federation/LibraryWidget.vue
+++ b/front/src/components/federation/LibraryWidget.vue
@@ -26,7 +26,7 @@
 </template>
 
 <script>
-import _ from 'lodash'
+import _ from '@/lodash'
 import axios from 'axios'
 import LibraryCard from '@/views/content/remote/Card'
 
diff --git a/front/src/components/instance/Stats.vue b/front/src/components/instance/Stats.vue
index bb23b617c2..78632f6d23 100644
--- a/front/src/components/instance/Stats.vue
+++ b/front/src/components/instance/Stats.vue
@@ -61,7 +61,7 @@
 </template>
 
 <script>
-import _ from 'lodash'
+import _ from '@/lodash'
 import axios from 'axios'
 import logger from '@/logging'
 
diff --git a/front/src/components/library/Artist.vue b/front/src/components/library/Artist.vue
index e16e6728d5..1cebafd8da 100644
--- a/front/src/components/library/Artist.vue
+++ b/front/src/components/library/Artist.vue
@@ -69,7 +69,7 @@
 </template>
 
 <script>
-import _ from "lodash"
+import _ from "@/lodash"
 import axios from "axios"
 import logger from "@/logging"
 import backend from "@/audio/backend"
diff --git a/front/src/components/library/Artists.vue b/front/src/components/library/Artists.vue
index 83dd0e8e26..f6fcc1b8b8 100644
--- a/front/src/components/library/Artists.vue
+++ b/front/src/components/library/Artists.vue
@@ -70,7 +70,7 @@
 
 <script>
 import axios from "axios"
-import _ from "lodash"
+import _ from "@/lodash"
 import $ from "jquery"
 
 import logger from "@/logging"
diff --git a/front/src/components/library/FileUpload.vue b/front/src/components/library/FileUpload.vue
index 0dbe4a4b67..d2c93202f6 100644
--- a/front/src/components/library/FileUpload.vue
+++ b/front/src/components/library/FileUpload.vue
@@ -123,6 +123,7 @@
 </template>
 
 <script>
+import _ from "@/lodash"
 import $ from "jquery";
 import axios from "axios";
 import logger from "@/logging";
diff --git a/front/src/components/library/Radios.vue b/front/src/components/library/Radios.vue
index 48e9b1e2f3..42a825d230 100644
--- a/front/src/components/library/Radios.vue
+++ b/front/src/components/library/Radios.vue
@@ -92,7 +92,7 @@
 
 <script>
 import axios from "axios"
-import _ from "lodash"
+import _ from "@/lodash"
 import $ from "jquery"
 
 import logger from "@/logging"
diff --git a/front/src/components/library/radios/Builder.vue b/front/src/components/library/radios/Builder.vue
index b015749798..5698a71f42 100644
--- a/front/src/components/library/radios/Builder.vue
+++ b/front/src/components/library/radios/Builder.vue
@@ -94,7 +94,7 @@
 <script>
 import axios from "axios"
 import $ from "jquery"
-import _ from "lodash"
+import _ from "@/lodash"
 import BuilderFilter from "./Filter"
 import TrackTable from "@/components/audio/track/Table"
 import RadioButton from "@/components/radios/Button"
diff --git a/front/src/components/library/radios/Filter.vue b/front/src/components/library/radios/Filter.vue
index 470d852fad..5fd7eec893 100644
--- a/front/src/components/library/radios/Filter.vue
+++ b/front/src/components/library/radios/Filter.vue
@@ -64,7 +64,7 @@
 <script>
 import axios from 'axios'
 import $ from 'jquery'
-import _ from 'lodash'
+import _ from '@/lodash'
 
 import Modal from '@/components/semantic/Modal'
 import TrackTable from '@/components/audio/track/Table'
diff --git a/front/src/components/manage/library/FilesTable.vue b/front/src/components/manage/library/FilesTable.vue
index 1f5fc39764..bcee39ffde 100644
--- a/front/src/components/manage/library/FilesTable.vue
+++ b/front/src/components/manage/library/FilesTable.vue
@@ -106,7 +106,7 @@
 
 <script>
 import axios from 'axios'
-import _ from 'lodash'
+import _ from '@/lodash'
 import time from '@/utils/time'
 import Pagination from '@/components/Pagination'
 import ActionTable from '@/components/common/ActionTable'
diff --git a/front/src/components/manage/users/InvitationsTable.vue b/front/src/components/manage/users/InvitationsTable.vue
index d697c3821d..0c8b15c181 100644
--- a/front/src/components/manage/users/InvitationsTable.vue
+++ b/front/src/components/manage/users/InvitationsTable.vue
@@ -86,7 +86,7 @@
 <script>
 import axios from 'axios'
 import moment from 'moment'
-import _ from 'lodash'
+import _ from '@/lodash'
 import Pagination from '@/components/Pagination'
 import ActionTable from '@/components/common/ActionTable'
 import OrderingMixin from '@/components/mixins/Ordering'
diff --git a/front/src/components/manage/users/UsersTable.vue b/front/src/components/manage/users/UsersTable.vue
index cb46ed811f..33b2433cb5 100644
--- a/front/src/components/manage/users/UsersTable.vue
+++ b/front/src/components/manage/users/UsersTable.vue
@@ -96,7 +96,7 @@
 
 <script>
 import axios from 'axios'
-import _ from 'lodash'
+import _ from '@/lodash'
 import time from '@/utils/time'
 import Pagination from '@/components/Pagination'
 import ActionTable from '@/components/common/ActionTable'
diff --git a/front/src/components/playlists/PlaylistModal.vue b/front/src/components/playlists/PlaylistModal.vue
index a5a7e9ea02..3065631afb 100644
--- a/front/src/components/playlists/PlaylistModal.vue
+++ b/front/src/components/playlists/PlaylistModal.vue
@@ -67,7 +67,7 @@
 </template>
 
 <script>
-import _ from 'lodash'
+import _ from '@/lodash'
 import axios from 'axios'
 import {mapState} from 'vuex'
 
diff --git a/front/src/components/playlists/Widget.vue b/front/src/components/playlists/Widget.vue
index 868719f1c2..c289e6de9f 100644
--- a/front/src/components/playlists/Widget.vue
+++ b/front/src/components/playlists/Widget.vue
@@ -15,7 +15,7 @@
 </template>
 
 <script>
-import _ from 'lodash'
+import _ from '@/lodash'
 import axios from 'axios'
 import PlaylistCard from '@/components/playlists/Card'
 
diff --git a/front/src/lodash.js b/front/src/lodash.js
new file mode 100644
index 0000000000..91e1a0eac3
--- /dev/null
+++ b/front/src/lodash.js
@@ -0,0 +1,13 @@
+// cherry-pick specific lodash methods here to reduce bundle size
+
+export default {
+  clone: require('lodash/clone'),
+  debounce: require('lodash/debounce'),
+  get: require('lodash/get'),
+  merge: require('lodash/merge'),
+  range: require('lodash/range'),
+  shuffle: require('lodash/shuffle'),
+  sortBy: require('lodash/sortBy'),
+  throttle: require('lodash/throttle'),
+  uniq: require('lodash/uniq'),
+}
diff --git a/front/src/store/instance.js b/front/src/store/instance.js
index 72a960cd05..dd0de956b4 100644
--- a/front/src/store/instance.js
+++ b/front/src/store/instance.js
@@ -1,6 +1,6 @@
 import axios from 'axios'
 import logger from '@/logging'
-import _ from 'lodash'
+import _ from '@/lodash'
 
 function getDefaultUrl () {
   return (
diff --git a/front/src/store/queue.js b/front/src/store/queue.js
index dba102b466..9a0d55c0bf 100644
--- a/front/src/store/queue.js
+++ b/front/src/store/queue.js
@@ -1,5 +1,5 @@
 import logger from '@/logging'
-import _ from 'lodash'
+import _ from '@/lodash'
 
 export default {
   namespaced: true,
diff --git a/front/src/views/content/libraries/FilesTable.vue b/front/src/views/content/libraries/FilesTable.vue
index 21ad79e720..1f176d8cbb 100644
--- a/front/src/views/content/libraries/FilesTable.vue
+++ b/front/src/views/content/libraries/FilesTable.vue
@@ -120,7 +120,7 @@
 
 <script>
 import axios from 'axios'
-import _ from 'lodash'
+import _ from '@/lodash'
 import time from '@/utils/time'
 import {normalizeQuery, parseTokens, compileTokens} from '@/search'
 
diff --git a/front/src/views/playlists/List.vue b/front/src/views/playlists/List.vue
index de9ca78ac7..64c78d72b0 100644
--- a/front/src/views/playlists/List.vue
+++ b/front/src/views/playlists/List.vue
@@ -56,7 +56,7 @@
 
 <script>
 import axios from "axios"
-import _ from "lodash"
+import _ from "@/lodash"
 import $ from "jquery"
 
 import OrderingMixin from "@/components/mixins/Ordering"
diff --git a/front/tests/unit/specs/store/queue.spec.js b/front/tests/unit/specs/store/queue.spec.js
index 3fa481d193..140ce071a0 100644
--- a/front/tests/unit/specs/store/queue.spec.js
+++ b/front/tests/unit/specs/store/queue.spec.js
@@ -1,7 +1,7 @@
 var sinon = require('sinon')
 import {expect} from 'chai'
 
-import _ from 'lodash'
+import _ from '@/lodash'
 
 import store from '@/store/queue'
 import { testAction } from '../../utils'
-- 
GitLab