mirror of
https://github.com/iptv-org/api.git
synced 2025-05-12 10:00:07 -04:00
Create csv.js
This commit is contained in:
parent
d67137fb9f
commit
4ef0c4f57d
1 changed files with 62 additions and 0 deletions
62
scripts/core/csv.js
Normal file
62
scripts/core/csv.js
Normal file
|
@ -0,0 +1,62 @@
|
|||
const csv2json = require('csvtojson')
|
||||
const fs = require('mz/fs')
|
||||
const {
|
||||
Parser,
|
||||
transforms: { flatten },
|
||||
formatters: { stringQuoteOnlyIfNecessary }
|
||||
} = require('json2csv')
|
||||
|
||||
const csv2jsonOptions = {
|
||||
checkColumn: true,
|
||||
trim: true,
|
||||
colParser: {
|
||||
countries: listParser,
|
||||
languages: listParser,
|
||||
categories: listParser,
|
||||
broadcast_area: listParser,
|
||||
is_nsfw: boolParser,
|
||||
logo: nullable
|
||||
}
|
||||
}
|
||||
|
||||
const json2csv = new Parser({
|
||||
transforms: [flattenArray],
|
||||
formatters: {
|
||||
string: stringQuoteOnlyIfNecessary()
|
||||
}
|
||||
})
|
||||
|
||||
const csv = {}
|
||||
|
||||
csv.load = async function (filepath) {
|
||||
return csv2json(csv2jsonOptions).fromFile(filepath)
|
||||
}
|
||||
|
||||
csv.save = async function (filepath, data) {
|
||||
const string = json2csv.parse(data)
|
||||
|
||||
return fs.writeFile(filepath, string)
|
||||
}
|
||||
|
||||
module.exports = csv
|
||||
|
||||
function flattenArray(item) {
|
||||
for (let prop in item) {
|
||||
const value = item[prop]
|
||||
item[prop] = Array.isArray(value) ? value.join(';') : value
|
||||
}
|
||||
|
||||
return item
|
||||
}
|
||||
|
||||
function listParser(value) {
|
||||
return value.split(';').filter(i => i)
|
||||
}
|
||||
|
||||
function boolParser(value) {
|
||||
return value === 'true'
|
||||
}
|
||||
|
||||
function nullable(value) {
|
||||
return value === '' ? null : value
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue