mirror of
https://github.com/konvajs/konva.git
synced 2025-07-15 12:58:45 +08:00
84 lines
2.3 KiB
JavaScript
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;
|
|
};
|