UNPKG

neogma

Version:

Object-Graph-Mapping neo4j framework, Fully-typed with TypeScript, for easy and flexible node and relationship creation

67 lines 2.22 kB
"use strict"; /* inspired by https://stackoverflow.com/a/30686832 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.StringSequence = void 0; /** * provides a sequence of string in order, i.e. 'aaa', 'aab' etc * warps around when the target is reached */ class StringSequence { constructor(from, to, padSize = 4, alphabetSize = 26) { this.padSize = padSize; this.alphabetSize = alphabetSize; this.initialNumber = 0; this.currentNumber = 0; this.targetNumber = 0; this.getNextString = ( /** throws if the current string if the target one */ throwOnTargetExcceeded) => { this.currentNumber++; if (this.currentNumber > this.targetNumber) { if (throwOnTargetExcceeded) { throw new Error(`Target string reached`); } this.currentNumber = this.initialNumber; } return this.pad(this.numberToString(this.currentNumber)); }; this.initialNumber = this.stringToNumber(from); this.currentNumber = this.initialNumber - 1; this.targetNumber = this.stringToNumber(to); } stringToNumber(string) { let power = 0; let number = 0; let i = 0; while (i++ < string.length) { power = Math.pow(this.alphabetSize, string.length - i); number += (string.charCodeAt(i - 1) - 97) * power; } return number; } numberToString(number) { let string = ''; if (!number) { string = 'a'; } else { while (number) { string = String.fromCharCode(97 + (number % this.alphabetSize)) + string; number = Math.floor(number / this.alphabetSize); } } return string; } /** * pads the string by prepending 'a' at the start of it until the padSize is reached */ pad(string) { while (string.length < this.padSize) { string = 'a' + string; } return string; } } exports.StringSequence = StringSequence; //# sourceMappingURL=StringSequence.js.map