export type JetBrainsProductCode = 'PY' | 'IU' | 'WS' | 'CL' | 'PS' export interface JetBrainsStateToolDto { channelId: string toolId: string productCode: JetBrainsProductCode tag: string displayName: string displayVersion: string buildNumber: string installLocation: string launchCommand: string } export interface JetBrainsStateDto { version: 1 appVersion: string tools: JetBrainsStateToolDto[] } export enum JetBrainsIDEDisplayNameEnum { pycharm = 'PyCharm', idea = 'IntelliJ IDEA', clion = 'CLion', phpstorm = 'PhpStorm', webstorm = 'WebStorm' } export function toProductCode(anything: string): JetBrainsProductCode | null { if ([JetBrainsIDEDisplayNameEnum.pycharm, 'pycharm'].includes(anything)) return 'PY' if ([JetBrainsIDEDisplayNameEnum.idea, 'idea'].includes(anything)) return 'IU' if ([JetBrainsIDEDisplayNameEnum.clion, 'clion'].includes(anything)) return 'CL' if ([JetBrainsIDEDisplayNameEnum.phpstorm, 'phpstorm'].includes(anything)) return 'PS' if ([JetBrainsIDEDisplayNameEnum.webstorm, 'webstorm'].includes(anything)) return 'WS' return null } export function toProductDisplayName(anything: string): string | null { if (['PY', 'pycharm'].includes(anything)) return JetBrainsIDEDisplayNameEnum.pycharm if (['IU', 'idea'].includes(anything)) return JetBrainsIDEDisplayNameEnum.idea if (['CL', 'clion'].includes(anything)) return JetBrainsIDEDisplayNameEnum.clion if (['PS', 'phpstorm'].includes(anything)) return JetBrainsIDEDisplayNameEnum.phpstorm if (['WS', 'webstorm'].includes(anything)) return JetBrainsIDEDisplayNameEnum.webstorm return null }