var createError = require('./createError'); function decompose(endpoint) { var regExp = /^(?:([\w\-]|(?:[\w\.\-]+[\w\-])?)=)?([^\|#]+)(?:#(.*))?$/; var matches = endpoint.match(regExp); var target; if (!matches) { throw createError('Invalid endpoint: ' + endpoint, 'EINVEND'); } target = matches[3]; return { name: matches[1] || '', source: matches[2], target: !target || target === 'latest' ? '*' : target }; } function compose(decEndpoint) { var composed = ''; if (decEndpoint.name) { composed += decEndpoint.name + '='; } composed += decEndpoint.source; if (decEndpoint.target) { composed += '#' + decEndpoint.target; } return composed; } function json2decomposed(key, value) { var endpoint = key + '='; var split = value.split('#'); // If # was found, the source was specified if (split.length > 1) { endpoint += split[0] + '#' + split[1]; // Otherwise use the key as the source } else { endpoint += key + '#' + split[0]; } return decompose(endpoint); } module.exports.decompose = decompose; module.exports.compose = compose; module.exports.json2decomposed = json2decomposed;