Skip to content

Commit d3de637

Browse files
authored
fix: handle comments in import map jsonc (#3035)
* fix: handle comments in import map jsonc * fix: handle comments in vscode settings * fix: use decoder to handle empty data
1 parent 76272d3 commit d3de637

File tree

4 files changed

+12
-7
lines changed

4 files changed

+12
-7
lines changed

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ require (
4545
github.com/spf13/viper v1.19.0
4646
github.com/stretchr/testify v1.10.0
4747
github.com/stripe/pg-schema-diff v0.8.0
48+
github.com/tidwall/jsonc v0.3.2
4849
github.com/withfig/autocomplete-tools/packages/cobra v1.2.0
4950
github.com/zalando/go-keyring v0.2.6
5051
go.opentelemetry.io/otel v1.33.0

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -946,6 +946,8 @@ github.com/tetafro/godot v1.4.20 h1:z/p8Ek55UdNvzt4TFn2zx2KscpW4rWqcnUrdmvWJj7E=
946946
github.com/tetafro/godot v1.4.20/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio=
947947
github.com/theupdateframework/notary v0.7.0 h1:QyagRZ7wlSpjT5N2qQAh/pN+DVqgekv4DzbAiAiEL3c=
948948
github.com/theupdateframework/notary v0.7.0/go.mod h1:c9DRxcmhHmVLDay4/2fUYdISnHqbFDGRSlXPO0AhYWw=
949+
github.com/tidwall/jsonc v0.3.2 h1:ZTKrmejRlAJYdn0kcaFqRAKlxxFIC21pYq8vLa4p2Wc=
950+
github.com/tidwall/jsonc v0.3.2/go.mod h1:dw+3CIxqHi+t8eFSpzzMlcVYxKp08UP5CD8/uSFCyJE=
949951
github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3 h1:y4mJRFlM6fUyPhoXuFg/Yu02fg/nIPFMOY8tOqppoFg=
950952
github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3/go.mod h1:mkjARE7Yr8qU23YcGMSALbIxTQ9r9QBVahQOBRfU460=
951953
github.com/timonwong/loggercheck v0.10.1 h1:uVZYClxQFpw55eh+PIoqM7uAOHMrhVcDoWDery9R8Lg=

internal/init/init.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package init
22

33
import (
4+
"bytes"
45
"context"
56
_ "embed"
67
"encoding/json"
@@ -12,6 +13,7 @@ import (
1213
"github.com/go-errors/errors"
1314
"github.com/spf13/afero"
1415
"github.com/supabase/cli/internal/utils"
16+
"github.com/tidwall/jsonc"
1517
)
1618

1719
var (
@@ -100,15 +102,14 @@ func updateGitIgnore(ignorePath string, fsys afero.Fs) error {
100102
type VSCodeSettings map[string]interface{}
101103

102104
func loadUserSettings(path string, fsys afero.Fs) (VSCodeSettings, error) {
103-
// Open our jsonFile
104-
jsonFile, err := fsys.Open(path)
105+
data, err := afero.ReadFile(fsys, path)
105106
if err != nil {
106107
return nil, errors.Errorf("failed to load settings file: %w", err)
107108
}
108-
defer jsonFile.Close()
109+
data = jsonc.ToJSONInPlace(data)
109110
// Parse and unmarshal JSON file.
110111
var userSettings VSCodeSettings
111-
dec := json.NewDecoder(jsonFile)
112+
dec := json.NewDecoder(bytes.NewReader(data))
112113
if err := dec.Decode(&userSettings); err != nil {
113114
return nil, errors.Errorf("failed to parse settings: %w", err)
114115
}

internal/utils/deno.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919

2020
"github.com/go-errors/errors"
2121
"github.com/spf13/afero"
22+
"github.com/tidwall/jsonc"
2223
)
2324

2425
var (
@@ -215,13 +216,13 @@ type ImportMap struct {
215216
}
216217

217218
func NewImportMap(absJsonPath string, fsys afero.Fs) (*ImportMap, error) {
218-
contents, err := fsys.Open(absJsonPath)
219+
data, err := afero.ReadFile(fsys, absJsonPath)
219220
if err != nil {
220221
return nil, errors.Errorf("failed to load import map: %w", err)
221222
}
222-
defer contents.Close()
223+
data = jsonc.ToJSONInPlace(data)
223224
result := ImportMap{}
224-
decoder := json.NewDecoder(contents)
225+
decoder := json.NewDecoder(bytes.NewReader(data))
225226
if err := decoder.Decode(&result); err != nil {
226227
return nil, errors.Errorf("failed to parse import map: %w", err)
227228
}

0 commit comments

Comments
 (0)