summaryrefslogtreecommitdiffhomepage
path: root/packages/sdk/go/internal
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-10-07 15:51:59 -0400
committerDax Raad <[email protected]>2025-10-07 15:51:59 -0400
commitdca3a5d80d9d22400b48c217098a632d72bf2122 (patch)
treeed3ac2f4c601290008a9dc8cffbca563b89a1770 /packages/sdk/go/internal
parent508067ba5da9afa82bff401dd8478be2145d61a4 (diff)
downloadopencode-dca3a5d80d9d22400b48c217098a632d72bf2122.tar.gz
opencode-dca3a5d80d9d22400b48c217098a632d72bf2122.zip
fix issue with blank new version popup
Diffstat (limited to 'packages/sdk/go/internal')
-rw-r--r--packages/sdk/go/internal/apijson/decoder.go2
-rw-r--r--packages/sdk/go/internal/apijson/encoder.go14
-rw-r--r--packages/sdk/go/internal/apijson/json_test.go2
-rw-r--r--packages/sdk/go/internal/version.go2
4 files changed, 10 insertions, 10 deletions
diff --git a/packages/sdk/go/internal/apijson/decoder.go b/packages/sdk/go/internal/apijson/decoder.go
index 68b7ed6be..bf01bf6b4 100644
--- a/packages/sdk/go/internal/apijson/decoder.go
+++ b/packages/sdk/go/internal/apijson/decoder.go
@@ -224,7 +224,7 @@ func (d *decoderBuilder) newUnionDecoder(t reflect.Type) decoderFunc {
}
if len(unionEntry.discriminatorKey) != 0 {
- discriminatorValue := n.Get(unionEntry.discriminatorKey).Value()
+ discriminatorValue := n.Get(EscapeSJSONKey(unionEntry.discriminatorKey)).Value()
if discriminatorValue == variant.DiscriminatorValue {
inner := reflect.New(variant.Type).Elem()
err := decoder(n, inner, state)
diff --git a/packages/sdk/go/internal/apijson/encoder.go b/packages/sdk/go/internal/apijson/encoder.go
index 0e5f89e17..66b319b66 100644
--- a/packages/sdk/go/internal/apijson/encoder.go
+++ b/packages/sdk/go/internal/apijson/encoder.go
@@ -18,6 +18,10 @@ import (
var encoders sync.Map // map[encoderEntry]encoderFunc
+// If we want to set a literal key value into JSON using sjson, we need to make sure it doesn't have
+// special characters that sjson interprets as a path.
+var EscapeSJSONKey = strings.NewReplacer("\\", "\\\\", "|", "\\|", "#", "\\#", "@", "\\@", "*", "\\*", ".", "\\.", ":", "\\:", "?", "\\?").Replace
+
func Marshal(value interface{}) ([]byte, error) {
e := &encoder{dateFormat: time.RFC3339}
return e.marshal(value)
@@ -276,7 +280,7 @@ func (e *encoder) newStructTypeEncoder(t reflect.Type) encoderFunc {
if encoded == nil {
continue
}
- json, err = sjson.SetRawBytes(json, ef.tag.name, encoded)
+ json, err = sjson.SetRawBytes(json, EscapeSJSONKey(ef.tag.name), encoded)
if err != nil {
return nil, err
}
@@ -354,7 +358,7 @@ func (e *encoder) encodeMapEntries(json []byte, v reflect.Value) ([]byte, error)
}
encodedKeyString = string(encodedKeyBytes)
}
- encodedKey := []byte(sjsonReplacer.Replace(encodedKeyString))
+ encodedKey := []byte(encodedKeyString)
pairs = append(pairs, mapPair{key: encodedKey, value: iter.Value()})
}
@@ -372,7 +376,7 @@ func (e *encoder) encodeMapEntries(json []byte, v reflect.Value) ([]byte, error)
if len(encodedValue) == 0 {
continue
}
- json, err = sjson.SetRawBytes(json, string(p.key), encodedValue)
+ json, err = sjson.SetRawBytes(json, EscapeSJSONKey(string(p.key)), encodedValue)
if err != nil {
return nil, err
}
@@ -392,7 +396,3 @@ func (e *encoder) newMapEncoder(t reflect.Type) encoderFunc {
return json, nil
}
}
-
-// If we want to set a literal key value into JSON using sjson, we need to make sure it doesn't have
-// special characters that sjson interprets as a path.
-var sjsonReplacer *strings.Replacer = strings.NewReplacer(".", "\\.", ":", "\\:", "*", "\\*")
diff --git a/packages/sdk/go/internal/apijson/json_test.go b/packages/sdk/go/internal/apijson/json_test.go
index e6563448f..d4c628359 100644
--- a/packages/sdk/go/internal/apijson/json_test.go
+++ b/packages/sdk/go/internal/apijson/json_test.go
@@ -362,7 +362,7 @@ var tests = map[string]struct {
"date_time_nano_missing_t_coerce": {`"2007-03-01 13:03:05.123456789Z"`, time.Date(2007, time.March, 1, 13, 3, 5, 123456789, time.UTC)},
"map_string": {`{"foo":"bar"}`, map[string]string{"foo": "bar"}},
- "map_string_with_sjson_path_chars": {`{":a.b.c*:d*-1e.f":"bar"}`, map[string]string{":a.b.c*:d*-1e.f": "bar"}},
+ "map_string_with_sjson_path_chars": {`{":a.b.c*:d*-1e.f@g?h":"bar"}`, map[string]string{":a.b.c*:d*-1e.f@g?h": "bar"}},
"map_interface": {`{"a":1,"b":"str","c":false}`, map[string]interface{}{"a": float64(1), "b": "str", "c": false}},
"primitive_struct": {
diff --git a/packages/sdk/go/internal/version.go b/packages/sdk/go/internal/version.go
index 1f338c33e..93a271b9e 100644
--- a/packages/sdk/go/internal/version.go
+++ b/packages/sdk/go/internal/version.go
@@ -2,4 +2,4 @@
package internal
-const PackageVersion = "0.15.0" // x-release-please-version
+const PackageVersion = "0.16.2" // x-release-please-version