database/scripts/core/issueParser.ts
2025-03-18 08:32:46 +03:00

57 lines
1.5 KiB
TypeScript

import { Dictionary } from '@freearhey/core'
import { IssueData, Issue } from '../core'
const FIELDS = new Dictionary({
'Channel ID': 'channel_id',
'Channel Name': 'channel_name',
'Feed Name': 'feed_name',
'Feed ID': 'feed_id',
'Main Feed': 'is_main',
'Alternative Names': 'alt_names',
Network: 'network',
Owners: 'owners',
Country: 'country',
Subdivision: 'subdivision',
City: 'city',
'Broadcast Area': 'broadcast_area',
Timezones: 'timezones',
Format: 'video_format',
Languages: 'languages',
Categories: 'categories',
NSFW: 'is_nsfw',
Launched: 'launched',
Closed: 'closed',
'Replaced By': 'replaced_by',
Website: 'website',
Logo: 'logo',
Reason: 'reason',
Notes: 'notes',
Reference: 'ref'
})
export class IssueParser {
parse(issue: { number: number; body: string; labels: { name: string }[] }): Issue {
const fields = issue.body.split('###')
const data = new Dictionary()
fields.forEach((field: string) => {
let [_label, , _value] = field.split(/\r?\n/)
_label = _label ? _label.replace(/ \(optional\)| \(required\)/, '').trim() : ''
_value = _value ? _value.trim() : ''
if (!_label || !_value) return data
const id: string = FIELDS.get(_label)
const value: string | undefined =
_value === '_No response_' || _value === 'None' ? undefined : _value
if (!id) return
data.set(id, value)
})
const labels = issue.labels.map(label => label.name)
return new Issue({ number: issue.number, labels, data: new IssueData(data) })
}
}