@@ -17,8 +17,11 @@ const glob = require('glob');
17
17
const chalk = require ( 'chalk' ) ;
18
18
const crypto = require ( 'crypto' ) ;
19
19
const ttf2woff2 = require ( 'ttf2woff2' ) ;
20
- const _ = require ( 'lodash' ) ;
20
+ const buildTemplateFn = require ( 'lodash/template ' ) ;
21
21
22
+ /**
23
+ * @param {IGrunt } grunt
24
+ */
22
25
module . exports = function webFonts ( grunt ) {
23
26
const wf = require ( './util/util' ) ;
24
27
@@ -76,7 +79,7 @@ module.exports = function webFonts(grunt) {
76
79
/*
77
80
* Check for `dest` param on either target config or global options object
78
81
*/
79
- if ( _ . isNil ( params . dest ) && _ . isNil ( options . dest ) ) {
82
+ if ( params . dest == null && options . dest == null ) {
80
83
logger . warn ( 'Required property ' + [ this . name , this . target , 'dest' ] . join ( '.' ) +
81
84
' or ' + [ this . name , this . target , 'options.dest' ] . join ( '.' ) + ' missing.' ) ;
82
85
}
@@ -87,11 +90,10 @@ module.exports = function webFonts(grunt) {
87
90
}
88
91
89
92
// Source files
90
- let svgFiles = _ ( this . filesSrc ) . filter ( isSvgFile ) ;
93
+ let files = this . filesSrc . filter ( isSvgFile ) ;
91
94
if ( options . skipLinks === true ) {
92
- svgFiles = svgFiles . reject ( isFsLink ) ;
95
+ files = files . filter ( ( filepath ) => ! fs . lstatSync ( filepath ) . isSymbolicLink ( ) ) ;
93
96
}
94
- const files = svgFiles . value ( ) ;
95
97
96
98
if ( ! files . length ) {
97
99
logger . warn ( 'Specified empty list of source SVG files.' ) ;
@@ -149,7 +151,7 @@ module.exports = function webFonts(grunt) {
149
151
execMaxBuffer : options . execMaxBuffer || 1024 * 200 ,
150
152
} ;
151
153
152
- _ . assignIn ( defaultOptions , {
154
+ Object . assign ( defaultOptions , {
153
155
fontName : defaultOptions . fontBaseName ,
154
156
destCssPaths : {
155
157
css : defaultOptions . destCss ,
@@ -160,9 +162,9 @@ module.exports = function webFonts(grunt) {
160
162
} ,
161
163
relativeFontPath : defaultOptions . relativeFontPath || path . relative ( defaultOptions . destCss , defaultOptions . dest ) ,
162
164
destHtml : options . destHtml || defaultOptions . destCss ,
163
- fontfaceStyles : has ( defaultOptions . styles , 'font' ) ,
164
- baseStyles : has ( defaultOptions . styles , 'icon' ) ,
165
- extraStyles : has ( defaultOptions . styles , 'extra' ) ,
165
+ fontfaceStyles : defaultOptions . styles . includes ( 'font' ) ,
166
+ baseStyles : defaultOptions . styles . includes ( 'icon' ) ,
167
+ extraStyles : defaultOptions . styles . includes ( 'extra' ) ,
166
168
files,
167
169
glyphs : [ ] ,
168
170
} ) ;
@@ -242,7 +244,7 @@ module.exports = function webFonts(grunt) {
242
244
* Call callback function if it was specified in the options.
243
245
*/
244
246
function completeTask ( ) {
245
- if ( defaultOptions && _ . isFunction ( defaultOptions . callback ) ) {
247
+ if ( defaultOptions && defaultOptions . callback && 'call' in defaultOptions . callback ) {
246
248
defaultOptions . callback ( defaultOptions . fontName , defaultOptions . types , defaultOptions . glyphs , defaultOptions . hash ) ;
247
249
}
248
250
allDone ( ) ;
@@ -319,7 +321,7 @@ module.exports = function webFonts(grunt) {
319
321
}
320
322
321
323
if ( result ) {
322
- defaultOptions = _ . assignIn ( defaultOptions , result ) ;
324
+ defaultOptions = Object . assign ( defaultOptions , result ) ;
323
325
}
324
326
325
327
done ( ) ;
@@ -333,7 +335,7 @@ module.exports = function webFonts(grunt) {
333
335
*/
334
336
function generateWoff2Font ( done ) {
335
337
if (
336
- ! has ( defaultOptions . types , 'woff2' ) ||
338
+ ! defaultOptions . types . includes ( 'woff2' ) ||
337
339
fs . existsSync ( wf . getFontPath ( defaultOptions , 'woff2' ) )
338
340
) {
339
341
done ( ) ;
@@ -345,7 +347,7 @@ module.exports = function webFonts(grunt) {
345
347
const ttfFont = fs . readFileSync ( ttfFontPath ) ;
346
348
347
349
// Remove TTF font if not needed
348
- if ( ! has ( defaultOptions . types , 'ttf' ) ) {
350
+ if ( ! defaultOptions . types . includes ( 'ttf' ) ) {
349
351
fs . unlinkSync ( ttfFontPath ) ;
350
352
}
351
353
@@ -391,7 +393,7 @@ module.exports = function webFonts(grunt) {
391
393
const fontSrcs = [ [ ] , [ ] ] ;
392
394
393
395
defaultOptions . order . forEach ( ( type ) => {
394
- if ( ! has ( defaultOptions . types , type ) ) return ;
396
+ if ( ! defaultOptions . types . includes ( type ) ) return ;
395
397
wf . fontsSrcsMap [ type ] . forEach ( ( font , idx ) => {
396
398
if ( font ) {
397
399
fontSrcs [ idx ] . push ( generateFontSrc ( type , font , stylesheet ) ) ;
@@ -409,26 +411,26 @@ module.exports = function webFonts(grunt) {
409
411
410
412
// Read JSON file corresponding to CSS template
411
413
const templateJson = readTemplate ( defaultOptions . template , defaultOptions . syntax , '.json' , true ) ;
412
- if ( templateJson ) defaultOptions = _ . assignIn ( defaultOptions , JSON . parse ( templateJson . template ) ) ;
414
+ if ( templateJson ) defaultOptions = Object . assign ( defaultOptions , JSON . parse ( templateJson . template ) ) ;
413
415
414
416
// Now override values with templateOptions
415
- if ( defaultOptions . templateOptions ) defaultOptions = _ . assignIn ( defaultOptions , defaultOptions . templateOptions ) ;
417
+ if ( defaultOptions . templateOptions ) defaultOptions = Object . assign ( defaultOptions , defaultOptions . templateOptions ) ;
416
418
417
419
// Generate CSS
418
420
// Use extension of defaultOptions.template file if given, or default to .css
419
421
420
422
const ext = path . extname ( defaultOptions . template ) || '.css' ;
421
423
defaultOptions . cssTemplate = readTemplate ( defaultOptions . template , defaultOptions . syntax , ext ) ;
422
424
423
- const cssContext = _ . assignIn ( defaultOptions , {
425
+ const cssContext = Object . assign ( defaultOptions , {
424
426
iconsStyles : true ,
425
427
stylesheet,
426
428
} ) ;
427
429
428
430
let css = renderTemplate ( defaultOptions . cssTemplate , cssContext ) ;
429
431
430
432
// Fix CSS preprocessors comments: single line comments will be removed after compilation
431
- if ( has ( [ 'sass' , 'scss' , 'less' , 'styl' ] , stylesheet ) ) {
433
+ if ( [ 'sass' , 'scss' , 'less' , 'styl' ] . includes ( stylesheet ) ) {
432
434
css = css . replace ( / \/ \* * ( .* ?) * \* \/ / g, '// $1' ) ;
433
435
}
434
436
@@ -474,7 +476,7 @@ module.exports = function webFonts(grunt) {
474
476
* @return {Object } Base template context
475
477
*/
476
478
function prepareBaseTemplateContext ( ) {
477
- return _ . assignIn ( { } , defaultOptions ) ;
479
+ return Object . assign ( { } , defaultOptions ) ;
478
480
}
479
481
480
482
/**
@@ -483,25 +485,25 @@ module.exports = function webFonts(grunt) {
483
485
* @return {Object } HTML template context
484
486
*/
485
487
function prepareHtmlTemplateContext ( ) {
486
- const context = _ . assignIn ( { } , defaultOptions ) ;
488
+ const context = Object . assign ( { } , defaultOptions ) ;
487
489
488
490
// Prepare relative font paths for injection into @font -face refs in HTML
489
- const relativeRe = new RegExp ( _ . escapeRegExp ( defaultOptions . relativeFontPath ) , 'g' ) ;
491
+ const relativeRe = new RegExp ( defaultOptions . relativeFontPath , 'g' ) ;
490
492
const htmlRelativeFontPath = normalizePath ( path . relative ( defaultOptions . destHtml , defaultOptions . dest ) ) ;
491
493
492
494
let fontSrc1 = defaultOptions . fontSrc1 . replace ( relativeRe , htmlRelativeFontPath ) ;
493
495
let fontSrc2 = defaultOptions . fontSrc2 . replace ( relativeRe , htmlRelativeFontPath ) ;
494
496
495
497
if ( context . fontPathVariables ) {
496
498
const fontPathVariableName = context . fontFamilyName + '-font-path' ;
497
- const lessReplacer = new RegExp ( _ . escapeRegExp ( `@{${ fontPathVariableName } }` ) , 'g' ) ;
498
- const scssReplacer = new RegExp ( _ . escapeRegExp ( `$${ fontPathVariableName } + ` ) , 'g' ) ;
499
+ const lessReplacer = new RegExp ( `@{${ fontPathVariableName } }` , 'g' ) ;
500
+ const scssReplacer = new RegExp ( `$${ fontPathVariableName } + ` , 'g' ) ;
499
501
500
502
fontSrc1 = fontSrc1 . replace ( lessReplacer , '' ) . replace ( scssReplacer , '' ) ;
501
503
fontSrc2 = fontSrc2 . replace ( lessReplacer , '' ) . replace ( scssReplacer , '' ) ;
502
504
}
503
505
504
- _ . assignIn ( context , {
506
+ Object . assign ( context , {
505
507
fontSrc1,
506
508
fontSrc2,
507
509
fontfaceStyles : true ,
@@ -511,9 +513,9 @@ module.exports = function webFonts(grunt) {
511
513
stylesheet : 'css' ,
512
514
} ) ;
513
515
514
- return _ ( context ) . extend ( {
516
+ return Object . assign ( context , {
515
517
styles : renderTemplate ( defaultOptions . cssTemplate , context ) ,
516
- } ) . value ( ) ;
518
+ } ) ;
517
519
}
518
520
519
521
/**
@@ -526,7 +528,7 @@ module.exports = function webFonts(grunt) {
526
528
function generateCustomOutput ( outputConfig ) {
527
529
// Accesses context
528
530
const context = prepareBaseTemplateContext ( ) ;
529
- _ . assignIn ( context , outputConfig . context ) ;
531
+ Object . assign ( context , outputConfig . context ) ;
530
532
531
533
// Prepares config attributes related to template filepath
532
534
const templatePath = outputConfig . template ;
@@ -624,32 +626,21 @@ module.exports = function webFonts(grunt) {
624
626
* @return {Array }
625
627
*/
626
628
function optionToArray ( val , defVal ) {
627
- if ( _ . isUndefined ( val ) ) {
629
+ if ( val === undefined ) {
628
630
val = defVal ;
629
631
}
630
632
631
633
if ( ! val ) {
632
634
return [ ] ;
633
635
}
634
636
635
- if ( ! _ . isString ( val ) ) {
637
+ if ( typeof val !== 'string' ) {
636
638
return val ;
637
639
}
638
640
639
641
return val . split ( ',' ) . map ( ( str ) => str . trim ( ) ) ;
640
642
}
641
643
642
- /**
643
- * Check if a value exists in an array
644
- *
645
- * @param {Array } haystack Array to find the needle in
646
- * @param {* } needle Value to find
647
- * @return {Boolean } Needle was found
648
- */
649
- function has ( haystack , needle ) {
650
- return haystack . indexOf ( needle ) !== - 1 ;
651
- }
652
-
653
644
/**
654
645
* Return a specified option if it exists in an object or `_default` otherwise
655
646
*
@@ -683,17 +674,6 @@ module.exports = function webFonts(grunt) {
683
674
return path . extname ( filepath ) . toLowerCase ( ) === '.svg' ;
684
675
}
685
676
686
- /**
687
- * Check whether file is link or not
688
- *
689
- * @param {String } filepath File path
690
- * @return {Boolean }
691
- */
692
- function isFsLink ( filepath ) {
693
- const stat = fs . lstatSync ( filepath ) ;
694
- return stat . isSymbolicLink ( ) ;
695
- }
696
-
697
677
/**
698
678
* Convert font file to data:uri and remove source file
699
679
*
@@ -745,7 +725,7 @@ module.exports = function webFonts(grunt) {
745
725
let fontPathVariableName = defaultOptions . fontFamilyName + '-font-path' ;
746
726
747
727
let url ;
748
- if ( font . embeddable && has ( defaultOptions . embed , type ) ) {
728
+ if ( font . embeddable && defaultOptions . embed . includes ( type ) ) {
749
729
url = embedFont ( path . join ( defaultOptions . dest , filename ) ) ;
750
730
} else {
751
731
if ( defaultOptions . fontPathVariables && stylesheet !== 'css' ) {
@@ -816,7 +796,7 @@ module.exports = function webFonts(grunt) {
816
796
*/
817
797
function renderTemplate ( template , context ) {
818
798
try {
819
- return _ . template ( template . template ) ( context ) ;
799
+ return buildTemplateFn ( template . template ) ( context ) ;
820
800
} catch ( error ) {
821
801
grunt . fail . fatal ( 'Error while rendering template ' + template . filename + ': ' + error . message ) ;
822
802
}
0 commit comments