@openveo/api
Version:
API for OpenVeo plugins
71 lines (61 loc) • 2.02 kB
JavaScript
;
/**
* @module angularJs/expressions/ModuleExpression
* @ignore
*/
var util = require('util');
var ElementExpression = process.requireApi('lib/angularJs/expressions/ElementExpression.js');
/**
* A JavaScript module expression as angularJsApp.module('module').
*
* @class ModuleExpression
* @constructor
* @ignore
* @param {Object} expression The module call expression as returned by esprima
*/
function ModuleExpression(expression) {
ModuleExpression.super_.call(this, expression);
}
module.exports = ModuleExpression;
util.inherits(ModuleExpression, ElementExpression);
/**
* Validates that the expression is an AngularJS module definition expression.
*
* An AngularJS module definition expression must have two arguments:
* - The name of the element to define
* - An array of dependencies
*
* @return {Boolean} true if this is a valid AngularJS module definition expression, false otherwise
*/
ModuleExpression.prototype.isValid = function() {
return (this.expression.arguments[0].type === 'Literal' &&
(this.expression.arguments.length === 1 ||
(this.expression.arguments.length === 2 && this.expression.arguments[1].type === 'ArrayExpression'))
);
};
/**
* Gets AngularJS module dependencies.
*
* @return {Array} The list of dependencies
*/
ModuleExpression.prototype.getDependencies = function() {
var dependencies = [];
if (this.isDefinition()) {
this.expression.arguments[1].elements.forEach(function(dependency) {
if (dependency.type === 'Literal')
dependencies.push(dependency.value);
});
} else
dependencies.push(this.getName());
return dependencies;
};
/**
* Checks if the module expression is an AngularJS definition.
*
* angular.module() may be used to retrieve a previously registered module or to define a new one.
*
* @return {Boolean} true if this is a module definition, false otherwise
*/
ModuleExpression.prototype.isDefinition = function() {
return (this.expression.arguments.length === 2);
};