@@ -14,6 +14,17 @@ const maxTime = 5;
1414// The minimum sample size required to perform statistical analysis.
1515const minSamples = 5 ;
1616
17+ // Get the revisions and make things happen!
18+ if ( require . main === module ) {
19+ const { benchmarks, revisions } = getArguments ( process . argv . slice ( 2 ) ) ;
20+ const benchmarkProjects = prepareBenchmarkProjects ( revisions ) ;
21+
22+ runBenchmarks ( benchmarks , benchmarkProjects ) . catch ( ( error ) => {
23+ console . error ( error ) ;
24+ process . exit ( 1 ) ;
25+ } ) ;
26+ }
27+
1728function localDir ( ...paths ) {
1829 return path . join ( __dirname , '..' , ...paths ) ;
1930}
@@ -31,17 +42,16 @@ function exec(command, options = {}) {
3142// and returns path to its 'dist' directory.
3243function prepareBenchmarkProjects ( revisionList ) {
3344 const tmpDir = path . join ( os . tmpdir ( ) , 'graphql-js-benchmark' ) ;
34- fs . rmdirSync ( tmpDir , { recursive : true , force : true } ) ;
45+ fs . rmSync ( tmpDir , { recursive : true , force : true } ) ;
3546 fs . mkdirSync ( tmpDir ) ;
3647
3748 const setupDir = path . join ( tmpDir , 'setup' ) ;
38- fs . rmdirSync ( setupDir , { recursive : true , force : true } ) ;
3949 fs . mkdirSync ( setupDir ) ;
4050
4151 return revisionList . map ( ( revision ) => {
4252 console . log ( `🍳 Preparing ${ revision } ...` ) ;
4353 const projectPath = path . join ( setupDir , revision ) ;
44- fs . rmdirSync ( projectPath , { recursive : true } ) ;
54+ fs . rmSync ( projectPath , { recursive : true , force : true } ) ;
4555 fs . mkdirSync ( projectPath ) ;
4656
4757 fs . writeFileSync (
@@ -73,12 +83,12 @@ function prepareBenchmarkProjects(revisionList) {
7383 }
7484
7585 const repoDir = path . join ( tmpDir , hash ) ;
76- fs . rmdirSync ( repoDir , { recursive : true , force : true } ) ;
86+ fs . rmSync ( repoDir , { recursive : true , force : true } ) ;
7787 fs . mkdirSync ( repoDir ) ;
7888 exec ( `git archive "${ hash } " | tar -xC "${ repoDir } "` ) ;
7989 exec ( 'npm --quiet ci' , { cwd : repoDir } ) ;
8090 fs . renameSync ( buildNPMArchive ( repoDir ) , archivePath ) ;
81- fs . rmdirSync ( repoDir , { recursive : true , force : true } ) ;
91+ fs . rmSync ( repoDir , { recursive : true } ) ;
8292 return archivePath ;
8393 }
8494
@@ -230,9 +240,7 @@ function maxBy(array, fn) {
230240}
231241
232242// Prepare all revisions and run benchmarks matching a pattern against them.
233- async function runBenchmarks ( benchmarks , revisions ) {
234- const benchmarkProjects = prepareBenchmarkProjects ( revisions ) ;
235-
243+ async function runBenchmarks ( benchmarks , benchmarkProjects ) {
236244 for ( const benchmark of benchmarks ) {
237245 const results = [ ] ;
238246 for ( let i = 0 ; i < benchmarkProjects . length ; ++ i ) {
@@ -266,31 +274,36 @@ async function runBenchmarks(benchmarks, revisions) {
266274
267275function getArguments ( argv ) {
268276 const revsIdx = argv . indexOf ( '--revs' ) ;
269- const revsArgs = revsIdx === - 1 ? [ ] : argv . slice ( revsIdx + 1 ) ;
270- const specificBenchmarks = revsIdx === - 1 ? argv : argv . slice ( 0 , revsIdx ) ;
271- let assumeArgs ;
272- let revisions ;
273- switch ( revsArgs . length ) {
277+ const revisions = revsIdx === - 1 ? [ ] : argv . slice ( revsIdx + 1 ) ;
278+ const benchmarks = revsIdx === - 1 ? argv : argv . slice ( 0 , revsIdx ) ;
279+
280+ switch ( revisions . length ) {
274281 case 0 :
275- assumeArgs = [ ...specificBenchmarks , '--revs' , 'local' , 'HEAD' ] ;
276- revisions = [ LOCAL , 'HEAD' ] ;
277- break ;
278- case 1 :
279- assumeArgs = [ ...specificBenchmarks , '--revs' , 'local' , revsArgs [ 0 ] ] ;
280- revisions = [ LOCAL , revsArgs [ 0 ] ] ;
281- break ;
282- default :
283- revisions = revsArgs ;
282+ revisions . unshift ( 'HEAD' ) ;
283+ // fall through
284+ case 1 : {
285+ revisions . unshift ( 'local' ) ;
286+
287+ const assumeArgv = [ 'benchmark' , ...benchmarks , '--revs' , ...revisions ] ;
288+ console . warn ( 'Assuming you meant: ' + bold ( assumeArgv . join ( ' ' ) ) ) ;
284289 break ;
290+ }
285291 }
286292
287- if ( assumeArgs ) {
288- console . warn (
289- 'Assuming you meant: ' + bold ( 'benchmark ' + assumeArgs . join ( ' ' ) ) ,
290- ) ;
293+ if ( benchmarks . length === 0 ) {
294+ benchmarks . push ( ...findAllBenchmarks ( ) ) ;
291295 }
292296
293- return { specificBenchmarks, revisions } ;
297+ return { benchmarks, revisions } ;
298+ }
299+
300+ function findAllBenchmarks ( ) {
301+ return fs
302+ . readdirSync ( localDir ( 'benchmark' ) , { withFileTypes : true } )
303+ . filter ( ( dirent ) => dirent . isFile ( ) )
304+ . map ( ( dirent ) => dirent . name )
305+ . filter ( ( name ) => name . endsWith ( '-benchmark.js' ) )
306+ . map ( ( name ) => path . join ( 'benchmark' , name ) ) ;
294307}
295308
296309function bold ( str ) {
@@ -317,26 +330,6 @@ function grey(str) {
317330 return '\u001b[90m' + str + '\u001b[0m' ;
318331}
319332
320- function findAllBenchmarks ( ) {
321- return fs
322- . readdirSync ( localDir ( 'benchmark' ) , { withFileTypes : true } )
323- . filter ( ( dirent ) => dirent . isFile ( ) )
324- . map ( ( dirent ) => dirent . name )
325- . filter ( ( name ) => name . endsWith ( '-benchmark.js' ) )
326- . map ( ( name ) => path . join ( 'benchmark' , name ) ) ;
327- }
328-
329- // Get the revisions and make things happen!
330- if ( require . main === module ) {
331- const { specificBenchmarks, revisions } = getArguments ( process . argv . slice ( 2 ) ) ;
332- const benchmarks =
333- specificBenchmarks . length > 0 ? specificBenchmarks : findAllBenchmarks ( ) ;
334- runBenchmarks ( benchmarks , revisions ) . catch ( ( error ) => {
335- console . error ( error ) ;
336- process . exit ( 1 ) ;
337- } ) ;
338- }
339-
340333function sampleModule ( modulePath ) {
341334 const sampleCode = `
342335 const assert = require('assert');
0 commit comments