From 52eea3a269b0edd9ae63572ce74616629665aeef Mon Sep 17 00:00:00 2001 From: Arnaud-D <35631001+arnaud-d@users.noreply.github.com> Date: Thu, 11 Aug 2022 16:46:50 +0200 Subject: [PATCH] =?UTF-8?q?Ajoute=20la=20g=C3=A9n=C3=A9ration=20des=20smil?= =?UTF-8?q?eys=20au=20format=20PNG=20depuis=20le=20SVG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gulpfile.js | 31 ++++- assets/smileys/png/ninja.png | Bin 0 -> 9267 bytes package.json | 1 + requirements.txt | 1 + scripts/convert_smileys_to_svg.py | 46 +++++++ yarn.lock | 220 +++++++++++++++++++++++++++++- 6 files changed, 296 insertions(+), 3 deletions(-) create mode 100644 assets/smileys/png/ninja.png create mode 100644 scripts/convert_smileys_to_svg.py diff --git a/Gulpfile.js b/Gulpfile.js index 4531d699f4..fa6fedbd3b 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -6,6 +6,7 @@ const { ESLint } = require('eslint') const gulp = require('gulp') const gulpif = require('gulp-if') const imagemin = require('gulp-imagemin') +const run = require('gulp-run') const options = require('gulp-options') const path = require('path') const postcss = require('gulp-postcss') @@ -171,6 +172,17 @@ function images() { .pipe(gulp.dest('dist/')) } +// Generate PNG versions of SVG smileys. +// Output files are not optimized for size. +function convertSmileysToPng() { + const pathToScript = 'scripts/convert_smileys_to_svg.py' + const pathToSvgSmileys = 'assets/smileys/svg/' + const pathToPngSmileys = 'dist/smileys/png' + const convertToPng = run(`python ${pathToScript} ${pathToSvgSmileys} ${pathToPngSmileys}`) + convertToPng.exec() + return Promise.resolve('Smileys were converted') // to fit into gulp's asynchronous system +} + function spriteImages() { return gulp.src(['dist/images/sprite*.png']) .pipe(gulpif(!fast, imagemin())) // Minify the images @@ -210,7 +222,24 @@ function watch() { } // Build the front -const build = gulp.parallel(prepareZmd, prepareEasyMde, jsPackages, js, images, errors, gulp.series(spriteCss, gulp.parallel(css, spriteImages))) +const build = gulp.series( + convertSmileysToPng, // automatically converted files may be overwritten with manually converted files afterwards + gulp.parallel( + prepareZmd, + prepareEasyMde, + jsPackages, + js, + images, + errors, + gulp.series( + spriteCss, + gulp.parallel( + css, + spriteImages + ) + ) + ) +) exports.build = build exports.watch = gulp.series(build, watch) diff --git a/assets/smileys/png/ninja.png b/assets/smileys/png/ninja.png new file mode 100644 index 0000000000000000000000000000000000000000..10d7542973a1b39c5d54b6122e7cc2a4ab6eefa3 GIT binary patch literal 9267 zcmeHrXH=70({?D*K|rK8=`D~(mEKW6DIy?<0YV6!gih$?(4|Y04$_e(Qk7l>q$x!O zq;~}=BJu`LdCpni`{!Bfd;gte-FNPL&&)M5*PcBqdq>{Y)u1F}CIbKflv@ z+{Hpdgu7!uRlf%SXi0nwjotL&o}4adXB(6Qg45001;L5%LfHTSUbB@MDD=E+V)(^p zIt<}9DJ!uifCdvH{Zp1yzgA>UE~iCWS;MbDj7Gjq{#yXvWf zB;Q@v{ruB41-y}ymNl^;Ovy2@(1Q9er^`P%j1~m4L)~7@>g`9x1cJh_EphNGRlW!wUZPiPod;FBns-J3|FGfsu=Edux z5`;^u_VVRZ(H5@k=4m_AZ)i-vb-wE4UH<9e&thI#-}!Zu{}r=OgyBjks}bX3s9%n_ zz>U?H=5!CcOTZr_A0)mn;48Oy@yR8>Fq?iVM$35y6O~gF>N~eP^`S+4w-x_c@9Q3X zj?*oR<3Zz!VP*ESIfoI^bXFgHh|#Lbl4;1e0)P-A+6m$Z9%9a7t0mqP#7y8O>8$IxgWs|6^KM-wknsGdqqpI{sym^{z@HorkJ5$a* z^1b)|7w6GsVU2cQj0Sa+N6Wrc_4n}xcWBjQ=sjOY=Pp_D=H?Yl4L8PP>IY5UV2OX~ zM-rM;*a#cKd2VkG};MF@GE zw7tx@{U!MW*0RTyDqvL8VkExn%fQ=<(IQIs(23Nlw$XGgMD{IcWLdSKUbtRV%m>2y zqx0cflOSsSN^E-tr}vwI_hm`!MQ@mW4T=L^Jm=-3Zgm>e&3wjQdk>;(CGbW#31HHf z%J6c6)T$i#=4{7)q@lwi)F{L~$Gj|I9=)1BM-((-v>~}Q_R!QSEuKtp`fbWhcLj6v zrwz+?8g`NXnVg$Vp{uh&m`qRk~lQi^Nq;;uXs$FH@GwSxQRZj zK9_?s8h?#3)0@+?kD=GBN7i?4?oO RJm00l6U8xXo*rdtRip>&}h%9py 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 6a990acafb..f15870c87f 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "gulp-imagemin": "7.1.0", "gulp-options": "1.1.1", "gulp-postcss": "9.0.1", + "gulp-run": "1.7.1", "gulp-terser-js": "5.2.2", "gulp.spritesmith": "6.13.0", "jquery": "3.7.1", diff --git a/requirements.txt b/requirements.txt index 36ab7318a7..551a5de8b1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,6 +5,7 @@ social-auth-app-django==5.3.0 # Explicit dependencies (references in code) beautifulsoup4==4.12.2 +cairosvg==2.7.1 django-crispy-forms==1.14.0 django-model-utils==4.3.1 django-munin==0.2.1 diff --git a/scripts/convert_smileys_to_svg.py b/scripts/convert_smileys_to_svg.py new file mode 100644 index 0000000000..c85ca177a8 --- /dev/null +++ b/scripts/convert_smileys_to_svg.py @@ -0,0 +1,46 @@ +import argparse +import pathlib +import os + +import cairosvg + + +def convert_folder_to_svg(src_folder: pathlib.Path, dst_folder: pathlib.Path) -> int: + """ + Convert all SVGs from src_folder into PNGs and write them in dst_folder. + Create dst_folder if needed. + Existing files in dst_fodler are overwritten. + Return the number of converted files. + """ + src_files = src_folder.rglob("*.svg") + os.makedirs(dst_folder, exist_ok=True) + converted_file_count = 0 + for src_file in src_files: + dst_file = dst_folder / f"{src_file.stem}.png" + cairosvg.svg2png(url=src_file.as_posix(), write_to=dst_file.as_posix()) + converted_file_count += 1 + return converted_file_count + + +def get_cli_args(): + """Get arguments from the CLI.""" + + # Build parser + parser = argparse.ArgumentParser(description="Convert a folder of SVG files to PNG") + parser.add_argument("source", help="Folder containing the SVG files to be converted") + parser.add_argument("destination", help="Folder in which the PNG files are written") + + # Parse + raw_args = parser.parse_args() + processed_args = { + "source": pathlib.Path(raw_args.source), + "destination": pathlib.Path(raw_args.destination), + } + + return processed_args + + +if __name__ == "__main__": + args = get_cli_args() + file_count = convert_folder_to_svg(args["source"], args["destination"]) + print(f"{__file__}: {file_count} files converted.") diff --git a/yarn.lock b/yarn.lock index 3f8b9725a6..db1fd60dcc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -415,6 +415,11 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + integrity sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ== + array-differ@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" @@ -475,6 +480,11 @@ array-union@^2.1.0: resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" @@ -676,6 +686,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +beeper@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" + integrity sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA== + bin-build@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz" @@ -1260,6 +1275,11 @@ clone-stats@^1.0.0: resolved "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz" integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= +clone@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" + integrity sha512-g62n3Kb9cszeZvmvBUqP/dsEJD/+80pDA8u8KqHnAPrVnQ2Je9rVV6opxkhuWCd1kCn2gOibzDKxCtBvD3q5kA== + clone@^1.0.0, clone@^1.0.2: version "1.0.4" resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" @@ -1746,6 +1766,11 @@ data-uri-to-buffer@0.0.3: resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-0.0.3.tgz" integrity sha1-GK6XmmoMqZSwYlhTkW0mYruuCxo= +dateformat@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" + integrity sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw== + david@12.0.0: version "12.0.0" resolved "https://registry.yarnpkg.com/david/-/david-12.0.0.tgz#8445880550cb100d8e08d0a971127778155eb281" @@ -2133,6 +2158,13 @@ download@^7.1.0: p-event "^2.1.0" pify "^3.0.0" +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + integrity sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g== + dependencies: + readable-stream "~1.1.9" + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" @@ -2841,7 +2873,7 @@ extsprintf@1.3.0, extsprintf@^1.2.0: resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= -fancy-log@^1.3.2, fancy-log@^1.3.3: +fancy-log@^1.1.0, fancy-log@^1.3.2, fancy-log@^1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz" integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== @@ -3763,6 +3795,16 @@ gulp-postcss@9.0.1: postcss-load-config "^3.0.0" vinyl-sourcemaps-apply "^0.2.1" +gulp-run@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/gulp-run/-/gulp-run-1.7.1.tgz#e17c0acb7c30b6e2aeee23c04442a96c0caceffa" + integrity sha512-4OcXhBE5xpRWmbcKzE0EQWEqpLRAkX3ju6k85qkYLfmnCVGK6nPmu/sbVgDiGg6mjuzsF2b9nHFbImZBZPH3zg== + dependencies: + gulp-util "^3.0.0" + lodash.defaults "^4.0.1" + lodash.template "^4.0.2" + vinyl "^0.4.6" + gulp-terser-js@5.2.2: version "5.2.2" resolved "https://registry.npmjs.org/gulp-terser-js/-/gulp-terser-js-5.2.2.tgz" @@ -3774,6 +3816,30 @@ gulp-terser-js@5.2.2: through2 "^3.0.1" vinyl-sourcemaps-apply "^0.2.1" +gulp-util@^3.0.0: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + integrity sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw== + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^2.0.0" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + gulp.spritesmith@6.13.0: version "6.13.0" resolved "https://registry.npmjs.org/gulp.spritesmith/-/gulp.spritesmith-6.13.0.tgz" @@ -3862,6 +3928,13 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-gulplog@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + integrity sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw== + dependencies: + sparkles "^1.0.0" + has-property-descriptors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" @@ -5169,6 +5242,16 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + integrity sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ== + +lodash._basetostring@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + integrity sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA== + lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -5177,12 +5260,42 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + integrity sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg== + lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA== -lodash._root@~3.0.0: +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA== + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + integrity sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ== + +lodash._reescape@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + integrity sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ== + +lodash._reevaluate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + integrity sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w== + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== + +lodash._root@^3.0.0, lodash._root@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" integrity sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ== @@ -5192,6 +5305,37 @@ lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== +lodash.defaults@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.escape@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + integrity sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ== + dependencies: + lodash._root "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + integrity sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ== + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + integrity sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ== + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" @@ -5202,6 +5346,49 @@ lodash.merge@^4.6.2: resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw== + +lodash.template@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + integrity sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ== + dependencies: + lodash._basecopy "^3.0.0" + lodash._basetostring "^3.0.0" + lodash._basevalues "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + lodash.keys "^3.0.0" + lodash.restparam "^3.0.0" + lodash.templatesettings "^3.0.0" + +lodash.template@^4.0.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + integrity sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.union@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" @@ -5605,6 +5792,13 @@ multimatch@^4.0.0: arrify "^2.0.1" minimatch "^3.0.4" +multipipe@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + integrity sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q== + dependencies: + duplexer2 "0.0.2" + mute-stdout@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz" @@ -6080,6 +6274,11 @@ obj-extend@~0.1.0: resolved "https://registry.npmjs.org/obj-extend/-/obj-extend-0.1.0.tgz" integrity sha1-u0SKR3X7les0p4H5CLusLfI9u1s= +object-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + integrity sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ== + object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" @@ -8939,6 +9138,23 @@ vinyl-sourcemaps-apply@^0.2.0, vinyl-sourcemaps-apply@^0.2.1: dependencies: source-map "^0.5.1" +vinyl@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" + integrity sha512-pmza4M5VA15HOImIQYWhoXGlGNafCm0QK5BpBUXkzzEwrRxKqBsbAhTfkT2zMcJhUX1G1Gkid0xaV8WjOl7DsA== + dependencies: + clone "^0.2.0" + clone-stats "^0.0.1" + +vinyl@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + integrity sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA== + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + vinyl@^1.1.0: version "1.2.0" resolved "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz"