31 lines
1.2 KiB
TypeScript
31 lines
1.2 KiB
TypeScript
import type {ParsedTaskText, Prefixes} from './types'
|
|
|
|
const escapeRegExp = (s: string): string => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
|
|
|
export const cleanupItemText = (text: string, items: string[], prefix: string): string => {
|
|
items.forEach(l => {
|
|
if (l === '') {
|
|
return
|
|
}
|
|
const escaped = escapeRegExp(l)
|
|
text = text
|
|
.replace(new RegExp(`\\${prefix}'${escaped}' `, 'ig'), '')
|
|
.replace(new RegExp(`\\${prefix}'${escaped}'`, 'ig'), '')
|
|
.replace(new RegExp(`\\${prefix}"${escaped}" `, 'ig'), '')
|
|
.replace(new RegExp(`\\${prefix}"${escaped}"`, 'ig'), '')
|
|
.replace(new RegExp(`\\${prefix}${escaped} `, 'ig'), '')
|
|
.replace(new RegExp(`\\${prefix}${escaped}`, 'ig'), '')
|
|
})
|
|
return text
|
|
}
|
|
|
|
export const cleanupResult = (result: ParsedTaskText, prefixes: Prefixes): ParsedTaskText => {
|
|
result.text = cleanupItemText(result.text, result.labels, prefixes.label)
|
|
result.text = result.project !== null ? cleanupItemText(result.text, [result.project], prefixes.project) : result.text
|
|
result.text = result.priority !== null ? cleanupItemText(result.text, [String(result.priority)], prefixes.priority) : result.text
|
|
// Not removing assignees to avoid removing @text where the user does not exist
|
|
result.text = result.text.trim()
|
|
|
|
return result
|
|
}
|