@tangential/core
Version:
Core types and support code for Tangential
54 lines • 6.9 kB
JavaScript
export class StringUtil {
static firstUniqueByCounterSuffix(value, values, separatorChar = ' ') {
let result = value;
const map = {};
values.forEach(v => map[v] = true);
let idx = 1;
while (map[result]) {
result = value + separatorChar + idx++;
}
return result;
}
/**
* Split a string that ends with a number into its corresponding parts. Useful for name collisions, e.g.
* FooValue, FooValue-1, FooValue-2
* @param value
*/
static withoutNumericSuffix(value) {
let idx = value.length;
const suffixChars = [];
for (idx; idx--; idx > 0) {
if (StringUtil._baseTen[value.charAt(idx)] !== true) {
break;
}
suffixChars.unshift(value.charAt(idx));
}
const suffixValue = suffixChars.length ? Number.parseInt(suffixChars.join('')) : undefined;
const text = value.substring(0, idx);
return { text: text.trim(), suffix: suffixValue };
}
static incrementCounterSuffix(value) {
let result = value;
let suffixValue = 1;
const suffixChars = [];
let idx = value.length;
for (idx; idx--; idx > 0) {
if (StringUtil._baseTen[value.charAt(idx)] !== true) {
break;
}
suffixChars.unshift(value.charAt(idx));
}
if (suffixChars.length) {
try {
suffixValue = Number.parseInt(suffixChars.join(''));
result = value.substring(0, idx + 1);
}
catch (e) {
suffixValue = 1;
}
}
return result + (suffixValue + 1);
}
}
StringUtil._baseTen = [true, true, true, true, true, true, true, true, true, true];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nZW50aWFsL2NvcmUvc3JjL2xpYi9sYW5nL3N0cmluZy11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxVQUFVO0lBSXJCLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxLQUFhLEVBQUUsTUFBZ0IsRUFBRSxnQkFBd0IsR0FBRztRQUM1RixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFDbEIsTUFBTSxHQUFHLEdBQStCLEVBQUUsQ0FBQTtRQUMxQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO1FBQ2xDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQTtRQUNYLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sR0FBRyxLQUFLLEdBQUcsYUFBYSxHQUFHLEdBQUcsRUFBRSxDQUFBO1NBQ3ZDO1FBQ0QsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBR0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxLQUFhO1FBQ3ZDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUE7UUFDdEIsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFBO1FBQ3RCLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUU7WUFDeEIsSUFBSyxVQUFVLENBQUMsUUFBZ0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUM1RCxNQUFNO2FBQ1A7WUFDRCxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUN2QztRQUNELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFDMUYsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDcEMsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBQyxDQUFBO0lBQ2pELENBQUM7SUFFRCxNQUFNLENBQUMsc0JBQXNCLENBQUMsS0FBYTtRQUN6QyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFBO1FBQ25CLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQTtRQUN0QixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFBO1FBRXRCLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUU7WUFDeEIsSUFBSyxVQUFVLENBQUMsUUFBZ0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUM1RCxNQUFNO2FBQ1A7WUFDRCxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUN2QztRQUNELElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUN0QixJQUFJO2dCQUNGLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtnQkFDbkQsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQTthQUNyQztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLFdBQVcsR0FBRyxDQUFDLENBQUM7YUFDakI7U0FDRjtRQUNELE9BQU8sTUFBTSxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBR25DLENBQUM7O0FBeERNLG1CQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBTdHJpbmdVdGlsIHtcblxuICBzdGF0aWMgX2Jhc2VUZW4gPSBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV1cblxuICBzdGF0aWMgZmlyc3RVbmlxdWVCeUNvdW50ZXJTdWZmaXgodmFsdWU6IHN0cmluZywgdmFsdWVzOiBzdHJpbmdbXSwgc2VwYXJhdG9yQ2hhcjogc3RyaW5nID0gJyAnKSB7XG4gICAgbGV0IHJlc3VsdCA9IHZhbHVlXG4gICAgY29uc3QgbWFwOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9XG4gICAgdmFsdWVzLmZvckVhY2godiA9PiBtYXBbdl0gPSB0cnVlKVxuICAgIGxldCBpZHggPSAxXG4gICAgd2hpbGUgKG1hcFtyZXN1bHRdKSB7XG4gICAgICByZXN1bHQgPSB2YWx1ZSArIHNlcGFyYXRvckNoYXIgKyBpZHgrK1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuXG4gIC8qKlxuICAgKiBTcGxpdCBhIHN0cmluZyB0aGF0IGVuZHMgd2l0aCBhIG51bWJlciBpbnRvIGl0cyBjb3JyZXNwb25kaW5nIHBhcnRzLiBVc2VmdWwgZm9yIG5hbWUgY29sbGlzaW9ucywgZS5nLlxuICAgKiBGb29WYWx1ZSwgRm9vVmFsdWUtMSwgRm9vVmFsdWUtMlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyB3aXRob3V0TnVtZXJpY1N1ZmZpeCh2YWx1ZTogc3RyaW5nKTogeyB0ZXh0OiBzdHJpbmcsIHN1ZmZpeD86IG51bWJlciB9IHtcbiAgICBsZXQgaWR4ID0gdmFsdWUubGVuZ3RoXG4gICAgY29uc3Qgc3VmZml4Q2hhcnMgPSBbXVxuICAgIGZvciAoaWR4OyBpZHgtLTsgaWR4ID4gMCkge1xuICAgICAgaWYgKChTdHJpbmdVdGlsLl9iYXNlVGVuIGFzIGFueSlbdmFsdWUuY2hhckF0KGlkeCldICE9PSB0cnVlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3VmZml4Q2hhcnMudW5zaGlmdCh2YWx1ZS5jaGFyQXQoaWR4KSlcbiAgICB9XG4gICAgY29uc3Qgc3VmZml4VmFsdWUgPSBzdWZmaXhDaGFycy5sZW5ndGggPyBOdW1iZXIucGFyc2VJbnQoc3VmZml4Q2hhcnMuam9pbignJykpIDogdW5kZWZpbmVkXG4gICAgY29uc3QgdGV4dCA9IHZhbHVlLnN1YnN0cmluZygwLCBpZHgpXG4gICAgcmV0dXJuIHt0ZXh0OiB0ZXh0LnRyaW0oKSwgc3VmZml4OiBzdWZmaXhWYWx1ZX1cbiAgfVxuXG4gIHN0YXRpYyBpbmNyZW1lbnRDb3VudGVyU3VmZml4KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgcmVzdWx0ID0gdmFsdWVcbiAgICBsZXQgc3VmZml4VmFsdWUgPSAxXG4gICAgY29uc3Qgc3VmZml4Q2hhcnMgPSBbXVxuICAgIGxldCBpZHggPSB2YWx1ZS5sZW5ndGhcblxuICAgIGZvciAoaWR4OyBpZHgtLTsgaWR4ID4gMCkge1xuICAgICAgaWYgKChTdHJpbmdVdGlsLl9iYXNlVGVuIGFzIGFueSlbdmFsdWUuY2hhckF0KGlkeCldICE9PSB0cnVlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3VmZml4Q2hhcnMudW5zaGlmdCh2YWx1ZS5jaGFyQXQoaWR4KSlcbiAgICB9XG4gICAgaWYgKHN1ZmZpeENoYXJzLmxlbmd0aCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3VmZml4VmFsdWUgPSBOdW1iZXIucGFyc2VJbnQoc3VmZml4Q2hhcnMuam9pbignJykpXG4gICAgICAgIHJlc3VsdCA9IHZhbHVlLnN1YnN0cmluZygwLCBpZHggKyAxKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdWZmaXhWYWx1ZSA9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgKyAoc3VmZml4VmFsdWUgKyAxKVxuXG5cbiAgfVxufVxuIl19