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
package/gs/io/io.ts
CHANGED
|
@@ -68,71 +68,116 @@ export interface ReadCloser extends Reader, Closer {}
|
|
|
68
68
|
export interface WriteCloser extends Writer, Closer {}
|
|
69
69
|
export interface ReadWriteCloser extends Reader, Writer, Closer {}
|
|
70
70
|
export interface ReadSeeker extends Reader, Seeker {}
|
|
71
|
+
export interface ReadSeekCloser extends Reader, Seeker, Closer {}
|
|
71
72
|
export interface WriteSeeker extends Writer, Seeker {}
|
|
72
73
|
export interface ReadWriteSeeker extends Reader, Writer, Seeker {}
|
|
73
74
|
|
|
74
75
|
class pipeState {
|
|
75
|
-
private chunks: Uint8Array[] = []
|
|
76
|
-
private readOffset = 0
|
|
77
76
|
private readerClosed = false
|
|
78
77
|
private writerClosed = false
|
|
79
78
|
private readerErr: $.GoError = null
|
|
80
79
|
private writerErr: $.GoError = null
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
80
|
+
private pendingReads: Array<{
|
|
81
|
+
data: $.Bytes
|
|
82
|
+
resolve: (result: [number, $.GoError]) => void
|
|
83
|
+
}> = []
|
|
84
|
+
private pendingWrites: Array<{
|
|
85
|
+
data: Uint8Array
|
|
86
|
+
offset: number
|
|
87
|
+
resolve: (result: [number, $.GoError]) => void
|
|
88
|
+
}> = []
|
|
89
|
+
|
|
90
|
+
Read(p: $.Bytes): Promise<[number, $.GoError]> {
|
|
91
|
+
return (async (): Promise<[number, $.GoError]> => {
|
|
92
|
+
if (this.readerClosed) {
|
|
93
|
+
return [0, this.readerErr ?? ErrClosedPipe]
|
|
94
|
+
}
|
|
95
|
+
if ($.len(p) === 0) {
|
|
96
|
+
return [0, null]
|
|
97
|
+
}
|
|
98
|
+
if (this.pendingWrites.length > 0) {
|
|
99
|
+
return this.consumeNextWrite(p)
|
|
100
|
+
}
|
|
90
101
|
if (this.writerClosed) {
|
|
91
102
|
return [0, this.writerErr ?? EOF]
|
|
92
103
|
}
|
|
93
|
-
return [
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
while (copied < $.len(p) && this.chunks.length > 0) {
|
|
98
|
-
const chunk = this.chunks[0]
|
|
99
|
-
const available = chunk.length - this.readOffset
|
|
100
|
-
const want = Math.min($.len(p) - copied, available)
|
|
101
|
-
const target = $.goSlice(p, copied, copied + want)
|
|
102
|
-
$.copy(target, chunk.subarray(this.readOffset, this.readOffset + want))
|
|
103
|
-
copied += want
|
|
104
|
-
this.readOffset += want
|
|
105
|
-
if (this.readOffset === chunk.length) {
|
|
106
|
-
this.chunks.shift()
|
|
107
|
-
this.readOffset = 0
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return [copied, null]
|
|
104
|
+
return await new Promise<[number, $.GoError]>((resolve) => {
|
|
105
|
+
this.pendingReads.push({ data: p, resolve })
|
|
106
|
+
})
|
|
107
|
+
})()
|
|
111
108
|
}
|
|
112
109
|
|
|
113
|
-
Write(p: $.Bytes): [number, $.GoError] {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
110
|
+
Write(p: $.Bytes): Promise<[number, $.GoError]> {
|
|
111
|
+
return (async (): Promise<[number, $.GoError]> => {
|
|
112
|
+
if (this.writerClosed || this.readerClosed) {
|
|
113
|
+
return [0, this.readerErr ?? ErrClosedPipe]
|
|
114
|
+
}
|
|
115
|
+
if ($.len(p) === 0) {
|
|
116
|
+
return [0, null]
|
|
117
|
+
}
|
|
118
|
+
const data = new Uint8Array($.len(p))
|
|
119
|
+
$.copy(data, p)
|
|
120
|
+
return await new Promise<[number, $.GoError]>((resolve) => {
|
|
121
|
+
this.pendingWrites.push({ data, offset: 0, resolve })
|
|
122
|
+
this.drain()
|
|
123
|
+
})
|
|
124
|
+
})()
|
|
121
125
|
}
|
|
122
126
|
|
|
123
127
|
CloseReader(err: $.GoError): $.GoError {
|
|
124
128
|
this.readerClosed = true
|
|
125
129
|
this.readerErr = err
|
|
126
|
-
this.
|
|
127
|
-
this.
|
|
130
|
+
this.resolvePendingReads(ErrClosedPipe)
|
|
131
|
+
this.resolvePendingWrites(ErrClosedPipe)
|
|
128
132
|
return null
|
|
129
133
|
}
|
|
130
134
|
|
|
131
135
|
CloseWriter(err: $.GoError): $.GoError {
|
|
132
136
|
this.writerClosed = true
|
|
133
137
|
this.writerErr = err
|
|
138
|
+
if (this.pendingWrites.length === 0) {
|
|
139
|
+
this.resolvePendingReads(err ?? EOF)
|
|
140
|
+
}
|
|
134
141
|
return null
|
|
135
142
|
}
|
|
143
|
+
|
|
144
|
+
private drain(): void {
|
|
145
|
+
while (this.pendingWrites.length > 0 && this.pendingReads.length > 0) {
|
|
146
|
+
if (this.readerClosed) {
|
|
147
|
+
this.resolvePendingWrites(this.readerErr ?? ErrClosedPipe)
|
|
148
|
+
return
|
|
149
|
+
}
|
|
150
|
+
const pending = this.pendingReads.shift()!
|
|
151
|
+
pending.resolve(this.consumeNextWrite(pending.data))
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
private consumeNextWrite(p: $.Bytes): [number, $.GoError] {
|
|
156
|
+
const pending = this.pendingWrites[0]
|
|
157
|
+
const n = Math.min($.len(p), pending.data.length - pending.offset)
|
|
158
|
+
$.copy(p, pending.data.subarray(pending.offset, pending.offset + n))
|
|
159
|
+
pending.offset += n
|
|
160
|
+
if (pending.offset === pending.data.length) {
|
|
161
|
+
this.pendingWrites.shift()
|
|
162
|
+
pending.resolve([pending.data.length, null])
|
|
163
|
+
if (this.writerClosed && this.pendingWrites.length === 0) {
|
|
164
|
+
this.resolvePendingReads(this.writerErr ?? EOF)
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return [n, null]
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private resolvePendingReads(err: $.GoError): void {
|
|
171
|
+
while (this.pendingReads.length > 0) {
|
|
172
|
+
this.pendingReads.shift()!.resolve([0, err])
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
private resolvePendingWrites(err: $.GoError): void {
|
|
177
|
+
while (this.pendingWrites.length > 0) {
|
|
178
|
+
this.pendingWrites.shift()!.resolve([0, err])
|
|
179
|
+
}
|
|
180
|
+
}
|
|
136
181
|
}
|
|
137
182
|
|
|
138
183
|
// PipeReader is the read half of a pipe.
|
|
@@ -140,7 +185,7 @@ export class PipeReader implements Reader, Closer {
|
|
|
140
185
|
constructor(private pipe: pipeState) {}
|
|
141
186
|
|
|
142
187
|
Read(data: $.Bytes): [number, $.GoError] {
|
|
143
|
-
return this.pipe.Read(data)
|
|
188
|
+
return this.pipe.Read(data) as any
|
|
144
189
|
}
|
|
145
190
|
|
|
146
191
|
Close(): $.GoError {
|
|
@@ -157,7 +202,7 @@ export class PipeWriter implements Writer, Closer {
|
|
|
157
202
|
constructor(private pipe: pipeState) {}
|
|
158
203
|
|
|
159
204
|
Write(data: $.Bytes): [number, $.GoError] {
|
|
160
|
-
return this.pipe.Write(data)
|
|
205
|
+
return this.pipe.Write(data) as any
|
|
161
206
|
}
|
|
162
207
|
|
|
163
208
|
Close(): $.GoError {
|
|
@@ -235,15 +280,18 @@ class DiscardWriter implements Writer {
|
|
|
235
280
|
export const Discard: Writer | null = new DiscardWriter()
|
|
236
281
|
|
|
237
282
|
// WriteString writes the contents of the string s to w, which accepts a slice of bytes
|
|
238
|
-
export function WriteString(
|
|
283
|
+
export async function WriteString(
|
|
284
|
+
w: Writer,
|
|
285
|
+
s: string,
|
|
286
|
+
): Promise<[number, $.GoError]> {
|
|
239
287
|
// Check if w implements StringWriter interface
|
|
240
288
|
if ('WriteString' in w && typeof (w as any).WriteString === 'function') {
|
|
241
|
-
return (w as StringWriter).WriteString(s)
|
|
289
|
+
return await ((w as StringWriter).WriteString(s) as any)
|
|
242
290
|
}
|
|
243
291
|
|
|
244
292
|
// Convert string to bytes and write
|
|
245
293
|
const bytes = new TextEncoder().encode(s)
|
|
246
|
-
return w.Write(bytes)
|
|
294
|
+
return await (w.Write(bytes) as any)
|
|
247
295
|
}
|
|
248
296
|
|
|
249
297
|
// LimitedReader reads from R but limits the amount of data returned to just N bytes
|
|
@@ -251,7 +299,10 @@ export class LimitedReader implements Reader {
|
|
|
251
299
|
public R: Reader | null
|
|
252
300
|
public N: number
|
|
253
301
|
|
|
254
|
-
constructor(
|
|
302
|
+
constructor(
|
|
303
|
+
r?: Reader | { R?: Reader | null; N?: number } | null,
|
|
304
|
+
n?: number,
|
|
305
|
+
) {
|
|
255
306
|
if (r != null && typeof (r as { Read?: unknown }).Read !== 'function') {
|
|
256
307
|
const init = r as { R?: Reader | null; N?: number }
|
|
257
308
|
this.R = init.R ?? null
|
|
@@ -605,7 +656,15 @@ export async function ReadAll(r: Reader): Promise<[$.Bytes, $.GoError]> {
|
|
|
605
656
|
}
|
|
606
657
|
|
|
607
658
|
// NopCloser returns a ReadCloser with a no-op Close method wrapping the provided Reader r
|
|
608
|
-
export function NopCloser(r: Reader): ReadCloser {
|
|
659
|
+
export function NopCloser(r: Reader | null): ReadCloser {
|
|
660
|
+
if (r == null) {
|
|
661
|
+
return {
|
|
662
|
+
Read: () => {
|
|
663
|
+
throw new Error('nil Reader')
|
|
664
|
+
},
|
|
665
|
+
Close: () => null,
|
|
666
|
+
}
|
|
667
|
+
}
|
|
609
668
|
return {
|
|
610
669
|
Read: r.Read.bind(r),
|
|
611
670
|
Close: () => null,
|
|
@@ -655,22 +714,22 @@ class multiReader implements Reader {
|
|
|
655
714
|
|
|
656
715
|
// MultiWriter creates a writer that duplicates its writes to all the provided writers
|
|
657
716
|
export function MultiWriter(...writers: (Writer | null)[]): Writer {
|
|
658
|
-
return new multiWriter(writers.slice())
|
|
717
|
+
return new multiWriter(writers.slice()) as any
|
|
659
718
|
}
|
|
660
719
|
|
|
661
|
-
class multiWriter
|
|
720
|
+
class multiWriter {
|
|
662
721
|
private writers: (Writer | null)[]
|
|
663
722
|
|
|
664
723
|
constructor(writers: (Writer | null)[]) {
|
|
665
724
|
this.writers = writers
|
|
666
725
|
}
|
|
667
726
|
|
|
668
|
-
Write(p: $.Bytes): [number, $.GoError] {
|
|
727
|
+
async Write(p: $.Bytes): Promise<[number, $.GoError]> {
|
|
669
728
|
for (const w of this.writers) {
|
|
670
729
|
if (w == null) {
|
|
671
730
|
throw new Error('io.MultiWriter: nil writer')
|
|
672
731
|
}
|
|
673
|
-
const [n, err] = w.Write(p)
|
|
732
|
+
const [n, err] = await w.Write(p)
|
|
674
733
|
if (err !== null) {
|
|
675
734
|
return [n, err]
|
|
676
735
|
}
|
|
@@ -697,15 +756,19 @@ class teeReader implements Reader {
|
|
|
697
756
|
}
|
|
698
757
|
|
|
699
758
|
Read(p: $.Bytes): [number, $.GoError] {
|
|
759
|
+
return this.read(p) as any
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
private async read(p: $.Bytes): Promise<[number, $.GoError]> {
|
|
700
763
|
if (this.r == null) {
|
|
701
764
|
throw new Error('io.TeeReader: nil reader')
|
|
702
765
|
}
|
|
703
|
-
const [n, err] = this.r.Read(p)
|
|
766
|
+
const [n, err] = await this.r.Read(p)
|
|
704
767
|
if (n > 0) {
|
|
705
768
|
if (this.w == null) {
|
|
706
769
|
throw new Error('io.TeeReader: nil writer')
|
|
707
770
|
}
|
|
708
|
-
const [nw, ew] = this.w.Write($.goSlice(p, 0, n))
|
|
771
|
+
const [nw, ew] = await this.w.Write($.goSlice(p, 0, n))
|
|
709
772
|
if (ew !== null) {
|
|
710
773
|
return [n, ew]
|
|
711
774
|
}
|
package/gs/io/meta.json
CHANGED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"strict": true,
|
|
4
|
+
"symbols": {
|
|
5
|
+
"ByteReader": {
|
|
6
|
+
"status": "real"
|
|
7
|
+
},
|
|
8
|
+
"ByteScanner": {
|
|
9
|
+
"status": "real"
|
|
10
|
+
},
|
|
11
|
+
"ByteWriter": {
|
|
12
|
+
"status": "real"
|
|
13
|
+
},
|
|
14
|
+
"Closer": {
|
|
15
|
+
"status": "real"
|
|
16
|
+
},
|
|
17
|
+
"Copy": {
|
|
18
|
+
"status": "real"
|
|
19
|
+
},
|
|
20
|
+
"CopyBuffer": {
|
|
21
|
+
"status": "real"
|
|
22
|
+
},
|
|
23
|
+
"CopyN": {
|
|
24
|
+
"status": "real"
|
|
25
|
+
},
|
|
26
|
+
"Discard": {
|
|
27
|
+
"status": "real"
|
|
28
|
+
},
|
|
29
|
+
"EOF": {
|
|
30
|
+
"status": "real"
|
|
31
|
+
},
|
|
32
|
+
"ErrClosedPipe": {
|
|
33
|
+
"status": "real"
|
|
34
|
+
},
|
|
35
|
+
"ErrNoProgress": {
|
|
36
|
+
"status": "real"
|
|
37
|
+
},
|
|
38
|
+
"ErrShortBuffer": {
|
|
39
|
+
"status": "real"
|
|
40
|
+
},
|
|
41
|
+
"ErrShortWrite": {
|
|
42
|
+
"status": "real"
|
|
43
|
+
},
|
|
44
|
+
"ErrUnexpectedEOF": {
|
|
45
|
+
"status": "real"
|
|
46
|
+
},
|
|
47
|
+
"LimitedReader": {
|
|
48
|
+
"status": "real"
|
|
49
|
+
},
|
|
50
|
+
"LimitReader": {
|
|
51
|
+
"status": "real"
|
|
52
|
+
},
|
|
53
|
+
"MultiReader": {
|
|
54
|
+
"status": "real"
|
|
55
|
+
},
|
|
56
|
+
"MultiWriter": {
|
|
57
|
+
"status": "real"
|
|
58
|
+
},
|
|
59
|
+
"NewOffsetWriter": {
|
|
60
|
+
"status": "real"
|
|
61
|
+
},
|
|
62
|
+
"NewSectionReader": {
|
|
63
|
+
"status": "real"
|
|
64
|
+
},
|
|
65
|
+
"NopCloser": {
|
|
66
|
+
"status": "real"
|
|
67
|
+
},
|
|
68
|
+
"OffsetWriter": {
|
|
69
|
+
"status": "real"
|
|
70
|
+
},
|
|
71
|
+
"Pipe": {
|
|
72
|
+
"status": "real"
|
|
73
|
+
},
|
|
74
|
+
"PipeReader": {
|
|
75
|
+
"status": "real"
|
|
76
|
+
},
|
|
77
|
+
"PipeWriter": {
|
|
78
|
+
"status": "real"
|
|
79
|
+
},
|
|
80
|
+
"ReadAll": {
|
|
81
|
+
"status": "real"
|
|
82
|
+
},
|
|
83
|
+
"ReadAtLeast": {
|
|
84
|
+
"status": "real"
|
|
85
|
+
},
|
|
86
|
+
"ReadCloser": {
|
|
87
|
+
"status": "real"
|
|
88
|
+
},
|
|
89
|
+
"Reader": {
|
|
90
|
+
"status": "real"
|
|
91
|
+
},
|
|
92
|
+
"ReaderAt": {
|
|
93
|
+
"status": "real"
|
|
94
|
+
},
|
|
95
|
+
"ReaderFrom": {
|
|
96
|
+
"status": "real"
|
|
97
|
+
},
|
|
98
|
+
"ReadFull": {
|
|
99
|
+
"status": "real"
|
|
100
|
+
},
|
|
101
|
+
"ReadSeekCloser": {
|
|
102
|
+
"status": "real"
|
|
103
|
+
},
|
|
104
|
+
"ReadSeeker": {
|
|
105
|
+
"status": "real"
|
|
106
|
+
},
|
|
107
|
+
"ReadWriteCloser": {
|
|
108
|
+
"status": "real"
|
|
109
|
+
},
|
|
110
|
+
"ReadWriter": {
|
|
111
|
+
"status": "real"
|
|
112
|
+
},
|
|
113
|
+
"ReadWriteSeeker": {
|
|
114
|
+
"status": "real"
|
|
115
|
+
},
|
|
116
|
+
"RuneReader": {
|
|
117
|
+
"status": "real"
|
|
118
|
+
},
|
|
119
|
+
"RuneScanner": {
|
|
120
|
+
"status": "real"
|
|
121
|
+
},
|
|
122
|
+
"SectionReader": {
|
|
123
|
+
"status": "real"
|
|
124
|
+
},
|
|
125
|
+
"SeekCurrent": {
|
|
126
|
+
"status": "real"
|
|
127
|
+
},
|
|
128
|
+
"SeekEnd": {
|
|
129
|
+
"status": "real"
|
|
130
|
+
},
|
|
131
|
+
"Seeker": {
|
|
132
|
+
"status": "real"
|
|
133
|
+
},
|
|
134
|
+
"SeekStart": {
|
|
135
|
+
"status": "real"
|
|
136
|
+
},
|
|
137
|
+
"StringWriter": {
|
|
138
|
+
"status": "real"
|
|
139
|
+
},
|
|
140
|
+
"TeeReader": {
|
|
141
|
+
"status": "real"
|
|
142
|
+
},
|
|
143
|
+
"WriteCloser": {
|
|
144
|
+
"status": "real"
|
|
145
|
+
},
|
|
146
|
+
"Writer": {
|
|
147
|
+
"status": "real"
|
|
148
|
+
},
|
|
149
|
+
"WriterAt": {
|
|
150
|
+
"status": "real"
|
|
151
|
+
},
|
|
152
|
+
"WriterTo": {
|
|
153
|
+
"status": "real"
|
|
154
|
+
},
|
|
155
|
+
"WriteSeeker": {
|
|
156
|
+
"status": "real"
|
|
157
|
+
},
|
|
158
|
+
"WriteString": {
|
|
159
|
+
"status": "real"
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest'
|
|
2
2
|
|
|
3
|
-
import { Mul64 } from './index.js'
|
|
3
|
+
import { Mul64, Rem, Rem32, Rem64, RotateLeft16, RotateLeft32, RotateLeft64, RotateLeft8 } from './index.js'
|
|
4
4
|
|
|
5
5
|
describe('math/bits override', () => {
|
|
6
6
|
it('returns the full 128-bit product from Mul64', () => {
|
|
@@ -17,4 +17,17 @@ describe('math/bits override', () => {
|
|
|
17
17
|
0xffc0000000000001n,
|
|
18
18
|
])
|
|
19
19
|
})
|
|
20
|
+
|
|
21
|
+
it('returns remainders from double-word division helpers', () => {
|
|
22
|
+
expect(Rem32(1, 0, 3)).toBe(1)
|
|
23
|
+
expect(Rem(1n, 0n, 3n)).toBe(1n)
|
|
24
|
+
expect(Rem64(1n, 0n, 3n)).toBe(1n)
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
it('rotates right for negative counts', () => {
|
|
28
|
+
expect(RotateLeft8(1, -1)).toBe(0x80)
|
|
29
|
+
expect(RotateLeft16(1, -1)).toBe(0x8000)
|
|
30
|
+
expect(RotateLeft32(1, -1)).toBe(0x80000000)
|
|
31
|
+
expect(RotateLeft64(1n, -1)).toBe(0x8000000000000000n)
|
|
32
|
+
})
|
|
20
33
|
})
|