Files

59 lines
2.0 KiB
TypeScript
Raw Permalink Normal View History

2026-02-13 12:52:15 +03:00
import { HTMLTableRow, HTMLTableDataItem, HTMLTableColumn } from '../../types/htmlTable'
2026-05-04 18:01:51 +03:00
import { Worker, WorkerData, WorkerGuideSource } from '../../models'
import { DATA_DIR, ROOT_DIR } from '../../constants'
2026-02-13 12:52:15 +03:00
import { Storage } from '@freearhey/storage-js'
import { Collection } from '@freearhey/core'
import { Logger } from '@freearhey/core'
import { HTMLTable } from '../../core'
async function main() {
const logger = new Logger({ level: process.env.NODE_ENV === 'test' ? -999 : 3 })
2026-05-04 18:01:51 +03:00
const dataStorage = new Storage(DATA_DIR)
2026-02-13 12:52:15 +03:00
2026-05-04 18:01:51 +03:00
logger.info('loading workers.json...')
const workers = await dataStorage.json('workers.json')
2026-02-13 12:52:15 +03:00
2026-05-04 18:01:51 +03:00
if (!Array.isArray(workers)) return
2026-02-13 12:52:15 +03:00
logger.info('creating guides table...')
const rows = new Collection<HTMLTableRow>()
2026-05-04 18:01:51 +03:00
workers.forEach((data: WorkerData) => {
const worker = new Worker(data)
const sources = worker.getGuideSources()
2026-02-13 12:52:15 +03:00
rows.add(
new Collection<HTMLTableDataItem>([
{ value: worker.host },
{ value: worker.getStatusEmoji(), align: 'center' },
{ value: worker.getChannelsCount().toString(), align: 'right' },
{ value: worker.getLastUpdated(), align: 'left' },
{
2026-05-04 18:01:51 +03:00
value: sources.length
? sources
.map((source: WorkerGuideSource) => `<a href="${source.url}">${source.format}</a>`)
.join(' | ')
2026-05-03 21:37:49 +03:00
: '-'
2026-02-13 12:52:15 +03:00
}
])
)
})
logger.info('updating guides.md...')
2026-05-04 18:01:51 +03:00
const rootStorage = new Storage(ROOT_DIR)
2026-02-13 12:52:15 +03:00
const table = new HTMLTable(
rows,
new Collection<HTMLTableColumn>([
{ name: 'Host', align: 'left' },
{ name: 'Status', align: 'left' },
{ name: 'Channels', align: 'left' },
{ name: 'Last Updated', align: 'left' },
{ name: 'Links', align: 'left' }
])
)
const guidesTemplate = await new Storage().load('scripts/templates/_guides.md')
const guidesContent = guidesTemplate.replace('_TABLE_', table.toString())
await rootStorage.save('GUIDES.md', guidesContent)
}
main()