You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

136 lines
4.1 KiB

  1. // Generated by CoffeeScript 1.4.0
  2. (function() {
  3. var balUtilCompare, balUtilPaths;
  4. balUtilCompare = null;
  5. balUtilPaths = require(__dirname + '/paths');
  6. balUtilCompare = {
  7. versionCompare: function(v1, operator, v2) {
  8. var compare, i, numVersion, prepVersion, result, vm, x, _i;
  9. i = x = compare = 0;
  10. vm = {
  11. 'dev': -6,
  12. 'alpha': -5,
  13. 'a': -5,
  14. 'beta': -4,
  15. 'b': -4,
  16. 'RC': -3,
  17. 'rc': -3,
  18. '#': -2,
  19. 'p': -1,
  20. 'pl': -1
  21. };
  22. prepVersion = function(v) {
  23. v = ('' + v).replace(/[_\-+]/g, '.');
  24. v = v.replace(/([^.\d]+)/g, '.$1.').replace(/\.{2,}/g, '.');
  25. if (!v.length) {
  26. return [-8];
  27. } else {
  28. return v.split('.');
  29. }
  30. };
  31. numVersion = function(v) {
  32. if (!v) {
  33. return 0;
  34. } else {
  35. if (isNaN(v)) {
  36. return vm[v] || -7;
  37. } else {
  38. return parseInt(v, 10);
  39. }
  40. }
  41. };
  42. v1 = prepVersion(v1);
  43. v2 = prepVersion(v2);
  44. x = Math.max(v1.length, v2.length);
  45. for (i = _i = 0; 0 <= x ? _i <= x : _i >= x; i = 0 <= x ? ++_i : --_i) {
  46. if (v1[i] === v2[i]) {
  47. continue;
  48. }
  49. v1[i] = numVersion(v1[i]);
  50. v2[i] = numVersion(v2[i]);
  51. if (v1[i] < v2[i]) {
  52. compare = -1;
  53. break;
  54. } else if (v1[i] > v2[i]) {
  55. compare = 1;
  56. break;
  57. }
  58. }
  59. if (!operator) {
  60. return compare;
  61. }
  62. result = (function() {
  63. switch (operator) {
  64. case '>':
  65. case 'gt':
  66. return compare > 0;
  67. case '>=':
  68. case 'ge':
  69. return compare >= 0;
  70. case '<=':
  71. case 'le':
  72. return compare <= 0;
  73. case '==':
  74. case '=':
  75. case 'eq':
  76. case 'is':
  77. return compare === 0;
  78. case '<>':
  79. case '!=':
  80. case 'ne':
  81. case 'isnt':
  82. return compare !== 0;
  83. case '':
  84. case '<':
  85. case 'lt':
  86. return compare < 0;
  87. default:
  88. return null;
  89. }
  90. })();
  91. return result;
  92. },
  93. packageCompare: function(_arg) {
  94. var details, errorCallback, local, newVersionCallback, oldVersionCallback, remote, runCompare, sameVersionCallback;
  95. local = _arg.local, remote = _arg.remote, newVersionCallback = _arg.newVersionCallback, sameVersionCallback = _arg.sameVersionCallback, oldVersionCallback = _arg.oldVersionCallback, errorCallback = _arg.errorCallback;
  96. details = {};
  97. runCompare = function() {
  98. if (balUtilCompare.versionCompare(details.local.version, '<', details.remote.version)) {
  99. return typeof newVersionCallback === "function" ? newVersionCallback(details) : void 0;
  100. } else if (balUtilCompare.versionCompare(details.local.version, '==', details.remote.version)) {
  101. return typeof sameVersionCallback === "function" ? sameVersionCallback(details) : void 0;
  102. } else if (balUtilCompare.versionCompare(details.local.version, '>', details.remote.version)) {
  103. return typeof oldVersionCallback === "function" ? oldVersionCallback(details) : void 0;
  104. }
  105. };
  106. balUtilPaths.readPath(local, function(err, data) {
  107. if (err) {
  108. return typeof errorCallback === "function" ? errorCallback(err, data) : void 0;
  109. }
  110. try {
  111. details.local = JSON.parse(data.toString());
  112. } catch (err) {
  113. return typeof errorCallback === "function" ? errorCallback(err, data) : void 0;
  114. }
  115. return balUtilPaths.readPath(remote, function(err, data) {
  116. if (err) {
  117. return typeof errorCallback === "function" ? errorCallback(err, data) : void 0;
  118. }
  119. try {
  120. details.remote = JSON.parse(data.toString());
  121. } catch (err) {
  122. return typeof errorCallback === "function" ? errorCallback(err, data) : void 0;
  123. }
  124. return runCompare();
  125. });
  126. });
  127. return this;
  128. }
  129. };
  130. module.exports = balUtilCompare;
  131. }).call(this);