konva/jsdoc-master/lib/jsdoc/util/vm.js

84 lines
2.3 KiB
JavaScript

/*global Packages: true */
/**
* Helper functions to enable JSDoc to run on multiple JavaScript virtual machines.
* @module jsdoc/util/vm
*/
var os = require('os');
// These strings represent directory names; do not modify them!
/** @private */
const RHINO = exports.RHINO = 'rhino';
/** @private */
const NODEJS = exports.NODEJS = 'nodejs';
// hacky conversion from Windows path to URI
function pathToUri(filepath) {
var uri = filepath;
// get drive
var drive = uri.match(/^[A-Za-z]/)[0] || '';
// strip drive/colon (if present; UNC paths won't have either)
uri = uri.replace(/^:?([A-Za-z]\:)?/, '');
// replace spaces with %20
uri = uri.replace(/\s/g, '%20');
// prepend drive (if present)
if (drive) {
uri = drive + ':' + uri;
}
// prepend URI scheme
uri = 'file:/' + uri;
return uri;
}
/**
* The JavaScript VM that is executing JSDoc:
*
* + `module:jsdoc/util/vm.RHINO`: Mozilla Rhino.
* + `module:jsdoc/util/vm.NODEJS`: Node.js (not currently supported).
*/
var vm = exports.vm = (function() {
if (Packages && typeof Packages === 'object' &&
Object.prototype.toString.call(Packages) === '[object JavaPackage]') {
return RHINO;
} else if ( require && require.main && module && (require.main === module) ) {
return NODEJS;
} else {
// unknown VM
throw new Error('Unable to identify the current JavaScript VM.');
}
})();
/**
* Load the VM-specific implementation of a module.
*
* @param {string} modulePath - The relative path to the module. Use the same format as when calling
* `require()`.
* @return {object} An object containing VM-specific functions for the requested module.
*/
exports.getModule = function(modulePath) {
modulePath = [__dirname, vm, modulePath].join('/').replace(/ /g, '%20');
if (os.platform() === 'win32') {
modulePath = pathToUri(modulePath);
}
return require(modulePath);
};
/**
* Check whether Mozilla Rhino is running JSDoc.
* @return {boolean} Set to `true` if the current VM is Mozilla Rhino.
*/
exports.isRhino = function() {
return vm === RHINO;
};
/**
* Check whether Node.js is running JSDoc. (Node.js is not currently supported.)
* @return {boolean} Set to `true` if the current VM is Node.js.
*/
exports.isNodejs = function() {
return vm === NODEJS;
};