// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* Shortens a class name to be displayed in the svg.
*
* @param {string} name The full class name to shorten.
* @return {string} The shortened class name.
*/
function shortenClassName(name) {
return name.substring(name.lastIndexOf('.') + 1);
}
/**
* Shortens a package name to be displayed in the svg.
*
* @param {string} name The full package name to shorten.
* @return {string} The shortened package name.
*/
function shortenPackageName(name) {
return name.replace('org.chromium.', '.').replace('chrome.browser.', 'c.b.');
}
/**
* Shortens a target name to be displayed in the svg.
*
* Since the target name is always in GN format (e.g. //base:base_java), we can
* assume that it always has at least two forward slashes.
*
* @param {string} name The full target name to shorten.
* @return {string} The shortened package name.
*/
function shortenTargetName(name) {
const lastSlashIdx = name.lastIndexOf('/');
const secondLastSlashIdx = name.lastIndexOf('/', lastSlashIdx - 1);
if (secondLastSlashIdx < 2) {
// This is if we are matching into the first two //.
return name;
}
return name.substring(secondLastSlashIdx + 1);
}
/**
* Splits a full class name into its package and class name.
*
* @param {string} name The full class name to split.
* @return {!Array<string>} An array of [packageName, className].
*/
function splitClassName(name) {
const lastDotIdx = name.lastIndexOf('.');
const packageName = name.substring(0, lastDotIdx);
const className = name.substring(lastDotIdx + 1);
return [packageName, className];
}
export {
shortenClassName,
shortenPackageName,
shortenTargetName,
splitClassName,
};