1 | #!/usr/bin/env node
|
2 | import fs from 'node:fs'
|
3 | import path from 'node:path'
|
4 | import readline from 'node:readline'
|
5 | import { flatten } from './index.js'
|
6 |
|
7 | const filepath = process.argv.slice(2)[0]
|
8 | if (filepath) {
|
9 |
|
10 | const file = path.resolve(process.cwd(), filepath)
|
11 | fs.accessSync(file, fs.constants.R_OK)
|
12 | out(JSON.parse(fs.readFileSync(file)))
|
13 | } else if (process.stdin.isTTY) {
|
14 | usage(0)
|
15 | } else {
|
16 |
|
17 | const lines = []
|
18 | readline.createInterface({
|
19 | input: process.stdin,
|
20 | output: process.stdout,
|
21 | terminal: false
|
22 | })
|
23 | .on('line', line => lines.push(line))
|
24 | .on('close', () => out(JSON.parse(lines.join('\n'))))
|
25 | }
|
26 |
|
27 | function out (data) {
|
28 | process.stdout.write(JSON.stringify(flatten(data), null, 2))
|
29 | }
|
30 |
|
31 | function usage (code) {
|
32 | console.log(`
|
33 | Usage:
|
34 |
|
35 | flat foo.json
|
36 | cat foo.json | flat
|
37 | `)
|
38 |
|
39 | process.exit(code || 0)
|
40 | }
|