-
-
Notifications
You must be signed in to change notification settings - Fork 808
/
Copy pathbuild.js
128 lines (105 loc) · 3.17 KB
/
build.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/* eslint-disable no-sync */
'use strict';
// MODULES //
var debug = require( 'debug' )( 'repl:build' );
var writeFile = require( 'fs' ).writeFileSync;
var resolvePath = require( 'path' ).resolve;
var join = require( 'path' ).join;
var resolve = require( 'resolve' ).sync;
var readFile = require( '@stdlib/fs/read-file' ).sync;
var readJSON = require( '@stdlib/fs/read-json' ).sync;
var resolveParentPath = require( '@stdlib/fs/resolve-parent-path' ).sync;
var dirname = require( '@stdlib/utils/dirname' );
var replace = require( '@stdlib/string/replace' );
var NAMESPACE = require( './../lib/namespace' );
// VARIABLES //
// Filepath convention for REPL text:
var REPL_TEXT = 'docs/repl.txt';
// Root search directory:
var ROOT = resolvePath( __dirname, '../../' );
// Output file path:
var OUTPUT = resolvePath( __dirname, '../lib/docs.js' );
// Output file preamble:
var PREAMBLE = '// This file is generated by scripts/build.js.\n\'use strict\';\n\n/* eslint-disable quotes */\n\n';
// Identifier for inserting 'See Also' links:
var SEE_ALSO = '\n See Also\n --------\n';
// FUNCTIONS //
/**
* Generates hash for REPL help text.
*
* @private
*/
function createHelp() {
var fpath;
var alias;
var ropts;
var fopts;
var file;
var pkg;
var out;
var i;
ropts = {
'basedir': ROOT
};
debug( 'Package resolve options: %s', JSON.stringify( ropts ) );
fopts = {
'encoding': 'utf8'
};
out = {};
for ( i = 0; i < NAMESPACE.length; i++ ) {
alias = NAMESPACE[ i ].alias;
debug( 'Resolving `%s`', alias );
fpath = resolve( NAMESPACE[ i ].path, ropts );
debug( 'Resolved module path: %s', fpath );
debug( 'Resolving package information.' );
fpath = resolveParentPath( 'package.json', {
'dir': dirname( fpath )
});
if ( fpath === null ) {
debug( 'Unable to resolve package information.' );
continue;
}
debug( 'Reading package information.' );
pkg = readJSON( fpath, fopts );
if ( pkg instanceof Error ) {
debug( 'Unable to read package information: %s', pkg.message );
continue;
}
debug( 'Checking package information.' );
if ( pkg.name !== NAMESPACE[ i ].path ) {
debug( 'Package information does not match path. Expected: %s. Actual: %s.', NAMESPACE[ i ].path, pkg.name );
continue;
}
fpath = join( dirname( fpath ), REPL_TEXT );
debug( 'Attempting to read REPL text: %s', fpath );
file = readFile( fpath, fopts );
if ( file instanceof Error ) {
debug( 'Unable to read REPL text.' );
continue;
}
debug( 'Successfully read REPL text.' );
debug( 'Processing REPL text.' );
file = replace( file, '{{alias}}', alias );
if ( NAMESPACE[ i ].related.length ) {
file = replace( file, SEE_ALSO, SEE_ALSO+' '+NAMESPACE[i].related.join( ', ' ) );
} else {
file = replace( file, SEE_ALSO, '' );
}
debug( 'Successfully processed `%s`.', alias );
out[ alias ] = file;
}
debug( 'Writing REPL text hash to file.' );
out = PREAMBLE+'module.exports = '+JSON.stringify( out, null, '\t' )+';\n';
writeFile( OUTPUT, out, fopts );
} // end FUNCTION createHelp()
/**
* Main execution sequence.
*
* @private
*/
function main() {
debug( 'Generating REPL help documentation.' );
createHelp();
} // end FUNCTION main()
// MAIN //
main();