138 lines
3.2 KiB
JavaScript
138 lines
3.2 KiB
JavaScript
|
/**
|
||
|
* @license Apache-2.0
|
||
|
*
|
||
|
* Copyright (c) 2020 The Stdlib Authors.
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
// MODULES //
|
||
|
|
||
|
var resolve = require( 'path' ).resolve;
|
||
|
var logger = require( 'debug' );
|
||
|
var readDir = require( '@stdlib/fs/read-dir' ).sync;
|
||
|
var exists = require( '@stdlib/fs/exists' ).sync;
|
||
|
var writeFile = require( '@stdlib/fs/write-file' ).sync;
|
||
|
var isPRNGLike = require( '@stdlib/assert/is-prng-like' );
|
||
|
var licenseHeader = require( '@stdlib/_tools/licenses/header' );
|
||
|
|
||
|
|
||
|
// VARIABLES //
|
||
|
|
||
|
var debug = logger( 'reviver:build' );
|
||
|
var OPTS = {
|
||
|
'encoding': 'utf8'
|
||
|
};
|
||
|
var SPDX = 'Apache-2.0';
|
||
|
var YEAR = (new Date()).getFullYear();
|
||
|
var COPYRIGHT = 'The Stdlib Authors';
|
||
|
|
||
|
|
||
|
// FUNCTIONS //
|
||
|
|
||
|
/**
|
||
|
* Main execution sequence.
|
||
|
*
|
||
|
* @private
|
||
|
*/
|
||
|
function main() {
|
||
|
var dpath;
|
||
|
var fpath;
|
||
|
var opath;
|
||
|
var tmp1;
|
||
|
var tmp2;
|
||
|
var prng;
|
||
|
var dirs;
|
||
|
var pkgs;
|
||
|
var str;
|
||
|
var err;
|
||
|
var pkg;
|
||
|
var p;
|
||
|
var i;
|
||
|
|
||
|
dpath = resolve( __dirname, '..', '..' );
|
||
|
|
||
|
debug( 'Reading namespace directory contents: %s', dpath );
|
||
|
dirs = readDir( dpath );
|
||
|
if ( dirs instanceof Error ) {
|
||
|
debug( 'Encountered an error when attempting to read namespace directory contents: %s', err.message );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
debug( 'Finding packages...' );
|
||
|
pkgs = [];
|
||
|
for ( i = 0; i < dirs.length; i++ ) {
|
||
|
p = resolve( dpath, dirs[ i ] );
|
||
|
fpath = resolve( p, 'package.json' );
|
||
|
if ( exists( fpath ) ) {
|
||
|
prng = require( p ); // eslint-disable-line stdlib/no-dynamic-require
|
||
|
if ( isPRNGLike( prng ) ) {
|
||
|
pkg = require( fpath ); // eslint-disable-line stdlib/no-dynamic-require
|
||
|
pkgs.push( [ pkg.name, prng.NAME ] );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
debug( 'Found %d packages.', pkgs.length );
|
||
|
|
||
|
debug( 'Generating script...' );
|
||
|
str = '';
|
||
|
str += licenseHeader( SPDX, 'js', {
|
||
|
'year': YEAR,
|
||
|
'copyright': COPYRIGHT
|
||
|
});
|
||
|
str += '\n';
|
||
|
|
||
|
str += '// This file is generated using `scripts/build.js`.\n\n';
|
||
|
str += '\'use strict\';\n';
|
||
|
str += '\n';
|
||
|
str += '// MODULES //\n';
|
||
|
str += '\n';
|
||
|
tmp1 = [];
|
||
|
tmp2 = [];
|
||
|
for ( i = 0; i < pkgs.length; i++ ) {
|
||
|
pkg = pkgs[ i ];
|
||
|
tmp1.push( 'var prng'+i+' = require( \''+pkg[ 0 ]+'\' );' );
|
||
|
tmp2.push( 'prngs[ \''+pkg[ 1 ]+'\' ] = prng'+i+'.factory;' );
|
||
|
}
|
||
|
str += tmp1.join( '\n' );
|
||
|
str += '\n';
|
||
|
str += '\n';
|
||
|
str += '\n';
|
||
|
str += '// MAIN //\n';
|
||
|
str += '\n';
|
||
|
str += 'var prngs = {};\n';
|
||
|
str += tmp2.join( '\n' );
|
||
|
str += '\n';
|
||
|
str += '\n';
|
||
|
str += '\n';
|
||
|
str += '// EXPORTS //\n';
|
||
|
str += '\n';
|
||
|
str += 'module.exports = prngs;\n';
|
||
|
|
||
|
opath = resolve( __dirname, '..', 'lib', 'prngs.js' );
|
||
|
debug( 'Writing script to file: %s', opath );
|
||
|
err = writeFile( opath, str, OPTS );
|
||
|
if ( err ) {
|
||
|
debug( 'Encountered an error when attempting to write script to file: %s', err.message );
|
||
|
return;
|
||
|
}
|
||
|
debug( 'Successfully wrote script to file.' );
|
||
|
}
|
||
|
|
||
|
|
||
|
// MAIN //
|
||
|
|
||
|
main();
|