mirror of
https://github.com/iptv-org/database.git
synced 2024-12-23 00:10:23 -05:00
67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
import { Dictionary } from '@freearhey/core'
|
|
import { IssueData, Issue } from '../core'
|
|
|
|
const FIELDS = new Dictionary({
|
|
'Channel ID': 'channel_id',
|
|
'Channel ID (required)': 'channel_id',
|
|
'Channel ID (optional)': 'channel_id',
|
|
'Channel Name': 'name',
|
|
'Alternative Names': 'alt_names',
|
|
'Alternative Names (optional)': 'alt_names',
|
|
Network: 'network',
|
|
'Network (optional)': 'network',
|
|
Owners: 'owners',
|
|
'Owners (optional)': 'owners',
|
|
Country: 'country',
|
|
Subdivision: 'subdivision',
|
|
'Subdivision (optional)': 'subdivision',
|
|
City: 'city',
|
|
'City (optional)': 'city',
|
|
'Broadcast Area': 'broadcast_area',
|
|
Languages: 'languages',
|
|
Categories: 'categories',
|
|
'Categories (optional)': 'categories',
|
|
NSFW: 'is_nsfw',
|
|
Launched: 'launched',
|
|
'Launched (optional)': 'launched',
|
|
Closed: 'closed',
|
|
'Closed (optional)': 'closed',
|
|
'Replaced By': 'replaced_by',
|
|
'Replaced By (optional)': 'replaced_by',
|
|
Website: 'website',
|
|
'Website (optional)': 'website',
|
|
Logo: 'logo',
|
|
Reason: 'reason',
|
|
Notes: 'notes',
|
|
'Notes (optional)': 'notes',
|
|
Reference: 'ref',
|
|
'Reference (optional)': 'ref',
|
|
'Reference (required)': '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.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) })
|
|
}
|
|
}
|