export function typeAndWrappers(name) {
    const wrappers = [];
    while (true) {
        const match = name.match(/^(.+?)<(.+)>$/);
        if (!match) break;
        wrappers.push(match[1]);
        name = match[2];
    }
    return {name, wrappers};
}

export function camelToSnake(name) {
    let prefixLen = 1;
    for (const prefix of ['TS', 'JSX', 'JS']) {
        if (name.startsWith(prefix)) {
            prefixLen = prefix.length;
            break;
        }
    }
    return name.slice(0, prefixLen).toLowerCase()
        + name.slice(prefixLen).replace(/[A-Z]/g, c => `_${c.toLowerCase()}`);
}

export function snakeToCamel(name) {
    let prefixLen = 0;
    for (const prefix of ['TS', 'JSX', 'JS']) {
        if (name.startsWith(`${prefix.toLowerCase()}_`)) {
            prefixLen = prefix.length + 1;
            break;
        }
    }
    return name.slice(0, prefixLen + 1).toUpperCase()
        + name.slice(prefixLen + 1).replace(/_([a-z])/g, (_, c) => c.toUpperCase());
}
