diff --git a/scripts/core/htmlTable.ts b/scripts/core/htmlTable.ts
index 12c39bbea..1caa85fa0 100644
--- a/scripts/core/htmlTable.ts
+++ b/scripts/core/htmlTable.ts
@@ -19,19 +19,19 @@ export class HTMLTable {
let output = '
\n'
output += ' \n '
- for (let column of this.columns) {
+ for (const column of this.columns) {
output += `${column.name} | `
}
output += '
\n \n'
output += ' \n'
- for (let item of this.data) {
+ for (const item of this.data) {
output += ' '
let i = 0
- for (let prop in item) {
+ for (const prop in item) {
const column = this.columns[i]
- let nowrap = column.nowrap ? ` nowrap` : ''
- let align = column.align ? ` align="${column.align}"` : ''
+ const nowrap = column.nowrap ? ' nowrap' : ''
+ const align = column.align ? ` align="${column.align}"` : ''
output += `${item[prop]} | `
i++
}
diff --git a/scripts/core/issueLoader.ts b/scripts/core/issueLoader.ts
index 84f1177a2..34c7cb2b0 100644
--- a/scripts/core/issueLoader.ts
+++ b/scripts/core/issueLoader.ts
@@ -11,7 +11,7 @@ const octokit = new CustomOctokit()
export class IssueLoader {
async load({ labels }: { labels: string[] | string }) {
labels = Array.isArray(labels) ? labels.join(',') : labels
- let issues: any[] = []
+ let issues: object[] = []
if (TESTING) {
switch (labels) {
case 'streams:add':
diff --git a/scripts/core/issueParser.ts b/scripts/core/issueParser.ts
index fc545ad6c..196e03920 100644
--- a/scripts/core/issueParser.ts
+++ b/scripts/core/issueParser.ts
@@ -1,6 +1,5 @@
import { Dictionary } from '@freearhey/core'
import { Issue } from '../models'
-import _ from 'lodash'
const FIELDS = new Dictionary({
'Channel ID': 'channel_id',
@@ -21,7 +20,7 @@ const FIELDS = new Dictionary({
})
export class IssueParser {
- parse(issue: any): Issue {
+ parse(issue: { number: number; body: string; labels: { name: string }[] }): Issue {
const fields = issue.body.split('###')
const data = new Dictionary()
diff --git a/scripts/core/logParser.ts b/scripts/core/logParser.ts
index 51b739fc9..322858e0c 100644
--- a/scripts/core/logParser.ts
+++ b/scripts/core/logParser.ts
@@ -4,7 +4,7 @@ export type LogItem = {
}
export class LogParser {
- parse(content: string): any[] {
+ parse(content: string): LogItem[] {
if (!content) return []
const lines = content.split('\n')
diff --git a/scripts/core/playlistParser.ts b/scripts/core/playlistParser.ts
index 776eb0cfd..296288e13 100644
--- a/scripts/core/playlistParser.ts
+++ b/scripts/core/playlistParser.ts
@@ -14,7 +14,7 @@ export class PlaylistParser {
async parse(files: string[]): Promise {
let streams = new Collection()
- for (let filepath of files) {
+ for (const filepath of files) {
const relativeFilepath = filepath.replace(path.normalize(STREAMS_DIR), '')
const _streams: Collection = await this.parseFile(relativeFilepath)
streams = streams.concat(_streams)
diff --git a/scripts/generators/categoriesGenerator.ts b/scripts/generators/categoriesGenerator.ts
index cf768b982..672af3d90 100644
--- a/scripts/generators/categoriesGenerator.ts
+++ b/scripts/generators/categoriesGenerator.ts
@@ -1,55 +1,53 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Stream, Category, Playlist } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type CategoriesGeneratorProps = {
- streams: Collection
- categories: Collection
- logger: Logger
-}
-
-export class CategoriesGenerator implements Generator {
- streams: Collection
- categories: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, categories, logger }: CategoriesGeneratorProps) {
- this.streams = streams
- this.categories = categories
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate() {
- const streams = this.streams.orderBy([(stream: Stream) => stream.getTitle()])
-
- this.categories.forEach(async (category: Category) => {
- let categoryStreams = streams
- .filter((stream: Stream) => stream.hasCategory(category))
- .map((stream: Stream) => {
- const groupTitle = stream.categories
- ? stream.categories
- .map((category: Category) => category.name)
- .sort()
- .join(';')
- : ''
- stream.groupTitle = groupTitle
-
- return stream
- })
-
- const playlist = new Playlist(categoryStreams, { public: true })
- const filepath = `categories/${category.id}.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- })
-
- const undefinedStreams = streams.filter((stream: Stream) => stream.noCategories())
- const playlist = new Playlist(undefinedStreams, { public: true })
- const filepath = `categories/undefined.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Stream, Category, Playlist } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type CategoriesGeneratorProps = {
+ streams: Collection
+ categories: Collection
+ logger: Logger
+}
+
+export class CategoriesGenerator implements Generator {
+ streams: Collection
+ categories: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, categories, logger }: CategoriesGeneratorProps) {
+ this.streams = streams
+ this.categories = categories
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate() {
+ const streams = this.streams.orderBy([(stream: Stream) => stream.getTitle()])
+
+ this.categories.forEach(async (category: Category) => {
+ const categoryStreams = streams
+ .filter((stream: Stream) => stream.hasCategory(category))
+ .map((stream: Stream) => {
+ const streamCategories = stream.categories
+ .map((category: Category) => category.name)
+ .sort()
+ const groupTitle = stream.categories ? streamCategories.join(';') : ''
+ stream.groupTitle = groupTitle
+
+ return stream
+ })
+
+ const playlist = new Playlist(categoryStreams, { public: true })
+ const filepath = `categories/${category.id}.m3u`
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ })
+
+ const undefinedStreams = streams.filter((stream: Stream) => stream.noCategories())
+ const playlist = new Playlist(undefinedStreams, { public: true })
+ const filepath = 'categories/undefined.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+}
diff --git a/scripts/generators/countriesGenerator.ts b/scripts/generators/countriesGenerator.ts
index 158bf031c..0b5bc8c11 100644
--- a/scripts/generators/countriesGenerator.ts
+++ b/scripts/generators/countriesGenerator.ts
@@ -1,85 +1,85 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Country, Region, Subdivision, Stream, Playlist } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type CountriesGeneratorProps = {
- streams: Collection
- regions: Collection
- subdivisions: Collection
- countries: Collection
- logger: Logger
-}
-
-export class CountriesGenerator implements Generator {
- streams: Collection
- countries: Collection
- regions: Collection
- subdivisions: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, countries, regions, subdivisions, logger }: CountriesGeneratorProps) {
- this.streams = streams
- this.countries = countries
- this.regions = regions
- this.subdivisions = subdivisions
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- let streams = this.streams
- .orderBy([stream => stream.getTitle()])
- .filter((stream: Stream) => stream.isSFW())
- let regions = this.regions.filter((region: Region) => region.code !== 'INT')
-
- this.countries.forEach(async (country: Country) => {
- const countrySubdivisions = this.subdivisions.filter(
- (subdivision: Subdivision) => subdivision.country === country.code
- )
-
- const countrySubdivisionsCodes = countrySubdivisions.map(
- (subdivision: Subdivision) => `s/${subdivision.code}`
- )
-
- const countryAreaCodes = regions
- .filter((region: Region) => region.countries.includes(country.code))
- .map((region: Region) => `r/${region.code}`)
- .concat(countrySubdivisionsCodes)
- .add(`c/${country.code}`)
-
- const countryStreams = streams.filter(stream =>
- stream.broadcastArea.intersects(countryAreaCodes)
- )
-
- if (countryStreams.isEmpty()) return
-
- const playlist = new Playlist(countryStreams, { public: true })
- const filepath = `countries/${country.code.toLowerCase()}.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
-
- countrySubdivisions.forEach(async (subdivision: Subdivision) => {
- const subdivisionStreams = streams.filter(stream =>
- stream.broadcastArea.includes(`s/${subdivision.code}`)
- )
-
- if (subdivisionStreams.isEmpty()) return
-
- const playlist = new Playlist(subdivisionStreams, { public: true })
- const filepath = `subdivisions/${subdivision.code.toLowerCase()}.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- })
- })
-
- const internationalStreams = streams.filter(stream => stream.isInternational())
- if (internationalStreams.notEmpty()) {
- const playlist = new Playlist(internationalStreams, { public: true })
- const filepath = `countries/int.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Country, Region, Subdivision, Stream, Playlist } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type CountriesGeneratorProps = {
+ streams: Collection
+ regions: Collection
+ subdivisions: Collection
+ countries: Collection
+ logger: Logger
+}
+
+export class CountriesGenerator implements Generator {
+ streams: Collection
+ countries: Collection
+ regions: Collection
+ subdivisions: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, countries, regions, subdivisions, logger }: CountriesGeneratorProps) {
+ this.streams = streams
+ this.countries = countries
+ this.regions = regions
+ this.subdivisions = subdivisions
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ const streams = this.streams
+ .orderBy([stream => stream.getTitle()])
+ .filter((stream: Stream) => stream.isSFW())
+ const regions = this.regions.filter((region: Region) => region.code !== 'INT')
+
+ this.countries.forEach(async (country: Country) => {
+ const countrySubdivisions = this.subdivisions.filter(
+ (subdivision: Subdivision) => subdivision.country === country.code
+ )
+
+ const countrySubdivisionsCodes = countrySubdivisions.map(
+ (subdivision: Subdivision) => `s/${subdivision.code}`
+ )
+
+ const countryAreaCodes = regions
+ .filter((region: Region) => region.countries.includes(country.code))
+ .map((region: Region) => `r/${region.code}`)
+ .concat(countrySubdivisionsCodes)
+ .add(`c/${country.code}`)
+
+ const countryStreams = streams.filter(stream =>
+ stream.broadcastArea.intersects(countryAreaCodes)
+ )
+
+ if (countryStreams.isEmpty()) return
+
+ const playlist = new Playlist(countryStreams, { public: true })
+ const filepath = `countries/${country.code.toLowerCase()}.m3u`
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+
+ countrySubdivisions.forEach(async (subdivision: Subdivision) => {
+ const subdivisionStreams = streams.filter(stream =>
+ stream.broadcastArea.includes(`s/${subdivision.code}`)
+ )
+
+ if (subdivisionStreams.isEmpty()) return
+
+ const playlist = new Playlist(subdivisionStreams, { public: true })
+ const filepath = `subdivisions/${subdivision.code.toLowerCase()}.m3u`
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ })
+ })
+
+ const internationalStreams = streams.filter(stream => stream.isInternational())
+ if (internationalStreams.notEmpty()) {
+ const playlist = new Playlist(internationalStreams, { public: true })
+ const filepath = 'countries/int.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+ }
+}
diff --git a/scripts/generators/index.ts b/scripts/generators/index.ts
index f2825f0c4..18b6c8e62 100644
--- a/scripts/generators/index.ts
+++ b/scripts/generators/index.ts
@@ -1,10 +1,10 @@
-export * from './categoriesGenerator'
-export * from './countriesGenerator'
-export * from './languagesGenerator'
-export * from './regionsGenerator'
-export * from './indexGenerator'
-export * from './indexNsfwGenerator'
-export * from './indexCategoryGenerator'
-export * from './indexCountryGenerator'
-export * from './indexLanguageGenerator'
-export * from './indexRegionGenerator'
+export * from './categoriesGenerator'
+export * from './countriesGenerator'
+export * from './languagesGenerator'
+export * from './regionsGenerator'
+export * from './indexGenerator'
+export * from './indexNsfwGenerator'
+export * from './indexCategoryGenerator'
+export * from './indexCountryGenerator'
+export * from './indexLanguageGenerator'
+export * from './indexRegionGenerator'
diff --git a/scripts/generators/indexCategoryGenerator.ts b/scripts/generators/indexCategoryGenerator.ts
index fb4647e3a..8fd5f2cbf 100644
--- a/scripts/generators/indexCategoryGenerator.ts
+++ b/scripts/generators/indexCategoryGenerator.ts
@@ -1,53 +1,53 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Stream, Playlist, Category } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type IndexCategoryGeneratorProps = {
- streams: Collection
- logger: Logger
-}
-
-export class IndexCategoryGenerator implements Generator {
- streams: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, logger }: IndexCategoryGeneratorProps) {
- this.streams = streams
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- const streams = this.streams
- .orderBy(stream => stream.getTitle())
- .filter(stream => stream.isSFW())
-
- let groupedStreams = new Collection()
- streams.forEach((stream: Stream) => {
- if (stream.noCategories()) {
- const streamClone = stream.clone()
- streamClone.groupTitle = 'Undefined'
- groupedStreams.add(streamClone)
- return
- }
-
- stream.categories.forEach((category: Category) => {
- const streamClone = stream.clone()
- streamClone.groupTitle = category.name
- groupedStreams.push(streamClone)
- })
- })
-
- groupedStreams = groupedStreams.orderBy(stream => {
- if (stream.groupTitle === 'Undefined') return 'ZZ'
- return stream.groupTitle
- })
-
- const playlist = new Playlist(groupedStreams, { public: true })
- const filepath = 'index.category.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Stream, Playlist, Category } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type IndexCategoryGeneratorProps = {
+ streams: Collection
+ logger: Logger
+}
+
+export class IndexCategoryGenerator implements Generator {
+ streams: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, logger }: IndexCategoryGeneratorProps) {
+ this.streams = streams
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ const streams = this.streams
+ .orderBy(stream => stream.getTitle())
+ .filter(stream => stream.isSFW())
+
+ let groupedStreams = new Collection()
+ streams.forEach((stream: Stream) => {
+ if (stream.noCategories()) {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = 'Undefined'
+ groupedStreams.add(streamClone)
+ return
+ }
+
+ stream.categories.forEach((category: Category) => {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = category.name
+ groupedStreams.push(streamClone)
+ })
+ })
+
+ groupedStreams = groupedStreams.orderBy(stream => {
+ if (stream.groupTitle === 'Undefined') return 'ZZ'
+ return stream.groupTitle
+ })
+
+ const playlist = new Playlist(groupedStreams, { public: true })
+ const filepath = 'index.category.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+}
diff --git a/scripts/generators/indexCountryGenerator.ts b/scripts/generators/indexCountryGenerator.ts
index 72974e6d8..dcdb214f8 100644
--- a/scripts/generators/indexCountryGenerator.ts
+++ b/scripts/generators/indexCountryGenerator.ts
@@ -1,104 +1,104 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Stream, Playlist, Country, Subdivision, Region } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type IndexCountryGeneratorProps = {
- streams: Collection
- regions: Collection
- countries: Collection
- subdivisions: Collection
- logger: Logger
-}
-
-export class IndexCountryGenerator implements Generator {
- streams: Collection
- countries: Collection
- regions: Collection
- subdivisions: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, regions, countries, subdivisions, logger }: IndexCountryGeneratorProps) {
- this.streams = streams
- this.countries = countries
- this.regions = regions
- this.subdivisions = subdivisions
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- let groupedStreams = new Collection()
-
- this.streams
- .orderBy(stream => stream.getTitle())
- .filter(stream => stream.isSFW())
- .forEach(stream => {
- if (stream.noBroadcastArea()) {
- const streamClone = stream.clone()
- streamClone.groupTitle = 'Undefined'
- groupedStreams.add(streamClone)
- return
- }
-
- if (stream.isInternational()) {
- const streamClone = stream.clone()
- streamClone.groupTitle = 'International'
- groupedStreams.add(streamClone)
- }
-
- this.getStreamBroadcastCountries(stream).forEach((country: Country) => {
- const streamClone = stream.clone()
- streamClone.groupTitle = country.name
- groupedStreams.add(streamClone)
- })
- })
-
- groupedStreams = groupedStreams.orderBy((stream: Stream) => {
- if (stream.groupTitle === 'International') return 'ZZ'
- if (stream.groupTitle === 'Undefined') return 'ZZZ'
-
- return stream.groupTitle
- })
-
- const playlist = new Playlist(groupedStreams, { public: true })
- const filepath = 'index.country.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-
- getStreamBroadcastCountries(stream: Stream) {
- const groupedRegions = this.regions.keyBy((region: Region) => region.code)
- const groupedCountries = this.countries.keyBy((country: Country) => country.code)
- const groupedSubdivisions = this.subdivisions.keyBy(
- (subdivision: Subdivision) => subdivision.code
- )
-
- let broadcastCountries = new Collection()
-
- stream.broadcastArea.forEach(broadcastAreaCode => {
- const [type, code] = broadcastAreaCode.split('/')
- switch (type) {
- case 'c':
- broadcastCountries.add(code)
- break
- case 'r':
- if (code !== 'INT' && groupedRegions.has(code)) {
- broadcastCountries = broadcastCountries.concat(groupedRegions.get(code).countries)
- }
- break
- case 's':
- if (groupedSubdivisions.has(code)) {
- broadcastCountries.add(groupedSubdivisions.get(code).country)
- }
- break
- }
- })
-
- return broadcastCountries
- .uniq()
- .map(code => groupedCountries.get(code))
- .filter(Boolean)
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Stream, Playlist, Country, Subdivision, Region } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type IndexCountryGeneratorProps = {
+ streams: Collection
+ regions: Collection
+ countries: Collection
+ subdivisions: Collection
+ logger: Logger
+}
+
+export class IndexCountryGenerator implements Generator {
+ streams: Collection
+ countries: Collection
+ regions: Collection
+ subdivisions: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, regions, countries, subdivisions, logger }: IndexCountryGeneratorProps) {
+ this.streams = streams
+ this.countries = countries
+ this.regions = regions
+ this.subdivisions = subdivisions
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ let groupedStreams = new Collection()
+
+ this.streams
+ .orderBy(stream => stream.getTitle())
+ .filter(stream => stream.isSFW())
+ .forEach(stream => {
+ if (stream.noBroadcastArea()) {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = 'Undefined'
+ groupedStreams.add(streamClone)
+ return
+ }
+
+ if (stream.isInternational()) {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = 'International'
+ groupedStreams.add(streamClone)
+ }
+
+ this.getStreamBroadcastCountries(stream).forEach((country: Country) => {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = country.name
+ groupedStreams.add(streamClone)
+ })
+ })
+
+ groupedStreams = groupedStreams.orderBy((stream: Stream) => {
+ if (stream.groupTitle === 'International') return 'ZZ'
+ if (stream.groupTitle === 'Undefined') return 'ZZZ'
+
+ return stream.groupTitle
+ })
+
+ const playlist = new Playlist(groupedStreams, { public: true })
+ const filepath = 'index.country.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+
+ getStreamBroadcastCountries(stream: Stream) {
+ const groupedRegions = this.regions.keyBy((region: Region) => region.code)
+ const groupedCountries = this.countries.keyBy((country: Country) => country.code)
+ const groupedSubdivisions = this.subdivisions.keyBy(
+ (subdivision: Subdivision) => subdivision.code
+ )
+
+ let broadcastCountries = new Collection()
+
+ stream.broadcastArea.forEach(broadcastAreaCode => {
+ const [type, code] = broadcastAreaCode.split('/')
+ switch (type) {
+ case 'c':
+ broadcastCountries.add(code)
+ break
+ case 'r':
+ if (code !== 'INT' && groupedRegions.has(code)) {
+ broadcastCountries = broadcastCountries.concat(groupedRegions.get(code).countries)
+ }
+ break
+ case 's':
+ if (groupedSubdivisions.has(code)) {
+ broadcastCountries.add(groupedSubdivisions.get(code).country)
+ }
+ break
+ }
+ })
+
+ return broadcastCountries
+ .uniq()
+ .map(code => groupedCountries.get(code))
+ .filter(Boolean)
+ }
+}
diff --git a/scripts/generators/indexGenerator.ts b/scripts/generators/indexGenerator.ts
index 96784cc6e..b4389ff5f 100644
--- a/scripts/generators/indexGenerator.ts
+++ b/scripts/generators/indexGenerator.ts
@@ -1,32 +1,32 @@
-import { Collection, Logger, Storage } from '@freearhey/core'
-import { Stream, Playlist } from '../models'
-import { Generator } from './generator'
-import { PUBLIC_DIR } from '../constants'
-
-type IndexGeneratorProps = {
- streams: Collection
- logger: Logger
-}
-
-export class IndexGenerator implements Generator {
- streams: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, logger }: IndexGeneratorProps) {
- this.streams = streams
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- const sfwStreams = this.streams
- .orderBy(stream => stream.getTitle())
- .filter((stream: Stream) => stream.isSFW())
-
- const playlist = new Playlist(sfwStreams, { public: true })
- const filepath = 'index.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-}
+import { Collection, Logger, Storage } from '@freearhey/core'
+import { Stream, Playlist } from '../models'
+import { Generator } from './generator'
+import { PUBLIC_DIR } from '../constants'
+
+type IndexGeneratorProps = {
+ streams: Collection
+ logger: Logger
+}
+
+export class IndexGenerator implements Generator {
+ streams: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, logger }: IndexGeneratorProps) {
+ this.streams = streams
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ const sfwStreams = this.streams
+ .orderBy(stream => stream.getTitle())
+ .filter((stream: Stream) => stream.isSFW())
+
+ const playlist = new Playlist(sfwStreams, { public: true })
+ const filepath = 'index.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+}
diff --git a/scripts/generators/indexLanguageGenerator.ts b/scripts/generators/indexLanguageGenerator.ts
index 07f3d74aa..a64ffaada 100644
--- a/scripts/generators/indexLanguageGenerator.ts
+++ b/scripts/generators/indexLanguageGenerator.ts
@@ -1,52 +1,52 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Stream, Playlist, Language } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type IndexLanguageGeneratorProps = {
- streams: Collection
- logger: Logger
-}
-
-export class IndexLanguageGenerator implements Generator {
- streams: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, logger }: IndexLanguageGeneratorProps) {
- this.streams = streams
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- let groupedStreams = new Collection()
- this.streams
- .orderBy(stream => stream.getTitle())
- .filter(stream => stream.isSFW())
- .forEach(stream => {
- if (stream.noLanguages()) {
- const streamClone = stream.clone()
- streamClone.groupTitle = 'Undefined'
- groupedStreams.add(streamClone)
- return
- }
-
- stream.languages.forEach((language: Language) => {
- const streamClone = stream.clone()
- streamClone.groupTitle = language.name
- groupedStreams.add(streamClone)
- })
- })
-
- groupedStreams = groupedStreams.orderBy((stream: Stream) => {
- if (stream.groupTitle === 'Undefined') return 'ZZ'
- return stream.groupTitle
- })
-
- const playlist = new Playlist(groupedStreams, { public: true })
- const filepath = 'index.language.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Stream, Playlist, Language } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type IndexLanguageGeneratorProps = {
+ streams: Collection
+ logger: Logger
+}
+
+export class IndexLanguageGenerator implements Generator {
+ streams: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, logger }: IndexLanguageGeneratorProps) {
+ this.streams = streams
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ let groupedStreams = new Collection()
+ this.streams
+ .orderBy(stream => stream.getTitle())
+ .filter(stream => stream.isSFW())
+ .forEach(stream => {
+ if (stream.noLanguages()) {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = 'Undefined'
+ groupedStreams.add(streamClone)
+ return
+ }
+
+ stream.languages.forEach((language: Language) => {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = language.name
+ groupedStreams.add(streamClone)
+ })
+ })
+
+ groupedStreams = groupedStreams.orderBy((stream: Stream) => {
+ if (stream.groupTitle === 'Undefined') return 'ZZ'
+ return stream.groupTitle
+ })
+
+ const playlist = new Playlist(groupedStreams, { public: true })
+ const filepath = 'index.language.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+}
diff --git a/scripts/generators/indexNsfwGenerator.ts b/scripts/generators/indexNsfwGenerator.ts
index c0b80b9a0..a1f0a8062 100644
--- a/scripts/generators/indexNsfwGenerator.ts
+++ b/scripts/generators/indexNsfwGenerator.ts
@@ -1,30 +1,30 @@
-import { Collection, Logger, Storage } from '@freearhey/core'
-import { Stream, Playlist } from '../models'
-import { Generator } from './generator'
-import { PUBLIC_DIR } from '../constants'
-
-type IndexNsfwGeneratorProps = {
- streams: Collection
- logger: Logger
-}
-
-export class IndexNsfwGenerator implements Generator {
- streams: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, logger }: IndexNsfwGeneratorProps) {
- this.streams = streams
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- const allStreams = this.streams.orderBy((stream: Stream) => stream.getTitle())
-
- const playlist = new Playlist(allStreams, { public: true })
- const filepath = 'index.nsfw.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-}
+import { Collection, Logger, Storage } from '@freearhey/core'
+import { Stream, Playlist } from '../models'
+import { Generator } from './generator'
+import { PUBLIC_DIR } from '../constants'
+
+type IndexNsfwGeneratorProps = {
+ streams: Collection
+ logger: Logger
+}
+
+export class IndexNsfwGenerator implements Generator {
+ streams: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, logger }: IndexNsfwGeneratorProps) {
+ this.streams = streams
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ const allStreams = this.streams.orderBy((stream: Stream) => stream.getTitle())
+
+ const playlist = new Playlist(allStreams, { public: true })
+ const filepath = 'index.nsfw.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+}
diff --git a/scripts/generators/indexRegionGenerator.ts b/scripts/generators/indexRegionGenerator.ts
index 9f2096866..55affcaa3 100644
--- a/scripts/generators/indexRegionGenerator.ts
+++ b/scripts/generators/indexRegionGenerator.ts
@@ -1,83 +1,83 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Stream, Playlist, Region } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type IndexRegionGeneratorProps = {
- streams: Collection
- regions: Collection
- logger: Logger
-}
-
-export class IndexRegionGenerator implements Generator {
- streams: Collection
- regions: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, regions, logger }: IndexRegionGeneratorProps) {
- this.streams = streams
- this.regions = regions
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- let groupedStreams = new Collection()
- this.streams
- .orderBy((stream: Stream) => stream.getTitle())
- .filter((stream: Stream) => stream.isSFW())
- .forEach((stream: Stream) => {
- if (stream.noBroadcastArea()) {
- const streamClone = stream.clone()
- streamClone.groupTitle = 'Undefined'
- groupedStreams.push(streamClone)
- return
- }
-
- this.getStreamRegions(stream).forEach((region: Region) => {
- const streamClone = stream.clone()
- streamClone.groupTitle = region.name
- groupedStreams.push(streamClone)
- })
- })
-
- groupedStreams = groupedStreams.orderBy((stream: Stream) => {
- if (stream.groupTitle === 'Undefined') return 'ZZ'
- return stream.groupTitle
- })
-
- const playlist = new Playlist(groupedStreams, { public: true })
- const filepath = 'index.region.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-
- getStreamRegions(stream: Stream) {
- let streamRegions = new Collection()
- stream.broadcastArea.forEach(broadcastAreaCode => {
- const [type, code] = broadcastAreaCode.split('/')
- switch (type) {
- case 'r':
- const groupedRegions = this.regions.keyBy((region: Region) => region.code)
- streamRegions.add(groupedRegions.get(code))
- break
- case 's':
- const [countryCode] = code.split('-')
- const subdivisionRegions = this.regions.filter((region: Region) =>
- region.countries.includes(countryCode)
- )
- streamRegions = streamRegions.concat(subdivisionRegions)
- break
- case 'c':
- const countryRegions = this.regions.filter((region: Region) =>
- region.countries.includes(code)
- )
- streamRegions = streamRegions.concat(countryRegions)
- break
- }
- })
-
- return streamRegions
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Stream, Playlist, Region } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type IndexRegionGeneratorProps = {
+ streams: Collection
+ regions: Collection
+ logger: Logger
+}
+
+export class IndexRegionGenerator implements Generator {
+ streams: Collection
+ regions: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, regions, logger }: IndexRegionGeneratorProps) {
+ this.streams = streams
+ this.regions = regions
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ let groupedStreams = new Collection()
+ this.streams
+ .orderBy((stream: Stream) => stream.getTitle())
+ .filter((stream: Stream) => stream.isSFW())
+ .forEach((stream: Stream) => {
+ if (stream.noBroadcastArea()) {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = 'Undefined'
+ groupedStreams.push(streamClone)
+ return
+ }
+
+ this.getStreamRegions(stream).forEach((region: Region) => {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = region.name
+ groupedStreams.push(streamClone)
+ })
+ })
+
+ groupedStreams = groupedStreams.orderBy((stream: Stream) => {
+ if (stream.groupTitle === 'Undefined') return 'ZZ'
+ return stream.groupTitle
+ })
+
+ const playlist = new Playlist(groupedStreams, { public: true })
+ const filepath = 'index.region.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+
+ getStreamRegions(stream: Stream) {
+ let streamRegions = new Collection()
+ stream.broadcastArea.forEach(broadcastAreaCode => {
+ const [type, code] = broadcastAreaCode.split('/')
+ switch (type) {
+ case 'r':
+ const groupedRegions = this.regions.keyBy((region: Region) => region.code)
+ streamRegions.add(groupedRegions.get(code))
+ break
+ case 's':
+ const [countryCode] = code.split('-')
+ const subdivisionRegions = this.regions.filter((region: Region) =>
+ region.countries.includes(countryCode)
+ )
+ streamRegions = streamRegions.concat(subdivisionRegions)
+ break
+ case 'c':
+ const countryRegions = this.regions.filter((region: Region) =>
+ region.countries.includes(code)
+ )
+ streamRegions = streamRegions.concat(countryRegions)
+ break
+ }
+ })
+
+ return streamRegions
+ }
+}
diff --git a/scripts/generators/languagesGenerator.ts b/scripts/generators/languagesGenerator.ts
index 5a158a761..d40d53d9b 100644
--- a/scripts/generators/languagesGenerator.ts
+++ b/scripts/generators/languagesGenerator.ts
@@ -1,50 +1,52 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Playlist, Language, Stream } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type LanguagesGeneratorProps = { streams: Collection; logger: Logger }
-
-export class LanguagesGenerator implements Generator {
- streams: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, logger }: LanguagesGeneratorProps) {
- this.streams = streams
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- let streams = this.streams.orderBy(stream => stream.getTitle()).filter(stream => stream.isSFW())
-
- let languages = new Collection()
- streams.forEach((stream: Stream) => {
- languages = languages.concat(stream.languages)
- })
-
- languages
- .uniqBy((language: Language) => language.code)
- .orderBy((language: Language) => language.name)
- .forEach(async (language: Language) => {
- const languageStreams = streams.filter(stream => stream.hasLanguage(language))
-
- if (languageStreams.isEmpty()) return
-
- const playlist = new Playlist(languageStreams, { public: true })
- const filepath = `languages/${language.code}.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- })
-
- const undefinedStreams = streams.filter(stream => stream.noLanguages())
-
- if (undefinedStreams.isEmpty()) return
-
- const playlist = new Playlist(undefinedStreams, { public: true })
- const filepath = 'languages/undefined.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Playlist, Language, Stream } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type LanguagesGeneratorProps = { streams: Collection; logger: Logger }
+
+export class LanguagesGenerator implements Generator {
+ streams: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, logger }: LanguagesGeneratorProps) {
+ this.streams = streams
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ const streams = this.streams
+ .orderBy(stream => stream.getTitle())
+ .filter(stream => stream.isSFW())
+
+ let languages = new Collection()
+ streams.forEach((stream: Stream) => {
+ languages = languages.concat(stream.languages)
+ })
+
+ languages
+ .uniqBy((language: Language) => language.code)
+ .orderBy((language: Language) => language.name)
+ .forEach(async (language: Language) => {
+ const languageStreams = streams.filter(stream => stream.hasLanguage(language))
+
+ if (languageStreams.isEmpty()) return
+
+ const playlist = new Playlist(languageStreams, { public: true })
+ const filepath = `languages/${language.code}.m3u`
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ })
+
+ const undefinedStreams = streams.filter(stream => stream.noLanguages())
+
+ if (undefinedStreams.isEmpty()) return
+
+ const playlist = new Playlist(undefinedStreams, { public: true })
+ const filepath = 'languages/undefined.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+}
diff --git a/scripts/generators/regionsGenerator.ts b/scripts/generators/regionsGenerator.ts
index f6918951c..9c29ee3a2 100644
--- a/scripts/generators/regionsGenerator.ts
+++ b/scripts/generators/regionsGenerator.ts
@@ -1,51 +1,53 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Playlist, Subdivision, Region } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type RegionsGeneratorProps = {
- streams: Collection
- regions: Collection
- subdivisions: Collection
- logger: Logger
-}
-
-export class RegionsGenerator implements Generator {
- streams: Collection
- regions: Collection
- subdivisions: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, regions, subdivisions, logger }: RegionsGeneratorProps) {
- this.streams = streams
- this.regions = regions
- this.subdivisions = subdivisions
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- let streams = this.streams.orderBy(stream => stream.getTitle()).filter(stream => stream.isSFW())
-
- this.regions.forEach(async (region: Region) => {
- if (region.code === 'INT') return
-
- const regionSubdivisionsCodes = this.subdivisions
- .filter((subdivision: Subdivision) => region.countries.indexOf(subdivision.country) > -1)
- .map((subdivision: Subdivision) => `s/${subdivision.code}`)
-
- const regionCodes = region.countries
- .map((code: string) => `c/${code}`)
- .concat(regionSubdivisionsCodes)
- .add(`r/${region.code}`)
-
- const regionStreams = streams.filter(stream => stream.broadcastArea.intersects(regionCodes))
-
- const playlist = new Playlist(regionStreams, { public: true })
- const filepath = `regions/${region.code.toLowerCase()}.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- })
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Playlist, Subdivision, Region } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type RegionsGeneratorProps = {
+ streams: Collection
+ regions: Collection
+ subdivisions: Collection
+ logger: Logger
+}
+
+export class RegionsGenerator implements Generator {
+ streams: Collection
+ regions: Collection
+ subdivisions: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, regions, subdivisions, logger }: RegionsGeneratorProps) {
+ this.streams = streams
+ this.regions = regions
+ this.subdivisions = subdivisions
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ const streams = this.streams
+ .orderBy(stream => stream.getTitle())
+ .filter(stream => stream.isSFW())
+
+ this.regions.forEach(async (region: Region) => {
+ if (region.code === 'INT') return
+
+ const regionSubdivisionsCodes = this.subdivisions
+ .filter((subdivision: Subdivision) => region.countries.indexOf(subdivision.country) > -1)
+ .map((subdivision: Subdivision) => `s/${subdivision.code}`)
+
+ const regionCodes = region.countries
+ .map((code: string) => `c/${code}`)
+ .concat(regionSubdivisionsCodes)
+ .add(`r/${region.code}`)
+
+ const regionStreams = streams.filter(stream => stream.broadcastArea.intersects(regionCodes))
+
+ const playlist = new Playlist(regionStreams, { public: true })
+ const filepath = `regions/${region.code.toLowerCase()}.m3u`
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ })
+ }
+}
diff --git a/scripts/models/playlist.ts b/scripts/models/playlist.ts
index 6266282cc..ba0a25c5c 100644
--- a/scripts/models/playlist.ts
+++ b/scripts/models/playlist.ts
@@ -17,10 +17,10 @@ export class Playlist {
}
toString() {
- let output = `#EXTM3U\n`
+ let output = '#EXTM3U\n'
this.streams.forEach((stream: Stream) => {
- output += stream.toString(this.options) + `\n`
+ output += stream.toString(this.options) + '\n'
})
return output
diff --git a/scripts/tables/countryTable.ts b/scripts/tables/countryTable.ts
index c85a59a37..5e167b7fd 100644
--- a/scripts/tables/countryTable.ts
+++ b/scripts/tables/countryTable.ts
@@ -48,7 +48,7 @@ export class CountryTable implements Table {
} else if (countryCode === 'INT') {
data.add([
'ZZ',
- `🌍 International`,
+ '🌍 International',
logItem.count,
`https://iptv-org.github.io/iptv/${logItem.filepath}
`
])
diff --git a/tests/commands/api/generate.test.ts b/tests/commands/api/generate.test.ts
index fe3c1215d..86e34ce08 100644
--- a/tests/commands/api/generate.test.ts
+++ b/tests/commands/api/generate.test.ts
@@ -4,14 +4,14 @@ import fs from 'fs-extra'
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
- const stdout = execSync(
+ execSync(
'STREAMS_DIR=tests/__data__/input/streams_generate API_DIR=tests/__data__/output/.api npm run api:generate',
{ encoding: 'utf8' }
)
})
it('can create streams.json', () => {
- expect(content(`output/.api/streams.json`)).toMatchObject(content(`expected/.api/streams.json`))
+ expect(content('output/.api/streams.json')).toMatchObject(content('expected/.api/streams.json'))
})
function content(filepath: string) {
diff --git a/tests/commands/playlist/format.test.ts b/tests/commands/playlist/format.test.ts
index 0c867dd36..6a9fbafc5 100644
--- a/tests/commands/playlist/format.test.ts
+++ b/tests/commands/playlist/format.test.ts
@@ -8,7 +8,7 @@ beforeEach(() => {
})
it('can format playlists', () => {
- const stdout = execSync('STREAMS_DIR=tests/__data__/output/streams npm run playlist:format', {
+ execSync('STREAMS_DIR=tests/__data__/output/streams npm run playlist:format', {
encoding: 'utf8'
})
diff --git a/tests/commands/playlist/generate.test.ts b/tests/commands/playlist/generate.test.ts
index 8c6d80d6a..8cdbfeee8 100644
--- a/tests/commands/playlist/generate.test.ts
+++ b/tests/commands/playlist/generate.test.ts
@@ -5,7 +5,7 @@ import * as glob from 'glob'
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
- const stdout = execSync(
+ execSync(
'STREAMS_DIR=tests/__data__/input/streams_generate DATA_DIR=tests/__data__/input/data PUBLIC_DIR=tests/__data__/output/.gh-pages LOGS_DIR=tests/__data__/output/logs npm run playlist:generate',
{ encoding: 'utf8' }
)
@@ -20,8 +20,8 @@ it('can generate playlists and logs', () => {
expect(content(`output/${filepath}`), filepath).toBe(content(`expected/${filepath}`))
})
- expect(content(`output/logs/generators.log`).split('\n').sort()).toStrictEqual(
- content(`expected/logs/generators.log`).split('\n').sort()
+ expect(content('output/logs/generators.log').split('\n').sort()).toStrictEqual(
+ content('expected/logs/generators.log').split('\n').sort()
)
})
diff --git a/tests/commands/playlist/update.test.ts b/tests/commands/playlist/update.test.ts
index 3b438ac79..d9c637db0 100644
--- a/tests/commands/playlist/update.test.ts
+++ b/tests/commands/playlist/update.test.ts
@@ -26,7 +26,7 @@ it('can format playlists', () => {
})
expect(stdout).toBe(
- `OUTPUT=closes #14151, closes #14140, closes #14139, closes #14110, closes #14179, closes #14178\n`
+ 'OUTPUT=closes #14151, closes #14140, closes #14139, closes #14110, closes #14179, closes #14178\n'
)
})
diff --git a/tests/commands/playlist/validate.test.ts b/tests/commands/playlist/validate.test.ts
index d0c6d1396..06ebc4cfe 100644
--- a/tests/commands/playlist/validate.test.ts
+++ b/tests/commands/playlist/validate.test.ts
@@ -10,11 +10,13 @@ it('show an error if channel name in the blocklist', () => {
)
console.log(stdout)
process.exit(1)
- } catch (error: any) {
+ } catch (error: unknown) {
+ // @ts-ignore
expect(error.status).toBe(1)
expect(
+ // @ts-ignore
error.stdout.includes(
- `us_blocked.m3u\n 2 error "Fox Sports 2 Asia (Thai)" is on the blocklist due to claims of copyright holders (https://github.com/iptv-org/iptv/issues/0000)\n\n1 problems (1 errors, 0 warnings)\n`
+ 'us_blocked.m3u\n 2 error "Fox Sports 2 Asia (Thai)" is on the blocklist due to claims of copyright holders (https://github.com/iptv-org/iptv/issues/0000)\n\n1 problems (1 errors, 0 warnings)\n'
)
).toBe(true)
}
@@ -30,7 +32,7 @@ it('show a warning if channel has wrong id', () => {
expect(
stdout.includes(
- `wrong_id.m3u\n 2 warning "qib22lAq1L.us" is not in the database\n\n1 problems (0 errors, 1 warnings)\n`
+ 'wrong_id.m3u\n 2 warning "qib22lAq1L.us" is not in the database\n\n1 problems (0 errors, 1 warnings)\n'
)
).toBe(true)
})
diff --git a/tests/commands/readme/update.test.ts b/tests/commands/readme/update.test.ts
index e703ff1b0..0ee6addf3 100644
--- a/tests/commands/readme/update.test.ts
+++ b/tests/commands/readme/update.test.ts
@@ -14,7 +14,7 @@ beforeEach(() => {
'tests/__data__/output/.readme/template.md'
)
- const stdout = execSync(
+ execSync(
'DATA_DIR=tests/__data__/input/data LOGS_DIR=tests/__data__/input/logs README_DIR=tests/__data__/output/.readme npm run readme:update',
{ encoding: 'utf8' }
)