UNPKG

@tangential/core

Version:

Core types and support code for Tangential

54 lines 6.9 kB
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