UNPKG

vsphere-schema

Version:
93 lines (76 loc) 2.14 kB
/** * vSphere Schema - schema definitions for vSphere objects in JSON format * * @author Branden Horiuchi <bhoriuchi@gmail.com> * @license MIT * */ module.exports = function(env) { var _ = env.lodash; var objectTypes = require('./objectTypes')(env); // function to get a property path function property(version, model, prop) { if (typeof(version) === 'string' && _.has(env.versions, version)) { version = env.versions[version]; } else if (!_.isObject(version) || Array.isArray(version)) { return null; } return { version: version, path: model + '.properties.' + prop.replace(/\./g, '.properties.') }; } // function to see if a path exists function hasProperty(version, type, prop) { var p = property(version, type, prop); return _.has(p.version, p.path); } // function to check if an object has a specific method function hasMethod(version, type, method) { if (_.has(env.versions, version)) { return _.has(env.versions[version], type + '.methods.' + method); } return false; } // function to get a property function getProperty(version, type, prop) { var p = property(version, type, prop); return _.get(p.version, p.path); } // function to get a schema function getSchema(version) { if (_.has(env.versions, version)) { return env.versions[version]; } else { var v = Object.keys(env.versions).join(', ') throw 'The requested API version ' + version + ' is not supported. Supported versions are ' + v; } } // return all event types function getEventTypes(version) { if (_.has(env.versions, version)) { return _.filter(_.keys(env.versions[version]), function(type) { return type.match(/Event$/); }); } return null; } // gets object type data function objectType(version, type) { if (objectTypes[version]) { return _.get(objectTypes[version], type); } return null; } // return all of the methods return { hasMethod : hasMethod, hasProperty : hasProperty, getProperty : getProperty, getSchema : getSchema, getEventTypes : getEventTypes, objectType : objectType }; };