bower-art-resolver
Version:
The Artifactory Bower Resolver
86 lines (67 loc) • 2.17 kB
JavaScript
var semver = require('semver');
var createError = require('./createError');
var string = require('mout/string');
var ARTIFACTORY_PREFIX = "art://";
function clean(version) {
var parsed = semver.parse(version);
if (!parsed) {
return null;
}
// Keep builds!
return parsed.version + (parsed.build.length ? '+' + parsed.build.join('.') : '');
}
function releases(tags) {
//WORKAROUND: fallback to the latest commit on master
// In case no version (tag) is available for the package, and the target is probable *
// (at this point the target must be a valid semver version)
if (!tags.length) {
return [{
release: 'master',
target: 'master',
version: '0.0.0'
}];
}
return tags.map(function (tag) {
return {
release: clean(tag.tag) || tag.tag,
target: tag.tag,
version: clean(tag.tag)
};
});
};
function tags(refs) {
var tags = [];
// For each line in the refs, match only the tags
refs.forEach(function (line) {
var match = line.match(/^([a-f0-9]{44})\s+refs\/tags\/(\S+)/);
if (match && !string.endsWith(match[2], '^{}')) {
tags.push({ tag: match[2], commit: match[1] })
}
});
return tags;
};
function extractRefs(response) {
return response
.trim() // Trim trailing and leading spaces
.split(/[\r\n]+/);
}
function extractReleases(response) {
return releases(tags(extractRefs(response)));
}
function getRegistryUrl(config) {
return config.registry.search[0];
};
function getRepositoryName(source) {
var match = source.replace(ARTIFACTORY_PREFIX, "").split("/")
if (match.length < 2) {
throw createError('Invalid Artifactory Package Name', 'EINVEND', {
details: source + ' does not seem to be a valid Artifactory package name!'
});
}
return match[0] + "/" + match[1];
};
exports.clean = clean;
exports.extractReleases = extractReleases;
exports.getRegistryUrl = getRegistryUrl;
exports.getRepositoryName = getRepositoryName;
exports.ARTIFACTORY_PREFIX = ARTIFACTORY_PREFIX;