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
|
@@ -16,15 +16,37 @@ export interface Message {
|
|
|
16
16
|
Reset(): void
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
$.registerInterfaceType('protobuf_go_lite.Message', null, [
|
|
20
|
+
{ name: 'SizeVT', args: [], returns: [] },
|
|
21
|
+
{ name: 'MarshalToSizedBufferVT', args: [], returns: [] },
|
|
22
|
+
{ name: 'MarshalVT', args: [], returns: [] },
|
|
23
|
+
{ name: 'UnmarshalVT', args: [], returns: [] },
|
|
24
|
+
{ name: 'Reset', args: [], returns: [] },
|
|
25
|
+
])
|
|
26
|
+
|
|
19
27
|
export interface JSONMessage {
|
|
20
28
|
MarshalJSON(): [$.Slice<number>, $.GoError]
|
|
21
29
|
UnmarshalJSON(data: $.Slice<number>): $.GoError
|
|
22
30
|
}
|
|
23
31
|
|
|
32
|
+
$.registerInterfaceType('protobuf_go_lite.JSONMessage', null, [
|
|
33
|
+
{ name: 'MarshalJSON', args: [], returns: [] },
|
|
34
|
+
{ name: 'UnmarshalJSON', args: [], returns: [] },
|
|
35
|
+
])
|
|
36
|
+
|
|
24
37
|
export interface CloneMessage extends Message {
|
|
25
38
|
CloneMessageVT(): CloneMessage | null
|
|
26
39
|
}
|
|
27
40
|
|
|
41
|
+
$.registerInterfaceType('protobuf_go_lite.CloneMessage', null, [
|
|
42
|
+
{ name: 'SizeVT', args: [], returns: [] },
|
|
43
|
+
{ name: 'MarshalToSizedBufferVT', args: [], returns: [] },
|
|
44
|
+
{ name: 'MarshalVT', args: [], returns: [] },
|
|
45
|
+
{ name: 'UnmarshalVT', args: [], returns: [] },
|
|
46
|
+
{ name: 'Reset', args: [], returns: [] },
|
|
47
|
+
{ name: 'CloneMessageVT', args: [], returns: [] },
|
|
48
|
+
])
|
|
49
|
+
|
|
28
50
|
export interface CloneVT<T> extends CloneMessage {
|
|
29
51
|
CloneVT(): T
|
|
30
52
|
}
|
|
@@ -37,37 +59,37 @@ export function CompareComparable<T>(): (t1: T, t2: T) => boolean {
|
|
|
37
59
|
return (t1, t2) => t1 === t2
|
|
38
60
|
}
|
|
39
61
|
|
|
40
|
-
export function IsEqualVT<T
|
|
41
|
-
t1: T | null,
|
|
42
|
-
t2: T | null,
|
|
62
|
+
export function IsEqualVT<T>(
|
|
63
|
+
t1: T | $.VarRef<T> | null,
|
|
64
|
+
t2: T | $.VarRef<T> | null,
|
|
43
65
|
): boolean
|
|
44
|
-
export function IsEqualVT<T
|
|
66
|
+
export function IsEqualVT<T>(
|
|
45
67
|
_typeArgs: unknown,
|
|
46
|
-
t1: T | null,
|
|
47
|
-
t2: T | null,
|
|
68
|
+
t1: T | $.VarRef<T> | null,
|
|
69
|
+
t2: T | $.VarRef<T> | null,
|
|
48
70
|
): boolean
|
|
49
|
-
export function IsEqualVT<T
|
|
71
|
+
export function IsEqualVT<T>(
|
|
50
72
|
arg0: unknown,
|
|
51
|
-
arg1: T | null,
|
|
52
|
-
arg2?: T | null,
|
|
73
|
+
arg1: T | $.VarRef<T> | null,
|
|
74
|
+
arg2?: T | $.VarRef<T> | null,
|
|
53
75
|
): boolean {
|
|
54
|
-
const t1 = arg2 === undefined ? (arg0 as T | null) : arg1
|
|
55
|
-
const t2 = arg2 === undefined ? arg1 : arg2
|
|
76
|
+
const t1 = $.pointerValueOrNil(arg2 === undefined ? (arg0 as T | $.VarRef<T> | null) : arg1)
|
|
77
|
+
const t2 = $.pointerValueOrNil(arg2 === undefined ? arg1 : arg2)
|
|
56
78
|
if (t1 == null || t2 == null) {
|
|
57
79
|
return t1 == t2
|
|
58
80
|
}
|
|
59
|
-
return t1.EqualVT(t2)
|
|
81
|
+
return (t1 as unknown as EqualVT<T>).EqualVT(t2)
|
|
60
82
|
}
|
|
61
83
|
|
|
62
|
-
export function CompareEqualVT<T
|
|
84
|
+
export function CompareEqualVT<T>(
|
|
63
85
|
_typeArgs?: unknown,
|
|
64
|
-
): (t1: T | null, t2: T | null) => boolean {
|
|
86
|
+
): (t1: T | $.VarRef<T> | null, t2: T | $.VarRef<T> | null) => boolean {
|
|
65
87
|
return (t1, t2) => IsEqualVT(t1, t2)
|
|
66
88
|
}
|
|
67
89
|
|
|
68
|
-
export function IsEqualVTSlice<T
|
|
69
|
-
s1: $.Slice<T>,
|
|
70
|
-
s2: $.Slice<T>,
|
|
90
|
+
export function IsEqualVTSlice<T>(
|
|
91
|
+
s1: $.Slice<T | $.VarRef<T> | null>,
|
|
92
|
+
s2: $.Slice<T | $.VarRef<T> | null>,
|
|
71
93
|
): boolean {
|
|
72
94
|
if ($.len(s1) !== $.len(s2)) {
|
|
73
95
|
return false
|
|
@@ -83,58 +105,78 @@ export function IsEqualVTSlice<T extends EqualVT<T>>(
|
|
|
83
105
|
export function EncodeVarint(
|
|
84
106
|
dAtA: $.Slice<number>,
|
|
85
107
|
offset: number,
|
|
86
|
-
v: number,
|
|
108
|
+
v: number | bigint,
|
|
87
109
|
): number {
|
|
88
110
|
offset -= SizeOfVarint(v)
|
|
89
111
|
const base = offset
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
112
|
+
let value = normalizedVarint(v)
|
|
113
|
+
while (value >= 0x80n) {
|
|
114
|
+
setByte(dAtA, offset, Number((value & 0x7fn) | 0x80n))
|
|
115
|
+
value >>= 7n
|
|
93
116
|
offset++
|
|
94
117
|
}
|
|
95
|
-
setByte(dAtA, offset,
|
|
118
|
+
setByte(dAtA, offset, Number(value))
|
|
96
119
|
return base
|
|
97
120
|
}
|
|
98
121
|
|
|
99
|
-
export function AppendVarint(
|
|
122
|
+
export function AppendVarint(
|
|
123
|
+
b: $.Slice<number>,
|
|
124
|
+
v: number | bigint,
|
|
125
|
+
): $.Slice<number> {
|
|
100
126
|
const bytes: number[] = []
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
127
|
+
let value = normalizedVarint(v)
|
|
128
|
+
while (value >= 0x80n) {
|
|
129
|
+
bytes.push(Number((value & 0x7fn) | 0x80n))
|
|
130
|
+
value >>= 7n
|
|
104
131
|
}
|
|
105
|
-
bytes.push(
|
|
132
|
+
bytes.push(Number(value))
|
|
106
133
|
return $.append(b, ...bytes)
|
|
107
134
|
}
|
|
108
135
|
|
|
109
136
|
export function ConsumeVarint(b: $.Slice<number>): [number, number] {
|
|
110
|
-
let v =
|
|
111
|
-
let shift =
|
|
137
|
+
let v = 0n
|
|
138
|
+
let shift = 0n
|
|
112
139
|
for (let i = 0; i < 10; i++) {
|
|
113
140
|
if (i >= $.len(b)) {
|
|
114
141
|
return [0, -1]
|
|
115
142
|
}
|
|
116
143
|
const value = byteSliceValue(b, i)
|
|
117
|
-
if (shift ===
|
|
144
|
+
if (shift === 63n && value > 1) {
|
|
118
145
|
return [0, -2]
|
|
119
146
|
}
|
|
120
|
-
v += (value & 0x7f)
|
|
147
|
+
v += BigInt(value & 0x7f) << shift
|
|
121
148
|
if (value < 0x80) {
|
|
122
|
-
return [v, i + 1]
|
|
149
|
+
return [varintResult(v), i + 1]
|
|
123
150
|
}
|
|
124
|
-
shift +=
|
|
151
|
+
shift += 7n
|
|
125
152
|
}
|
|
126
153
|
return [0, -2]
|
|
127
154
|
}
|
|
128
155
|
|
|
129
|
-
export function SizeOfVarint(x: number): number {
|
|
156
|
+
export function SizeOfVarint(x: number | bigint): number {
|
|
157
|
+
let value = normalizedVarint(x)
|
|
130
158
|
let n = 1
|
|
131
|
-
while (
|
|
132
|
-
|
|
159
|
+
while (value >= 0x80n) {
|
|
160
|
+
value >>= 7n
|
|
133
161
|
n++
|
|
134
162
|
}
|
|
135
163
|
return n
|
|
136
164
|
}
|
|
137
165
|
|
|
166
|
+
function normalizedVarint(value: number | bigint): bigint {
|
|
167
|
+
if (typeof value === 'bigint') {
|
|
168
|
+
return BigInt.asUintN(64, value)
|
|
169
|
+
}
|
|
170
|
+
return BigInt.asUintN(64, BigInt(Math.trunc(value)))
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function varintResult(value: bigint): number {
|
|
174
|
+
if (value <= BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
175
|
+
return Number(value)
|
|
176
|
+
}
|
|
177
|
+
return value as unknown as number
|
|
178
|
+
}
|
|
179
|
+
|
|
138
180
|
export function DecodeVarint(
|
|
139
181
|
b: $.Slice<number>,
|
|
140
182
|
idx: number,
|
|
@@ -78,10 +78,11 @@ describe('protobuf-go-lite/json override', () => {
|
|
|
78
78
|
a: new TestMessage('one', 1),
|
|
79
79
|
b: new TestMessage('two', 2),
|
|
80
80
|
})
|
|
81
|
-
const [sliceData, sliceErr] = MarshalSlice(
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
const [sliceData, sliceErr] = MarshalSlice(
|
|
82
|
+
undefined,
|
|
83
|
+
DefaultMarshalerConfig,
|
|
84
|
+
[new TestMessage('one', 1), new TestMessage('two', 2)],
|
|
85
|
+
)
|
|
85
86
|
|
|
86
87
|
expect(mapErr).toBeNull()
|
|
87
88
|
expect(sliceErr).toBeNull()
|
|
@@ -99,7 +100,10 @@ describe('protobuf-go-lite/json override', () => {
|
|
|
99
100
|
jsonBytes('{"name":"ok","count":"42"}'),
|
|
100
101
|
msg,
|
|
101
102
|
)
|
|
102
|
-
const state = NewUnmarshalState(
|
|
103
|
+
const state = NewUnmarshalState(
|
|
104
|
+
jsonBytes('["Zm9vYg==","YXI="]'),
|
|
105
|
+
DefaultUnmarshalerConfig,
|
|
106
|
+
)
|
|
103
107
|
|
|
104
108
|
expect(err).toBeNull()
|
|
105
109
|
expect(msg).toEqual(new TestMessage('ok', 42))
|
|
@@ -120,7 +124,10 @@ describe('protobuf-go-lite/json override', () => {
|
|
|
120
124
|
|
|
121
125
|
it('accepts raw wrapped values and object wrapped values', () => {
|
|
122
126
|
const raw = NewUnmarshalState(jsonBytes('"abc"'), DefaultUnmarshalerConfig)
|
|
123
|
-
const object = NewUnmarshalState(
|
|
127
|
+
const object = NewUnmarshalState(
|
|
128
|
+
jsonBytes('{"value": "def"}'),
|
|
129
|
+
DefaultUnmarshalerConfig,
|
|
130
|
+
)
|
|
124
131
|
|
|
125
132
|
expect(raw?.ReadWrappedString()).toBe('abc')
|
|
126
133
|
expect(raw?.Err()).toBeNull()
|
|
@@ -129,13 +136,18 @@ describe('protobuf-go-lite/json override', () => {
|
|
|
129
136
|
})
|
|
130
137
|
|
|
131
138
|
it('reads and writes protobuf timestamp values as time.Time pointers', () => {
|
|
132
|
-
const state = NewUnmarshalState(
|
|
139
|
+
const state = NewUnmarshalState(
|
|
140
|
+
jsonBytes('"2025-05-15T01:10:42Z"'),
|
|
141
|
+
DefaultUnmarshalerConfig,
|
|
142
|
+
)
|
|
133
143
|
const parsed = state?.ReadTime()
|
|
134
144
|
const jsonStream = new JsonStream()
|
|
135
145
|
const stream = new MarshalState({ stream: jsonStream })
|
|
136
146
|
|
|
137
147
|
expect(state?.Err()).toBeNull()
|
|
138
|
-
expect($.pointerValue(parsed)?.Format(time.RFC3339)).toBe(
|
|
148
|
+
expect($.pointerValue(parsed)?.Format(time.RFC3339)).toBe(
|
|
149
|
+
'2025-05-15T01:10:42Z',
|
|
150
|
+
)
|
|
139
151
|
|
|
140
152
|
stream.WriteTime(parsed ?? null)
|
|
141
153
|
|
|
@@ -144,9 +156,18 @@ describe('protobuf-go-lite/json override', () => {
|
|
|
144
156
|
})
|
|
145
157
|
|
|
146
158
|
it('rejects invalid bool and numeric map keys', () => {
|
|
147
|
-
const boolState = NewUnmarshalState(
|
|
148
|
-
|
|
149
|
-
|
|
159
|
+
const boolState = NewUnmarshalState(
|
|
160
|
+
jsonBytes('{"yes": 1}'),
|
|
161
|
+
DefaultUnmarshalerConfig,
|
|
162
|
+
)
|
|
163
|
+
const intState = NewUnmarshalState(
|
|
164
|
+
jsonBytes('{"1.5": 1}'),
|
|
165
|
+
DefaultUnmarshalerConfig,
|
|
166
|
+
)
|
|
167
|
+
const uintState = NewUnmarshalState(
|
|
168
|
+
jsonBytes('{"-1": 1}'),
|
|
169
|
+
DefaultUnmarshalerConfig,
|
|
170
|
+
)
|
|
150
171
|
|
|
151
172
|
boolState?.ReadBoolMap(() => {})
|
|
152
173
|
intState?.ReadInt32Map(() => {})
|
|
@@ -190,18 +190,27 @@ export class MarshalState {
|
|
|
190
190
|
}
|
|
191
191
|
|
|
192
192
|
public Sub(js: JsonStream | null): MarshalState | null {
|
|
193
|
-
return new MarshalState({
|
|
193
|
+
return new MarshalState({
|
|
194
|
+
config: this.configValue,
|
|
195
|
+
stream: js ?? new JsonStream(),
|
|
196
|
+
})
|
|
194
197
|
}
|
|
195
198
|
|
|
196
199
|
public WithField(field: string): MarshalState | null {
|
|
197
|
-
const next = new MarshalState({
|
|
200
|
+
const next = new MarshalState({
|
|
201
|
+
config: this.configValue,
|
|
202
|
+
stream: this.stream,
|
|
203
|
+
})
|
|
198
204
|
next.fields = new Set(this.fields)
|
|
199
205
|
next.fields.add(field)
|
|
200
206
|
return next
|
|
201
207
|
}
|
|
202
208
|
|
|
203
209
|
public WithFieldMask(...paths: string[]): MarshalState | null {
|
|
204
|
-
const next = new MarshalState({
|
|
210
|
+
const next = new MarshalState({
|
|
211
|
+
config: this.configValue,
|
|
212
|
+
stream: this.stream,
|
|
213
|
+
})
|
|
205
214
|
next.fields = new Set([...this.fields, ...paths])
|
|
206
215
|
return next
|
|
207
216
|
}
|
|
@@ -238,7 +247,10 @@ export class MarshalState {
|
|
|
238
247
|
this.WriteString(`${x}s`)
|
|
239
248
|
}
|
|
240
249
|
|
|
241
|
-
public WriteEnum(
|
|
250
|
+
public WriteEnum(
|
|
251
|
+
x: number,
|
|
252
|
+
...valueMaps: Array<Map<number, string> | Record<number, string> | null>
|
|
253
|
+
): void {
|
|
242
254
|
if (this.configValue.EnumsAsInts) {
|
|
243
255
|
this.WriteEnumNumber(x)
|
|
244
256
|
return
|
|
@@ -250,7 +262,10 @@ export class MarshalState {
|
|
|
250
262
|
this.WriteInt32(x)
|
|
251
263
|
}
|
|
252
264
|
|
|
253
|
-
public WriteEnumString(
|
|
265
|
+
public WriteEnumString(
|
|
266
|
+
x: number,
|
|
267
|
+
...valueMaps: Array<Map<number, string> | Record<number, string> | null>
|
|
268
|
+
): void {
|
|
254
269
|
const value = enumStringValue(x, valueMaps)
|
|
255
270
|
if (value == null) {
|
|
256
271
|
this.WriteEnumNumber(x)
|
|
@@ -382,7 +397,10 @@ export class MarshalState {
|
|
|
382
397
|
this.writeArray(vs, (v) => this.WriteUint64(v))
|
|
383
398
|
}
|
|
384
399
|
|
|
385
|
-
private writeArray<T>(
|
|
400
|
+
private writeArray<T>(
|
|
401
|
+
values: $.Slice<T>,
|
|
402
|
+
writeValue: (value: T) => void,
|
|
403
|
+
): void {
|
|
386
404
|
this.WriteArrayStart()
|
|
387
405
|
let wrote = false
|
|
388
406
|
for (const value of sliceValues(values)) {
|
|
@@ -406,13 +424,15 @@ export class UnmarshalState {
|
|
|
406
424
|
private objectEntries: Array<[string, unknown]> | null = null
|
|
407
425
|
private objectIndex = 0
|
|
408
426
|
|
|
409
|
-
constructor(
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
427
|
+
constructor(
|
|
428
|
+
init?: Partial<{
|
|
429
|
+
config: UnmarshalerConfig
|
|
430
|
+
value: unknown
|
|
431
|
+
root: UnmarshalState
|
|
432
|
+
fieldMaskPaths: Set<string>
|
|
433
|
+
path: string[]
|
|
434
|
+
}>,
|
|
435
|
+
) {
|
|
416
436
|
this.configValue = init?.config?.clone() ?? DefaultUnmarshalerConfig.clone()
|
|
417
437
|
this.value = init?.value ?? null
|
|
418
438
|
this.root = init?.root ?? this
|
|
@@ -488,7 +508,9 @@ export class UnmarshalState {
|
|
|
488
508
|
return $.varRef(numberFromJSON(this.value))
|
|
489
509
|
}
|
|
490
510
|
|
|
491
|
-
public ReadEnum(
|
|
511
|
+
public ReadEnum(
|
|
512
|
+
...valueMaps: Array<Map<string, number> | Record<string, number> | null>
|
|
513
|
+
): number {
|
|
492
514
|
if (typeof this.value === 'number') {
|
|
493
515
|
return Math.trunc(this.value)
|
|
494
516
|
}
|
|
@@ -505,11 +527,12 @@ export class UnmarshalState {
|
|
|
505
527
|
}
|
|
506
528
|
|
|
507
529
|
public ReadFieldMask(): FieldMask | null {
|
|
508
|
-
const paths =
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
530
|
+
const paths =
|
|
531
|
+
typeof this.value === 'string' ?
|
|
532
|
+
this.value.split(',').filter((part) => part !== '')
|
|
533
|
+
: Array.isArray(recordValue(this.value)?.paths) ?
|
|
534
|
+
sliceValues(recordValue(this.value)?.paths as $.Slice<string>)
|
|
535
|
+
: []
|
|
513
536
|
return { GetPaths: () => $.arrayToSlice(paths) }
|
|
514
537
|
}
|
|
515
538
|
|
|
@@ -671,15 +694,33 @@ export class UnmarshalState {
|
|
|
671
694
|
})
|
|
672
695
|
}
|
|
673
696
|
|
|
674
|
-
public ReadWrappedBool(): boolean {
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
public
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
public
|
|
681
|
-
|
|
682
|
-
|
|
697
|
+
public ReadWrappedBool(): boolean {
|
|
698
|
+
return this.readWrapped(() => this.ReadBool())
|
|
699
|
+
}
|
|
700
|
+
public ReadWrappedBytes(): $.Slice<number> {
|
|
701
|
+
return this.readWrapped(() => this.ReadBytes())
|
|
702
|
+
}
|
|
703
|
+
public ReadWrappedFloat32(): number {
|
|
704
|
+
return this.readWrapped(() => this.ReadFloat32())
|
|
705
|
+
}
|
|
706
|
+
public ReadWrappedFloat64(): number {
|
|
707
|
+
return this.readWrapped(() => this.ReadFloat64())
|
|
708
|
+
}
|
|
709
|
+
public ReadWrappedInt32(): number {
|
|
710
|
+
return this.readWrapped(() => this.ReadInt32())
|
|
711
|
+
}
|
|
712
|
+
public ReadWrappedInt64(): number {
|
|
713
|
+
return this.readWrapped(() => this.ReadInt64())
|
|
714
|
+
}
|
|
715
|
+
public ReadWrappedString(): string {
|
|
716
|
+
return this.readWrapped(() => this.ReadString())
|
|
717
|
+
}
|
|
718
|
+
public ReadWrappedUint32(): number {
|
|
719
|
+
return this.readWrapped(() => this.ReadUint32())
|
|
720
|
+
}
|
|
721
|
+
public ReadWrappedUint64(): number {
|
|
722
|
+
return this.readWrapped(() => this.ReadUint64())
|
|
723
|
+
}
|
|
683
724
|
|
|
684
725
|
public SetError(err: $.GoError): void {
|
|
685
726
|
this.root.err = err
|
|
@@ -726,7 +767,10 @@ export class UnmarshalState {
|
|
|
726
767
|
return 0
|
|
727
768
|
}
|
|
728
769
|
|
|
729
|
-
public WithField(
|
|
770
|
+
public WithField(
|
|
771
|
+
_field: string,
|
|
772
|
+
_mask: boolean = true,
|
|
773
|
+
): UnmarshalState | null {
|
|
730
774
|
return new UnmarshalState({
|
|
731
775
|
config: this.configValue,
|
|
732
776
|
value: this.value,
|
|
@@ -772,7 +816,10 @@ export class UnmarshalState {
|
|
|
772
816
|
}
|
|
773
817
|
const keys = Object.keys(record)
|
|
774
818
|
if (keys.length !== 1) {
|
|
775
|
-
this.SetErrorf(
|
|
819
|
+
this.SetErrorf(
|
|
820
|
+
'unexpected %q field in wrapped value',
|
|
821
|
+
keys.find((key) => key !== 'value') ?? '',
|
|
822
|
+
)
|
|
776
823
|
return read()
|
|
777
824
|
}
|
|
778
825
|
const original = this.value
|
|
@@ -787,13 +834,22 @@ export function NewJsonStream(wr: unknown): JsonStream | null {
|
|
|
787
834
|
return new JsonStream(wr)
|
|
788
835
|
}
|
|
789
836
|
|
|
790
|
-
export function NewMarshalState(
|
|
837
|
+
export function NewMarshalState(
|
|
838
|
+
config: MarshalerConfig,
|
|
839
|
+
stream: JsonStream | null,
|
|
840
|
+
): MarshalState | null {
|
|
791
841
|
return new MarshalState({ config, stream: stream ?? new JsonStream() })
|
|
792
842
|
}
|
|
793
843
|
|
|
794
|
-
export function NewUnmarshalState(
|
|
844
|
+
export function NewUnmarshalState(
|
|
845
|
+
data: $.Slice<number>,
|
|
846
|
+
config: UnmarshalerConfig,
|
|
847
|
+
): UnmarshalState | null {
|
|
795
848
|
try {
|
|
796
|
-
return new UnmarshalState({
|
|
849
|
+
return new UnmarshalState({
|
|
850
|
+
config,
|
|
851
|
+
value: JSON.parse(bytesToString(data)),
|
|
852
|
+
})
|
|
797
853
|
} catch (err) {
|
|
798
854
|
const state = new UnmarshalState({ config })
|
|
799
855
|
state.SetError($.newError(err instanceof Error ? err.message : String(err)))
|
|
@@ -801,11 +857,16 @@ export function NewUnmarshalState(data: $.Slice<number>, config: UnmarshalerConf
|
|
|
801
857
|
}
|
|
802
858
|
}
|
|
803
859
|
|
|
804
|
-
export function Marshal(
|
|
860
|
+
export function Marshal(
|
|
861
|
+
c: MarshalerConfig,
|
|
862
|
+
m: Marshaler | null,
|
|
863
|
+
): [$.Slice<number>, $.GoError] {
|
|
805
864
|
return c.Marshal(m)
|
|
806
865
|
}
|
|
807
866
|
|
|
808
|
-
export function MarshalMap<
|
|
867
|
+
export function MarshalMap<
|
|
868
|
+
M extends Map<string, Marshaler> | Record<string, Marshaler>,
|
|
869
|
+
>(
|
|
809
870
|
_typeArgs: $.GenericTypeArgs | undefined,
|
|
810
871
|
c: MarshalerConfig,
|
|
811
872
|
mm: M,
|
|
@@ -824,7 +885,9 @@ export function MarshalMap<M extends Map<string, Marshaler> | Record<string, Mar
|
|
|
824
885
|
value?.MarshalProtoJSON(state)
|
|
825
886
|
})
|
|
826
887
|
state.WriteObjectEnd()
|
|
827
|
-
return state.Err() == null ?
|
|
888
|
+
return state.Err() == null ?
|
|
889
|
+
[stringToBytes(stream.String()), null]
|
|
890
|
+
: [null, state.Err()]
|
|
828
891
|
}
|
|
829
892
|
|
|
830
893
|
export function MarshalSlice<S extends $.Slice<Marshaler>>(
|
|
@@ -842,14 +905,22 @@ export function MarshalSlice<S extends $.Slice<Marshaler>>(
|
|
|
842
905
|
value?.MarshalProtoJSON(state)
|
|
843
906
|
})
|
|
844
907
|
state.WriteArrayEnd()
|
|
845
|
-
return state.Err() == null ?
|
|
908
|
+
return state.Err() == null ?
|
|
909
|
+
[stringToBytes(stream.String()), null]
|
|
910
|
+
: [null, state.Err()]
|
|
846
911
|
}
|
|
847
912
|
|
|
848
|
-
export function GetEnumString(
|
|
913
|
+
export function GetEnumString(
|
|
914
|
+
x: number,
|
|
915
|
+
...valueMaps: Array<Map<number, string> | Record<number, string> | null>
|
|
916
|
+
): string {
|
|
849
917
|
return enumStringValue(x, valueMaps) ?? String(x)
|
|
850
918
|
}
|
|
851
919
|
|
|
852
|
-
export function ParseEnumString(
|
|
920
|
+
export function ParseEnumString(
|
|
921
|
+
v: string,
|
|
922
|
+
...valueMaps: Array<Map<string, number> | Record<string, number> | null>
|
|
923
|
+
): [number, $.GoError] {
|
|
853
924
|
for (const valueMap of valueMaps) {
|
|
854
925
|
const value = lookupStringMap(valueMap, v)
|
|
855
926
|
if (value !== undefined) {
|
|
@@ -857,10 +928,14 @@ export function ParseEnumString(v: string, ...valueMaps: Array<Map<string, numbe
|
|
|
857
928
|
}
|
|
858
929
|
}
|
|
859
930
|
const parsed = Number(v)
|
|
860
|
-
return Number.isFinite(parsed) ?
|
|
931
|
+
return Number.isFinite(parsed) ?
|
|
932
|
+
[parsed, null]
|
|
933
|
+
: [0, $.newError(`invalid enum ${v}`)]
|
|
861
934
|
}
|
|
862
935
|
|
|
863
|
-
function sliceValues<T>(
|
|
936
|
+
function sliceValues<T>(
|
|
937
|
+
values: $.Slice<T> | readonly T[] | null | undefined,
|
|
938
|
+
): T[] {
|
|
864
939
|
return Array.from((values ?? []) as Iterable<T>)
|
|
865
940
|
}
|
|
866
941
|
|
|
@@ -953,7 +1028,10 @@ function enumStringValue(
|
|
|
953
1028
|
return null
|
|
954
1029
|
}
|
|
955
1030
|
|
|
956
|
-
function lookupStringMap(
|
|
1031
|
+
function lookupStringMap(
|
|
1032
|
+
valueMap: Map<string, number> | Record<string, number> | null,
|
|
1033
|
+
key: string,
|
|
1034
|
+
): number | undefined {
|
|
957
1035
|
if (valueMap == null) {
|
|
958
1036
|
return undefined
|
|
959
1037
|
}
|
|
@@ -964,7 +1042,8 @@ function formatError(format: string, args: unknown[]): string {
|
|
|
964
1042
|
return format.replace(/%[vqsd]/g, () => String(args.shift()))
|
|
965
1043
|
}
|
|
966
1044
|
|
|
967
|
-
const base64Alphabet =
|
|
1045
|
+
const base64Alphabet =
|
|
1046
|
+
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
|
|
968
1047
|
|
|
969
1048
|
function base64Encode(bytes: $.Slice<number>): string {
|
|
970
1049
|
const data = sliceValues(bytes)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import * as context from '@goscript/context/index.js'
|
|
4
|
+
|
|
5
|
+
import { MuxedConn, NewWebSocketConn } from './index.js'
|
|
6
|
+
|
|
7
|
+
describe('starpc/srpc override', () => {
|
|
8
|
+
it('wraps websocket connections with the same outbound direction as Go', () => {
|
|
9
|
+
const conn = { Close: () => null }
|
|
10
|
+
|
|
11
|
+
const [serverConn, serverErr] = NewWebSocketConn(
|
|
12
|
+
context.Background(),
|
|
13
|
+
conn,
|
|
14
|
+
true,
|
|
15
|
+
null,
|
|
16
|
+
)
|
|
17
|
+
const [clientConn, clientErr] = NewWebSocketConn(
|
|
18
|
+
context.Background(),
|
|
19
|
+
conn,
|
|
20
|
+
false,
|
|
21
|
+
null,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
expect(serverErr).toBeNull()
|
|
25
|
+
expect(clientErr).toBeNull()
|
|
26
|
+
expect(serverConn).toBeInstanceOf(MuxedConn)
|
|
27
|
+
expect(clientConn).toBeInstanceOf(MuxedConn)
|
|
28
|
+
expect(serverConn?.outbound).toBe(false)
|
|
29
|
+
expect(clientConn?.outbound).toBe(true)
|
|
30
|
+
})
|
|
31
|
+
})
|