1
+ const path = require ( 'path' ) ;
2
+ const fs = require ( 'fs' ) ;
3
+
1
4
const gulp = require ( 'gulp' ) ;
2
5
const plugins = require ( 'gulp-load-plugins' ) ( ) ;
3
6
const pump = require ( 'pump' ) ;
@@ -247,10 +250,41 @@ gulp.task('generate-service-worker', (callback) => {
247
250
} , callback ) ;
248
251
} ) ;
249
252
253
+ const transform = ( jsonResult ) => {
254
+ const result = { } ;
255
+ const entries = Object . entries ( jsonResult ) ;
256
+
257
+ for ( const [ key , value ] of entries ) {
258
+ result [ key . replace ( `${ dirs . tmp } /source` , '' ) ] = value ;
259
+ }
260
+
261
+ return result ;
262
+ } ;
263
+
250
264
gulp . task ( 'sri' , ( ) => {
251
- return gulp . src ( `${ dirs . dist } /**/*.html` )
252
- . pipe ( plugins . sriHash ( ) )
253
- . pipe ( gulp . dest ( dirs . dist ) ) ;
265
+ return gulp . src ( `${ dirs . tmp } /source/**/*.{js,css}` )
266
+ . pipe ( plugins . sri ( { algorithms : [ 'sha384' ] , transform } ) )
267
+ . pipe ( gulp . dest ( dirs . tmp ) ) ;
268
+ } ) ;
269
+
270
+ let sriList ;
271
+
272
+ const replaceSRI = ( content ) => {
273
+ let result = content ;
274
+
275
+ for ( const [ file , value ] of Object . entries ( sriList ) ) {
276
+ result = result . replace ( `${ file } "` , `${ file } " integrity="${ value } " crossorigin="anonymous"` ) ;
277
+ }
278
+
279
+ return result ;
280
+ } ;
281
+
282
+ gulp . task ( 'add-sri' , ( ) => {
283
+ sriList = JSON . parse ( fs . readFileSync ( path . join ( __dirname , dirs . tmp , 'sri.json' ) , 'utf8' ) ) ; //eslint-disable-line no-sync
284
+
285
+ return gulp . src ( `${ dirs . tmp } /**/*.hbs` )
286
+ . pipe ( plugins . transform ( 'utf8' , replaceSRI ) )
287
+ . pipe ( gulp . dest ( dirs . tmp ) ) ;
254
288
} ) ;
255
289
256
290
gulp . task ( 'build' , gulp . series (
@@ -267,9 +301,10 @@ gulp.task('build', gulp.series(
267
301
'revfiles' ,
268
302
'revreplace:content' ,
269
303
'revreplace:theme' ,
304
+ 'sri' ,
305
+ 'add-sri' ,
270
306
'build:hexo' ,
271
307
'generate-service-worker' ,
272
- 'sri' ,
273
308
'compress:zopfli' ,
274
309
'compress:brotli'
275
310
) ) ;
0 commit comments