define([], function () { function order(c) { if (/^\d$/.test(c)) return 0; else if (/^[a-z]$/i.test(c)) return c.charCodeAt(0); else if (c === "~") return -1; else if (c) return c.charCodeAt(0) + 256; else return 0; } // Based on dpkg code function vercomp(a, b) { var apos = 0, bpos = 0; while (apos < a.length || bpos < b.length) { var firstDiff = 0; while ((apos < a.length && !/^\d$/.test(a[apos])) || (bpos < b.length && !/^\d$/.test(b[bpos]))) { var ac = order(a[apos]); var bc = order(b[bpos]); if (ac !== bc) return ac - bc; apos++; bpos++; } while (a[apos] === "0") apos++; while (b[bpos] === "0") bpos++; while (/^\d$/.test(a[apos]) && /^\d$/.test(b[bpos])) { if (firstDiff === 0) firstDiff = a.charCodeAt(apos) - b.charCodeAt(bpos); apos++; bpos++; } if (/^\d$/.test(a[apos])) return 1; if (/^\d$/.test(b[bpos])) return -1; if (firstDiff !== 0) return firstDiff; } return 0; } return vercomp; });