goscript 0.1.3 → 0.2.0
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/README.md +5 -2
- package/cmd/go_js_wasm_exec/main.go +201 -0
- package/cmd/go_js_wasm_exec/main_test.go +83 -0
- package/cmd/goscript/{cmd_compile.go → cmd-compile.go} +35 -8
- package/cmd/goscript/cmd-test.go +14 -0
- package/cmd/goscript/cmd-test_test.go +1 -1
- package/cmd/goscript/cmd_compile_test.go +105 -6
- package/compiler/build-flags.go +9 -10
- package/compiler/compile-request.go +12 -9
- package/compiler/compliance_test.go +0 -1
- package/compiler/config.go +2 -0
- package/compiler/gotest/request.go +28 -0
- package/compiler/gotest/runner.go +353 -27
- package/compiler/gotest/runner_test.go +400 -1
- package/compiler/gotest/testdata/browserapi/browserapi_test.go +20 -0
- package/compiler/gotest/testdata/browserapi/go.mod +3 -0
- package/compiler/lowered-program.go +24 -17
- package/compiler/lowering.go +988 -263
- package/compiler/lowering_bench_test.go +364 -0
- package/compiler/override-facts.go +15 -0
- package/compiler/override-parity-verifier.go +450 -0
- package/compiler/override-parity.go +122 -0
- package/compiler/override-registry_test.go +559 -0
- package/compiler/package-graph.go +61 -4
- package/compiler/package-graph_test.go +30 -0
- package/compiler/protobuf-ts-binding.go +514 -0
- package/compiler/protobuf-ts-binding_test.go +172 -0
- package/compiler/semantic-model-types.go +17 -4
- package/compiler/semantic-model.go +709 -72
- package/compiler/semantic-model_test.go +219 -0
- package/compiler/service.go +20 -1
- package/compiler/skeleton_test.go +1008 -20
- package/compiler/typescript-emitter.go +147 -15
- package/dist/gs/builtin/builtin.d.ts +2 -2
- package/dist/gs/builtin/builtin.js +20 -0
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/slice.d.ts +2 -1
- package/dist/gs/builtin/slice.js +34 -4
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/builtin/type.d.ts +14 -6
- package/dist/gs/builtin/type.js +224 -64
- package/dist/gs/builtin/type.js.map +1 -1
- package/dist/gs/builtin/varRef.d.ts +11 -0
- package/dist/gs/builtin/varRef.js +57 -2
- package/dist/gs/builtin/varRef.js.map +1 -1
- package/dist/gs/bytes/buffer.gs.js +1 -1
- package/dist/gs/bytes/buffer.gs.js.map +1 -1
- package/dist/gs/bytes/reader.gs.js +1 -1
- package/dist/gs/bytes/reader.gs.js.map +1 -1
- package/dist/gs/compress/zlib/index.d.ts +13 -6
- package/dist/gs/compress/zlib/index.js +131 -35
- package/dist/gs/compress/zlib/index.js.map +1 -1
- package/dist/gs/crypto/sha1/index.js +2 -5
- package/dist/gs/crypto/sha1/index.js.map +1 -1
- package/dist/gs/crypto/sha256/index.js +2 -5
- package/dist/gs/crypto/sha256/index.js.map +1 -1
- package/dist/gs/crypto/sha512/index.js +2 -5
- package/dist/gs/crypto/sha512/index.js.map +1 -1
- package/dist/gs/embed/index.d.ts +6 -0
- package/dist/gs/embed/index.js +210 -5
- package/dist/gs/embed/index.js.map +1 -1
- package/dist/gs/encoding/json/index.d.ts +114 -0
- package/dist/gs/encoding/json/index.js +544 -36
- package/dist/gs/encoding/json/index.js.map +1 -1
- package/dist/gs/fmt/fmt.d.ts +3 -3
- package/dist/gs/fmt/fmt.js +29 -16
- package/dist/gs/fmt/fmt.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +100 -0
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +564 -0
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
- package/dist/gs/github.com/go-git/go-billy/v6/osfs/index.d.ts +45 -0
- package/dist/gs/github.com/go-git/go-billy/v6/osfs/index.js +229 -0
- package/dist/gs/github.com/go-git/go-billy/v6/osfs/index.js.map +1 -0
- package/dist/gs/github.com/pkg/errors/errors.js +54 -30
- package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
- package/dist/gs/go/scanner/index.d.ts +2 -0
- package/dist/gs/go/scanner/index.js +29 -5
- package/dist/gs/go/scanner/index.js.map +1 -1
- package/dist/gs/go/token/index.js +22 -6
- package/dist/gs/go/token/index.js.map +1 -1
- package/dist/gs/hash/index.d.ts +6 -0
- package/dist/gs/hash/index.js +20 -0
- package/dist/gs/hash/index.js.map +1 -1
- package/dist/gs/internal/goarch/index.d.ts +43 -3
- package/dist/gs/internal/goarch/index.js +42 -10
- package/dist/gs/internal/goarch/index.js.map +1 -1
- package/dist/gs/io/fs/fs.js +26 -14
- package/dist/gs/io/fs/fs.js.map +1 -1
- package/dist/gs/io/fs/readdir.js +8 -4
- package/dist/gs/io/fs/readdir.js.map +1 -1
- package/dist/gs/io/fs/sub.js +8 -1
- package/dist/gs/io/fs/sub.js.map +1 -1
- package/dist/gs/io/io.d.ts +12 -6
- package/dist/gs/io/io.js +87 -42
- package/dist/gs/io/io.js.map +1 -1
- package/dist/gs/math/bits/index.d.ts +31 -5
- package/dist/gs/math/bits/index.js +29 -28
- package/dist/gs/math/bits/index.js.map +1 -1
- package/dist/gs/mime/index.d.ts +16 -0
- package/dist/gs/mime/index.js +315 -6
- package/dist/gs/mime/index.js.map +1 -1
- package/dist/gs/net/http/httptest/index.d.ts +12 -0
- package/dist/gs/net/http/httptest/index.js +85 -6
- package/dist/gs/net/http/httptest/index.js.map +1 -1
- package/dist/gs/net/http/index.d.ts +303 -6
- package/dist/gs/net/http/index.js +1615 -58
- package/dist/gs/net/http/index.js.map +1 -1
- package/dist/gs/os/dir_unix.gs.js +1 -1
- package/dist/gs/os/dir_unix.gs.js.map +1 -1
- package/dist/gs/os/error.gs.js +1 -1
- package/dist/gs/os/error.gs.js.map +1 -1
- package/dist/gs/os/exec.gs.d.ts +1 -0
- package/dist/gs/os/exec.gs.js +4 -8
- package/dist/gs/os/exec.gs.js.map +1 -1
- package/dist/gs/os/exec_posix.gs.js +1 -1
- package/dist/gs/os/exec_posix.gs.js.map +1 -1
- package/dist/gs/os/index.d.ts +1 -1
- package/dist/gs/os/index.js +1 -1
- package/dist/gs/os/index.js.map +1 -1
- package/dist/gs/os/proc.gs.d.ts +4 -0
- package/dist/gs/os/proc.gs.js +12 -6
- package/dist/gs/os/proc.gs.js.map +1 -1
- package/dist/gs/os/root_js.gs.js +1 -1
- package/dist/gs/os/root_js.gs.js.map +1 -1
- package/dist/gs/os/types.gs.js +1 -1
- package/dist/gs/os/types.gs.js.map +1 -1
- package/dist/gs/os/types_js.gs.d.ts +6 -2
- package/dist/gs/os/types_js.gs.js +170 -9
- package/dist/gs/os/types_js.gs.js.map +1 -1
- package/dist/gs/os/types_unix.gs.js +1 -1
- package/dist/gs/os/types_unix.gs.js.map +1 -1
- package/dist/gs/path/path.js +11 -7
- package/dist/gs/path/path.js.map +1 -1
- package/dist/gs/reflect/index.d.ts +5 -4
- package/dist/gs/reflect/index.js +4 -3
- package/dist/gs/reflect/index.js.map +1 -1
- package/dist/gs/reflect/map.js +15 -0
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +26 -6
- package/dist/gs/reflect/type.js +1498 -279
- package/dist/gs/reflect/type.js.map +1 -1
- package/dist/gs/reflect/types.d.ts +14 -6
- package/dist/gs/reflect/types.js +35 -1
- package/dist/gs/reflect/types.js.map +1 -1
- package/dist/gs/reflect/value.d.ts +1 -0
- package/dist/gs/reflect/value.js +83 -41
- package/dist/gs/reflect/value.js.map +1 -1
- package/dist/gs/reflect/visiblefields.js +4 -140
- package/dist/gs/reflect/visiblefields.js.map +1 -1
- package/dist/gs/runtime/pprof/index.d.ts +8 -2
- package/dist/gs/runtime/pprof/index.js +50 -30
- package/dist/gs/runtime/pprof/index.js.map +1 -1
- package/dist/gs/runtime/runtime.js +5 -4
- package/dist/gs/runtime/runtime.js.map +1 -1
- package/dist/gs/runtime/trace/index.js +5 -19
- package/dist/gs/runtime/trace/index.js.map +1 -1
- package/dist/gs/strconv/atoi.gs.js +1 -1
- package/dist/gs/strconv/atoi.gs.js.map +1 -1
- package/dist/gs/strconv/complex.gs.d.ts +3 -0
- package/dist/gs/strconv/complex.gs.js +148 -0
- package/dist/gs/strconv/complex.gs.js.map +1 -0
- package/dist/gs/strconv/index.d.ts +1 -0
- package/dist/gs/strconv/index.js +1 -0
- package/dist/gs/strconv/index.js.map +1 -1
- package/dist/gs/strings/builder.js +1 -1
- package/dist/gs/strings/reader.d.ts +1 -1
- package/dist/gs/strings/reader.js +11 -7
- package/dist/gs/strings/reader.js.map +1 -1
- package/dist/gs/strings/replace.js +15 -7
- package/dist/gs/strings/replace.js.map +1 -1
- package/dist/gs/strings/strings.d.ts +5 -0
- package/dist/gs/strings/strings.js +57 -5
- package/dist/gs/strings/strings.js.map +1 -1
- package/dist/gs/sync/atomic/type.gs.js +9 -9
- package/dist/gs/sync/atomic/type.gs.js.map +1 -1
- package/dist/gs/sync/atomic/value.gs.js +2 -2
- package/dist/gs/sync/atomic/value.gs.js.map +1 -1
- package/dist/gs/sync/sync.d.ts +2 -1
- package/dist/gs/sync/sync.js +37 -16
- package/dist/gs/sync/sync.js.map +1 -1
- package/dist/gs/syscall/env.js +22 -14
- package/dist/gs/syscall/env.js.map +1 -1
- package/dist/gs/syscall/js/index.js +9 -0
- package/dist/gs/syscall/js/index.js.map +1 -1
- package/dist/gs/testing/testing.js +59 -15
- package/dist/gs/testing/testing.js.map +1 -1
- package/dist/gs/time/time.d.ts +24 -1
- package/dist/gs/time/time.js +43 -3
- package/dist/gs/time/time.js.map +1 -1
- package/dist/gs/unique/index.js +7 -1
- package/dist/gs/unique/index.js.map +1 -1
- package/go.mod +3 -3
- package/go.sum +16 -0
- package/gs/builtin/builtin.ts +25 -2
- package/gs/builtin/runtime-contract.test.ts +260 -18
- package/gs/builtin/slice.ts +51 -4
- package/gs/builtin/type.ts +310 -63
- package/gs/builtin/varRef.ts +85 -2
- package/gs/bytes/buffer.gs.ts +1 -1
- package/gs/bytes/reader.gs.ts +1 -1
- package/gs/compress/zlib/index.test.ts +159 -1
- package/gs/compress/zlib/index.ts +164 -37
- package/gs/compress/zlib/meta.json +4 -1
- package/gs/compress/zlib/parity.json +51 -0
- package/gs/crypto/sha1/index.test.ts +19 -2
- package/gs/crypto/sha1/index.ts +3 -6
- package/gs/crypto/sha256/index.test.ts +14 -2
- package/gs/crypto/sha256/index.ts +3 -6
- package/gs/crypto/sha512/index.test.ts +17 -2
- package/gs/crypto/sha512/index.ts +3 -6
- package/gs/embed/index.test.ts +87 -0
- package/gs/embed/index.ts +229 -5
- package/gs/encoding/json/index.test.ts +360 -6
- package/gs/encoding/json/index.ts +679 -38
- package/gs/encoding/json/parity.json +81 -0
- package/gs/fmt/fmt.test.ts +41 -3
- package/gs/fmt/fmt.ts +40 -17
- package/gs/fmt/meta.json +6 -1
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +211 -3
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +857 -1
- package/gs/github.com/go-git/go-billy/v6/osfs/index.test.ts +110 -0
- package/gs/github.com/go-git/go-billy/v6/osfs/index.ts +280 -0
- package/gs/github.com/go-git/go-billy/v6/osfs/meta.json +8 -0
- package/gs/github.com/pkg/errors/errors.ts +54 -30
- package/gs/go/scanner/index.test.ts +39 -56
- package/gs/go/scanner/index.ts +33 -5
- package/gs/go/scanner/parity.json +27 -0
- package/gs/go/token/index.ts +22 -6
- package/gs/hash/index.test.ts +20 -33
- package/gs/hash/index.ts +28 -0
- package/gs/hash/parity.json +21 -0
- package/gs/internal/goarch/index.test.ts +32 -0
- package/gs/internal/goarch/index.ts +45 -13
- package/gs/internal/goarch/parity.json +144 -0
- package/gs/io/fs/fs.ts +26 -14
- package/gs/io/fs/readdir.test.ts +38 -0
- package/gs/io/fs/readdir.ts +8 -4
- package/gs/io/fs/sub.ts +8 -1
- package/gs/io/io.test.ts +77 -6
- package/gs/io/io.ts +115 -52
- package/gs/io/meta.json +7 -1
- package/gs/io/parity.json +162 -0
- package/gs/math/bits/index.test.ts +14 -1
- package/gs/math/bits/index.ts +75 -32
- package/gs/math/bits/parity.json +156 -0
- package/gs/mime/index.test.ts +90 -0
- package/gs/mime/index.ts +369 -6
- package/gs/mime/parity.json +36 -0
- package/gs/net/http/httptest/index.test.ts +98 -2
- package/gs/net/http/httptest/index.ts +101 -6
- package/gs/net/http/httptest/parity.json +15 -0
- package/gs/net/http/index.test.ts +797 -12
- package/gs/net/http/index.ts +1874 -136
- package/gs/net/http/meta.json +16 -1
- package/gs/net/http/parity.json +193 -0
- package/gs/os/dir_unix.gs.ts +1 -1
- package/gs/os/error.gs.ts +1 -1
- package/gs/os/exec.gs.ts +4 -8
- package/gs/os/exec_posix.gs.ts +1 -1
- package/gs/os/file_unix_js.test.ts +52 -0
- package/gs/os/index.test.ts +9 -0
- package/gs/os/index.ts +1 -0
- package/gs/os/meta.json +4 -0
- package/gs/os/parity.json +9 -0
- package/gs/os/proc.gs.ts +18 -5
- package/gs/os/proc.test.ts +26 -0
- package/gs/os/readdir.test.ts +56 -0
- package/gs/os/root_js.gs.ts +1 -1
- package/gs/os/types.gs.ts +1 -1
- package/gs/os/types_js.gs.ts +170 -9
- package/gs/os/types_unix.gs.ts +1 -1
- package/gs/path/path.ts +11 -7
- package/gs/reflect/deepequal.test.ts +10 -1
- package/gs/reflect/field.test.ts +37 -15
- package/gs/reflect/function-types.test.ts +518 -22
- package/gs/reflect/index.ts +8 -6
- package/gs/reflect/map.ts +20 -0
- package/gs/reflect/meta.json +6 -4
- package/gs/reflect/parity.json +234 -0
- package/gs/reflect/sliceat.test.ts +156 -0
- package/gs/reflect/structof.test.ts +401 -0
- package/gs/reflect/type.ts +1980 -365
- package/gs/reflect/typefor.test.ts +540 -10
- package/gs/reflect/types.ts +43 -18
- package/gs/reflect/value.ts +105 -45
- package/gs/reflect/visiblefields.ts +5 -168
- package/gs/runtime/parity.json +24 -0
- package/gs/runtime/pprof/index.test.ts +29 -7
- package/gs/runtime/pprof/index.ts +56 -30
- package/gs/runtime/pprof/parity.json +27 -0
- package/gs/runtime/runtime.test.ts +3 -1
- package/gs/runtime/runtime.ts +4 -3
- package/gs/runtime/trace/index.test.ts +5 -3
- package/gs/runtime/trace/index.ts +8 -20
- package/gs/runtime/trace/parity.json +36 -0
- package/gs/strconv/atoi.gs.ts +1 -1
- package/gs/strconv/complex.gs.ts +174 -0
- package/gs/strconv/complex.test.ts +65 -0
- package/gs/strconv/index.ts +1 -0
- package/gs/strconv/parity.json +120 -0
- package/gs/strings/builder.ts +1 -1
- package/gs/strings/meta.json +5 -2
- package/gs/strings/parity.json +186 -0
- package/gs/strings/reader.test.ts +2 -2
- package/gs/strings/reader.ts +11 -7
- package/gs/strings/replace.ts +15 -7
- package/gs/strings/strings.test.ts +22 -2
- package/gs/strings/strings.ts +64 -6
- package/gs/sync/atomic/type.gs.ts +9 -9
- package/gs/sync/atomic/value.gs.ts +2 -2
- package/gs/sync/meta.json +1 -0
- package/gs/sync/sync.test.ts +41 -1
- package/gs/sync/sync.ts +41 -16
- package/gs/syscall/env.ts +29 -14
- package/gs/syscall/js/index.test.ts +18 -0
- package/gs/syscall/js/index.ts +12 -0
- package/gs/testing/testing.test.ts +99 -3
- package/gs/testing/testing.ts +95 -24
- package/gs/time/parity.json +225 -0
- package/gs/time/time.test.ts +20 -2
- package/gs/time/time.ts +49 -7
- package/gs/unique/index.ts +7 -1
- package/package.json +4 -2
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +0 -217
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +0 -814
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +0 -1
- package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +0 -31
- package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +0 -1233
- package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +0 -46
- /package/compiler/{wasm_api.go → wasm-api.go} +0 -0
|
@@ -51,6 +51,88 @@ export interface CloneVT<T> extends CloneMessage {
|
|
|
51
51
|
CloneVT(): T
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
export function ClonePtr<T>(v: T | $.VarRef<T> | null): $.VarRef<T> | null {
|
|
55
|
+
const value = $.pointerValueOrNil(v)
|
|
56
|
+
return value == null ? null : $.varRef(value)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function CloneBytes<S extends $.Slice<number> | Uint8Array | null>(
|
|
60
|
+
v: S,
|
|
61
|
+
): S {
|
|
62
|
+
if (v == null) {
|
|
63
|
+
return null as S
|
|
64
|
+
}
|
|
65
|
+
if (v instanceof Uint8Array) {
|
|
66
|
+
return new Uint8Array(v) as S
|
|
67
|
+
}
|
|
68
|
+
return $.asArray(v).slice() as S
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function CloneSlice<S extends $.Slice<T> | null, T>(s: S): S {
|
|
72
|
+
if (s == null) {
|
|
73
|
+
return null as S
|
|
74
|
+
}
|
|
75
|
+
if (s instanceof Uint8Array) {
|
|
76
|
+
return new Uint8Array(s) as S
|
|
77
|
+
}
|
|
78
|
+
return $.asArray(s).slice() as S
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function CloneMap<K, V>(m: Map<K, V> | null): Map<K, V> | null {
|
|
82
|
+
return m == null ? null : new Map(m)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function CloneBytesSlice<
|
|
86
|
+
S extends $.Slice<$.Slice<number> | null> | null,
|
|
87
|
+
>(s: S): S {
|
|
88
|
+
if (s == null) {
|
|
89
|
+
return null as S
|
|
90
|
+
}
|
|
91
|
+
return $.asArray(s).map((v) => CloneBytes(v)) as S
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function CloneBytesMap<K, V extends $.Slice<number> | null>(
|
|
95
|
+
m: Map<K, V> | null,
|
|
96
|
+
): Map<K, V> | null {
|
|
97
|
+
if (m == null) {
|
|
98
|
+
return null
|
|
99
|
+
}
|
|
100
|
+
const out = new Map<K, V>()
|
|
101
|
+
for (const [k, v] of m.entries()) {
|
|
102
|
+
out.set(k, CloneBytes(v) as V)
|
|
103
|
+
}
|
|
104
|
+
return out
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function CloneVTValue<T extends CloneVT<T>>(
|
|
108
|
+
v: T | $.VarRef<T> | null,
|
|
109
|
+
): T | null {
|
|
110
|
+
const value = $.pointerValueOrNil(v)
|
|
111
|
+
return value == null ? null : value.CloneVT()
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function CloneVTSlice<T extends CloneVT<T>>(
|
|
115
|
+
s: $.Slice<T | $.VarRef<T> | null> | null,
|
|
116
|
+
): $.Slice<T | null> | null {
|
|
117
|
+
if (s == null) {
|
|
118
|
+
return null
|
|
119
|
+
}
|
|
120
|
+
return $.asArray(s).map((v) => CloneVTValue(v))
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function CloneVTMap<K, V extends CloneVT<V>>(
|
|
124
|
+
m: Map<K, V | $.VarRef<V> | null> | null,
|
|
125
|
+
): Map<K, V | null> | null {
|
|
126
|
+
if (m == null) {
|
|
127
|
+
return null
|
|
128
|
+
}
|
|
129
|
+
const out = new Map<K, V | null>()
|
|
130
|
+
for (const [k, v] of m.entries()) {
|
|
131
|
+
out.set(k, CloneVTValue(v))
|
|
132
|
+
}
|
|
133
|
+
return out
|
|
134
|
+
}
|
|
135
|
+
|
|
54
136
|
export interface EqualVT<T> {
|
|
55
137
|
EqualVT(other: T): boolean
|
|
56
138
|
}
|
|
@@ -73,7 +155,9 @@ export function IsEqualVT<T>(
|
|
|
73
155
|
arg1: T | $.VarRef<T> | null,
|
|
74
156
|
arg2?: T | $.VarRef<T> | null,
|
|
75
157
|
): boolean {
|
|
76
|
-
const t1 = $.pointerValueOrNil(
|
|
158
|
+
const t1 = $.pointerValueOrNil(
|
|
159
|
+
arg2 === undefined ? (arg0 as T | $.VarRef<T> | null) : arg1,
|
|
160
|
+
)
|
|
77
161
|
const t2 = $.pointerValueOrNil(arg2 === undefined ? arg1 : arg2)
|
|
78
162
|
if (t1 == null || t2 == null) {
|
|
79
163
|
return t1 == t2
|
|
@@ -102,6 +186,531 @@ export function IsEqualVTSlice<T>(
|
|
|
102
186
|
return true
|
|
103
187
|
}
|
|
104
188
|
|
|
189
|
+
export function EqualPtr<T>(
|
|
190
|
+
a: T | $.VarRef<T> | null,
|
|
191
|
+
b: T | $.VarRef<T> | null,
|
|
192
|
+
): boolean {
|
|
193
|
+
const av = $.pointerValueOrNil(a)
|
|
194
|
+
const bv = $.pointerValueOrNil(b)
|
|
195
|
+
return (
|
|
196
|
+
(av == null && bv == null) ||
|
|
197
|
+
(av != null && bv != null && $.comparableEqual(av, bv))
|
|
198
|
+
)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export function EqualBytes(
|
|
202
|
+
a: $.Slice<number> | Uint8Array | null,
|
|
203
|
+
b: $.Slice<number> | Uint8Array | null,
|
|
204
|
+
): boolean {
|
|
205
|
+
if ($.len(a) !== $.len(b)) {
|
|
206
|
+
return false
|
|
207
|
+
}
|
|
208
|
+
const aa = $.asArray(a as $.Slice<number>)
|
|
209
|
+
const bb = $.asArray(b as $.Slice<number>)
|
|
210
|
+
for (let i = 0; i < aa.length; i++) {
|
|
211
|
+
if (aa[i] !== bb[i]) {
|
|
212
|
+
return false
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return true
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export function EqualBytesPresent(
|
|
219
|
+
a: $.Slice<number> | Uint8Array | null,
|
|
220
|
+
b: $.Slice<number> | Uint8Array | null,
|
|
221
|
+
): boolean {
|
|
222
|
+
return (
|
|
223
|
+
(a == null && b == null) || (a != null && b != null && EqualBytes(a, b))
|
|
224
|
+
)
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export function EqualSlice<T>(
|
|
228
|
+
a: $.Slice<T> | null,
|
|
229
|
+
b: $.Slice<T> | null,
|
|
230
|
+
): boolean {
|
|
231
|
+
if ($.len(a) !== $.len(b)) {
|
|
232
|
+
return false
|
|
233
|
+
}
|
|
234
|
+
const aa = $.asArray(a)
|
|
235
|
+
const bb = $.asArray(b)
|
|
236
|
+
for (let i = 0; i < aa.length; i++) {
|
|
237
|
+
if (!$.comparableEqual(aa[i], bb[i])) {
|
|
238
|
+
return false
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return true
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export function EqualMap<K, V>(
|
|
245
|
+
a: Map<K, V> | null,
|
|
246
|
+
b: Map<K, V> | null,
|
|
247
|
+
): boolean {
|
|
248
|
+
if ($.len(a) !== $.len(b)) {
|
|
249
|
+
return false
|
|
250
|
+
}
|
|
251
|
+
for (const [k, av] of (a ?? new Map<K, V>()).entries()) {
|
|
252
|
+
const [bv, ok] = $.mapGet(b, k, undefined)
|
|
253
|
+
if (!ok || !$.comparableEqual(av, bv)) {
|
|
254
|
+
return false
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return true
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export function EqualBytesSlice(
|
|
261
|
+
a: $.Slice<$.Slice<number> | Uint8Array | null> | null,
|
|
262
|
+
b: $.Slice<$.Slice<number> | Uint8Array | null> | null,
|
|
263
|
+
): boolean {
|
|
264
|
+
if ($.len(a) !== $.len(b)) {
|
|
265
|
+
return false
|
|
266
|
+
}
|
|
267
|
+
const aa = $.asArray(a)
|
|
268
|
+
const bb = $.asArray(b)
|
|
269
|
+
for (let i = 0; i < aa.length; i++) {
|
|
270
|
+
if (!EqualBytes(aa[i], bb[i])) {
|
|
271
|
+
return false
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return true
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export function EqualBytesMap<K>(
|
|
278
|
+
a: Map<K, $.Slice<number> | Uint8Array | null> | null,
|
|
279
|
+
b: Map<K, $.Slice<number> | Uint8Array | null> | null,
|
|
280
|
+
): boolean {
|
|
281
|
+
if ($.len(a) !== $.len(b)) {
|
|
282
|
+
return false
|
|
283
|
+
}
|
|
284
|
+
for (const [k, av] of (a ?? new Map()).entries()) {
|
|
285
|
+
const [bv, ok] = $.mapGet(b, k, null)
|
|
286
|
+
if (!ok || !EqualBytes(av, bv)) {
|
|
287
|
+
return false
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return true
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
export function EqualVTImplicit<T extends EqualVT<T>>(
|
|
294
|
+
a: T | $.VarRef<T> | null,
|
|
295
|
+
b: T | $.VarRef<T> | null,
|
|
296
|
+
empty: () => T,
|
|
297
|
+
): boolean {
|
|
298
|
+
let av = $.pointerValueOrNil(a)
|
|
299
|
+
let bv = $.pointerValueOrNil(b)
|
|
300
|
+
if (av === bv) {
|
|
301
|
+
return true
|
|
302
|
+
}
|
|
303
|
+
if (av == null) {
|
|
304
|
+
av = empty()
|
|
305
|
+
}
|
|
306
|
+
if (bv == null) {
|
|
307
|
+
bv = empty()
|
|
308
|
+
}
|
|
309
|
+
return av.EqualVT(bv)
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
export function EqualVTSliceImplicit<T extends EqualVT<T>>(
|
|
313
|
+
a: $.Slice<T | $.VarRef<T> | null> | null,
|
|
314
|
+
b: $.Slice<T | $.VarRef<T> | null> | null,
|
|
315
|
+
empty: () => T,
|
|
316
|
+
): boolean {
|
|
317
|
+
if ($.len(a) !== $.len(b)) {
|
|
318
|
+
return false
|
|
319
|
+
}
|
|
320
|
+
const aa = $.asArray(a)
|
|
321
|
+
const bb = $.asArray(b)
|
|
322
|
+
for (let i = 0; i < aa.length; i++) {
|
|
323
|
+
if (!EqualVTImplicit(aa[i], bb[i], empty)) {
|
|
324
|
+
return false
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return true
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
export function EqualVTMapImplicit<K, V extends EqualVT<V>>(
|
|
331
|
+
a: Map<K, V | $.VarRef<V> | null> | null,
|
|
332
|
+
b: Map<K, V | $.VarRef<V> | null> | null,
|
|
333
|
+
empty: () => V,
|
|
334
|
+
): boolean {
|
|
335
|
+
if ($.len(a) !== $.len(b)) {
|
|
336
|
+
return false
|
|
337
|
+
}
|
|
338
|
+
for (const [k, av] of (a ?? new Map()).entries()) {
|
|
339
|
+
const [bv, ok] = $.mapGet(b, k, null)
|
|
340
|
+
if (!ok || !EqualVTImplicit(av, bv, empty)) {
|
|
341
|
+
return false
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return true
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
type BoundMessageType = {
|
|
348
|
+
fields?: { list(): readonly BoundFieldInfo[] }
|
|
349
|
+
clone?: (value: any) => any
|
|
350
|
+
equals?: (a: any, b: any) => boolean
|
|
351
|
+
fromBinary: (bytes: Uint8Array | null | undefined) => any
|
|
352
|
+
fromJson?: (value: unknown) => any
|
|
353
|
+
fromJsonString?: (value: string | null | undefined) => any
|
|
354
|
+
toBinary: (value: any) => Uint8Array
|
|
355
|
+
toJson?: (value: any) => unknown
|
|
356
|
+
toJsonString?: (value: any) => string
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
type BoundFieldInfo = {
|
|
360
|
+
localName: string
|
|
361
|
+
kind: string
|
|
362
|
+
repeated?: boolean
|
|
363
|
+
oneof?: { localName: string }
|
|
364
|
+
T?: any
|
|
365
|
+
V?: BoundFieldInfo
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
type BoundMessageCtor<T = any> = {
|
|
369
|
+
new (init?: any): T
|
|
370
|
+
__protobufTypeScriptFields?: Record<string, BoundMessageCtor>
|
|
371
|
+
__protobufTypeScriptMessage?: BoundMessageType
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
function boundMessageType(ctor: BoundMessageCtor): BoundMessageType {
|
|
375
|
+
const messageType = ctor.__protobufTypeScriptMessage
|
|
376
|
+
if (messageType == null) {
|
|
377
|
+
throw new Error('protobuf TypeScript binding is missing message type')
|
|
378
|
+
}
|
|
379
|
+
return messageType
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
function resolveBoundMessageType(value: any): BoundMessageType {
|
|
383
|
+
return typeof value === 'function' ? value() : value
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
function boundFieldGoName(field: BoundFieldInfo): string {
|
|
387
|
+
if (field.localName.length === 0) {
|
|
388
|
+
return field.localName
|
|
389
|
+
}
|
|
390
|
+
return field.localName[0].toUpperCase() + field.localName.slice(1)
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
function boundFieldValue(source: any, field: BoundFieldInfo): any {
|
|
394
|
+
if (source == null) {
|
|
395
|
+
return undefined
|
|
396
|
+
}
|
|
397
|
+
const local = source[field.localName]
|
|
398
|
+
if (local !== undefined) {
|
|
399
|
+
return local
|
|
400
|
+
}
|
|
401
|
+
return source[boundFieldGoName(field)]
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
function toTypeScriptScalarValue(value: any): any {
|
|
405
|
+
const unwrapped = $.pointerValueOrNil(value)
|
|
406
|
+
if (unwrapped instanceof Uint8Array) {
|
|
407
|
+
return unwrapped
|
|
408
|
+
}
|
|
409
|
+
return unwrapped
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
function toTypeScriptFieldValue(
|
|
413
|
+
field: BoundFieldInfo,
|
|
414
|
+
value: any,
|
|
415
|
+
ctor?: BoundMessageCtor,
|
|
416
|
+
): any {
|
|
417
|
+
value = $.pointerValueOrNil(value)
|
|
418
|
+
if (value == null) {
|
|
419
|
+
return undefined
|
|
420
|
+
}
|
|
421
|
+
if (field.repeated) {
|
|
422
|
+
return $.asArray(value).map((item) =>
|
|
423
|
+
toTypeScriptFieldValue({ ...field, repeated: false }, item, ctor),
|
|
424
|
+
)
|
|
425
|
+
}
|
|
426
|
+
if (field.kind === 'map') {
|
|
427
|
+
const out: Record<string, unknown> = {}
|
|
428
|
+
const valueInfo = field.V
|
|
429
|
+
const entries =
|
|
430
|
+
value instanceof Map ? Array.from(value.entries()) : Object.entries(value)
|
|
431
|
+
for (const [key, item] of entries) {
|
|
432
|
+
out[String(key)] =
|
|
433
|
+
valueInfo != null ?
|
|
434
|
+
toTypeScriptFieldValue(valueInfo, item, ctor)
|
|
435
|
+
: toTypeScriptScalarValue(item)
|
|
436
|
+
}
|
|
437
|
+
return out
|
|
438
|
+
}
|
|
439
|
+
if (field.kind === 'message') {
|
|
440
|
+
const messageType = resolveBoundMessageType(field.T)
|
|
441
|
+
return toTypeScriptMessage(value, messageType, ctor)
|
|
442
|
+
}
|
|
443
|
+
return toTypeScriptScalarValue(value)
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
function toTypeScriptMessage(
|
|
447
|
+
value: any,
|
|
448
|
+
messageType: BoundMessageType,
|
|
449
|
+
ctor?: BoundMessageCtor,
|
|
450
|
+
): any {
|
|
451
|
+
value = $.pointerValueOrNil(value)
|
|
452
|
+
if (value == null) {
|
|
453
|
+
return undefined
|
|
454
|
+
}
|
|
455
|
+
const fields = messageType.fields?.list()
|
|
456
|
+
if (fields == null) {
|
|
457
|
+
return value
|
|
458
|
+
}
|
|
459
|
+
const fieldCtors = ctor?.__protobufTypeScriptFields ?? {}
|
|
460
|
+
const out: Record<string, unknown> = {}
|
|
461
|
+
for (const field of fields) {
|
|
462
|
+
if (field.oneof != null) {
|
|
463
|
+
continue
|
|
464
|
+
}
|
|
465
|
+
const raw = boundFieldValue(value, field)
|
|
466
|
+
if (raw === undefined || raw === null) {
|
|
467
|
+
continue
|
|
468
|
+
}
|
|
469
|
+
out[field.localName] = toTypeScriptFieldValue(
|
|
470
|
+
field,
|
|
471
|
+
raw,
|
|
472
|
+
fieldCtors[field.localName],
|
|
473
|
+
)
|
|
474
|
+
}
|
|
475
|
+
return out
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
function fromTypeScriptScalarValue(value: any): any {
|
|
479
|
+
if (value instanceof Uint8Array) {
|
|
480
|
+
return value
|
|
481
|
+
}
|
|
482
|
+
return value
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
function fromTypeScriptFieldValue(
|
|
486
|
+
field: BoundFieldInfo,
|
|
487
|
+
value: any,
|
|
488
|
+
ctor?: BoundMessageCtor,
|
|
489
|
+
): any {
|
|
490
|
+
if (value == null) {
|
|
491
|
+
return null
|
|
492
|
+
}
|
|
493
|
+
if (field.repeated) {
|
|
494
|
+
return $.arrayToSlice(
|
|
495
|
+
value.map((item: any) =>
|
|
496
|
+
fromTypeScriptFieldValue({ ...field, repeated: false }, item, ctor),
|
|
497
|
+
),
|
|
498
|
+
)
|
|
499
|
+
}
|
|
500
|
+
if (field.kind === 'map') {
|
|
501
|
+
const valueInfo = field.V
|
|
502
|
+
const out = new Map<any, any>()
|
|
503
|
+
for (const [key, item] of Object.entries(value)) {
|
|
504
|
+
out.set(
|
|
505
|
+
key,
|
|
506
|
+
valueInfo != null ?
|
|
507
|
+
fromTypeScriptFieldValue(valueInfo, item, ctor)
|
|
508
|
+
: fromTypeScriptScalarValue(item),
|
|
509
|
+
)
|
|
510
|
+
}
|
|
511
|
+
return out
|
|
512
|
+
}
|
|
513
|
+
if (field.kind === 'message') {
|
|
514
|
+
const messageType = resolveBoundMessageType(field.T)
|
|
515
|
+
if (ctor == null) {
|
|
516
|
+
return value
|
|
517
|
+
}
|
|
518
|
+
return fromTypeScriptMessage(value, ctor, messageType)
|
|
519
|
+
}
|
|
520
|
+
return fromTypeScriptScalarValue(value)
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
function fromTypeScriptMessage(
|
|
524
|
+
value: any,
|
|
525
|
+
ctor: BoundMessageCtor,
|
|
526
|
+
messageType?: BoundMessageType,
|
|
527
|
+
): any {
|
|
528
|
+
if (value == null) {
|
|
529
|
+
return null
|
|
530
|
+
}
|
|
531
|
+
const out = new ctor()
|
|
532
|
+
const fields = (messageType ?? boundMessageType(ctor)).fields?.list()
|
|
533
|
+
if (fields == null) {
|
|
534
|
+
return Object.assign(out, value)
|
|
535
|
+
}
|
|
536
|
+
const fieldCtors = ctor.__protobufTypeScriptFields ?? {}
|
|
537
|
+
for (const field of fields) {
|
|
538
|
+
if (field.oneof != null) {
|
|
539
|
+
continue
|
|
540
|
+
}
|
|
541
|
+
const raw = value[field.localName]
|
|
542
|
+
if (raw === undefined || raw === null) {
|
|
543
|
+
continue
|
|
544
|
+
}
|
|
545
|
+
out[boundFieldGoName(field)] = fromTypeScriptFieldValue(
|
|
546
|
+
field,
|
|
547
|
+
raw,
|
|
548
|
+
fieldCtors[field.localName],
|
|
549
|
+
)
|
|
550
|
+
}
|
|
551
|
+
return out
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
export function CloneBoundMessage<T>(
|
|
555
|
+
ctor: BoundMessageCtor<T>,
|
|
556
|
+
value: T | $.VarRef<T> | null,
|
|
557
|
+
): T | null {
|
|
558
|
+
const messageType = boundMessageType(ctor)
|
|
559
|
+
const encoded = toTypeScriptMessage(value, messageType, ctor)
|
|
560
|
+
const cloned = messageType.clone?.(encoded) ?? structuredClone(encoded)
|
|
561
|
+
return fromTypeScriptMessage(cloned, ctor, messageType)
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
export function EqualBoundMessage<T>(
|
|
565
|
+
ctor: BoundMessageCtor<T>,
|
|
566
|
+
a: T | $.VarRef<T> | null,
|
|
567
|
+
b: T | $.VarRef<T> | null,
|
|
568
|
+
): boolean {
|
|
569
|
+
const messageType = boundMessageType(ctor)
|
|
570
|
+
const left = toTypeScriptMessage(a, messageType, ctor)
|
|
571
|
+
const right = toTypeScriptMessage(b, messageType, ctor)
|
|
572
|
+
return (
|
|
573
|
+
messageType.equals?.(left, right) ??
|
|
574
|
+
JSON.stringify(left) === JSON.stringify(right)
|
|
575
|
+
)
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
export function MarshalBoundMessageVT<T>(
|
|
579
|
+
ctor: BoundMessageCtor<T>,
|
|
580
|
+
value: T | $.VarRef<T> | null,
|
|
581
|
+
): [$.Slice<number>, $.GoError] {
|
|
582
|
+
try {
|
|
583
|
+
const messageType = boundMessageType(ctor)
|
|
584
|
+
return [
|
|
585
|
+
messageType.toBinary(toTypeScriptMessage(value, messageType, ctor)),
|
|
586
|
+
null,
|
|
587
|
+
]
|
|
588
|
+
} catch (err) {
|
|
589
|
+
return [null, $.toGoError(err as Error)]
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
export function MarshalBoundMessageToSizedBufferVT<T>(
|
|
594
|
+
ctor: BoundMessageCtor<T>,
|
|
595
|
+
value: T | $.VarRef<T> | null,
|
|
596
|
+
dAtA: $.Slice<number>,
|
|
597
|
+
): [number, $.GoError] {
|
|
598
|
+
const [bytes, err] = MarshalBoundMessageVT(ctor, value)
|
|
599
|
+
if (err != null) {
|
|
600
|
+
return [0, err]
|
|
601
|
+
}
|
|
602
|
+
const offset = $.len(dAtA) - $.len(bytes)
|
|
603
|
+
const src = $.asArray(bytes)
|
|
604
|
+
for (let i = 0; i < src.length; i++) {
|
|
605
|
+
;(dAtA as any)[offset + i] = src[i]
|
|
606
|
+
}
|
|
607
|
+
return [offset, null]
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
export function SizeBoundMessageVT<T>(
|
|
611
|
+
ctor: BoundMessageCtor<T>,
|
|
612
|
+
value: T | $.VarRef<T> | null,
|
|
613
|
+
): number {
|
|
614
|
+
const [bytes, err] = MarshalBoundMessageVT(ctor, value)
|
|
615
|
+
return err == null ? $.len(bytes) : 0
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
export function UnmarshalBoundMessageVT<T>(
|
|
619
|
+
ctor: BoundMessageCtor<T>,
|
|
620
|
+
target: T | $.VarRef<T> | null,
|
|
621
|
+
data: $.Slice<number>,
|
|
622
|
+
): $.GoError {
|
|
623
|
+
try {
|
|
624
|
+
const messageType = boundMessageType(ctor)
|
|
625
|
+
const decoded = messageType.fromBinary(Uint8Array.from($.asArray(data)))
|
|
626
|
+
const next = fromTypeScriptMessage(decoded, ctor, messageType)
|
|
627
|
+
$.assignStruct($.pointerValue(target), $.markAsStructValue(next))
|
|
628
|
+
return null
|
|
629
|
+
} catch (err) {
|
|
630
|
+
return $.toGoError(err as Error)
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
export function MarshalBoundMessageJSON<T>(
|
|
635
|
+
ctor: BoundMessageCtor<T>,
|
|
636
|
+
value: T | $.VarRef<T> | null,
|
|
637
|
+
): [$.Slice<number>, $.GoError] {
|
|
638
|
+
try {
|
|
639
|
+
const messageType = boundMessageType(ctor)
|
|
640
|
+
const encoded = toTypeScriptMessage(value, messageType, ctor)
|
|
641
|
+
const json =
|
|
642
|
+
messageType.toJsonString?.(encoded) ??
|
|
643
|
+
JSON.stringify(messageType.toJson?.(encoded) ?? encoded)
|
|
644
|
+
return [$.stringToBytes(json), null]
|
|
645
|
+
} catch (err) {
|
|
646
|
+
return [null, $.toGoError(err as Error)]
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
export function UnmarshalBoundMessageJSON<T>(
|
|
651
|
+
ctor: BoundMessageCtor<T>,
|
|
652
|
+
target: T | $.VarRef<T> | null,
|
|
653
|
+
data: $.Slice<number>,
|
|
654
|
+
): $.GoError {
|
|
655
|
+
try {
|
|
656
|
+
const messageType = boundMessageType(ctor)
|
|
657
|
+
const text = $.bytesToString(data)
|
|
658
|
+
const decoded =
|
|
659
|
+
messageType.fromJsonString?.(text) ??
|
|
660
|
+
messageType.fromJson?.(JSON.parse(text))
|
|
661
|
+
const next = fromTypeScriptMessage(decoded, ctor, messageType)
|
|
662
|
+
$.assignStruct($.pointerValue(target), $.markAsStructValue(next))
|
|
663
|
+
return null
|
|
664
|
+
} catch (err) {
|
|
665
|
+
return $.toGoError(err as Error)
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
export function MarshalBoundMessageProtoJSON<T>(
|
|
670
|
+
ctor: BoundMessageCtor<T>,
|
|
671
|
+
value: T | $.VarRef<T> | null,
|
|
672
|
+
state: {
|
|
673
|
+
Write(v: $.Slice<number>): [number, $.GoError]
|
|
674
|
+
SetError(err: $.GoError): void
|
|
675
|
+
} | null,
|
|
676
|
+
): void {
|
|
677
|
+
if (state == null) {
|
|
678
|
+
return
|
|
679
|
+
}
|
|
680
|
+
const [data, err] = MarshalBoundMessageJSON(ctor, value)
|
|
681
|
+
if (err != null) {
|
|
682
|
+
state.SetError(err)
|
|
683
|
+
return
|
|
684
|
+
}
|
|
685
|
+
state.Write(data)
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
export function UnmarshalBoundMessageProtoJSON<T>(
|
|
689
|
+
ctor: BoundMessageCtor<T>,
|
|
690
|
+
target: T | $.VarRef<T> | null,
|
|
691
|
+
state: { SetError(err: $.GoError): void } | null,
|
|
692
|
+
): void {
|
|
693
|
+
if (state == null) {
|
|
694
|
+
return
|
|
695
|
+
}
|
|
696
|
+
try {
|
|
697
|
+
const messageType = boundMessageType(ctor)
|
|
698
|
+
const decoded = messageType.fromJson?.((state as any).value)
|
|
699
|
+
const next = fromTypeScriptMessage(decoded, ctor, messageType)
|
|
700
|
+
$.assignStruct($.pointerValue(target), $.markAsStructValue(next))
|
|
701
|
+
} catch (err) {
|
|
702
|
+
state.SetError($.toGoError(err as Error))
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
export function MarshalBoundMessageProtoText<T>(
|
|
707
|
+
ctor: BoundMessageCtor<T>,
|
|
708
|
+
value: T | $.VarRef<T> | null,
|
|
709
|
+
): string {
|
|
710
|
+
const [data, err] = MarshalBoundMessageJSON(ctor, value)
|
|
711
|
+
return err == null ? $.bytesToString(data) : err.Error()
|
|
712
|
+
}
|
|
713
|
+
|
|
105
714
|
export function EncodeVarint(
|
|
106
715
|
dAtA: $.Slice<number>,
|
|
107
716
|
offset: number,
|
|
@@ -163,6 +772,253 @@ export function SizeOfVarint(x: number | bigint): number {
|
|
|
163
772
|
return n
|
|
164
773
|
}
|
|
165
774
|
|
|
775
|
+
export function SizeOfZigzag(x: number | bigint): number {
|
|
776
|
+
const value =
|
|
777
|
+
typeof x === 'bigint' ?
|
|
778
|
+
BigInt.asIntN(64, x)
|
|
779
|
+
: BigInt.asIntN(64, BigInt(Math.trunc(x)))
|
|
780
|
+
return SizeOfVarint(BigInt.asUintN(64, (value << 1n) ^ (value >> 63n)))
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
export function SizeVarintValue(keySize: number, v: number | bigint): number {
|
|
784
|
+
return keySize + SizeOfVarint(v)
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
export function SizeVarintNonZero(keySize: number, v: number | bigint): number {
|
|
788
|
+
return normalizedVarint(v) === 0n ? 0 : SizeVarintValue(keySize, v)
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
export function SizeVarintPtr(
|
|
792
|
+
keySize: number,
|
|
793
|
+
v: number | bigint | $.VarRef<number | bigint> | null,
|
|
794
|
+
): number {
|
|
795
|
+
const value = $.pointerValueOrNil(v)
|
|
796
|
+
return value == null ? 0 : SizeVarintValue(keySize, value)
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
export function SizeVarintSlice(
|
|
800
|
+
keySize: number,
|
|
801
|
+
vals: $.Slice<number | bigint> | null,
|
|
802
|
+
): number {
|
|
803
|
+
let n = 0
|
|
804
|
+
for (const v of vals ?? []) {
|
|
805
|
+
n += SizeVarintValue(keySize, v)
|
|
806
|
+
}
|
|
807
|
+
return n
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
export function SizeVarintPacked(
|
|
811
|
+
keySize: number,
|
|
812
|
+
vals: $.Slice<number | bigint> | null,
|
|
813
|
+
): number {
|
|
814
|
+
if ($.len(vals) === 0) {
|
|
815
|
+
return 0
|
|
816
|
+
}
|
|
817
|
+
let l = 0
|
|
818
|
+
for (const v of vals ?? []) {
|
|
819
|
+
l += SizeOfVarint(v)
|
|
820
|
+
}
|
|
821
|
+
return SizeBytesValue(keySize, l)
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
export function SizeZigzagValue(keySize: number, v: number | bigint): number {
|
|
825
|
+
return keySize + SizeOfZigzag(v)
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
export function SizeZigzagNonZero(keySize: number, v: number | bigint): number {
|
|
829
|
+
return BigInt.asIntN(64, normalizedVarint(v)) === 0n ?
|
|
830
|
+
0
|
|
831
|
+
: SizeZigzagValue(keySize, v)
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
export function SizeZigzagPtr(
|
|
835
|
+
keySize: number,
|
|
836
|
+
v: number | bigint | $.VarRef<number | bigint> | null,
|
|
837
|
+
): number {
|
|
838
|
+
const value = $.pointerValueOrNil(v)
|
|
839
|
+
return value == null ? 0 : SizeZigzagValue(keySize, value)
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
export function SizeZigzagSlice(
|
|
843
|
+
keySize: number,
|
|
844
|
+
vals: $.Slice<number | bigint> | null,
|
|
845
|
+
): number {
|
|
846
|
+
let n = 0
|
|
847
|
+
for (const v of vals ?? []) {
|
|
848
|
+
n += SizeZigzagValue(keySize, v)
|
|
849
|
+
}
|
|
850
|
+
return n
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
export function SizeZigzagPacked(
|
|
854
|
+
keySize: number,
|
|
855
|
+
vals: $.Slice<number | bigint> | null,
|
|
856
|
+
): number {
|
|
857
|
+
if ($.len(vals) === 0) {
|
|
858
|
+
return 0
|
|
859
|
+
}
|
|
860
|
+
let l = 0
|
|
861
|
+
for (const v of vals ?? []) {
|
|
862
|
+
l += SizeOfZigzag(v)
|
|
863
|
+
}
|
|
864
|
+
return SizeBytesValue(keySize, l)
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
export function SizeFixed32Value(keySize: number): number {
|
|
868
|
+
return keySize + 4
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
export function SizeFixed32NonZero(keySize: number, v: number): number {
|
|
872
|
+
return v === 0 ? 0 : SizeFixed32Value(keySize)
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
export function SizeFixed32Ptr(
|
|
876
|
+
keySize: number,
|
|
877
|
+
v: number | $.VarRef<number> | null,
|
|
878
|
+
): number {
|
|
879
|
+
return $.pointerValueOrNil(v) == null ? 0 : SizeFixed32Value(keySize)
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
export function SizeFixed32Slice(
|
|
883
|
+
keySize: number,
|
|
884
|
+
vals: $.Slice<number> | null,
|
|
885
|
+
): number {
|
|
886
|
+
return $.len(vals) * SizeFixed32Value(keySize)
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
export function SizeFixed32Packed(
|
|
890
|
+
keySize: number,
|
|
891
|
+
vals: $.Slice<number> | null,
|
|
892
|
+
): number {
|
|
893
|
+
return $.len(vals) === 0 ? 0 : SizeBytesValue(keySize, $.len(vals) * 4)
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
export function SizeFixed64Value(keySize: number): number {
|
|
897
|
+
return keySize + 8
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
export function SizeFixed64NonZero(
|
|
901
|
+
keySize: number,
|
|
902
|
+
v: number | bigint,
|
|
903
|
+
): number {
|
|
904
|
+
return v === 0 || v === 0n ? 0 : SizeFixed64Value(keySize)
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
export function SizeFixed64Ptr(
|
|
908
|
+
keySize: number,
|
|
909
|
+
v: number | bigint | $.VarRef<number | bigint> | null,
|
|
910
|
+
): number {
|
|
911
|
+
return $.pointerValueOrNil(v) == null ? 0 : SizeFixed64Value(keySize)
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
export function SizeFixed64Slice(
|
|
915
|
+
keySize: number,
|
|
916
|
+
vals: $.Slice<number | bigint> | null,
|
|
917
|
+
): number {
|
|
918
|
+
return $.len(vals) * SizeFixed64Value(keySize)
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
export function SizeFixed64Packed(
|
|
922
|
+
keySize: number,
|
|
923
|
+
vals: $.Slice<number | bigint> | null,
|
|
924
|
+
): number {
|
|
925
|
+
return $.len(vals) === 0 ? 0 : SizeBytesValue(keySize, $.len(vals) * 8)
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
export function SizeBoolValue(keySize: number): number {
|
|
929
|
+
return keySize + 1
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
export function SizeBoolNonZero(keySize: number, v: boolean): number {
|
|
933
|
+
return v ? SizeBoolValue(keySize) : 0
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
export function SizeBoolPtr(
|
|
937
|
+
keySize: number,
|
|
938
|
+
v: boolean | $.VarRef<boolean> | null,
|
|
939
|
+
): number {
|
|
940
|
+
return $.pointerValueOrNil(v) == null ? 0 : SizeBoolValue(keySize)
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
export function SizeBoolSlice(
|
|
944
|
+
keySize: number,
|
|
945
|
+
vals: $.Slice<boolean> | null,
|
|
946
|
+
): number {
|
|
947
|
+
return $.len(vals) * SizeBoolValue(keySize)
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
export function SizeBoolPacked(
|
|
951
|
+
keySize: number,
|
|
952
|
+
vals: $.Slice<boolean> | null,
|
|
953
|
+
): number {
|
|
954
|
+
return $.len(vals) === 0 ? 0 : SizeBytesValue(keySize, $.len(vals))
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
export function SizeStringValue(keySize: number, v: string): number {
|
|
958
|
+
const l = $.len(v)
|
|
959
|
+
return keySize + l + SizeOfVarint(l)
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
export function SizeStringNonEmpty(keySize: number, v: string): number {
|
|
963
|
+
return $.len(v) === 0 ? 0 : SizeStringValue(keySize, v)
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
export function SizeStringPtr(
|
|
967
|
+
keySize: number,
|
|
968
|
+
v: string | $.VarRef<string> | null,
|
|
969
|
+
): number {
|
|
970
|
+
const value = $.pointerValueOrNil(v)
|
|
971
|
+
return value == null ? 0 : SizeStringValue(keySize, value)
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
export function SizeStringSlice(
|
|
975
|
+
keySize: number,
|
|
976
|
+
vals: $.Slice<string> | null,
|
|
977
|
+
): number {
|
|
978
|
+
let n = 0
|
|
979
|
+
for (const v of vals ?? []) {
|
|
980
|
+
n += SizeStringValue(keySize, v)
|
|
981
|
+
}
|
|
982
|
+
return n
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
export function SizeBytesValue(keySize: number, l: number): number {
|
|
986
|
+
return keySize + l + SizeOfVarint(l)
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
export function SizeBytesNonEmpty(
|
|
990
|
+
keySize: number,
|
|
991
|
+
v: $.Slice<number> | null,
|
|
992
|
+
): number {
|
|
993
|
+
return $.len(v) === 0 ? 0 : SizeBytesValue(keySize, $.len(v))
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
export function SizeBytesPresent(
|
|
997
|
+
keySize: number,
|
|
998
|
+
v: $.Slice<number> | null,
|
|
999
|
+
): number {
|
|
1000
|
+
return v == null ? 0 : SizeBytesValue(keySize, $.len(v))
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
export function SizeBytesSlice(
|
|
1004
|
+
keySize: number,
|
|
1005
|
+
vals: $.Slice<$.Slice<number> | null> | null,
|
|
1006
|
+
): number {
|
|
1007
|
+
let n = 0
|
|
1008
|
+
for (const v of vals ?? []) {
|
|
1009
|
+
n += SizeBytesValue(keySize, $.len(v))
|
|
1010
|
+
}
|
|
1011
|
+
return n
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
export function SizeMessage(keySize: number, msgSize: number): number {
|
|
1015
|
+
return SizeBytesValue(keySize, msgSize)
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
export function SizeGroup(keySize: number, msgSize: number): number {
|
|
1019
|
+
return msgSize + 2 * keySize
|
|
1020
|
+
}
|
|
1021
|
+
|
|
166
1022
|
function normalizedVarint(value: number | bigint): bigint {
|
|
167
1023
|
if (typeof value === 'bigint') {
|
|
168
1024
|
return BigInt.asUintN(64, value)
|