svg-sprite-loader
Advanced tools
Comparing version 0.3.0 to 2.0.0-alpha.1
252
lib/utils.js
@@ -1,27 +0,235 @@ | ||
var path = require('path'); | ||
var crypto = require('crypto'); | ||
/* eslint-disable import/no-extraneous-dependencies,no-trailing-spaces */ | ||
const webpackPkg = require('webpack/package.json'); | ||
const ruleMatcher = require('webpack/lib/ModuleFilenameHelpers').matchObject; | ||
const defaults = require('./config'); | ||
exports.objectToAttrString = function (obj) { | ||
if (Object.prototype.toString.call(obj) !== '[object Object]') | ||
throw new TypeError('Must be an object'); | ||
const webpackMajorVersion = parseInt(webpackPkg.version.split('.')[0], 10); | ||
const loaderDefaults = defaults.loader; | ||
const loaderPath = require.resolve('./loader'); | ||
const stringifiedRegexp = /^'|".*'|"$/; | ||
return Object.keys(obj) | ||
.map(function (key) { | ||
return key + '="' + obj[key] + '"'; | ||
}).join(' '); | ||
}; | ||
/** | ||
* If already stringified - return original content | ||
* @param {Object|Array} content | ||
* @return {string} | ||
*/ | ||
function stringify(content) { | ||
if (typeof content === 'string' && stringifiedRegexp.test(content)) { | ||
return content; | ||
} | ||
return JSON.stringify(content, null, 2); | ||
} | ||
exports.isRasterImage = function (imagepath) { | ||
var re = /\.(jpe?g|png|gif)$/i; | ||
return re.test(imagepath); | ||
}; | ||
/** | ||
* @param {SpriteSymbol} symbol | ||
* @return {string} | ||
*/ | ||
function stringifySymbol(symbol) { | ||
return stringify({ | ||
id: symbol.id, | ||
use: symbol.useId, | ||
viewBox: symbol.viewBox, | ||
content: symbol.render() | ||
}); | ||
} | ||
exports.getPixelRatioFromFilename = function (filename) { | ||
var ratioMatch = filename.substring(0, filename.lastIndexOf('.')).match(/\@([0-9])x$/); | ||
var ratio = ratioMatch !== null ? parseInt(ratioMatch[1]) : 1; | ||
return ratio; | ||
}; | ||
/** | ||
* @param {string} content | ||
* @param {Object<string, string>} replacements | ||
* @return {string} | ||
*/ | ||
function replaceSpritePlaceholder(content, replacements) { | ||
const regexp = defaults.SPRITE_PLACEHOLDER_PATTERN; | ||
return content.replace(regexp, (match, p1) => { | ||
return p1 ? replacements[p1] : match; | ||
}); | ||
} | ||
exports.generateHashFromPath = function (path_) { | ||
return crypto.createHash('md5').update(path_).digest("hex"); | ||
}; | ||
/** | ||
* @param {NormalModule|ExtractedModule} module | ||
* @param {Object<string, string>} replacements | ||
* @return {NormalModule|ExtractedModule} | ||
*/ | ||
function replaceInModuleSource(module, replacements) { | ||
const source = module._source; | ||
if (typeof source === 'string') { | ||
module._source = replaceSpritePlaceholder(source, replacements); | ||
} else if (typeof source === 'object' && typeof source._value === 'string') { | ||
source._value = replaceSpritePlaceholder(source._value, replacements); | ||
} | ||
return module; | ||
} | ||
/** | ||
* @param {string} filepath | ||
* @return {string} | ||
*/ | ||
function generateSpritePlaceholder(filepath) { | ||
return `[sprite-filename|${filepath}]`; | ||
} | ||
function generateImport(symbol, module, esModule = loaderDefaults.esModule) { | ||
return esModule ? | ||
`import ${symbol} from ${stringify(module)}` : | ||
`var ${symbol} = require(${stringify(module)})`; | ||
} | ||
/** | ||
* @param {string} content | ||
* @param {boolean} [esModule=false] | ||
* @return {string} | ||
*/ | ||
function generateExport(content, esModule = defaults.esModule) { | ||
return esModule ? | ||
`export default ${content}` : | ||
`module.exports = ${content}`; | ||
} | ||
/** | ||
* @param {NormalModule} module | ||
* @return {boolean} | ||
*/ | ||
function isModuleShouldBeExtracted(module) { | ||
const { request, issuer, loaders } = module; | ||
const rule = loaders && loaders.find(l => l.loader === loaderPath); | ||
const issuerResource = issuer && issuer.resource; | ||
if (request && (!request.includes(loaderPath) || !rule)) { | ||
return false; | ||
} | ||
return !!( | ||
(issuer && defaults.EXTRACTABLE_MODULE_ISSUER_PATTERN.test(issuerResource)) || | ||
(rule && rule.options && rule.options.extract) | ||
); | ||
} | ||
/** | ||
* @param {Compiler} compiler | ||
* @return {Rule[]} | ||
*/ | ||
function getLoadersRules(compiler) { | ||
const rulesProp = webpackMajorVersion === 1 ? 'loaders' : 'rules'; | ||
return compiler.options.module[rulesProp]; | ||
} | ||
/** | ||
* @param {string} request | ||
* @param {Rule[]} rules Webpack loaders config | ||
* @return {Rule[]} | ||
*/ | ||
function getMatchedRules(request, rules) { | ||
return rules.filter(rule => ruleMatcher(rule, request)); | ||
} | ||
/** | ||
* Always returns last matched rule | ||
* @param {string} request | ||
* @param {Rule[]} rules Webpack loaders config | ||
* @return {Rule} Webpack rule | ||
*/ | ||
function getMatchedRule(request, rules) { | ||
const matched = getMatchedRules(request, rules); | ||
return matched[matched.length - 1]; | ||
} | ||
/** | ||
* Find nearest module chunk (not sure that is reliable method, but who cares). | ||
* @see http://stackoverflow.com/questions/43202761/how-to-determine-all-module-chunks-in-webpack | ||
* @param {NormalModule} module | ||
* @return {Chunk?} | ||
*/ | ||
function getModuleChunk(module) { | ||
const { chunks, issuer } = module; | ||
if (Array.isArray(chunks) && chunks.length > 0) { | ||
return chunks[chunks.length - 1]; | ||
} else if (issuer) { | ||
return getModuleChunk(issuer); | ||
} | ||
return null; | ||
} | ||
/** | ||
* @param {SpriteSymbol[]} symbols | ||
* @param {Compilation} compilation | ||
* @return {Object<string, Object<module: NormalModule[], spriteFilename: string>>[]} | ||
*/ | ||
function aggregate(symbols, compilation) { | ||
const { compiler } = compilation; | ||
const modules = compilation.modules.filter(isModuleShouldBeExtracted); | ||
const publicPath = compiler.options.output.publicPath || ''; | ||
const rules = getLoadersRules(compiler); | ||
const defaultSpriteFilename = loaderDefaults.spriteFilename; | ||
const chunkNamePlaceholder = '[chunkname]'; | ||
const aggregated = []; | ||
return symbols.reduce((acc, symbol) => { | ||
const resource = symbol.request.toString(); | ||
const module = modules.find(m => m.resource === resource); | ||
const rule = getMatchedRule(symbol.request.file, rules); | ||
// TODO get spriteFilename from rule | ||
if (module && rule) { | ||
let spriteFilename = (rule.options && rule.options.spriteFilename) ? | ||
rule.options.spriteFilename : | ||
defaultSpriteFilename; | ||
if (spriteFilename.includes(chunkNamePlaceholder)) { | ||
const chunk = getModuleChunk(module); | ||
spriteFilename = spriteFilename.replace(chunkNamePlaceholder, chunk.name); | ||
} | ||
acc.push({ | ||
symbol, | ||
module, | ||
resource, | ||
spriteFilename, | ||
url: `${publicPath}${spriteFilename}#${symbol.id}`, | ||
useUrl: `${publicPath}${spriteFilename}#${symbol.useId}` | ||
}); | ||
} | ||
return acc; | ||
}, aggregated); | ||
} | ||
/** | ||
* @param {Object} aggregated {@see aggregate} | ||
* @return {Object<string, SpriteSymbol[]>} | ||
*/ | ||
function groupSymbolsBySprites(aggregated) { | ||
return aggregated.map(item => item.spriteFilename) | ||
.filter((value, index, self) => self.indexOf(value) === index) | ||
.reduce((acc, spriteFilename) => { | ||
acc[spriteFilename] = aggregated | ||
.filter(item => item.spriteFilename === spriteFilename) | ||
.map(item => item.symbol); | ||
return acc; | ||
}, {}); | ||
} | ||
exports.webpackMajorVersion = webpackMajorVersion; | ||
exports.stringify = stringify; | ||
exports.stringifySymbol = stringifySymbol; | ||
exports.replaceSpritePlaceholder = replaceSpritePlaceholder; | ||
exports.replaceInModuleSource = replaceInModuleSource; | ||
exports.generateSpritePlaceholder = generateSpritePlaceholder; | ||
exports.generateImport = generateImport; | ||
exports.generateExport = generateExport; | ||
exports.isModuleShouldBeExtracted = isModuleShouldBeExtracted; | ||
exports.getModuleChunk = getModuleChunk; | ||
exports.getLoadersRules = getLoadersRules; | ||
exports.getMatchedRules = getMatchedRules; | ||
exports.getMatchedRule = getMatchedRule; | ||
exports.aggregate = aggregate; | ||
exports.groupSymbolsBySprites = groupSymbolsBySprites; |
{ | ||
"name": "svg-sprite-loader", | ||
"version": "0.3.0", | ||
"description": "SVG sprite webpack loader", | ||
"main": "index.js", | ||
"scripts": { | ||
"test": "echo \"Error: no test specified\" && exit 1" | ||
}, | ||
"version": "2.0.0-alpha.1", | ||
"description": "SVG sprite loader for Webpack", | ||
"homepage": "https://github.com/kisenka/webpack-svg-sprite-loader#readme", | ||
"main": "lib/loader.js", | ||
"files": [ | ||
"lib/**", | ||
"runtime/**", | ||
"plugin.js", | ||
"README.md", | ||
"LICENSE" | ||
], | ||
"repository": { | ||
@@ -18,9 +23,2 @@ "type": "git", | ||
], | ||
"files": [ | ||
"lib/", | ||
"index.js", | ||
"config.js", | ||
"README.md", | ||
"LICENSE" | ||
], | ||
"author": "kisenka", | ||
@@ -31,11 +29,46 @@ "license": "MIT", | ||
}, | ||
"homepage": "https://github.com/kisenka/webpack-svg-sprite-loader#readme", | ||
"dependencies": { | ||
"cheerio": "^0.22.0", | ||
"extend": "^3.0.0", | ||
"image-size": "^0.3.5", | ||
"loader-utils": "^0.2.11", | ||
"bluebird": "^3.5.0", | ||
"deepmerge": "^1.3.2", | ||
"loader-utils": "^1.1.0", | ||
"postcss": "^5.2.10", | ||
"sniffr": "1.1.4" | ||
"sniffr": "1.1.4", | ||
"svg-baker": "^1.2.0", | ||
"svg-baker-runtime": "^1.2.1", | ||
"url-slug": "^2.0.0" | ||
}, | ||
"devDependencies": { | ||
"babel-core": "^6.24.1", | ||
"babel-loader": "^6.4.1", | ||
"babel-plugin-async-to-promises": "^1.0.5", | ||
"babel-plugin-transform-runtime": "^6.23.0", | ||
"babel-preset-es2015": "^6.24.0", | ||
"chai": "^3.5.0", | ||
"css-loader": "^0.28.0", | ||
"eslint": "^3.18.0", | ||
"eslint-config-airbnb-base": "^11.1.2", | ||
"eslint-plugin-import": "^2.2.0", | ||
"extract-text-webpack-plugin": "^2.1.0", | ||
"file-loader": "^0.11.1", | ||
"html-loader": "^0.4.5", | ||
"istanbul": "^0.4.5", | ||
"minimist": "^1.2.0", | ||
"mocha": "^3.2.0", | ||
"rollup": "^0.41.6", | ||
"rollup-plugin-buble": "^0.15.0", | ||
"rollup-plugin-commonjs": "^8.0.2", | ||
"rollup-plugin-node-resolve": "^3.0.0", | ||
"svgo": "^0.7.2", | ||
"svgo-loader": "^1.2.1", | ||
"wallaby-webpack": "0.0.38", | ||
"webpack": "^2.3.3", | ||
"webpack-toolkit": "^0.9.0" | ||
}, | ||
"scripts": { | ||
"build:runtime": "node scripts/build-runtime.js", | ||
"coverage": "istanbul cover --report html --report lcov _mocha test/*.test.js", | ||
"lint": "eslint --quiet .", | ||
"release": "standard-version", | ||
"test": "mocha test/*.test.js" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
No tests
QualityPackage does not have any tests. This is a strong signal of a poorly maintained or low quality package.
Found 1 instance in 1 package
47432
18
1194
1
8
25
2
1
+ Addedbluebird@^3.5.0
+ Addeddeepmerge@^1.3.2
+ Addedsvg-baker@^1.2.0
+ Addedsvg-baker-runtime@^1.2.1
+ Addedurl-slug@^2.0.0
+ Addedarr-diff@4.0.0(transitive)
+ Addedarr-flatten@1.1.0(transitive)
+ Addedarr-union@3.1.0(transitive)
+ Addedarray-buffer-byte-length@1.0.2(transitive)
+ Addedarray-unique@0.3.2(transitive)
+ Addedarraybuffer.prototype.slice@1.0.4(transitive)
+ Addedassign-symbols@1.0.0(transitive)
+ Addedatob@2.1.2(transitive)
+ Addedavailable-typed-arrays@1.0.7(transitive)
+ Addedbase@0.11.2(transitive)
+ Addedbig.js@5.2.2(transitive)
+ Addedbluebird@3.7.2(transitive)
+ Addedbraces@2.3.2(transitive)
+ Addedcache-base@1.0.1(transitive)
+ Addedcall-bind@1.0.8(transitive)
+ Addedcall-bind-apply-helpers@1.0.1(transitive)
+ Addedcall-bound@1.0.3(transitive)
+ Addedclass-utils@0.3.6(transitive)
+ Addedclone@2.1.2(transitive)
+ Addedcollection-visit@1.0.0(transitive)
+ Addedcomponent-emitter@1.3.1(transitive)
+ Addedcopy-descriptor@0.1.1(transitive)
+ Addeddata-view-buffer@1.0.2(transitive)
+ Addeddata-view-byte-length@1.0.2(transitive)
+ Addeddata-view-byte-offset@1.0.1(transitive)
+ Addeddebug@2.6.9(transitive)
+ Addeddecode-uri-component@0.2.2(transitive)
+ Addeddeepmerge@1.3.21.5.2(transitive)
+ Addeddefine-data-property@1.1.4(transitive)
+ Addeddefine-properties@1.2.1(transitive)
+ Addeddefine-property@0.2.51.0.02.0.2(transitive)
+ Addeddom-serializer@0.2.2(transitive)
+ Addeddomelementtype@2.3.0(transitive)
+ Addeddomutils@1.7.0(transitive)
+ Addeddunder-proto@1.0.1(transitive)
+ Addedemojis-list@3.0.0(transitive)
+ Addedentities@2.2.0(transitive)
+ Addedes-abstract@1.23.9(transitive)
+ Addedes-define-property@1.0.1(transitive)
+ Addedes-errors@1.3.0(transitive)
+ Addedes-object-atoms@1.1.1(transitive)
+ Addedes-set-tostringtag@2.1.0(transitive)
+ Addedes-to-primitive@1.3.0(transitive)
+ Addedexpand-brackets@2.1.4(transitive)
+ Addedextend-shallow@2.0.13.0.2(transitive)
+ Addedextglob@2.0.4(transitive)
+ Addedfill-range@4.0.0(transitive)
+ Addedfor-each@0.3.3(transitive)
+ Addedfor-in@1.0.2(transitive)
+ Addedfragment-cache@0.2.1(transitive)
+ Addedfunction-bind@1.1.2(transitive)
+ Addedfunction.prototype.name@1.1.8(transitive)
+ Addedfunctions-have-names@1.2.3(transitive)
+ Addedget-intrinsic@1.2.7(transitive)
+ Addedget-proto@1.0.1(transitive)
+ Addedget-symbol-description@1.1.0(transitive)
+ Addedget-value@2.0.6(transitive)
+ Addedglobalthis@1.0.4(transitive)
+ Addedgopd@1.2.0(transitive)
+ Addedhas-bigints@1.1.0(transitive)
+ Addedhas-property-descriptors@1.0.2(transitive)
+ Addedhas-proto@1.2.0(transitive)
+ Addedhas-symbols@1.1.0(transitive)
+ Addedhas-tostringtag@1.0.2(transitive)
+ Addedhas-value@0.3.11.0.0(transitive)
+ Addedhas-values@0.1.41.0.0(transitive)
+ Addedhasown@2.0.2(transitive)
+ Addedhe@1.2.0(transitive)
+ Addedimage-size@0.5.5(transitive)
+ Addedinternal-slot@1.1.0(transitive)
+ Addedis-accessor-descriptor@1.0.1(transitive)
+ Addedis-array-buffer@3.0.5(transitive)
+ Addedis-async-function@2.1.0(transitive)
+ Addedis-bigint@1.1.0(transitive)
+ Addedis-boolean-object@1.2.1(transitive)
+ Addedis-buffer@1.1.6(transitive)
+ Addedis-callable@1.2.7(transitive)
+ Addedis-data-descriptor@1.0.1(transitive)
+ Addedis-data-view@1.0.2(transitive)
+ Addedis-date-object@1.1.0(transitive)
+ Addedis-descriptor@0.1.71.0.3(transitive)
+ Addedis-extendable@0.1.11.0.1(transitive)
+ Addedis-finalizationregistry@1.1.1(transitive)
+ Addedis-generator-function@1.1.0(transitive)
+ Addedis-map@2.0.3(transitive)
+ Addedis-number@3.0.0(transitive)
+ Addedis-number-object@1.1.1(transitive)
+ Addedis-plain-obj@1.1.0(transitive)
+ Addedis-plain-object@2.0.4(transitive)
+ Addedis-regex@1.2.1(transitive)
+ Addedis-set@2.0.3(transitive)
+ Addedis-shared-array-buffer@1.0.4(transitive)
+ Addedis-string@1.1.1(transitive)
+ Addedis-symbol@1.1.1(transitive)
+ Addedis-typed-array@1.1.15(transitive)
+ Addedis-weakmap@2.0.2(transitive)
+ Addedis-weakref@1.1.0(transitive)
+ Addedis-weakset@2.0.4(transitive)
+ Addedis-windows@1.0.2(transitive)
+ Addedisarray@1.0.02.0.5(transitive)
+ Addedisobject@2.1.03.0.1(transitive)
+ Addedjson5@1.0.2(transitive)
+ Addedkind-of@3.2.24.0.05.1.06.0.3(transitive)
+ Addedloader-utils@1.4.2(transitive)
+ Addedmap-cache@0.2.2(transitive)
+ Addedmap-visit@1.0.0(transitive)
+ Addedmath-intrinsics@1.1.0(transitive)
+ Addedmerge-options@1.0.1(transitive)
+ Addedmicromatch@3.1.0(transitive)
+ Addedminimist@1.2.8(transitive)
+ Addedmitt@1.1.2(transitive)
+ Addedmixin-deep@1.3.2(transitive)
+ Addedms@2.0.0(transitive)
+ Addednanomatch@1.2.13(transitive)
+ Addedobject-copy@0.1.0(transitive)
+ Addedobject-inspect@1.13.3(transitive)
+ Addedobject-keys@1.1.1(transitive)
+ Addedobject-visit@1.0.1(transitive)
+ Addedobject.assign@4.1.7(transitive)
+ Addedobject.pick@1.3.0(transitive)
+ Addedown-keys@1.0.1(transitive)
+ Addedpascalcase@0.1.1(transitive)
+ Addedposix-character-classes@0.1.1(transitive)
+ Addedpossible-typed-array-names@1.0.0(transitive)
+ Addedpostcss-prefix-selector@1.16.1(transitive)
+ Addedposthtml@0.9.2(transitive)
+ Addedposthtml-parser@0.2.1(transitive)
+ Addedposthtml-rename-id@1.0.12(transitive)
+ Addedposthtml-render@1.4.0(transitive)
+ Addedposthtml-svg-mode@1.0.3(transitive)
+ Addedquery-string@4.3.4(transitive)
+ Addedreflect.getprototypeof@1.0.10(transitive)
+ Addedregex-not@1.0.2(transitive)
+ Addedregexp.prototype.flags@1.5.4(transitive)
+ Addedrepeat-element@1.1.4(transitive)
+ Addedrepeat-string@1.6.1(transitive)
+ Addedresolve-url@0.2.1(transitive)
+ Addedret@0.1.15(transitive)
+ Addedsafe-array-concat@1.1.3(transitive)
+ Addedsafe-push-apply@1.0.0(transitive)
+ Addedsafe-regex@1.1.0(transitive)
+ Addedsafe-regex-test@1.1.0(transitive)
+ Addedset-function-length@1.2.2(transitive)
+ Addedset-function-name@2.0.2(transitive)
+ Addedset-proto@1.0.0(transitive)
+ Addedset-value@2.0.1(transitive)
+ Addedside-channel@1.1.0(transitive)
+ Addedside-channel-list@1.0.0(transitive)
+ Addedside-channel-map@1.0.1(transitive)
+ Addedside-channel-weakmap@1.0.2(transitive)
+ Addedsnapdragon@0.8.2(transitive)
+ Addedsnapdragon-node@2.1.1(transitive)
+ Addedsnapdragon-util@3.0.1(transitive)
+ Addedsource-map-resolve@0.5.3(transitive)
+ Addedsource-map-url@0.4.1(transitive)
+ Addedsplit-string@3.1.0(transitive)
+ Addedstatic-extend@0.1.2(transitive)
+ Addedstrict-uri-encode@1.1.0(transitive)
+ Addedstring.prototype.trim@1.2.10(transitive)
+ Addedstring.prototype.trimend@1.0.9(transitive)
+ Addedstring.prototype.trimstart@1.0.8(transitive)
+ Addedsvg-baker@1.7.0(transitive)
+ Addedsvg-baker-runtime@1.4.7(transitive)
+ Addedto-object-path@0.3.0(transitive)
+ Addedto-regex@3.0.2(transitive)
+ Addedto-regex-range@2.1.1(transitive)
+ Addedtraverse@0.6.11(transitive)
+ Addedtyped-array-buffer@1.0.3(transitive)
+ Addedtyped-array-byte-length@1.0.3(transitive)
+ Addedtyped-array-byte-offset@1.0.4(transitive)
+ Addedtyped-array-length@1.0.7(transitive)
+ Addedtypedarray.prototype.slice@1.0.5(transitive)
+ Addedunbox-primitive@1.1.0(transitive)
+ Addedunidecode@0.1.8(transitive)
+ Addedunion-value@1.0.1(transitive)
+ Addedunset-value@1.0.0(transitive)
+ Addedurix@0.1.0(transitive)
+ Addedurl-slug@2.3.2(transitive)
+ Addeduse@3.1.1(transitive)
+ Addedwhich-boxed-primitive@1.1.1(transitive)
+ Addedwhich-builtin-type@1.2.1(transitive)
+ Addedwhich-collection@1.0.2(transitive)
+ Addedwhich-typed-array@1.1.18(transitive)
- Removedcheerio@^0.22.0
- Removedextend@^3.0.0
- Removedimage-size@^0.3.5
- Removedbig.js@3.2.0(transitive)
- Removedboolbase@1.0.0(transitive)
- Removedcheerio@0.22.0(transitive)
- Removedcss-select@1.2.0(transitive)
- Removedcss-what@2.1.3(transitive)
- Removeddom-serializer@0.1.1(transitive)
- Removeddomutils@1.5.1(transitive)
- Removedemojis-list@2.1.0(transitive)
- Removedextend@3.0.2(transitive)
- Removedimage-size@0.3.5(transitive)
- Removedjson5@0.5.1(transitive)
- Removedloader-utils@0.2.17(transitive)
- Removedlodash.assignin@4.2.0(transitive)
- Removedlodash.bind@4.2.1(transitive)
- Removedlodash.defaults@4.2.0(transitive)
- Removedlodash.filter@4.6.0(transitive)
- Removedlodash.flatten@4.4.0(transitive)
- Removedlodash.foreach@4.5.0(transitive)
- Removedlodash.map@4.6.0(transitive)
- Removedlodash.merge@4.6.2(transitive)
- Removedlodash.pick@4.4.0(transitive)
- Removedlodash.reduce@4.6.0(transitive)
- Removedlodash.reject@4.6.0(transitive)
- Removedlodash.some@4.6.0(transitive)
- Removednth-check@1.0.2(transitive)
Updatedloader-utils@^1.1.0