1- var gulp = require ( ' gulp' ) ;
2- const svgmin = require ( "gulp-svgmin" )
3- const sass = require ( ' gulp-sass' ) ;
4- sass . compiler = require ( ' sass' )
5- const yargs = require ( "yargs" )
6- const fsPromise = require ( 'fs' ) . promises ;
1+ const gulp = require ( " gulp" ) ;
2+ const svgmin = require ( "gulp-svgmin" ) ;
3+ const sass = require ( " gulp-sass" ) ;
4+ sass . compiler = require ( " sass" ) ;
5+ const yargs = require ( "yargs" ) ;
6+ const fsPromise = require ( "fs" ) . promises ;
77const path = require ( "path" ) ;
88
99// global const
@@ -19,34 +19,33 @@ const finalMinSCSSName = "devicon.min.scss";
1919 * css files and compiling them together using Sass.
2020 */
2121async function createDeviconMinCSS ( ) {
22- await createCSSFiles ( ) ;
23-
24- let deviconMinPath = path . join ( __dirname , finalMinSCSSName ) ;
25- // recall that devicon-alias.scss imported the devicon.css => don't need
26- // to reimport that file.
27- const fileContent = `@use "${ aliasSCSSName } ";@use "${ colorsCSSName } ";` ;
28- await fsPromise . writeFile ( deviconMinPath , fileContent , "utf8" ) ;
29-
30- return gulp . src ( finalMinSCSSName )
31- . pipe ( sass . sync ( { "outputStyle" : "compressed" } ) . on ( 'error' , sass . logError ) )
32- . pipe ( gulp . dest ( './' ) ) ;
22+ await createCSSFiles ( ) ;
23+
24+ let deviconMinPath = path . join ( __dirname , finalMinSCSSName ) ;
25+ // recall that devicon-alias.scss imported the devicon.css => don't need
26+ // to reimport that file.
27+ const fileContent = `@use "${ aliasSCSSName } ";@use "${ colorsCSSName } ";` ;
28+ await fsPromise . writeFile ( deviconMinPath , fileContent , "utf8" ) ;
29+
30+ return gulp
31+ . src ( finalMinSCSSName )
32+ . pipe ( sass . sync ( { outputStyle : "compressed" } ) . on ( "error" , sass . logError ) )
33+ . pipe ( gulp . dest ( "./" ) ) ;
3334}
3435
3536/**
3637 * Create the devicon-alias.scss and the
3738 * devicon-colors.css from the devicon.json.
3839 */
3940async function createCSSFiles ( ) {
40- const deviconJson = JSON . parse (
41- await fsPromise . readFile (
42- path . join ( __dirname , deviconJSONName ) , "utf8"
43- )
44- ) ;
45-
46- await Promise . all ( [
47- createAliasSCSS ( deviconJson ) ,
48- createColorsCSS ( deviconJson )
49- ] )
41+ const deviconJson = JSON . parse (
42+ await fsPromise . readFile ( path . join ( __dirname , deviconJSONName ) , "utf8" )
43+ ) ;
44+
45+ await Promise . all ( [
46+ createAliasSCSS ( deviconJson ) ,
47+ createColorsCSS ( deviconJson )
48+ ] ) ;
5049}
5150
5251/**
@@ -55,123 +54,119 @@ async function createCSSFiles() {
5554 * This is due to sass's ability to extend classes => Make it easier
5655 * to create aliases classes.
5756 * @param {Object } deviconJson, the object read from the
58- * devicon.json file.
57+ * devicon.json file.
5958 * @return a Promise that'll resolve when the devicon-alias.scss is
6059 * created.
6160 */
6261function createAliasSCSS ( deviconJson ) {
63- let statements = deviconJson . map ( createAliasStatement ) . join ( " " ) ;
64- let sass = `@use "devicon";${ statements } ` ;
65- let sassPath = path . join ( __dirname , aliasSCSSName ) ;
66- return fsPromise . writeFile ( sassPath , sass , "utf8" ) ;
62+ let statements = deviconJson . map ( createAliasStatement ) . join ( " " ) ;
63+ let sass = `@use "devicon";${ statements } ` ;
64+ let sassPath = path . join ( __dirname , aliasSCSSName ) ;
65+ return fsPromise . writeFile ( sassPath , sass , "utf8" ) ;
6766}
6867
69-
7068/**
71- * Create the aliases statement by searching for the
69+ * Create the aliases statement by searching for the
7270 * techname in the statement and finding its aliases in
7371 * the deviconJson.
7472 * @param {Object } fontObj, a devicon font object.
7573 * @return a string representing a css statement of the
7674 * devicon-alias.scss.
7775 */
7876function createAliasStatement ( fontObj ) {
79- let {
80- name,
81- aliases
82- } = fontObj ;
77+ let { name, aliases } = fontObj ;
8378
84- return aliases . map ( aliasObj => {
85- return `.devicon-${ name } -${ aliasObj . alias } {
79+ return aliases
80+ . map ( aliasObj => {
81+ return `.devicon-${ name } -${ aliasObj . alias } {
8682 @extend .devicon-${ name } -${ aliasObj . base } ;
8783 }` ;
88- } ) . join ( " " ) ;
84+ } )
85+ . join ( " " ) ;
8986}
9087
9188/**
9289 * Create a colors css file in the root dir based on the deviconJson.
9390 * @param {Object } deviconJson, the object read from the
94- * devicon.json file.
91+ * devicon.json file.
9592 * @return a Promise that'll resolve when the devicon-alias.scss is
9693 * created.
9794 */
9895function createColorsCSS ( deviconJson ) {
99- // create the color statements for each font object
100- let statements = deviconJson . map ( fontObj => {
101- let {
102- name ,
103- versions : {
104- font : fonts
105- } ,
106- color ,
107- aliases
108- } = fontObj ;
109-
110- if ( fonts . length === 0 || typeof ( color ) !== "string" ) {
111- console . log ( `This object doesn't have a font or a color: ${ name } ` ) ;
112- return "" ;
113- }
114-
115- // process the icons in the font attr
116- let cssClasses = fonts . map ( font => `.devicon- ${ name } - ${ font } .colored` ) ;
117-
118- // process the icons in the aliases attr
119- aliases . forEach ( aliasObj => {
120- cssClasses . push ( `.devicon- ${ name } - ${ aliasObj [ "alias" ] } .colored` ) ;
121- } ) ;
122-
123- return ` ${ cssClasses . join ( "," ) } {color: ${ color } }` ;
124- } ) . join ( " " ) ;
125-
126- let cssPath = path . join ( __dirname , colorsCSSName ) ;
127- return fsPromise . writeFile ( cssPath , statements , "utf8" ) ;
96+ // create the color statements for each font object
97+ let statements = deviconJson
98+ . map ( fontObj => {
99+ let {
100+ name ,
101+ versions : { font : fonts } ,
102+ color ,
103+ aliases
104+ } = fontObj ;
105+
106+ if ( fonts . length === 0 || typeof color !== "string" ) {
107+ console . log ( `This object doesn't have a font or a color: ${ name } ` ) ;
108+ return "" ;
109+ }
110+
111+ // process the icons in the font attr
112+ let cssClasses = fonts . map ( ( font ) => `.devicon- ${ name } - ${ font } .colored` ) ;
113+
114+ // process the icons in the aliases attr
115+ aliases . forEach ( aliasObj => {
116+ cssClasses . push ( `.devicon- ${ name } - ${ aliasObj [ "alias" ] } .colored` ) ;
117+ } ) ;
118+
119+ return ` ${ cssClasses . join ( "," ) } {color: ${ color } }` ;
120+ } )
121+ . join ( " " ) ;
122+
123+ let cssPath = path . join ( __dirname , colorsCSSName ) ;
124+ return fsPromise . writeFile ( cssPath , statements , "utf8" ) ;
128125}
129126
130127/**
131- * Remove the devicon-alias.scss, devicon-colors.css,
128+ * Remove the devicon-alias.scss, devicon-colors.css,
132129 * and the devicon.min.scss.
133130 */
134131function cleanUp ( ) {
135- let fileNames = [
136- aliasSCSSName ,
137- colorsCSSName ,
138- finalMinSCSSName ,
139- ] ;
140-
141- return Promise . all (
142- fileNames . map ( name => {
143- try {
144- let filePath = path . join ( __dirname , name ) ;
145- return fsPromise . unlink ( filePath ) ;
146- } catch ( e ) {
147- console . log ( e ) ;
148- }
149- } )
150- ) ;
132+ let fileNames = [ aliasSCSSName , colorsCSSName , finalMinSCSSName ] ;
133+
134+ return Promise . all (
135+ fileNames . map ( name => {
136+ try {
137+ let filePath = path . join ( __dirname , name ) ;
138+ return fsPromise . unlink ( filePath ) ;
139+ } catch ( e ) {
140+ console . log ( e ) ;
141+ }
142+ } )
143+ ) ;
151144}
152145
153-
154146//////// Update SVG Task ////////
155147/**
156- * Update the svg by optimizing it
148+ * Update the svg by optimizing it
157149 * and prefixing its ids so it's unique across the repo.
158- *
150+ *
159151 * This requires a json list of svg file names to update.
160152 * This must be passed through the commandline arguments.
161153 */
162154function optimizeSvg ( ) {
163- let svgGlob = JSON . parse ( yargs . argv . svgFiles )
164- console . log ( "Optimizing these files: " , svgGlob )
165- return gulp . src ( svgGlob )
155+ let svgGlob = JSON . parse ( yargs . argv . svgFiles ) ;
156+ console . log ( "Optimizing these files: " , svgGlob ) ;
157+ return gulp
158+ . src ( svgGlob )
166159 . pipe ( svgmin ( configOptionCallback ) )
167- . pipe ( gulp . dest ( file => {
168- return file . base
169- } ) )
160+ . pipe (
161+ gulp . dest ( file => {
162+ return file . base ;
163+ } )
164+ ) ;
170165}
171166
172167/**
173168 * Create a config option for each file.
174- * @param {Object } file - Gulp Vinyl instance of the file
169+ * @param {Object } file - Gulp Vinyl instance of the file
175170 * being processed.
176171 * @returns a SVGO config object.
177172 */
@@ -182,7 +177,7 @@ function configOptionCallback(file) {
182177 prefixIds : {
183178 prefix : file . stem , // add file name to ids
184179 delim : "-"
185- }
180+ } ,
186181 } ,
187182 {
188183 removeViewBox : false // keep viewbox
@@ -191,10 +186,9 @@ function configOptionCallback(file) {
191186 removeDimensions : true // remove height and width
192187 }
193188 ]
194- }
189+ } ;
195190}
196191
197-
198192exports . updateCss = createDeviconMinCSS ;
199193exports . clean = cleanUp ;
200194exports . optimizeSvg = optimizeSvg ;
0 commit comments