1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
// Copyright 2017, Joe Tsai. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE.md file.
// +build ignore
package main
import (
"flag"
"io/ioutil"
"log"
"os"
"path/filepath"
"github.com/dsnet/golib/jsonfmt"
)
func main() {
minify := flag.Bool("minify", false, "produce minified output")
standardize := flag.Bool("standardize", false, "produce ECMA-404 compliant output")
flag.Parse()
var opts []jsonfmt.Option
if *minify {
opts = append(opts, jsonfmt.Minify())
}
if *standardize {
opts = append(opts, jsonfmt.Standardize())
}
if len(flag.Args()) > 0 {
for _, path := range flag.Args() {
in, err := ioutil.ReadFile(path)
if err != nil {
log.Fatalf("ioutil.ReadFile error: %v", err)
}
out, err := jsonfmt.Format(in, opts...)
if err != nil {
log.Fatalf("jsonfmt.Format error: %v", err)
}
if err := replaceFile(path, out); err != nil {
log.Fatalf("replaceFile error: %v", err)
}
}
} else {
in, err := ioutil.ReadAll(os.Stdin)
if err != nil {
log.Fatalf("ioutil.ReadAll error: %v", err)
}
out, err := jsonfmt.Format(in, opts...)
if err != nil {
log.Fatalf("jsonfmt.Format error: %v", err)
}
if _, err := os.Stdout.Write(out); err != nil {
log.Fatalf("os.Stdout.Write error: %v", err)
}
}
}
func replaceFile(path string, b []byte) error {
fi, err := os.Stat(path)
if err != nil {
return err
}
f, err := ioutil.TempFile(filepath.Dir(path), "tmp")
if err != nil {
return err
}
defer os.Remove(f.Name())
if err := f.Chmod(fi.Mode()); err != nil {
return err
}
if _, err := f.Write(b); err != nil {
return err
}
if err := f.Close(); err != nil {
return err
}
return os.Rename(f.Name(), path)
}
|