Skip to content

Commit

Permalink
version parsing fix for tags, 0.9.3 release
Browse files Browse the repository at this point in the history
  • Loading branch information
guybedford committed Oct 21, 2014
1 parent b5e0a71 commit e6ec736
Show file tree
Hide file tree
Showing 10 changed files with 123 additions and 105 deletions.
2 changes: 1 addition & 1 deletion bower.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "system.js",
"version": "0.9.2",
"version": "0.9.3",
"main": "dist/system.js",
"dependencies": {
"es6-module-loader": "~0.9.4"
Expand Down
2 changes: 1 addition & 1 deletion dist/system-csp.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/system-csp.js.map

Large diffs are not rendered by default.

72 changes: 39 additions & 33 deletions dist/system-csp.src.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* SystemJS v0.9.2
* SystemJS v0.9.3
*/

(function($__global) {
Expand Down Expand Up @@ -1882,17 +1882,30 @@ function versions(loader) {
function parseSemver(v) {
var semver = v.match(semverRegEx);
if (!semver)
return;
return {
major: toInt(semver[1]),
minor: toInt(semver[2]),
patch: toInt(semver[3]),
pre: semver[4] && semver[4].split('.')
};
return {
tag: v
};
else
return {
major: toInt(semver[1]),
minor: toInt(semver[2]),
patch: toInt(semver[3]),
pre: semver[4] && semver[4].split('.')
};
}

var parts = ['major', 'minor', 'patch'];
function semverCompareParsed(v1, v2) {
// not semvers - tags have equal precedence
if (v1.tag && v2.tag)
return 0;

// semver beats non-semver
if (v1.tag)
return -1;
if (v2.tag)
return 1;

// compare version numbers
for (var i = 0; i < parts.length; i++) {
var part = parts[i];
Expand Down Expand Up @@ -1947,14 +1960,12 @@ function versions(loader) {
// saves operation repetition
// doesn't support tags
// if not semver or fuzzy, assume exact
/*
* semver - is this a semver range
* fuzzy - is this a fuzzy range
* version - the parsed version object
*/
function matchParsed(range, version) {
var rangeVersion = range.version;

if (rangeVersion.tag)
return rangeVersion.tag == version.tag;

// if the version is less than the range, it's not a match
if (semverCompareParsed(rangeVersion, version) == 1)
return false;
Expand Down Expand Up @@ -1993,6 +2004,11 @@ function versions(loader) {
return !!(!rangeVersion.pre && rangeVersion.major == version.major && rangeVersion.minor == version.minor && rangeVersion.patch == version.patch);
}

/*
* semver - is this a semver range
* fuzzy - is this a fuzzy range
* version - the parsed version object
*/
function parseRange(range) {
var rangeObj = {};

Expand All @@ -2002,6 +2018,9 @@ function versions(loader) {

var rangeVersion = rangeObj.version = parseSemver(range);

if (rangeVersion.tag)
return rangeObj;

// 0, 0.1 behave like ~0, ~0.1
if (!rangeObj.fuzzy && !rangeObj.semver && (isNaN(rangeVersion.minor) || isNaN(rangeVersion.patch)))
rangeObj.fuzzy = true;
Expand All @@ -2022,20 +2041,7 @@ function versions(loader) {
}

function semverCompare(v1, v2) {
var semver1 = parseSemver(v1);
var semver2 = parseSemver(v2);

// not semvers - just sort string tags
if (!semver1 && !semver2)
return v1 > v2 ? 1 : -1;

// semver beats non-semver
if (!semver1)
return -1;
if (!semver2)
return 1;

return semverCompareParsed(semver1, semver2);
return semverCompareParsed(parseSemver(v1), parseSemver(v2));
}

loader.versions = loader.versions || {};
Expand Down Expand Up @@ -2095,24 +2101,24 @@ function versions(loader) {
var packageName = normalized.substr(0, index);
var range = normalized.substr(index + 1).split('/')[0];
var rangeLength = range.length;
var versionRange = parseRange(normalized.substr(index + 1).split('/')[0]);
var parsedRange = parseRange(normalized.substr(index + 1).split('/')[0]);
versions = packageVersions[normalized.substr(0, index)] || [];
if (typeof versions == 'string')
versions = [versions];

// find a match in our version list
for (var i = versions.length - 1; i >= 0; i--) {
if (matchParsed(versionRange, parseSemver(versions[i])))
if (matchParsed(parsedRange, parseSemver(versions[i])))
return packageName + '@' + versions[i] + normalized.substr(index + rangeLength + 1);
}

// no match found -> send a request to the server
var versionRequest;
if (versionRange.semver) {
versionRequest = versionRange.version.major == 0 ? '0.' + versionRange.version.minor : versionRange.version.major;
if (parsedRange.semver) {
versionRequest = parsedRange.version.major == 0 ? '0.' + parsedRange.version.minor : parsedRange.version.major;
}
else if (versionRange.fuzzy) {
versionRequest = versionRange.version.major + '.' + versionRange.version.minor;
else if (parsedRange.fuzzy) {
versionRequest = parsedRange.version.major + '.' + parsedRange.version.minor;
}
else {
versionRequest = range;
Expand Down
2 changes: 1 addition & 1 deletion dist/system.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/system.js.map

Large diffs are not rendered by default.

72 changes: 39 additions & 33 deletions dist/system.src.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* SystemJS v0.9.2
* SystemJS v0.9.3
*/

(function($__global) {
Expand Down Expand Up @@ -1816,17 +1816,30 @@ function versions(loader) {
function parseSemver(v) {
var semver = v.match(semverRegEx);
if (!semver)
return;
return {
major: toInt(semver[1]),
minor: toInt(semver[2]),
patch: toInt(semver[3]),
pre: semver[4] && semver[4].split('.')
};
return {
tag: v
};
else
return {
major: toInt(semver[1]),
minor: toInt(semver[2]),
patch: toInt(semver[3]),
pre: semver[4] && semver[4].split('.')
};
}

var parts = ['major', 'minor', 'patch'];
function semverCompareParsed(v1, v2) {
// not semvers - tags have equal precedence
if (v1.tag && v2.tag)
return 0;

// semver beats non-semver
if (v1.tag)
return -1;
if (v2.tag)
return 1;

// compare version numbers
for (var i = 0; i < parts.length; i++) {
var part = parts[i];
Expand Down Expand Up @@ -1881,14 +1894,12 @@ function versions(loader) {
// saves operation repetition
// doesn't support tags
// if not semver or fuzzy, assume exact
/*
* semver - is this a semver range
* fuzzy - is this a fuzzy range
* version - the parsed version object
*/
function matchParsed(range, version) {
var rangeVersion = range.version;

if (rangeVersion.tag)
return rangeVersion.tag == version.tag;

// if the version is less than the range, it's not a match
if (semverCompareParsed(rangeVersion, version) == 1)
return false;
Expand Down Expand Up @@ -1927,6 +1938,11 @@ function versions(loader) {
return !!(!rangeVersion.pre && rangeVersion.major == version.major && rangeVersion.minor == version.minor && rangeVersion.patch == version.patch);
}

/*
* semver - is this a semver range
* fuzzy - is this a fuzzy range
* version - the parsed version object
*/
function parseRange(range) {
var rangeObj = {};

Expand All @@ -1936,6 +1952,9 @@ function versions(loader) {

var rangeVersion = rangeObj.version = parseSemver(range);

if (rangeVersion.tag)
return rangeObj;

// 0, 0.1 behave like ~0, ~0.1
if (!rangeObj.fuzzy && !rangeObj.semver && (isNaN(rangeVersion.minor) || isNaN(rangeVersion.patch)))
rangeObj.fuzzy = true;
Expand All @@ -1956,20 +1975,7 @@ function versions(loader) {
}

function semverCompare(v1, v2) {
var semver1 = parseSemver(v1);
var semver2 = parseSemver(v2);

// not semvers - just sort string tags
if (!semver1 && !semver2)
return v1 > v2 ? 1 : -1;

// semver beats non-semver
if (!semver1)
return -1;
if (!semver2)
return 1;

return semverCompareParsed(semver1, semver2);
return semverCompareParsed(parseSemver(v1), parseSemver(v2));
}

loader.versions = loader.versions || {};
Expand Down Expand Up @@ -2029,24 +2035,24 @@ function versions(loader) {
var packageName = normalized.substr(0, index);
var range = normalized.substr(index + 1).split('/')[0];
var rangeLength = range.length;
var versionRange = parseRange(normalized.substr(index + 1).split('/')[0]);
var parsedRange = parseRange(normalized.substr(index + 1).split('/')[0]);
versions = packageVersions[normalized.substr(0, index)] || [];
if (typeof versions == 'string')
versions = [versions];

// find a match in our version list
for (var i = versions.length - 1; i >= 0; i--) {
if (matchParsed(versionRange, parseSemver(versions[i])))
if (matchParsed(parsedRange, parseSemver(versions[i])))
return packageName + '@' + versions[i] + normalized.substr(index + rangeLength + 1);
}

// no match found -> send a request to the server
var versionRequest;
if (versionRange.semver) {
versionRequest = versionRange.version.major == 0 ? '0.' + versionRange.version.minor : versionRange.version.major;
if (parsedRange.semver) {
versionRequest = parsedRange.version.major == 0 ? '0.' + parsedRange.version.minor : parsedRange.version.major;
}
else if (versionRange.fuzzy) {
versionRequest = versionRange.version.major + '.' + versionRange.version.minor;
else if (parsedRange.fuzzy) {
versionRequest = parsedRange.version.major + '.' + parsedRange.version.minor;
}
else {
versionRequest = range;
Expand Down
2 changes: 1 addition & 1 deletion lib/banner.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*
* SystemJS v0.9.2
* SystemJS v0.9.3
*/

0 comments on commit e6ec736

Please sign in to comment.