(payload: PageCapturePayload)
| 132 | } |
| 133 | |
| 134 | export function getCodeLanguage(payload: PageCapturePayload): string { |
| 135 | const sourceName |
| 136 | = trimToValue(payload.contextLabel) |
| 137 | ?? trimToValue(payload.sourceTitle) |
| 138 | ?? trimToValue(payload.url) |
| 139 | const extension = sourceName?.match(/\.([a-z0-9]+)(?:$|[\s?#])/i)?.[1] |
| 140 | |
| 141 | if (!extension) { |
| 142 | return 'plain_text' |
| 143 | } |
| 144 | |
| 145 | const languages: Record<string, string> = { |
| 146 | c: 'c_cpp', |
| 147 | cc: 'c_cpp', |
| 148 | cpp: 'c_cpp', |
| 149 | cs: 'csharp', |
| 150 | cjs: 'javascript', |
| 151 | css: 'css', |
| 152 | go: 'golang', |
| 153 | h: 'c_cpp', |
| 154 | hpp: 'c_cpp', |
| 155 | html: 'html', |
| 156 | java: 'java', |
| 157 | js: 'javascript', |
| 158 | json: 'json', |
| 159 | jsx: 'jsx', |
| 160 | md: 'markdown', |
| 161 | mjs: 'javascript', |
| 162 | php: 'php', |
| 163 | py: 'python', |
| 164 | rs: 'rust', |
| 165 | scss: 'scss', |
| 166 | sh: 'sh', |
| 167 | ts: 'typescript', |
| 168 | tsx: 'tsx', |
| 169 | vue: 'vue', |
| 170 | yaml: 'yaml', |
| 171 | yml: 'yaml', |
| 172 | } |
| 173 | |
| 174 | return languages[extension.toLowerCase()] ?? 'plain_text' |
| 175 | } |
| 176 | |
| 177 | function trimToValue(value?: string): string | undefined { |
| 178 | const trimmed = value?.trim() |
no test coverage detected