11const fs = require ( 'fs' ) ;
22const path = require ( 'path' ) ;
3- const https = require ( 'https' ) ;
43const yaml = require ( 'js-yaml' ) ;
54const { spawnSync } = require ( 'child_process' ) ;
65const ssri = require ( 'ssri' ) ;
76const { getVendors } = require ( 'hexo-theme-next/scripts/events/lib/utils' ) ;
87const yargs = require ( 'yargs/yargs' ) ;
98const { hideBin } = require ( 'yargs/helpers' ) ;
109
11- // Process won't quit if keepAlive
12- const agent = new https . Agent ( { keepAlive : false } ) ;
13-
1410const argv = yargs ( hideBin ( process . argv ) )
1511 . option ( 'diff' , {
1612 describe : 'Enable diff mode' ,
@@ -26,41 +22,18 @@ const dependencies = yaml.load(vendorsFile);
2622
2723const newPlugins = require ( '../package.json' ) . dependencies ;
2824
29- async function request ( url ) {
30- return new Promise ( ( resolve , reject ) => {
31- const req = https . get ( url , { agent } , response => {
32- resolve ( response . statusCode ) ;
33- } ) ;
34- req . on ( 'error' , error => {
35- reject ( error . status ) ;
36- } ) ;
37- } ) ;
38- }
39-
40- async function checkIntegrity ( url ) {
41- return new Promise ( ( resolve , reject ) => {
42- const req = https . get ( url , response => {
43- ssri . fromStream ( response , { algorithms : [ 'sha256' ] } )
44- . then ( integrity => integrity . toString ( ) )
45- . then ( resolve ) ;
46- } ) ;
47- req . on ( 'error' , error => {
48- reject ( error . status ) ;
49- } ) ;
50- } ) ;
51- }
52-
5325async function formatTable ( name , links , groundTruth ) {
5426 let content = '' ;
5527 for ( const [ key , url ] of Object . entries ( links ) ) {
5628 if ( ! [ 'jsdelivr' , 'unpkg' , 'cdnjs' ] . includes ( key ) ) continue ;
57- const statusCode = await request ( url ) ;
58- let integrityMatch ;
29+ const response = await fetch ( url ) ;
30+ const statusCode = response . status ;
31+ let integrityMatch = '❌' ;
5932 if ( statusCode === 200 ) {
60- const integrity = await checkIntegrity ( url ) ;
61- integrityMatch = integrity === groundTruth ? '✅' : '❌' ;
62- } else {
63- integrityMatch = '❌' ;
33+ const text = await response . text ( ) ;
34+ if ( ssri . checkData ( text , groundTruth , { algorithms : [ 'sha256' ] } ) ) {
35+ integrityMatch = '✅' ;
36+ }
6437 }
6538 content += `| [${ key } ](${ url } ) | ${ statusCode === 200 ? '✅' : '❌' } ${ statusCode } | ${ integrityMatch } |\n` ;
6639 }
0 commit comments