@dalet-oss/lexorank
Version:
A reference implementation of a list ordering system like JIRA's Lexorank algorithm
91 lines (90 loc) • 2.89 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const lexoInteger_1 = require("./lexoInteger");
const lexoRank_1 = require("./lexoRank");
class LexoRankBucket {
constructor(val) {
this.value = lexoInteger_1.LexoInteger.parse(val, lexoRank_1.LexoRank.NUMERAL_SYSTEM);
}
static get BUCKET_0() {
if (!this._BUCKET_0) {
this._BUCKET_0 = new LexoRankBucket('0');
}
return this._BUCKET_0;
}
static get BUCKET_1() {
if (!this._BUCKET_1) {
this._BUCKET_1 = new LexoRankBucket('1');
}
return this._BUCKET_1;
}
static get BUCKET_2() {
if (!this._BUCKET_2) {
this._BUCKET_2 = new LexoRankBucket('2');
}
return this._BUCKET_2;
}
static get VALUES() {
if (!this._VALUES) {
this._VALUES = [LexoRankBucket.BUCKET_0, LexoRankBucket.BUCKET_1, LexoRankBucket.BUCKET_2];
}
return this._VALUES;
}
static max() {
return LexoRankBucket.VALUES[LexoRankBucket.VALUES.length - 1];
}
static from(str) {
const val = lexoInteger_1.LexoInteger.parse(str, lexoRank_1.LexoRank.NUMERAL_SYSTEM);
const var2 = LexoRankBucket.VALUES;
const var3 = var2.length;
for (let var4 = 0; var4 < var3; ++var4) {
const bucket = var2[var4];
if (bucket.value.equals(val)) {
return bucket;
}
}
throw new Error('Unknown bucket: ' + str);
}
static resolve(bucketId) {
const var1 = LexoRankBucket.VALUES;
const var2 = var1.length;
for (let var3 = 0; var3 < var2; ++var3) {
const bucket = var1[var3];
if (bucket.equals(LexoRankBucket.from(bucketId.toString()))) {
return bucket;
}
}
throw new Error('No bucket found with id ' + bucketId);
}
format() {
return this.value.format();
}
next() {
if (this.equals(LexoRankBucket.BUCKET_0)) {
return LexoRankBucket.BUCKET_1;
}
if (this.equals(LexoRankBucket.BUCKET_1)) {
return LexoRankBucket.BUCKET_2;
}
return this.equals(LexoRankBucket.BUCKET_2) ? LexoRankBucket.BUCKET_0 : LexoRankBucket.BUCKET_2;
}
prev() {
if (this.equals(LexoRankBucket.BUCKET_0)) {
return LexoRankBucket.BUCKET_2;
}
if (this.equals(LexoRankBucket.BUCKET_1)) {
return LexoRankBucket.BUCKET_0;
}
return this.equals(LexoRankBucket.BUCKET_2) ? LexoRankBucket.BUCKET_1 : LexoRankBucket.BUCKET_0;
}
equals(other) {
if (this === other) {
return true;
}
if (!other) {
return false;
}
return this.value.equals(other.value);
}
}
exports.default = LexoRankBucket;