var _ = require('../util').lodash, semver = require('semver'), PropertyBase = require('./property-base').PropertyBase, Version; /** * @typedef {Object|String} Version.definition */ _.inherit(( /** * Defines a Version. * * @constructor * @extends {PropertyBase} * @param {Version.definition} definition - */ Version = function PostmanPropertyVersion (definition) { // in case definition object is missing, there is no point moving forward if (!definition) { return; } // call the setter to process the version string and assign it to this object this.set(definition); }), PropertyBase); _.assign(Version.prototype, /** @lends Version.prototype */ { /** * Set the version value as string or object with separate components of version * * @draft * @param {object|string} value - */ set (value) { // extract the version logic and in case it failes and value passed is an object, we use that assuming parsed // value has been sent. var ver = semver.parse(value) || value || {}; _.assign(this, /** @lends Version.prototype */ { /** * The raw URL string. If {@link Version#set} is called with a string parameter, the string is saved here * before parsing various Version components. * * @type {String} */ raw: ver.raw, /** * @type {String} */ major: ver.major, /** * @type {String} */ minor: ver.minor, /** * @type {String} */ patch: ver.patch, /** * @type {String} */ prerelease: ver.prerelease && ver.prerelease.join && ver.prerelease.join() || ver.prerelease, /** * @type {String} */ build: ver.build && ver.build.join && ver.build.join() || ver.build, /** * @type {String} */ string: ver.version }); }, toString () { // TODO: is this enough? should we build the semver back up? return this.string || this.raw; } }); _.assign(Version, /** @lends Version */ { /** * Defines the name of this property for internal use. * * @private * @readOnly * @type {String} */ _postman_propertyName: 'Version' }); module.exports = { Version };