From f7256d8d07b998b67ca2345b7d09f9b0428e9e54 Mon Sep 17 00:00:00 2001 From: Jeff Williams Date: Sat, 2 Nov 2013 23:14:04 -0700 Subject: [PATCH] make npm installs work correctly; misc cross-platform fixes; cleanup includes new Rhino jar that strips hashbangs before execution: https://github.com/jsdoc3/rhino/commit/95487737 --- .npmignore | 8 +++ Jake/templates/package.json.tmpl | 6 ++ cli.js | 97 +++++++++++++++++-------------- jsdoc.js | 10 +++- lib/jsdoc/src/filter.js | 6 +- lib/jsdoc/src/scanner.js | 10 +--- lib/jsdoc/util/runtime.js | 14 ++++- node/postinstall.js | 35 +++++++++++ package.json | 8 ++- rhino/js.jar | Bin 1166768 -> 1166956 bytes rhino/rhino-shim.js | 2 +- 11 files changed, 135 insertions(+), 61 deletions(-) create mode 100644 .npmignore create mode 100644 node/postinstall.js diff --git a/.npmignore b/.npmignore new file mode 100644 index 00000000..6898d40a --- /dev/null +++ b/.npmignore @@ -0,0 +1,8 @@ +.jshintrc +.travis.yml +Jake/ +Jakefile.js +jsdoc$ +jsdoc.cmd +rhino/ +test/ diff --git a/Jake/templates/package.json.tmpl b/Jake/templates/package.json.tmpl index ff06be77..d6596adc 100644 --- a/Jake/templates/package.json.tmpl +++ b/Jake/templates/package.json.tmpl @@ -27,6 +27,12 @@ "underscore": "1.4.2", "wrench": "1.3.9" }, + "engines": { + "node": ">=0.10" + }, + "scripts": { + "postinstall": "node ./node/postinstall.js" + }, "bin": { "jsdoc": "./jsdoc.js" }, diff --git a/cli.js b/cli.js index 2f3828fc..4cb4869b 100644 --- a/cli.js +++ b/cli.js @@ -1,9 +1,13 @@ /** * Helper methods for running JSDoc on the command line. * - * (This module should really export an instance of `JSDoc`, and `props` should be properties of a + * A few critical notes for anyone who works on this module: + * + * + The module should really export an instance of `JSDoc`, and `props` should be properties of a * `JSDoc` instance. However, Rhino interpreted `this` as a reference to `global` within the - * prototype's methods, so we couldn't do that. Oh well.) + * prototype's methods, so we couldn't do that. + * + Use the `fs` and `path` modules rather than `jsdoc/fs` and `jsdoc/path`, which are not + * initialized correctly when they're loaded this early. * * @private */ @@ -14,16 +18,19 @@ var props = { packageJson: null }; +var app = global.app; +var env = global.env; + var JSDoc = {}; // TODO: docs JSDoc.setVersionInfo = function() { - var fs = require('jsdoc/fs'); - var path = require('jsdoc/path'); + var fs = require('fs'); + var path = require('path'); - var info = JSON.parse( fs.readFileSync(path.join(global.env.dirname, 'package.json'), 'utf8') ); + var info = JSON.parse( fs.readFileSync(path.join(env.dirname, 'package.json'), 'utf8') ); - global.env.version = { + env.version = { number: info.version, revision: new Date( parseInt(info.revision, 10) ).toUTCString() }; @@ -47,9 +54,9 @@ JSDoc.loadConfig = function() { encoding: 'utf8' }; - global.env.opts = args.parse(global.env.args); + env.opts = args.parse(env.args); - confPath = global.env.opts.configure || path.join(global.env.dirname, 'conf.json'); + confPath = env.opts.configure || path.join(env.dirname, 'conf.json'); try { isFile = fs.statSync(confPath).isFile(); } @@ -57,12 +64,12 @@ JSDoc.loadConfig = function() { isFile = false; } - if ( !isFile && !global.env.opts.configure ) { - confPath = path.join(global.env.dirname, 'conf.json.EXAMPLE'); + if ( !isFile && !env.opts.configure ) { + confPath = path.join(env.dirname, 'conf.json.EXAMPLE'); } try { - global.env.conf = new Config( fs.readFileSync(confPath, 'utf8') ) + env.conf = new Config( fs.readFileSync(confPath, 'utf8') ) .get(); } catch (e) { @@ -70,7 +77,7 @@ JSDoc.loadConfig = function() { } // look for options on the command line, in the config file, and in the defaults, in that order - global.env.opts = _.defaults(global.env.opts, global.env.conf.opts, defaultOpts); + env.opts = _.defaults(env.opts, env.conf.opts, defaultOpts); return JSDoc; }; @@ -79,7 +86,7 @@ JSDoc.loadConfig = function() { JSDoc.runCommand = function(cb) { var cmd; - var opts = global.env.opts; + var opts = env.opts; if (opts.help) { cmd = JSDoc.printHelp; @@ -107,7 +114,7 @@ JSDoc.printHelp = function(cb) { JSDoc.runTests = function(cb) { var path = require('jsdoc/path'); - var runner = require( path.join(global.env.dirname, 'test/runner') ); + var runner = require( path.join(env.dirname, 'test/runner') ); console.log('Running tests...'); runner(function(failCount) { @@ -117,7 +124,7 @@ JSDoc.runTests = function(cb) { // TODO: docs JSDoc.printVersion = function(cb) { - console.log('JSDoc %s (%s)', global.env.version.number, global.env.version.revision); + console.log('JSDoc %s (%s)', env.version.number, env.version.revision); cb(0); }; @@ -125,13 +132,13 @@ JSDoc.printVersion = function(cb) { JSDoc.main = function(cb) { JSDoc.scanFiles(); - if (global.env.sourceFiles.length) { + if (env.sourceFiles.length) { JSDoc.createParser() .parseFiles() .processParseResults(); } - global.env.run.finish = new Date(); + env.run.finish = new Date(); cb(0); }; @@ -143,30 +150,30 @@ JSDoc.scanFiles = function() { var filter; var opt; - if (global.env.conf.source && global.env.conf.source.include) { - global.env.opts._ = (global.env.opts._ || []).concat(global.env.conf.source.include); + if (env.conf.source && env.conf.source.include) { + env.opts._ = (env.opts._ || []).concat(env.conf.source.include); } // source files named `package.json` or `README.md` get special treatment - for (var i = 0, l = global.env.opts._.length; i < l; i++) { - opt = global.env.opts._[i]; + for (var i = 0, l = env.opts._.length; i < l; i++) { + opt = env.opts._[i]; if ( /\bpackage\.json$/i.test(opt) ) { props.packageJson = fs.readFileSync(opt, 'utf8'); - global.env.opts._.splice(i--, 1); + env.opts._.splice(i--, 1); } if ( /(\bREADME|\.md)$/i.test(opt) ) { - global.env.opts.readme = new Readme(opt).html; - global.env.opts._.splice(i--, 1); + env.opts.readme = new Readme(opt).html; + env.opts._.splice(i--, 1); } } // are there any files to scan and parse? - if (global.env.conf.source && global.env.opts._.length) { - filter = new Filter(global.env.conf.source); + if (env.conf.source && env.opts._.length) { + filter = new Filter(env.conf.source); - global.env.sourceFiles = global.app.jsdoc.scanner.scan(global.env.opts._, (global.env.opts.recurse? 10 : undefined), + env.sourceFiles = app.jsdoc.scanner.scan(env.opts._, (env.opts.recurse? 10 : undefined), filter); } @@ -178,13 +185,13 @@ JSDoc.createParser = function() { var parser = require('jsdoc/src/parser'); var plugins = require('jsdoc/plugins'); - global.app.jsdoc.parser = parser.createParser(global.env.conf.parser); + app.jsdoc.parser = parser.createParser(env.conf.parser); - if (global.env.conf.plugins) { - plugins.installPlugins(global.env.conf.plugins, global.app.jsdoc.parser); + if (env.conf.plugins) { + plugins.installPlugins(env.conf.plugins, app.jsdoc.parser); } - handlers.attachTo(global.app.jsdoc.parser); + handlers.attachTo(app.jsdoc.parser); return JSDoc; }; @@ -197,12 +204,12 @@ JSDoc.parseFiles = function() { var docs; var packageDocs; - props.docs = docs = global.app.jsdoc.parser.parse(global.env.sourceFiles, - global.env.opts.encoding); + props.docs = docs = app.jsdoc.parser.parse(env.sourceFiles, + env.opts.encoding); // If there is no package.json, just create an empty package packageDocs = new Package(props.packageJson); - packageDocs.files = global.env.sourceFiles || []; + packageDocs.files = env.sourceFiles || []; docs.push(packageDocs); borrow.indexAll(docs); @@ -210,13 +217,13 @@ JSDoc.parseFiles = function() { augment.addInherited(docs); borrow.resolveBorrows(docs); - global.app.jsdoc.parser.fireProcessingComplete(docs); + app.jsdoc.parser.fireProcessingComplete(docs); return JSDoc; }; JSDoc.processParseResults = function() { - if (global.env.opts.explain) { + if (env.opts.explain) { JSDoc.dumpParseResults(); } else { @@ -232,8 +239,8 @@ JSDoc.dumpParseResults = function() { JSDoc.resolveTutorials = function() { var resolver = require('jsdoc/tutorial/resolver'); - if (global.env.opts.tutorials) { - resolver.load(global.env.opts.tutorials); + if (env.opts.tutorials) { + resolver.load(env.opts.tutorials); resolver.resolve(); } }; @@ -245,14 +252,14 @@ JSDoc.generateDocs = function() { var template; - global.env.opts.template = (function() { - var publish = global.env.opts.template || 'templates/default'; + env.opts.template = (function() { + var publish = env.opts.template || 'templates/default'; // if we don't find it, keep the user-specified value so the error message is useful - return path.getResourcePath(publish) || global.env.opts.template; + return path.getResourcePath(publish) || env.opts.template; })(); try { - template = require(global.env.opts.template + '/publish'); + template = require(env.opts.template + '/publish'); } catch(e) { throw new Error('Unable to load template: ' + e.message || e); @@ -261,15 +268,15 @@ JSDoc.generateDocs = function() { // templates should include a publish.js file that exports a "publish" function if (template.publish && typeof template.publish === 'function') { // convert this from a URI back to a path if necessary - global.env.opts.template = path._uriToPath(global.env.opts.template); + env.opts.template = path._uriToPath(env.opts.template); template.publish( taffy(props.docs), - global.env.opts, + env.opts, resolver.root ); } else { - throw new Error(global.env.opts.template + ' does not export a "publish" function. Global ' + + throw new Error(env.opts.template + ' does not export a "publish" function. Global ' + '"publish" functions are no longer supported.'); } diff --git a/jsdoc.js b/jsdoc.js index f7baa61b..dd6d9409 100644 --- a/jsdoc.js +++ b/jsdoc.js @@ -1,3 +1,4 @@ +#!/usr/bin/env node /** * @project jsdoc * @author Michael Mathews @@ -72,7 +73,14 @@ global.env = { }; // initialize the environment for the current JavaScript VM -require('jsdoc/util/runtime').initialize( Array.prototype.slice.call(arguments, 0) ); +(function(args) { + if (args[0] && typeof args[0] === 'object') { + // we should be on Node.js + args = [__dirname]; + } + + require('jsdoc/util/runtime').initialize(args); +})( Array.prototype.slice.call(arguments, 0) ); /** * Data that must be shared across the entire application. diff --git a/lib/jsdoc/src/filter.js b/lib/jsdoc/src/filter.js index e1d16c57..8e04f5f0 100644 --- a/lib/jsdoc/src/filter.js +++ b/lib/jsdoc/src/filter.js @@ -18,8 +18,7 @@ var path = require('jsdoc/path'); exports.Filter = function(opts) { this.exclude = opts.exclude && Array.isArray(opts.exclude) ? opts.exclude.map(function($) { - // TODO: should we replace env.dirname with the CWD before launching JSDoc? - return path.resolve(env.dirname, $); + return path.resolve(process.env.PWD, $); }) : null; this.includePattern = opts.includePattern? @@ -35,8 +34,7 @@ exports.Filter = function(opts) { @returns {boolean} Should the given file be included? */ exports.Filter.prototype.isIncluded = function(filepath) { - // TODO: should we replace env.dirname with the CWD before launching JSDoc? - filepath = path.resolve(env.dirname, filepath); + filepath = path.resolve(process.env.PWD, filepath); if ( this.includePattern && !this.includePattern.test(filepath) ) { return false; diff --git a/lib/jsdoc/src/scanner.js b/lib/jsdoc/src/scanner.js index d0850a90..dbf5e7ef 100644 --- a/lib/jsdoc/src/scanner.js +++ b/lib/jsdoc/src/scanner.js @@ -34,7 +34,7 @@ exports.Scanner.prototype.scan = function(searchPaths, depth, filter) { depth = depth || 1; searchPaths.forEach(function($) { - var filepath = decodeURIComponent($); + var filepath = path.resolve( process.env.PWD, decodeURIComponent($) ); try { isFile = fs.statSync(filepath).isFile(); @@ -44,14 +44,10 @@ exports.Scanner.prototype.scan = function(searchPaths, depth, filter) { } if (isFile) { - // TODO: should we replace env.dirname with the CWD before launching JSDoc? - filePaths.push( path.resolve(env.dirname, filepath) ); + filePaths.push(filepath); } else { - filePaths = filePaths.concat( fs.ls(filepath, depth).map(function(item) { - // TODO: should we replace env.dirname with the CWD before launching JSDoc? - return path.resolve(env.dirname, item); - }) ); + filePaths = filePaths.concat( fs.ls(filepath, depth) ); } }); diff --git a/lib/jsdoc/util/runtime.js b/lib/jsdoc/util/runtime.js index 95de5f7a..700ef4bd 100644 --- a/lib/jsdoc/util/runtime.js +++ b/lib/jsdoc/util/runtime.js @@ -100,7 +100,17 @@ function initializeRhino(args) { } function initializeNode(args) { - env.dirname = require('path').dirname(process.argv[1]); + var fs = require('fs'); + var path = require('path'); + + var jsdocPath = args[0]; + + // resolve the path if it's a symlink + if ( fs.statSync(jsdocPath).isSymbolicLink() ) { + jsdocPath = fs.readlinkSync(jsdocPath); + } + + env.dirname = jsdocPath; env.args = process.argv.slice(2); } @@ -110,7 +120,7 @@ exports.initialize = function(args) { initializeRhino(args); break; case NODE: - initializeNode(); + initializeNode(args); break; default: throw new Error('Unable to initialize the JavaScript runtime!'); diff --git a/node/postinstall.js b/node/postinstall.js new file mode 100644 index 00000000..87100aeb --- /dev/null +++ b/node/postinstall.js @@ -0,0 +1,35 @@ +#!/usr/bin/env node + +var fs = require('fs'); +var path = require('path'); + +var jsdocPath = path.resolve( path.join(__dirname, '..') ); +var symlinkSrc = path.join( jsdocPath, 'lib', 'jsdoc' ); +var symlinkDest = path.join( jsdocPath, 'node_modules', 'jsdoc' ); + +fs.lstat(symlinkDest, function(err, stats) { + // if the path exists, make sure it looks okay + if (!err) { + if ( stats.isSymbolicLink() ) { + // this is what we want + } + else if ( stats.isDirectory() ) { + console.warn('The path %s should be a symbolic link to %s rather than a standalone ' + + 'directory. You may need to resolve this issue so that JSDoc can work correctly.', + symlinkDest, symlinkSrc); + } + + process.exit(0); + } + else { + fs.symlink(symlinkSrc, symlinkDest, function(err) { + if (err) { + console.error('Unable to create a symbolic link from %s to %s: %s', symlinkSrc, + symlinkDest, err); + process.exit(1); + } + + process.exit(0); + }); + } +}); diff --git a/package.json b/package.json index 90025333..d303d4f6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "jsdoc", "version": "3.3.0-dev", - "revision": "1382895970480", + "revision": "1383193186575", "description": "An API documentation generator for JavaScript.", "keywords": [ "documentation", "javascript" ], "licenses": [ @@ -27,6 +27,12 @@ "underscore": "1.4.2", "wrench": "1.3.9" }, + "engines": { + "node": ">=0.10" + }, + "scripts": { + "postinstall": "node ./node/postinstall.js" + }, "bin": { "jsdoc": "./jsdoc.js" }, diff --git a/rhino/js.jar b/rhino/js.jar index 0a662a1e5aafe5849442265f0d7e41d7e5252dd4..7a11f18e8414bd0e25444f96c9591f91083389df 100644 GIT binary patch delta 24083 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 E0Z`&uCjbBd diff --git a/rhino/rhino-shim.js b/rhino/rhino-shim.js index 7f50291e..b584ee88 100644 --- a/rhino/rhino-shim.js +++ b/rhino/rhino-shim.js @@ -136,7 +136,7 @@ global.process = { Object.defineProperties(global, { '__dirname': { get: function() { - return process.cwd(); + return global.process.cwd(); }, enumerable: true }