mirror of
https://github.com/comatory/fb2iCal
synced 2025-06-05 22:09:25 +02:00
add CLI interface made just for parsing
This commit is contained in:
52
lib/cli.js
Executable file
52
lib/cli.js
Executable file
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const parseUsingLDJSONData = require('./services/ldjson-parser')
|
||||
const parseUsingDOM = require('./services/dom-parser')
|
||||
const { createParserError, createAppLogger } = require('./utils')
|
||||
|
||||
const parseHTMLString = (html, { verbose }) => {
|
||||
const dev = process.env.NODE_ENV === 'development'
|
||||
const logger = createAppLogger({ dev })
|
||||
|
||||
if (!verbose) {
|
||||
logger.transports.forEach((transport) => (transport.silent = true))
|
||||
}
|
||||
|
||||
try {
|
||||
const LDJSONEventData = parseUsingLDJSONData(html, { logger })
|
||||
// TODO: adding empty string for URL argument since we don't know original
|
||||
// URL of document
|
||||
const eventData = LDJSONEventData || parseUsingDOM(html, '', { logger })
|
||||
|
||||
if (!eventData) {
|
||||
throw createParserError()
|
||||
return
|
||||
}
|
||||
|
||||
process.stdout.write(JSON.stringify(eventData))
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
process.stderr.write(err.toString())
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
const argv = require('yargs')
|
||||
.command('$0 <html> [options]', 'Parse Facebook event HTML page into JSON data.', (yargs) => {
|
||||
yargs.positional('html', {
|
||||
describe: 'valid HTML string',
|
||||
type: 'string',
|
||||
})
|
||||
}, (argv) => {
|
||||
const { html, verbose } = argv
|
||||
parseHTMLString(html, { verbose })
|
||||
})
|
||||
.option('verbose', {
|
||||
alias: 'v',
|
||||
description: 'Add logging to output.',
|
||||
type: 'boolean',
|
||||
})
|
||||
.alias('h', 'help')
|
||||
.help('h')
|
||||
.argv
|
||||
|
Reference in New Issue
Block a user