time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

build.js (3296B)


      1 /**
      2 * @license Apache-2.0
      3 *
      4 * Copyright (c) 2020 The Stdlib Authors.
      5 *
      6 * Licensed under the Apache License, Version 2.0 (the "License");
      7 * you may not use this file except in compliance with the License.
      8 * You may obtain a copy of the License at
      9 *
     10 *    http://www.apache.org/licenses/LICENSE-2.0
     11 *
     12 * Unless required by applicable law or agreed to in writing, software
     13 * distributed under the License is distributed on an "AS IS" BASIS,
     14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15 * See the License for the specific language governing permissions and
     16 * limitations under the License.
     17 */
     18 
     19 'use strict';
     20 
     21 // MODULES //
     22 
     23 var resolve = require( 'path' ).resolve;
     24 var logger = require( 'debug' );
     25 var readDir = require( '@stdlib/fs/read-dir' ).sync;
     26 var exists = require( '@stdlib/fs/exists' ).sync;
     27 var writeFile = require( '@stdlib/fs/write-file' ).sync;
     28 var isPRNGLike = require( '@stdlib/assert/is-prng-like' );
     29 var licenseHeader = require( '@stdlib/_tools/licenses/header' );
     30 
     31 
     32 // VARIABLES //
     33 
     34 var debug = logger( 'reviver:build' );
     35 var OPTS = {
     36 	'encoding': 'utf8'
     37 };
     38 var SPDX = 'Apache-2.0';
     39 var YEAR = (new Date()).getFullYear();
     40 var COPYRIGHT = 'The Stdlib Authors';
     41 
     42 
     43 // FUNCTIONS //
     44 
     45 /**
     46 * Main execution sequence.
     47 *
     48 * @private
     49 */
     50 function main() {
     51 	var dpath;
     52 	var fpath;
     53 	var opath;
     54 	var tmp1;
     55 	var tmp2;
     56 	var prng;
     57 	var dirs;
     58 	var pkgs;
     59 	var str;
     60 	var err;
     61 	var pkg;
     62 	var p;
     63 	var i;
     64 
     65 	dpath = resolve( __dirname, '..', '..' );
     66 
     67 	debug( 'Reading namespace directory contents: %s', dpath );
     68 	dirs = readDir( dpath );
     69 	if ( dirs instanceof Error ) {
     70 		debug( 'Encountered an error when attempting to read namespace directory contents: %s', err.message );
     71 		return;
     72 	}
     73 
     74 	debug( 'Finding packages...' );
     75 	pkgs = [];
     76 	for ( i = 0; i < dirs.length; i++ ) {
     77 		p = resolve( dpath, dirs[ i ] );
     78 		fpath = resolve( p, 'package.json' );
     79 		if ( exists( fpath ) ) {
     80 			prng = require( p ); // eslint-disable-line stdlib/no-dynamic-require
     81 			if ( isPRNGLike( prng ) ) {
     82 				pkg = require( fpath ); // eslint-disable-line stdlib/no-dynamic-require
     83 				pkgs.push( [ pkg.name, prng.NAME ] );
     84 			}
     85 		}
     86 	}
     87 	debug( 'Found %d packages.', pkgs.length );
     88 
     89 	debug( 'Generating script...' );
     90 	str = '';
     91 	str += licenseHeader( SPDX, 'js', {
     92 		'year': YEAR,
     93 		'copyright': COPYRIGHT
     94 	});
     95 	str += '\n';
     96 
     97 	str += '// This file is generated using `scripts/build.js`.\n\n';
     98 	str += '\'use strict\';\n';
     99 	str += '\n';
    100 	str += '// MODULES //\n';
    101 	str += '\n';
    102 	tmp1 = [];
    103 	tmp2 = [];
    104 	for ( i = 0; i < pkgs.length; i++ ) {
    105 		pkg = pkgs[ i ];
    106 		tmp1.push( 'var prng'+i+' = require( \''+pkg[ 0 ]+'\' );' );
    107 		tmp2.push( 'prngs[ \''+pkg[ 1 ]+'\' ] = prng'+i+'.factory;' );
    108 	}
    109 	str += tmp1.join( '\n' );
    110 	str += '\n';
    111 	str += '\n';
    112 	str += '\n';
    113 	str += '// MAIN //\n';
    114 	str += '\n';
    115 	str += 'var prngs = {};\n';
    116 	str += tmp2.join( '\n' );
    117 	str += '\n';
    118 	str += '\n';
    119 	str += '\n';
    120 	str += '// EXPORTS //\n';
    121 	str += '\n';
    122 	str += 'module.exports = prngs;\n';
    123 
    124 	opath = resolve( __dirname, '..', 'lib', 'prngs.js' );
    125 	debug( 'Writing script to file: %s', opath );
    126 	err = writeFile( opath, str, OPTS );
    127 	if ( err ) {
    128 		debug( 'Encountered an error when attempting to write script to file: %s', err.message );
    129 		return;
    130 	}
    131 	debug( 'Successfully wrote script to file.' );
    132 }
    133 
    134 
    135 // MAIN //
    136 
    137 main();