goscript 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cmd/goscript/cmd-test.go +104 -11
- package/cmd/goscript/cmd-test_test.go +1 -1
- package/cmd/goscript/cmd_compile.go +9 -0
- package/compiler/compile-request.go +31 -0
- package/compiler/compiler.go +1 -1
- package/compiler/compliance_test.go +0 -2
- package/compiler/config.go +2 -0
- package/compiler/gotest/package-result.go +2 -0
- package/compiler/gotest/request.go +85 -20
- package/compiler/gotest/runner.go +733 -96
- package/compiler/gotest/runner_test.go +647 -3
- package/compiler/lowered-program.go +9 -2
- package/compiler/lowering.go +2001 -345
- package/compiler/override-facts.go +77 -27
- package/compiler/override-registry.go +5 -4
- package/compiler/override-registry_test.go +135 -0
- package/compiler/package-graph_test.go +62 -7
- package/compiler/package-test-graph-variant.go +40 -16
- package/compiler/package-test-graph.go +0 -5
- package/compiler/package-test-graph_test.go +61 -3
- package/compiler/runtime-contract.go +40 -0
- package/compiler/semantic-model-types.go +16 -0
- package/compiler/semantic-model.go +336 -91
- package/compiler/semantic-model_test.go +50 -1
- package/compiler/service.go +9 -3
- package/compiler/skeleton_test.go +1921 -298
- package/compiler/tsworkspace/owner-process-unix_test.go +72 -0
- package/compiler/tsworkspace/owner.go +8 -0
- package/compiler/tsworkspace/tool-process-other.go +14 -0
- package/compiler/tsworkspace/tool-process-unix.go +19 -0
- package/compiler/typescript-emitter.go +122 -9
- package/dist/gs/builtin/builtin.d.ts +20 -1
- package/dist/gs/builtin/builtin.js +246 -26
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/channel.d.ts +24 -10
- package/dist/gs/builtin/channel.js +107 -25
- package/dist/gs/builtin/channel.js.map +1 -1
- package/dist/gs/builtin/defer.d.ts +1 -0
- package/dist/gs/builtin/defer.js +12 -2
- package/dist/gs/builtin/defer.js.map +1 -1
- package/dist/gs/builtin/hostio.d.ts +9 -0
- package/dist/gs/builtin/hostio.js +25 -0
- package/dist/gs/builtin/hostio.js.map +1 -1
- package/dist/gs/builtin/map.js +40 -6
- package/dist/gs/builtin/map.js.map +1 -1
- package/dist/gs/builtin/print.js.map +1 -1
- package/dist/gs/builtin/slice.d.ts +43 -9
- package/dist/gs/builtin/slice.js +437 -234
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/builtin/type.d.ts +2 -0
- package/dist/gs/builtin/type.js +47 -7
- package/dist/gs/builtin/type.js.map +1 -1
- package/dist/gs/builtin/varRef.d.ts +2 -0
- package/dist/gs/builtin/varRef.js.map +1 -1
- package/dist/gs/bytes/buffer.gs.js +28 -28
- package/dist/gs/bytes/buffer.gs.js.map +1 -1
- package/dist/gs/bytes/iter.gs.js +13 -13
- package/dist/gs/bytes/iter.gs.js.map +1 -1
- package/dist/gs/compress/zlib/index.d.ts +26 -0
- package/dist/gs/compress/zlib/index.js +168 -0
- package/dist/gs/compress/zlib/index.js.map +1 -0
- package/dist/gs/context/context.d.ts +1 -1
- package/dist/gs/context/context.js +8 -3
- package/dist/gs/context/context.js.map +1 -1
- package/dist/gs/crypto/ecdh/index.d.ts +52 -0
- package/dist/gs/crypto/ecdh/index.js +226 -0
- package/dist/gs/crypto/ecdh/index.js.map +1 -0
- package/dist/gs/crypto/ed25519/index.d.ts +34 -0
- package/dist/gs/crypto/ed25519/index.js +160 -0
- package/dist/gs/crypto/ed25519/index.js.map +1 -0
- package/dist/gs/crypto/internal/constanttime/index.d.ts +4 -0
- package/dist/gs/crypto/internal/constanttime/index.js +18 -0
- package/dist/gs/crypto/internal/constanttime/index.js.map +1 -0
- package/dist/gs/crypto/rand/index.d.ts +2 -0
- package/dist/gs/crypto/rand/index.js +85 -0
- package/dist/gs/crypto/rand/index.js.map +1 -1
- package/dist/gs/crypto/sha256/index.d.ts +8 -0
- package/dist/gs/crypto/sha256/index.js +118 -0
- package/dist/gs/crypto/sha256/index.js.map +1 -0
- package/dist/gs/crypto/sha512/index.d.ts +14 -0
- package/dist/gs/crypto/sha512/index.js +129 -0
- package/dist/gs/crypto/sha512/index.js.map +1 -0
- package/dist/gs/encoding/json/index.d.ts +3 -0
- package/dist/gs/encoding/json/index.js +15 -0
- package/dist/gs/encoding/json/index.js.map +1 -1
- package/dist/gs/errors/errors.js +29 -6
- package/dist/gs/errors/errors.js.map +1 -1
- package/dist/gs/fmt/fmt.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +7 -7
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +52 -18
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +56 -20
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +57 -3
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +366 -1
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/util/conc/index.d.ts +20 -0
- package/dist/gs/github.com/aperturerobotics/util/conc/index.js +134 -0
- package/dist/gs/github.com/aperturerobotics/util/conc/index.js.map +1 -0
- package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
- package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.d.ts +3 -0
- package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js +50 -0
- package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js.map +1 -0
- package/dist/gs/github.com/klauspost/compress/internal/le/index.js +3 -2
- package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -1
- package/dist/gs/github.com/mr-tron/base58/base58/index.d.ts +27 -0
- package/dist/gs/github.com/mr-tron/base58/base58/index.js +172 -0
- package/dist/gs/github.com/mr-tron/base58/base58/index.js.map +1 -0
- package/dist/gs/github.com/zeebo/blake3/internal/consts/index.d.ts +21 -0
- package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js +22 -0
- package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js.map +1 -0
- package/dist/gs/go/token/index.js +11 -4
- package/dist/gs/go/token/index.js.map +1 -1
- package/dist/gs/hash/fnv/index.d.ts +57 -0
- package/dist/gs/hash/fnv/index.js +299 -0
- package/dist/gs/hash/fnv/index.js.map +1 -0
- package/dist/gs/hash/index.d.ts +17 -0
- package/dist/gs/hash/index.js +94 -0
- package/dist/gs/hash/index.js.map +1 -0
- package/dist/gs/io/fs/readlink.js +2 -6
- package/dist/gs/io/fs/readlink.js.map +1 -1
- package/dist/gs/io/fs/walk.js.map +1 -1
- package/dist/gs/io/io.js.map +1 -1
- package/dist/gs/iter/iter.d.ts +3 -2
- package/dist/gs/iter/iter.js.map +1 -1
- package/dist/gs/maps/iter.d.ts +5 -5
- package/dist/gs/maps/iter.js +48 -21
- package/dist/gs/maps/iter.js.map +1 -1
- package/dist/gs/maps/maps.d.ts +6 -6
- package/dist/gs/math/bits/index.js +14 -24
- package/dist/gs/math/bits/index.js.map +1 -1
- package/dist/gs/mime/index.js +3 -1
- package/dist/gs/mime/index.js.map +1 -1
- package/dist/gs/net/http/httptest/index.d.ts +20 -1
- package/dist/gs/net/http/httptest/index.js +83 -3
- package/dist/gs/net/http/httptest/index.js.map +1 -1
- package/dist/gs/net/http/index.d.ts +110 -6
- package/dist/gs/net/http/index.js +262 -16
- package/dist/gs/net/http/index.js.map +1 -1
- package/dist/gs/net/http/pprof/index.d.ts +8 -0
- package/dist/gs/net/http/pprof/index.js +59 -0
- package/dist/gs/net/http/pprof/index.js.map +1 -0
- package/dist/gs/os/error.gs.js +9 -7
- package/dist/gs/os/error.gs.js.map +1 -1
- package/dist/gs/os/types_js.gs.js +95 -15
- package/dist/gs/os/types_js.gs.js.map +1 -1
- package/dist/gs/path/filepath/match.js.map +1 -1
- package/dist/gs/path/filepath/path.d.ts +5 -3
- package/dist/gs/path/filepath/path.js +65 -10
- package/dist/gs/path/filepath/path.js.map +1 -1
- package/dist/gs/reflect/index.d.ts +3 -2
- package/dist/gs/reflect/index.js +2 -1
- package/dist/gs/reflect/index.js.map +1 -1
- package/dist/gs/reflect/iter.js +2 -2
- package/dist/gs/reflect/iter.js.map +1 -1
- package/dist/gs/reflect/map.js +26 -0
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +24 -5
- package/dist/gs/reflect/type.js +390 -38
- package/dist/gs/reflect/type.js.map +1 -1
- package/dist/gs/reflect/types.d.ts +1 -0
- package/dist/gs/reflect/types.js +3 -1
- package/dist/gs/reflect/types.js.map +1 -1
- package/dist/gs/reflect/value.d.ts +4 -1
- package/dist/gs/reflect/value.js +39 -1
- package/dist/gs/reflect/value.js.map +1 -1
- package/dist/gs/reflect/visiblefields.js +1 -1
- package/dist/gs/reflect/visiblefields.js.map +1 -1
- package/dist/gs/runtime/debug/index.d.ts +39 -0
- package/dist/gs/runtime/debug/index.js +58 -0
- package/dist/gs/runtime/debug/index.js.map +1 -1
- package/dist/gs/runtime/pprof/index.d.ts +20 -0
- package/dist/gs/runtime/pprof/index.js +85 -0
- package/dist/gs/runtime/pprof/index.js.map +1 -0
- package/dist/gs/runtime/trace/index.d.ts +19 -0
- package/dist/gs/runtime/trace/index.js +64 -0
- package/dist/gs/runtime/trace/index.js.map +1 -0
- package/dist/gs/slices/slices.d.ts +24 -9
- package/dist/gs/slices/slices.js +229 -24
- package/dist/gs/slices/slices.js.map +1 -1
- package/dist/gs/sort/slice.gs.d.ts +5 -3
- package/dist/gs/sort/slice.gs.js +55 -17
- package/dist/gs/sort/slice.gs.js.map +1 -1
- package/dist/gs/strings/builder.js +26 -17
- package/dist/gs/strings/builder.js.map +1 -1
- package/dist/gs/strings/iter.js +140 -75
- package/dist/gs/strings/iter.js.map +1 -1
- package/dist/gs/strings/replace.js +2 -2
- package/dist/gs/strings/replace.js.map +1 -1
- package/dist/gs/strings/strings.js +52 -6
- package/dist/gs/strings/strings.js.map +1 -1
- package/dist/gs/sync/sync.d.ts +6 -3
- package/dist/gs/sync/sync.js +39 -11
- package/dist/gs/sync/sync.js.map +1 -1
- package/dist/gs/syscall/errors.d.ts +116 -112
- package/dist/gs/syscall/errors.js +38 -1
- package/dist/gs/syscall/errors.js.map +1 -1
- package/dist/gs/syscall/fs.d.ts +2 -8
- package/dist/gs/syscall/fs.js.map +1 -1
- package/dist/gs/syscall/js/index.js +20 -12
- package/dist/gs/syscall/js/index.js.map +1 -1
- package/dist/gs/syscall/types.d.ts +4 -1
- package/dist/gs/syscall/types.js.map +1 -1
- package/dist/gs/testing/testing.d.ts +4 -3
- package/dist/gs/testing/testing.js +21 -4
- package/dist/gs/testing/testing.js.map +1 -1
- package/dist/gs/time/time.js +22 -0
- package/dist/gs/time/time.js.map +1 -1
- package/dist/gs/unicode/unicode.js.map +1 -1
- package/dist/gs/unique/index.js +7 -2
- package/dist/gs/unique/index.js.map +1 -1
- package/go.mod +8 -8
- package/go.sum +14 -23
- package/gs/builtin/builtin.ts +364 -37
- package/gs/builtin/channel.ts +161 -29
- package/gs/builtin/defer.ts +13 -2
- package/gs/builtin/hostio.test.ts +1 -0
- package/gs/builtin/hostio.ts +38 -0
- package/gs/builtin/map.ts +46 -6
- package/gs/builtin/print.ts +12 -3
- package/gs/builtin/runtime-contract.test.ts +257 -10
- package/gs/builtin/slice.test.ts +70 -0
- package/gs/builtin/slice.ts +566 -255
- package/gs/builtin/type.ts +53 -9
- package/gs/builtin/varRef.ts +2 -0
- package/gs/bytes/buffer.gs.ts +28 -28
- package/gs/bytes/iter.gs.ts +13 -14
- package/gs/compress/zlib/index.test.ts +28 -0
- package/gs/compress/zlib/index.ts +200 -0
- package/gs/compress/zlib/meta.json +3 -0
- package/gs/context/context.test.ts +31 -1
- package/gs/context/context.ts +9 -4
- package/gs/crypto/ecdh/index.test.ts +43 -0
- package/gs/crypto/ecdh/index.ts +274 -0
- package/gs/crypto/ed25519/index.test.ts +41 -0
- package/gs/crypto/ed25519/index.ts +238 -0
- package/gs/crypto/ed25519/meta.json +13 -0
- package/gs/crypto/internal/constanttime/index.test.ts +25 -0
- package/gs/crypto/internal/constanttime/index.ts +22 -0
- package/gs/crypto/rand/index.test.ts +89 -1
- package/gs/crypto/rand/index.ts +103 -1
- package/gs/crypto/rand/meta.json +4 -1
- package/gs/crypto/sha256/index.test.ts +78 -0
- package/gs/crypto/sha256/index.ts +150 -0
- package/gs/crypto/sha256/meta.json +9 -0
- package/gs/crypto/sha512/index.test.ts +31 -0
- package/gs/crypto/sha512/index.ts +161 -0
- package/gs/crypto/sha512/meta.json +11 -0
- package/gs/encoding/json/index.test.ts +25 -3
- package/gs/encoding/json/index.ts +21 -3
- package/gs/errors/errors.test.ts +4 -1
- package/gs/errors/errors.ts +32 -8
- package/gs/fmt/fmt.test.ts +3 -1
- package/gs/fmt/fmt.ts +1 -5
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +62 -7
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +78 -36
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +32 -11
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +122 -43
- package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +31 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +518 -4
- package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +6 -0
- package/gs/github.com/aperturerobotics/util/conc/index.test.ts +30 -0
- package/gs/github.com/aperturerobotics/util/conc/index.ts +172 -0
- package/gs/github.com/aperturerobotics/util/conc/meta.json +9 -0
- package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.ts +1 -4
- package/gs/github.com/hack-pad/safejs/internal/catch/index.test.ts +35 -0
- package/gs/github.com/hack-pad/safejs/internal/catch/index.ts +65 -0
- package/gs/github.com/hack-pad/safejs/internal/catch/meta.json +9 -0
- package/gs/github.com/klauspost/compress/internal/le/index.test.ts +2 -1
- package/gs/github.com/klauspost/compress/internal/le/index.ts +6 -5
- package/gs/github.com/mr-tron/base58/base58/index.test.ts +70 -0
- package/gs/github.com/mr-tron/base58/base58/index.ts +231 -0
- package/gs/github.com/mr-tron/base58/base58/meta.json +3 -0
- package/gs/github.com/zeebo/blake3/internal/consts/index.test.ts +46 -0
- package/gs/github.com/zeebo/blake3/internal/consts/index.ts +26 -0
- package/gs/go/token/index.ts +17 -4
- package/gs/hash/fnv/index.test.ts +67 -0
- package/gs/hash/fnv/index.ts +351 -0
- package/gs/hash/fnv/meta.json +3 -0
- package/gs/hash/index.test.ts +37 -0
- package/gs/hash/index.ts +118 -0
- package/gs/hash/meta.json +5 -0
- package/gs/internal/byteorder/index.test.ts +6 -6
- package/gs/io/fs/readlink.ts +40 -48
- package/gs/io/fs/walk.ts +10 -2
- package/gs/io/io.ts +4 -1
- package/gs/iter/iter.ts +8 -2
- package/gs/maps/iter.ts +69 -26
- package/gs/maps/maps.test.ts +23 -0
- package/gs/maps/maps.ts +6 -6
- package/gs/math/bits/index.test.ts +20 -0
- package/gs/math/bits/index.ts +15 -28
- package/gs/mime/index.ts +8 -2
- package/gs/net/http/httptest/index.test.ts +53 -0
- package/gs/net/http/httptest/index.ts +98 -3
- package/gs/net/http/index.test.ts +129 -1
- package/gs/net/http/index.ts +370 -19
- package/gs/net/http/meta.json +6 -0
- package/gs/net/http/pprof/index.test.ts +47 -0
- package/gs/net/http/pprof/index.ts +65 -0
- package/gs/os/error.gs.ts +9 -10
- package/gs/os/error.test.ts +41 -0
- package/gs/os/file_unix_js.test.ts +55 -0
- package/gs/os/tempfile.gs.test.ts +37 -10
- package/gs/os/types_js.gs.ts +94 -15
- package/gs/path/filepath/match.ts +4 -1
- package/gs/path/filepath/meta.json +6 -0
- package/gs/path/filepath/path.test.ts +57 -2
- package/gs/path/filepath/path.ts +91 -12
- package/gs/reflect/field.test.ts +63 -0
- package/gs/reflect/index.ts +4 -1
- package/gs/reflect/iter.ts +2 -2
- package/gs/reflect/map.test.ts +24 -2
- package/gs/reflect/map.ts +35 -0
- package/gs/reflect/type.ts +543 -60
- package/gs/reflect/typefor.test.ts +100 -0
- package/gs/reflect/types.ts +3 -1
- package/gs/reflect/value.ts +50 -1
- package/gs/reflect/visiblefields.ts +1 -1
- package/gs/runtime/debug/index.test.ts +22 -1
- package/gs/runtime/debug/index.ts +88 -0
- package/gs/runtime/pprof/index.test.ts +36 -0
- package/gs/runtime/pprof/index.ts +104 -0
- package/gs/runtime/pprof/meta.json +6 -0
- package/gs/runtime/trace/index.test.ts +45 -0
- package/gs/runtime/trace/index.ts +97 -0
- package/gs/runtime/trace/meta.json +7 -0
- package/gs/slices/meta.json +2 -1
- package/gs/slices/slices.test.ts +86 -0
- package/gs/slices/slices.ts +284 -37
- package/gs/sort/slice.gs.ts +73 -23
- package/gs/sort/slice.test.ts +40 -0
- package/gs/strings/builder.test.ts +8 -0
- package/gs/strings/builder.ts +29 -17
- package/gs/strings/iter.test.ts +5 -7
- package/gs/strings/iter.ts +146 -71
- package/gs/strings/replace.test.ts +1 -4
- package/gs/strings/replace.ts +6 -6
- package/gs/strings/strings.test.ts +4 -0
- package/gs/strings/strings.ts +54 -6
- package/gs/sync/sync.test.ts +57 -1
- package/gs/sync/sync.ts +45 -13
- package/gs/syscall/errors.ts +158 -115
- package/gs/syscall/fs.ts +8 -8
- package/gs/syscall/js/index.ts +49 -22
- package/gs/syscall/net.test.ts +26 -0
- package/gs/syscall/types.ts +7 -2
- package/gs/testing/testing.test.ts +56 -0
- package/gs/testing/testing.ts +27 -10
- package/gs/time/meta.json +2 -2
- package/gs/time/time.test.ts +4 -0
- package/gs/time/time.ts +33 -2
- package/gs/unicode/unicode.test.ts +14 -3
- package/gs/unicode/unicode.ts +1 -5
- package/gs/unique/index.ts +9 -2
- package/package.json +3 -3
package/gs/builtin/builtin.ts
CHANGED
|
@@ -21,12 +21,41 @@ export function println(...args: any[]): void {
|
|
|
21
21
|
writeHostStdoutText(message)
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
export class GoPanic extends Error {
|
|
25
|
+
constructor(public readonly value: unknown) {
|
|
26
|
+
super(`panic: ${formatPanicValue(value)}`)
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
24
30
|
/**
|
|
25
31
|
* Implementation of Go's built-in panic function
|
|
26
32
|
* @param args Arguments passed to panic
|
|
27
33
|
*/
|
|
28
|
-
export function panic(...args:
|
|
29
|
-
|
|
34
|
+
export function panic(...args: unknown[]): never {
|
|
35
|
+
const value = args.length === 1 ? args[0] : args
|
|
36
|
+
throw new GoPanic(value)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function panicValue(value: unknown): unknown {
|
|
40
|
+
if (value instanceof GoPanic) {
|
|
41
|
+
return value.value
|
|
42
|
+
}
|
|
43
|
+
return value
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function formatPanicValue(value: unknown): string {
|
|
47
|
+
if (value instanceof Error) {
|
|
48
|
+
return value.message
|
|
49
|
+
}
|
|
50
|
+
if (
|
|
51
|
+
value !== null &&
|
|
52
|
+
typeof value === 'object' &&
|
|
53
|
+
'Error' in value &&
|
|
54
|
+
typeof (value as { Error?: unknown }).Error === 'function'
|
|
55
|
+
) {
|
|
56
|
+
return String((value as { Error(): string }).Error())
|
|
57
|
+
}
|
|
58
|
+
return String(value)
|
|
30
59
|
}
|
|
31
60
|
|
|
32
61
|
/**
|
|
@@ -121,6 +150,46 @@ export function pointerValue<T>(value: T | VarRef<T> | null | undefined): T {
|
|
|
121
150
|
if (isVarRef(value)) {
|
|
122
151
|
return value.value as T
|
|
123
152
|
}
|
|
153
|
+
const boxed =
|
|
154
|
+
typeof value === 'object' &&
|
|
155
|
+
value !== null &&
|
|
156
|
+
'__goValue' in value ?
|
|
157
|
+
(value as { __goType?: unknown; __goValue: T | VarRef<T> })
|
|
158
|
+
: null
|
|
159
|
+
if (
|
|
160
|
+
boxed !== null &&
|
|
161
|
+
typeof boxed.__goType === 'string' &&
|
|
162
|
+
boxed.__goType.startsWith('*') &&
|
|
163
|
+
!hasGoMethodSurface(value)
|
|
164
|
+
) {
|
|
165
|
+
return pointerValue(boxed.__goValue)
|
|
166
|
+
}
|
|
167
|
+
return value
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export function pointerValueOrNil<T>(
|
|
171
|
+
value: T | VarRef<T> | null | undefined,
|
|
172
|
+
): T | null {
|
|
173
|
+
if (value === null || value === undefined) {
|
|
174
|
+
return null
|
|
175
|
+
}
|
|
176
|
+
if (isVarRef(value)) {
|
|
177
|
+
return value.value as T
|
|
178
|
+
}
|
|
179
|
+
const boxed =
|
|
180
|
+
typeof value === 'object' &&
|
|
181
|
+
value !== null &&
|
|
182
|
+
'__goValue' in value ?
|
|
183
|
+
(value as { __goType?: unknown; __goValue: T | VarRef<T> })
|
|
184
|
+
: null
|
|
185
|
+
if (
|
|
186
|
+
boxed !== null &&
|
|
187
|
+
typeof boxed.__goType === 'string' &&
|
|
188
|
+
boxed.__goType.startsWith('*') &&
|
|
189
|
+
!hasGoMethodSurface(value)
|
|
190
|
+
) {
|
|
191
|
+
return pointerValueOrNil(boxed.__goValue)
|
|
192
|
+
}
|
|
124
193
|
return value
|
|
125
194
|
}
|
|
126
195
|
|
|
@@ -128,7 +197,7 @@ export function arrayEqual(a: unknown, b: unknown): boolean {
|
|
|
128
197
|
return comparableEqual(a, b)
|
|
129
198
|
}
|
|
130
199
|
|
|
131
|
-
function comparableEqual(a: unknown, b: unknown): boolean {
|
|
200
|
+
export function comparableEqual(a: unknown, b: unknown): boolean {
|
|
132
201
|
if (a === b) {
|
|
133
202
|
return true
|
|
134
203
|
}
|
|
@@ -146,6 +215,14 @@ function comparableEqual(a: unknown, b: unknown): boolean {
|
|
|
146
215
|
}
|
|
147
216
|
return true
|
|
148
217
|
}
|
|
218
|
+
if (isComplexValue(a) || isComplexValue(b)) {
|
|
219
|
+
return (
|
|
220
|
+
isComplexValue(a) &&
|
|
221
|
+
isComplexValue(b) &&
|
|
222
|
+
a.real === b.real &&
|
|
223
|
+
a.imag === b.imag
|
|
224
|
+
)
|
|
225
|
+
}
|
|
149
226
|
if (hasGoType(a) || hasGoType(b)) {
|
|
150
227
|
if (!hasGoType(a) || !hasGoType(b) || a.__goType !== b.__goType) {
|
|
151
228
|
return false
|
|
@@ -153,6 +230,9 @@ function comparableEqual(a: unknown, b: unknown): boolean {
|
|
|
153
230
|
if (a.__isTypedNil || b.__isTypedNil) {
|
|
154
231
|
return a.__isTypedNil === true && b.__isTypedNil === true
|
|
155
232
|
}
|
|
233
|
+
if (hasGoValue(a) || hasGoValue(b)) {
|
|
234
|
+
return hasGoValue(a) && hasGoValue(b) && comparableEqual(a.__goValue, b.__goValue)
|
|
235
|
+
}
|
|
156
236
|
}
|
|
157
237
|
if (isStructValue(a) && isStructValue(b)) {
|
|
158
238
|
return fieldsEqual(a._fields, b._fields)
|
|
@@ -175,14 +255,39 @@ function hasGoType(value: unknown): value is {
|
|
|
175
255
|
)
|
|
176
256
|
}
|
|
177
257
|
|
|
258
|
+
function hasGoValue(value: unknown): value is {
|
|
259
|
+
__goValue: unknown
|
|
260
|
+
} {
|
|
261
|
+
return typeof value === 'object' && value !== null && '__goValue' in value
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
function hasGoMethodSurface(value: unknown): boolean {
|
|
265
|
+
if (typeof value !== 'object' || value === null) {
|
|
266
|
+
return false
|
|
267
|
+
}
|
|
268
|
+
return Object.keys(value).some((key) => {
|
|
269
|
+
return (
|
|
270
|
+
key !== '__goType' &&
|
|
271
|
+
key !== '__goValue' &&
|
|
272
|
+
key !== 'valueOf' &&
|
|
273
|
+
key !== 'toString' &&
|
|
274
|
+
typeof (value as Record<string, unknown>)[key] === 'function'
|
|
275
|
+
)
|
|
276
|
+
})
|
|
277
|
+
}
|
|
278
|
+
|
|
178
279
|
function isStructValue(value: unknown): value is {
|
|
179
280
|
_fields: Record<string, VarRef<unknown>>
|
|
180
281
|
} {
|
|
282
|
+
const fields =
|
|
283
|
+
typeof value === 'object' && value !== null ?
|
|
284
|
+
(value as { _fields?: unknown })._fields
|
|
285
|
+
: undefined
|
|
181
286
|
return (
|
|
182
|
-
typeof
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
(
|
|
287
|
+
typeof fields === 'object' &&
|
|
288
|
+
fields !== null &&
|
|
289
|
+
!Array.isArray(fields) &&
|
|
290
|
+
Object.values(fields).every(isVarRef)
|
|
186
291
|
)
|
|
187
292
|
}
|
|
188
293
|
|
|
@@ -208,6 +313,15 @@ export interface Complex {
|
|
|
208
313
|
imag: number
|
|
209
314
|
}
|
|
210
315
|
|
|
316
|
+
function isComplexValue(value: unknown): value is Complex {
|
|
317
|
+
return (
|
|
318
|
+
typeof value === 'object' &&
|
|
319
|
+
value !== null &&
|
|
320
|
+
typeof (value as { real?: unknown }).real === 'number' &&
|
|
321
|
+
typeof (value as { imag?: unknown }).imag === 'number'
|
|
322
|
+
)
|
|
323
|
+
}
|
|
324
|
+
|
|
211
325
|
export function complex(real: number, imag: number): Complex {
|
|
212
326
|
return { real, imag }
|
|
213
327
|
}
|
|
@@ -229,6 +343,10 @@ export function imag(value: number | Complex | null | undefined): number {
|
|
|
229
343
|
// Bytes represents all valid []byte representations in TypeScript
|
|
230
344
|
// This includes Uint8Array (the preferred representation) and $.Slice<number> (which includes null)
|
|
231
345
|
export type Bytes = Uint8Array | Slice<number>
|
|
346
|
+
type ByteData = Uint8Array | number[] | SliceProxy<number>
|
|
347
|
+
|
|
348
|
+
const maxSafeBigInt = BigInt(Number.MAX_SAFE_INTEGER)
|
|
349
|
+
const maxUint64BigInt = 0xffffffffffffffffn
|
|
232
350
|
|
|
233
351
|
// int converts a value to a Go int type, handling proper signed integer conversion
|
|
234
352
|
// This ensures that values like 2147483648 (2^31) are properly handled according to Go semantics
|
|
@@ -272,15 +390,30 @@ export function uint(value: number | bigint, bits = 64): number {
|
|
|
272
390
|
if (typeof value === 'bigint') {
|
|
273
391
|
const normalized = BigInt.asUintN(Math.min(bits, 64), value)
|
|
274
392
|
if (bits >= 64) {
|
|
275
|
-
return normalized
|
|
393
|
+
return uint64Result(normalized)
|
|
276
394
|
}
|
|
277
395
|
return Number(normalized)
|
|
278
396
|
}
|
|
397
|
+
if (!Number.isFinite(value)) {
|
|
398
|
+
return value
|
|
399
|
+
}
|
|
400
|
+
if (bits === 8) {
|
|
401
|
+
return value & 0xff
|
|
402
|
+
}
|
|
403
|
+
if (bits === 16) {
|
|
404
|
+
return value & 0xffff
|
|
405
|
+
}
|
|
406
|
+
if (bits === 32) {
|
|
407
|
+
return value >>> 0
|
|
408
|
+
}
|
|
409
|
+
if (bits >= 64) {
|
|
410
|
+
const truncated = Math.trunc(value)
|
|
411
|
+
if (truncated >= 0 && truncated <= Number.MAX_SAFE_INTEGER) {
|
|
412
|
+
return truncated
|
|
413
|
+
}
|
|
414
|
+
}
|
|
279
415
|
const modulo = bits >= 64 ? 2 ** 64 : 2 ** bits
|
|
280
416
|
let truncated = Math.trunc(value)
|
|
281
|
-
if (!Number.isFinite(truncated)) {
|
|
282
|
-
return truncated
|
|
283
|
-
}
|
|
284
417
|
truncated %= modulo
|
|
285
418
|
if (truncated < 0) {
|
|
286
419
|
truncated += modulo
|
|
@@ -288,14 +421,34 @@ export function uint(value: number | bigint, bits = 64): number {
|
|
|
288
421
|
return truncated
|
|
289
422
|
}
|
|
290
423
|
|
|
291
|
-
export function uint64Shl(
|
|
424
|
+
export function uint64Shl(
|
|
425
|
+
value: number | bigint,
|
|
426
|
+
shift: number | bigint,
|
|
427
|
+
): number {
|
|
292
428
|
return uint64Result(uint64Value(value) << BigInt(Math.trunc(Number(shift))))
|
|
293
429
|
}
|
|
294
430
|
|
|
295
|
-
export function uint64Shr(
|
|
431
|
+
export function uint64Shr(
|
|
432
|
+
value: number | bigint,
|
|
433
|
+
shift: number | bigint,
|
|
434
|
+
): number {
|
|
296
435
|
return uint64Result(uint64Value(value) >> BigInt(Math.trunc(Number(shift))))
|
|
297
436
|
}
|
|
298
437
|
|
|
438
|
+
export function int64Shl(
|
|
439
|
+
value: number | bigint,
|
|
440
|
+
shift: number | bigint,
|
|
441
|
+
): number {
|
|
442
|
+
return int64Result(int64Value(value) << BigInt(Math.trunc(Number(shift))))
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
export function int64Shr(
|
|
446
|
+
value: number | bigint,
|
|
447
|
+
shift: number | bigint,
|
|
448
|
+
): number {
|
|
449
|
+
return int64Result(int64Value(value) >> BigInt(Math.trunc(Number(shift))))
|
|
450
|
+
}
|
|
451
|
+
|
|
299
452
|
export function uintShr(
|
|
300
453
|
value: number | bigint,
|
|
301
454
|
shift: number | bigint,
|
|
@@ -312,39 +465,178 @@ export function uintShr(
|
|
|
312
465
|
return uint(value, width) >>> amount
|
|
313
466
|
}
|
|
314
467
|
|
|
315
|
-
export function uint64Mul(
|
|
468
|
+
export function uint64Mul(
|
|
469
|
+
left: number | bigint,
|
|
470
|
+
right: number | bigint,
|
|
471
|
+
): number {
|
|
316
472
|
return uint64Result(uint64Value(left) * uint64Value(right))
|
|
317
473
|
}
|
|
318
474
|
|
|
319
|
-
export function
|
|
475
|
+
export function int64Mul(
|
|
476
|
+
left: number | bigint,
|
|
477
|
+
right: number | bigint,
|
|
478
|
+
): number {
|
|
479
|
+
return int64Result(int64Value(left) * int64Value(right))
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
export function uint64Div(
|
|
483
|
+
left: number | bigint,
|
|
484
|
+
right: number | bigint,
|
|
485
|
+
): number {
|
|
486
|
+
const divisor = uint64Value(right)
|
|
487
|
+
if (divisor === 0n) {
|
|
488
|
+
throw new Error('runtime error: integer divide by zero')
|
|
489
|
+
}
|
|
490
|
+
return uint64Result(uint64Value(left) / divisor)
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
export function int64Div(
|
|
494
|
+
left: number | bigint,
|
|
495
|
+
right: number | bigint,
|
|
496
|
+
): number {
|
|
497
|
+
const divisor = int64Value(right)
|
|
498
|
+
if (divisor === 0n) {
|
|
499
|
+
throw new Error('runtime error: integer divide by zero')
|
|
500
|
+
}
|
|
501
|
+
return int64Result(int64Value(left) / divisor)
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
export function uint64Mod(
|
|
505
|
+
left: number | bigint,
|
|
506
|
+
right: number | bigint,
|
|
507
|
+
): number {
|
|
508
|
+
const divisor = uint64Value(right)
|
|
509
|
+
if (divisor === 0n) {
|
|
510
|
+
throw new Error('runtime error: integer divide by zero')
|
|
511
|
+
}
|
|
512
|
+
return uint64Result(uint64Value(left) % divisor)
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
export function int64Mod(
|
|
516
|
+
left: number | bigint,
|
|
517
|
+
right: number | bigint,
|
|
518
|
+
): number {
|
|
519
|
+
const divisor = int64Value(right)
|
|
520
|
+
if (divisor === 0n) {
|
|
521
|
+
throw new Error('runtime error: integer divide by zero')
|
|
522
|
+
}
|
|
523
|
+
return int64Result(int64Value(left) % divisor)
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
export function uint64Add(
|
|
527
|
+
left: number | bigint,
|
|
528
|
+
right: number | bigint,
|
|
529
|
+
): number {
|
|
320
530
|
return uint64Result(uint64Value(left) + uint64Value(right))
|
|
321
531
|
}
|
|
322
532
|
|
|
323
|
-
export function
|
|
533
|
+
export function int64Add(
|
|
534
|
+
left: number | bigint,
|
|
535
|
+
right: number | bigint,
|
|
536
|
+
): number {
|
|
537
|
+
return int64Result(int64Value(left) + int64Value(right))
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
export function uint64Sub(
|
|
541
|
+
left: number | bigint,
|
|
542
|
+
right: number | bigint,
|
|
543
|
+
): number {
|
|
324
544
|
return uint64Result(uint64Value(left) - uint64Value(right))
|
|
325
545
|
}
|
|
326
546
|
|
|
327
|
-
export function
|
|
547
|
+
export function int64Sub(
|
|
548
|
+
left: number | bigint,
|
|
549
|
+
right: number | bigint,
|
|
550
|
+
): number {
|
|
551
|
+
return int64Result(int64Value(left) - int64Value(right))
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
export function uint64And(
|
|
555
|
+
left: number | bigint,
|
|
556
|
+
right: number | bigint,
|
|
557
|
+
): number {
|
|
328
558
|
return uint64Result(uint64Value(left) & uint64Value(right))
|
|
329
559
|
}
|
|
330
560
|
|
|
331
|
-
export function
|
|
561
|
+
export function int64And(
|
|
562
|
+
left: number | bigint,
|
|
563
|
+
right: number | bigint,
|
|
564
|
+
): number {
|
|
565
|
+
return int64Result(int64Value(left) & int64Value(right))
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
export function uint64Or(
|
|
569
|
+
left: number | bigint,
|
|
570
|
+
right: number | bigint,
|
|
571
|
+
): number {
|
|
332
572
|
return uint64Result(uint64Value(left) | uint64Value(right))
|
|
333
573
|
}
|
|
334
574
|
|
|
335
|
-
export function
|
|
575
|
+
export function int64Or(
|
|
576
|
+
left: number | bigint,
|
|
577
|
+
right: number | bigint,
|
|
578
|
+
): number {
|
|
579
|
+
return int64Result(int64Value(left) | int64Value(right))
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
export function uint64Xor(
|
|
583
|
+
left: number | bigint,
|
|
584
|
+
right: number | bigint,
|
|
585
|
+
): number {
|
|
336
586
|
return uint64Result(uint64Value(left) ^ uint64Value(right))
|
|
337
587
|
}
|
|
338
588
|
|
|
589
|
+
export function int64Xor(
|
|
590
|
+
left: number | bigint,
|
|
591
|
+
right: number | bigint,
|
|
592
|
+
): number {
|
|
593
|
+
return int64Result(int64Value(left) ^ int64Value(right))
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
function int64Value(value: number | bigint): bigint {
|
|
597
|
+
if (typeof value === 'bigint') {
|
|
598
|
+
return BigInt.asIntN(64, value)
|
|
599
|
+
}
|
|
600
|
+
if (Number.isFinite(value)) {
|
|
601
|
+
const truncated = Math.trunc(value)
|
|
602
|
+
if (
|
|
603
|
+
truncated >= Number.MIN_SAFE_INTEGER &&
|
|
604
|
+
truncated <= Number.MAX_SAFE_INTEGER
|
|
605
|
+
) {
|
|
606
|
+
return BigInt(truncated)
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
return BigInt.asIntN(64, BigInt(Math.trunc(value)))
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
function int64Result(value: bigint): number {
|
|
613
|
+
const normalized =
|
|
614
|
+
value >= -0x8000000000000000n && value <= 0x7fffffffffffffffn
|
|
615
|
+
? value
|
|
616
|
+
: BigInt.asIntN(64, value)
|
|
617
|
+
return Number(normalized)
|
|
618
|
+
}
|
|
619
|
+
|
|
339
620
|
function uint64Value(value: number | bigint): bigint {
|
|
340
621
|
if (typeof value === 'bigint') {
|
|
341
622
|
return BigInt.asUintN(64, value)
|
|
342
623
|
}
|
|
624
|
+
if (Number.isFinite(value)) {
|
|
625
|
+
const truncated = Math.trunc(value)
|
|
626
|
+
if (truncated >= 0 && truncated <= Number.MAX_SAFE_INTEGER) {
|
|
627
|
+
return BigInt(truncated)
|
|
628
|
+
}
|
|
629
|
+
}
|
|
343
630
|
return BigInt.asUintN(64, BigInt(Math.trunc(value)))
|
|
344
631
|
}
|
|
345
632
|
|
|
346
633
|
function uint64Result(value: bigint): number {
|
|
347
|
-
|
|
634
|
+
const normalized =
|
|
635
|
+
value >= 0n && value <= maxUint64BigInt ? value : BigInt.asUintN(64, value)
|
|
636
|
+
if (normalized <= maxSafeBigInt) {
|
|
637
|
+
return Number(normalized)
|
|
638
|
+
}
|
|
639
|
+
return normalized as unknown as number
|
|
348
640
|
}
|
|
349
641
|
|
|
350
642
|
/**
|
|
@@ -428,18 +720,15 @@ export function sortSlice<T extends string | number>(s: Slice<T>): void {
|
|
|
428
720
|
* Optimized for different byte representations.
|
|
429
721
|
*/
|
|
430
722
|
export function bytesEqual(a: Bytes | null, b: Bytes | null): boolean {
|
|
431
|
-
// Handle null cases
|
|
432
723
|
if (a === null && b === null) return true
|
|
433
724
|
if (a === null || b === null) return false
|
|
434
725
|
|
|
435
|
-
|
|
436
|
-
const
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
if (aArr.length !== bArr.length) return false
|
|
726
|
+
const aLen = bytesLen(a)
|
|
727
|
+
const bLen = bytesLen(b)
|
|
728
|
+
if (aLen !== bLen) return false
|
|
440
729
|
|
|
441
|
-
for (let i = 0; i <
|
|
442
|
-
if (
|
|
730
|
+
for (let i = 0; i < aLen; i++) {
|
|
731
|
+
if (byteAt(a, i) !== byteAt(b, i)) return false
|
|
443
732
|
}
|
|
444
733
|
|
|
445
734
|
return true
|
|
@@ -450,30 +739,49 @@ export function bytesEqual(a: Bytes | null, b: Bytes | null): boolean {
|
|
|
450
739
|
* Returns -1 if a < b, 0 if a == b, +1 if a > b.
|
|
451
740
|
*/
|
|
452
741
|
export function bytesCompare(a: Bytes | null, b: Bytes | null): number {
|
|
453
|
-
// Handle null cases
|
|
454
742
|
if (a === null && b === null) return 0
|
|
455
743
|
if (a === null) return -1
|
|
456
744
|
if (b === null) return 1
|
|
457
745
|
|
|
458
|
-
const
|
|
459
|
-
const
|
|
460
|
-
|
|
461
|
-
const minLen = Math.min(aArr.length, bArr.length)
|
|
746
|
+
const aLen = bytesLen(a)
|
|
747
|
+
const bLen = bytesLen(b)
|
|
748
|
+
const minLen = Math.min(aLen, bLen)
|
|
462
749
|
|
|
463
750
|
for (let i = 0; i < minLen; i++) {
|
|
464
|
-
|
|
465
|
-
|
|
751
|
+
const av = byteAt(a, i)
|
|
752
|
+
const bv = byteAt(b, i)
|
|
753
|
+
if (av < bv) return -1
|
|
754
|
+
if (av > bv) return 1
|
|
466
755
|
}
|
|
467
756
|
|
|
468
|
-
if (
|
|
469
|
-
if (
|
|
757
|
+
if (aLen < bLen) return -1
|
|
758
|
+
if (aLen > bLen) return 1
|
|
470
759
|
return 0
|
|
471
760
|
}
|
|
472
761
|
|
|
762
|
+
function bytesLen(bytes: ByteData): number {
|
|
763
|
+
if (bytes instanceof Uint8Array) {
|
|
764
|
+
return bytes.length
|
|
765
|
+
}
|
|
766
|
+
if (isSliceProxy(bytes)) {
|
|
767
|
+
return (bytes as SliceProxy<number>).__meta__.length
|
|
768
|
+
}
|
|
769
|
+
return bytes.length
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
function byteAt(bytes: ByteData, index: number): number {
|
|
773
|
+
if (bytes instanceof Uint8Array || Array.isArray(bytes)) {
|
|
774
|
+
return bytes[index] ?? 0
|
|
775
|
+
}
|
|
776
|
+
const meta = (bytes as SliceProxy<number>).__meta__
|
|
777
|
+
return meta.backing[meta.offset + index] ?? 0
|
|
778
|
+
}
|
|
779
|
+
|
|
473
780
|
/**
|
|
474
781
|
* bytesToArray converts any Bytes representation to a number array.
|
|
475
782
|
*/
|
|
476
783
|
export function bytesToArray(bytes: Bytes | null): number[] {
|
|
784
|
+
bytes = bytesValue(bytes) as Bytes | null
|
|
477
785
|
if (bytes === null) return []
|
|
478
786
|
|
|
479
787
|
if (bytes instanceof Uint8Array) {
|
|
@@ -497,15 +805,34 @@ export function bytesToArray(bytes: Bytes | null): number[] {
|
|
|
497
805
|
* bytesToUint8Array converts any Bytes representation to a Uint8Array.
|
|
498
806
|
*/
|
|
499
807
|
export function bytesToUint8Array(bytes: Bytes | null): Uint8Array {
|
|
808
|
+
bytes = bytesValue(bytes) as Bytes | null
|
|
500
809
|
if (bytes === null) return new Uint8Array(0)
|
|
501
810
|
|
|
502
811
|
if (bytes instanceof Uint8Array) {
|
|
812
|
+
if ((bytes as Uint8Array & { __meta__?: unknown }).__meta__ !== undefined) {
|
|
813
|
+
return bytes.subarray(0)
|
|
814
|
+
}
|
|
503
815
|
return bytes
|
|
504
816
|
}
|
|
505
817
|
|
|
506
818
|
return new Uint8Array(bytesToArray(bytes))
|
|
507
819
|
}
|
|
508
820
|
|
|
821
|
+
function bytesValue(value: unknown): unknown {
|
|
822
|
+
if (isVarRef(value)) {
|
|
823
|
+
return bytesValue(value.value)
|
|
824
|
+
}
|
|
825
|
+
if (
|
|
826
|
+
typeof value === 'object' &&
|
|
827
|
+
value !== null &&
|
|
828
|
+
typeof (value as { __goType?: unknown }).__goType === 'string' &&
|
|
829
|
+
'__goValue' in value
|
|
830
|
+
) {
|
|
831
|
+
return bytesValue((value as { __goValue: unknown }).__goValue)
|
|
832
|
+
}
|
|
833
|
+
return value
|
|
834
|
+
}
|
|
835
|
+
|
|
509
836
|
/**
|
|
510
837
|
* bytesIndexOf finds the first occurrence of subslice in bytes.
|
|
511
838
|
* Returns -1 if not found.
|