@@ -64,7 +64,8 @@ func queryErrorPosition(v error) int {
6464}
6565
6666func Run (env Env ) error {
67- query := ""
67+ query := "serve"
68+ hasQueryArg := false
6869
6970 if len (env .Args ) >= 2 && env .Args [1 ] == "--version" {
7071 fmt .Fprintf (env .Stdout , "%s\n " , env .Version )
@@ -81,6 +82,7 @@ Usage: %s [OPTIONS]
8182 return nil
8283 } else if len (env .Args ) >= 3 && env .Args [1 ] == "--query" {
8384 query = env .Args [2 ]
85+ hasQueryArg = true
8486 }
8587
8688 i := & interp {
@@ -89,19 +91,16 @@ Usage: %s [OPTIONS]
8991
9092 var state interface {}
9193
92- // TODO: currently the main serve loop is done in go until
93- // https://github.com/itchyny/gojq/issues/86 has been resolved
94- // TODO: could probably reuse *gojq.Code instance
94+ gc , err := i .Compile (query )
95+ if err != nil {
96+ return err
97+ }
98+
9599 for {
96- s := "serve"
97- if query != "" {
98- s = query
99- }
100+ // TODO: currently the main serve loop is done in go until
101+ // https://github.com/itchyny/gojq/issues/86 has been resolved
102+ iter := gc .RunWithContext (context .Background (), state )
100103
101- iter , err := i .Eval (s , state )
102- if err != nil {
103- return err
104- }
105104 for {
106105 v , ok := iter .Next ()
107106 if ! ok {
@@ -120,7 +119,7 @@ Usage: %s [OPTIONS]
120119 case [2 ]interface {}:
121120 fmt .Fprintln (env .Stderr , v [:]... )
122121 default :
123- if query != "" {
122+ if hasQueryArg {
124123 jd := json .NewEncoder (env .Stdout )
125124 jd .SetIndent ("" , " " )
126125 jd .Encode (v )
@@ -130,13 +129,13 @@ Usage: %s [OPTIONS]
130129 }
131130 }
132131
133- if query != "" {
132+ if hasQueryArg {
134133 return nil
135134 }
136135 }
137136}
138137
139- func (i * interp ) Eval (src string , c interface {} ) (gojq.Iter , error ) {
138+ func (i * interp ) Compile (src string ) (* gojq.Code , error ) {
140139 gq , err := gojq .Parse (src )
141140 if err != nil {
142141 return nil , err
@@ -183,7 +182,7 @@ func (i *interp) Eval(src string, c interface{}) (gojq.Iter, error) {
183182 return nil , err
184183 }
185184
186- return gc . RunWithContext ( context . Background (), c ) , nil
185+ return gc , nil
187186}
188187
189188func (i * interp ) readFile (c interface {}, a []interface {}) interface {} {
0 commit comments