goscript 0.1.0 → 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/README.md +267 -255
- package/cmd/goscript/cmd-test.go +286 -0
- package/cmd/goscript/cmd-test_test.go +76 -0
- package/cmd/goscript/cmd_compile.go +9 -0
- package/cmd/goscript/main.go +1 -0
- package/compiler/build-flags.go +38 -0
- package/compiler/compile-request.go +33 -0
- package/compiler/compiler.go +1 -1
- package/compiler/compliance_test.go +0 -10
- package/compiler/config.go +2 -0
- package/compiler/gotest/owner.go +24 -0
- package/compiler/gotest/package-result.go +69 -0
- package/compiler/gotest/request.go +210 -0
- package/compiler/gotest/result.go +28 -0
- package/compiler/gotest/runner.go +1225 -0
- package/compiler/gotest/runner_test.go +1271 -0
- package/compiler/gotest/test.go +9 -0
- package/compiler/index.test.ts +1 -1
- package/compiler/lowered-program.go +80 -21
- package/compiler/lowering.go +6754 -602
- package/compiler/override-facts.go +357 -0
- package/compiler/override-registry.go +52 -190
- package/compiler/override-registry_test.go +182 -0
- package/compiler/package-graph.go +50 -27
- package/compiler/package-graph_test.go +99 -9
- package/compiler/package-test-function.go +9 -0
- package/compiler/package-test-graph-package.go +40 -0
- package/compiler/package-test-graph-variant.go +129 -0
- package/compiler/package-test-graph.go +112 -0
- package/compiler/package-test-graph_test.go +202 -0
- package/compiler/runtime-contract.go +229 -29
- package/compiler/runtime-contract_test.go +44 -30
- package/compiler/semantic-model-types.go +25 -6
- package/compiler/semantic-model.go +819 -74
- package/compiler/semantic-model_test.go +104 -0
- package/compiler/service.go +10 -4
- package/compiler/skeleton_test.go +2777 -524
- package/compiler/tsworkspace/owner-process-unix_test.go +72 -0
- package/compiler/tsworkspace/owner.go +342 -0
- package/compiler/tsworkspace/owner_test.go +93 -0
- package/compiler/tsworkspace/result.go +17 -0
- package/compiler/tsworkspace/tool-process-other.go +14 -0
- package/compiler/tsworkspace/tool-process-unix.go +19 -0
- package/compiler/typescript-emitter.go +576 -86
- package/compiler/wasm/compile.go +1 -1
- package/compiler/wasm/compile_test.go +61 -11
- package/compiler/wasm_api.go +172 -7
- package/dist/gs/builtin/builtin.d.ts +40 -3
- package/dist/gs/builtin/builtin.js +430 -22
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/channel.d.ts +32 -10
- package/dist/gs/builtin/channel.js +119 -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 +64 -10
- package/dist/gs/builtin/slice.js +619 -244
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/builtin/type.d.ts +7 -2
- package/dist/gs/builtin/type.js +128 -29
- package/dist/gs/builtin/type.js.map +1 -1
- package/dist/gs/builtin/varRef.d.ts +7 -0
- package/dist/gs/builtin/varRef.js +23 -0
- package/dist/gs/builtin/varRef.js.map +1 -1
- package/dist/gs/bytes/buffer.gs.js +74 -70
- 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/bytes/reader.gs.js +20 -18
- package/dist/gs/bytes/reader.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 +6 -5
- package/dist/gs/context/context.js +17 -12
- 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/internal/fips140deps/byteorder/index.d.ts +1 -0
- package/dist/gs/crypto/internal/fips140deps/byteorder/index.js +2 -0
- package/dist/gs/crypto/internal/fips140deps/byteorder/index.js.map +1 -0
- package/dist/gs/crypto/internal/fips140deps/godebug/index.d.ts +1 -0
- package/dist/gs/crypto/internal/fips140deps/godebug/index.js +2 -0
- package/dist/gs/crypto/internal/fips140deps/godebug/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/embed/index.d.ts +7 -0
- package/dist/gs/embed/index.js +16 -0
- package/dist/gs/embed/index.js.map +1 -0
- package/dist/gs/encoding/json/index.d.ts +4 -0
- package/dist/gs/encoding/json/index.js +33 -0
- package/dist/gs/encoding/json/index.js.map +1 -1
- package/dist/gs/errors/errors.d.ts +4 -0
- package/dist/gs/errors/errors.js +108 -4
- package/dist/gs/errors/errors.js.map +1 -1
- package/dist/gs/fmt/fmt.d.ts +4 -4
- package/dist/gs/fmt/fmt.js +42 -11
- package/dist/gs/fmt/fmt.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +37 -2
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +245 -1
- 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.d.ts +189 -0
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +861 -0
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -0
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +217 -0
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +814 -0
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
- 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.d.ts +9 -0
- package/dist/gs/github.com/klauspost/compress/internal/le/index.js +72 -0
- package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
- 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/internal/scannerhooks/index.d.ts +3 -0
- package/dist/gs/go/internal/scannerhooks/index.js +5 -0
- package/dist/gs/go/internal/scannerhooks/index.js.map +1 -0
- package/dist/gs/go/scanner/index.d.ts +13 -0
- package/dist/gs/go/scanner/index.js +35 -0
- package/dist/gs/go/scanner/index.js.map +1 -1
- package/dist/gs/go/token/index.d.ts +156 -0
- package/dist/gs/go/token/index.js +507 -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/internal/abi/index.d.ts +4 -0
- package/dist/gs/internal/abi/index.js +10 -0
- package/dist/gs/internal/abi/index.js.map +1 -1
- package/dist/gs/internal/bytealg/index.d.ts +2 -0
- package/dist/gs/internal/bytealg/index.js +14 -0
- package/dist/gs/internal/bytealg/index.js.map +1 -1
- package/dist/gs/internal/byteorder/index.d.ts +8 -2
- package/dist/gs/internal/byteorder/index.js +56 -25
- package/dist/gs/internal/byteorder/index.js.map +1 -1
- package/dist/gs/internal/godebug/index.d.ts +12 -0
- package/dist/gs/internal/godebug/index.js +30 -0
- package/dist/gs/internal/godebug/index.js.map +1 -0
- package/dist/gs/io/fs/index.d.ts +1 -0
- package/dist/gs/io/fs/index.js +1 -0
- package/dist/gs/io/fs/index.js.map +1 -1
- package/dist/gs/io/fs/readlink.d.ts +8 -0
- package/dist/gs/io/fs/readlink.js +60 -0
- package/dist/gs/io/fs/readlink.js.map +1 -0
- package/dist/gs/io/fs/walk.d.ts +3 -3
- package/dist/gs/io/fs/walk.js +7 -7
- package/dist/gs/io/fs/walk.js.map +1 -1
- package/dist/gs/io/io.d.ts +40 -6
- package/dist/gs/io/io.js +151 -26
- 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/maps/maps.js +1 -1
- package/dist/gs/maps/maps.js.map +1 -1
- package/dist/gs/math/bits/index.d.ts +13 -4
- package/dist/gs/math/bits/index.js +70 -48
- package/dist/gs/math/bits/index.js.map +1 -1
- package/dist/gs/math/const.gs.d.ts +5 -5
- package/dist/gs/math/const.gs.js +4 -4
- package/dist/gs/math/const.gs.js.map +1 -1
- package/dist/gs/mime/index.d.ts +1 -0
- package/dist/gs/mime/index.js +52 -0
- package/dist/gs/mime/index.js.map +1 -0
- package/dist/gs/net/http/httptest/index.d.ts +30 -0
- package/dist/gs/net/http/httptest/index.js +101 -0
- package/dist/gs/net/http/httptest/index.js.map +1 -0
- package/dist/gs/net/http/index.d.ts +131 -0
- package/dist/gs/net/http/index.js +307 -0
- package/dist/gs/net/http/index.js.map +1 -0
- 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/dir_unix.gs.js +2 -2
- package/dist/gs/os/dir_unix.gs.js.map +1 -1
- 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 +165 -3
- package/dist/gs/path/filepath/match.js.map +1 -1
- package/dist/gs/path/filepath/path.d.ts +8 -4
- package/dist/gs/path/filepath/path.js +192 -8
- package/dist/gs/path/filepath/path.js.map +1 -1
- package/dist/gs/path/path.d.ts +4 -1
- package/dist/gs/path/path.js +16 -4
- package/dist/gs/path/path.js.map +1 -1
- package/dist/gs/reflect/index.d.ts +4 -3
- package/dist/gs/reflect/index.js +3 -2
- 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 +29 -0
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +31 -9
- package/dist/gs/reflect/type.js +536 -43
- 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 +41 -0
- package/dist/gs/runtime/debug/index.js +66 -0
- package/dist/gs/runtime/debug/index.js.map +1 -0
- 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/runtime.d.ts +35 -3
- package/dist/gs/runtime/runtime.js +72 -0
- package/dist/gs/runtime/runtime.js.map +1 -1
- 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 +42 -8
- package/dist/gs/slices/slices.js +425 -11
- 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 +60 -22
- package/dist/gs/sort/slice.gs.js.map +1 -1
- package/dist/gs/sort/sort.gs.d.ts +4 -4
- package/dist/gs/sort/sort.gs.js +11 -8
- package/dist/gs/sort/sort.gs.js.map +1 -1
- package/dist/gs/strings/builder.d.ts +1 -1
- package/dist/gs/strings/builder.js +29 -19
- 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/atomic/type.gs.d.ts +9 -8
- package/dist/gs/sync/atomic/type.gs.js +0 -2
- package/dist/gs/sync/atomic/type.gs.js.map +1 -1
- package/dist/gs/sync/sync.d.ts +8 -3
- package/dist/gs/sync/sync.js +66 -11
- package/dist/gs/sync/sync.js.map +1 -1
- package/dist/gs/syscall/constants.d.ts +36 -24
- package/dist/gs/syscall/constants.js +12 -0
- package/dist/gs/syscall/constants.js.map +1 -1
- package/dist/gs/syscall/errors.d.ts +117 -111
- package/dist/gs/syscall/errors.js +45 -0
- package/dist/gs/syscall/errors.js.map +1 -1
- package/dist/gs/syscall/fs.d.ts +37 -0
- package/dist/gs/syscall/fs.js +102 -0
- package/dist/gs/syscall/fs.js.map +1 -1
- package/dist/gs/syscall/js/index.d.ts +90 -0
- package/dist/gs/syscall/js/index.js +383 -0
- package/dist/gs/syscall/js/index.js.map +1 -0
- package/dist/gs/syscall/types.d.ts +26 -1
- package/dist/gs/syscall/types.js +45 -1
- package/dist/gs/syscall/types.js.map +1 -1
- package/dist/gs/testing/index.d.ts +1 -0
- package/dist/gs/testing/index.js +2 -0
- package/dist/gs/testing/index.js.map +1 -0
- package/dist/gs/testing/testing.d.ts +78 -0
- package/dist/gs/testing/testing.js +318 -0
- package/dist/gs/testing/testing.js.map +1 -0
- package/dist/gs/time/time.d.ts +41 -4
- package/dist/gs/time/time.js +227 -36
- package/dist/gs/time/time.js.map +1 -1
- package/dist/gs/unicode/unicode.d.ts +23 -1
- package/dist/gs/unicode/unicode.js +79 -10
- package/dist/gs/unicode/unicode.js.map +1 -1
- package/dist/gs/unicode/utf8/utf8.d.ts +4 -4
- package/dist/gs/unicode/utf8/utf8.js +24 -11
- package/dist/gs/unicode/utf8/utf8.js.map +1 -1
- package/dist/gs/unique/index.d.ts +11 -0
- package/dist/gs/unique/index.js +76 -0
- package/dist/gs/unique/index.js.map +1 -0
- package/go.mod +8 -8
- package/go.sum +14 -14
- package/gs/builtin/builtin.ts +585 -27
- package/gs/builtin/channel.ts +183 -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 +383 -10
- package/gs/builtin/slice.test.ts +70 -0
- package/gs/builtin/slice.ts +785 -265
- package/gs/builtin/type.ts +160 -41
- package/gs/builtin/varRef.ts +40 -1
- package/gs/bytes/buffer.gs.ts +74 -70
- package/gs/bytes/iter.gs.ts +13 -14
- package/gs/bytes/meta.json +8 -3
- package/gs/bytes/reader.gs.ts +20 -19
- 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 +71 -0
- package/gs/context/context.ts +30 -29
- 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/internal/fips140deps/byteorder/index.ts +1 -0
- package/gs/crypto/internal/fips140deps/godebug/index.ts +1 -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/embed/index.ts +20 -0
- package/gs/embed/meta.json +5 -0
- package/gs/encoding/json/index.test.ts +39 -3
- package/gs/encoding/json/index.ts +45 -3
- package/gs/errors/errors.test.ts +85 -0
- package/gs/errors/errors.ts +132 -4
- package/gs/fmt/fmt.test.ts +3 -1
- package/gs/fmt/fmt.ts +55 -19
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +128 -1
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +342 -4
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +180 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1084 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +31 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +1233 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +46 -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 +37 -0
- package/gs/github.com/klauspost/compress/internal/le/index.ts +115 -0
- 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/internal/scannerhooks/index.test.ts +14 -0
- package/gs/go/internal/scannerhooks/index.ts +9 -0
- package/gs/go/scanner/index.test.ts +22 -0
- package/gs/go/scanner/index.ts +47 -0
- package/gs/go/token/index.test.ts +47 -1
- package/gs/go/token/index.ts +583 -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/abi/index.test.ts +18 -0
- package/gs/internal/abi/index.ts +14 -0
- package/gs/internal/bytealg/index.test.ts +18 -0
- package/gs/internal/bytealg/index.ts +16 -0
- package/gs/internal/byteorder/index.test.ts +39 -0
- package/gs/internal/byteorder/index.ts +100 -27
- package/gs/internal/godebug/index.test.ts +16 -0
- package/gs/internal/godebug/index.ts +35 -0
- package/gs/io/fs/index.ts +1 -0
- package/gs/io/fs/meta.json +5 -0
- package/gs/io/fs/readlink.test.ts +43 -0
- package/gs/io/fs/readlink.ts +69 -0
- package/gs/io/fs/walk.test.ts +61 -0
- package/gs/io/fs/walk.ts +17 -9
- package/gs/io/io.ts +177 -31
- package/gs/io/meta.json +10 -2
- package/gs/iter/iter.ts +8 -2
- package/gs/maps/iter.ts +75 -26
- package/gs/maps/maps.test.ts +23 -0
- package/gs/maps/maps.ts +13 -11
- package/gs/math/bits/index.test.ts +20 -0
- package/gs/math/bits/index.ts +107 -64
- package/gs/math/const.gs.test.ts +11 -5
- package/gs/math/const.gs.ts +5 -6
- package/gs/mime/index.ts +60 -0
- package/gs/net/http/httptest/index.test.ts +53 -0
- package/gs/net/http/httptest/index.ts +120 -0
- package/gs/net/http/index.test.ts +148 -0
- package/gs/net/http/index.ts +432 -0
- 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/dir_unix.gs.ts +2 -3
- 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 +96 -17
- package/gs/path/filepath/match.test.ts +31 -12
- package/gs/path/filepath/match.ts +181 -3
- package/gs/path/filepath/meta.json +6 -0
- package/gs/path/filepath/path.test.ts +80 -0
- package/gs/path/filepath/path.ts +244 -11
- package/gs/path/path.ts +20 -5
- package/gs/reflect/field.test.ts +63 -0
- package/gs/reflect/index.ts +5 -1
- package/gs/reflect/iter.ts +2 -2
- package/gs/reflect/map.test.ts +42 -1
- package/gs/reflect/map.ts +39 -0
- package/gs/reflect/type.ts +728 -65
- 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 +45 -0
- package/gs/runtime/debug/index.ts +96 -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/runtime.test.ts +19 -0
- package/gs/runtime/runtime.ts +98 -3
- 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 +180 -0
- package/gs/slices/slices.ts +502 -15
- package/gs/sort/meta.json +7 -0
- package/gs/sort/slice.gs.ts +85 -26
- package/gs/sort/slice.test.ts +40 -0
- package/gs/sort/sort.gs.ts +16 -13
- package/gs/strings/builder.test.ts +8 -0
- package/gs/strings/builder.ts +33 -20
- 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/atomic/type.gs.ts +13 -14
- package/gs/sync/meta.json +3 -1
- package/gs/sync/sync.test.ts +69 -1
- package/gs/sync/sync.ts +72 -13
- package/gs/syscall/constants.ts +39 -24
- package/gs/syscall/errors.ts +165 -112
- package/gs/syscall/fs.ts +195 -0
- package/gs/syscall/js/index.ts +485 -0
- package/gs/syscall/js/meta.json +4 -0
- package/gs/syscall/net.test.ts +111 -0
- package/gs/syscall/types.ts +63 -2
- package/gs/testing/index.ts +1 -0
- package/gs/testing/meta.json +5 -0
- package/gs/testing/testing.test.ts +146 -0
- package/gs/testing/testing.ts +399 -0
- package/gs/time/meta.json +2 -2
- package/gs/time/time.test.ts +110 -0
- package/gs/time/time.ts +309 -57
- package/gs/unicode/unicode.test.ts +36 -0
- package/gs/unicode/unicode.ts +115 -9
- package/gs/unicode/utf8/utf8.test.ts +13 -0
- package/gs/unicode/utf8/utf8.ts +28 -16
- package/gs/unique/index.ts +98 -0
- package/package.json +3 -2
package/gs/io/io.ts
CHANGED
|
@@ -49,6 +49,9 @@ export interface Writer {
|
|
|
49
49
|
Write(p: $.Bytes): [number, $.GoError]
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
type ReaderLike = Reader | { Reader: Reader | null } | null
|
|
53
|
+
type WriterLike = Writer | { Writer: Writer | null } | null
|
|
54
|
+
|
|
52
55
|
// Closer is the interface that wraps the basic Close method
|
|
53
56
|
export interface Closer {
|
|
54
57
|
Close(): $.GoError
|
|
@@ -68,6 +71,110 @@ export interface ReadSeeker extends Reader, Seeker {}
|
|
|
68
71
|
export interface WriteSeeker extends Writer, Seeker {}
|
|
69
72
|
export interface ReadWriteSeeker extends Reader, Writer, Seeker {}
|
|
70
73
|
|
|
74
|
+
class pipeState {
|
|
75
|
+
private chunks: Uint8Array[] = []
|
|
76
|
+
private readOffset = 0
|
|
77
|
+
private readerClosed = false
|
|
78
|
+
private writerClosed = false
|
|
79
|
+
private readerErr: $.GoError = null
|
|
80
|
+
private writerErr: $.GoError = null
|
|
81
|
+
|
|
82
|
+
Read(p: $.Bytes): [number, $.GoError] {
|
|
83
|
+
if (this.readerClosed) {
|
|
84
|
+
return [0, this.readerErr ?? ErrClosedPipe]
|
|
85
|
+
}
|
|
86
|
+
if ($.len(p) === 0) {
|
|
87
|
+
return [0, null]
|
|
88
|
+
}
|
|
89
|
+
if (this.chunks.length === 0) {
|
|
90
|
+
if (this.writerClosed) {
|
|
91
|
+
return [0, this.writerErr ?? EOF]
|
|
92
|
+
}
|
|
93
|
+
return [0, EOF]
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
let copied = 0
|
|
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]
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
Write(p: $.Bytes): [number, $.GoError] {
|
|
114
|
+
if (this.writerClosed || this.readerClosed) {
|
|
115
|
+
return [0, this.readerErr ?? ErrClosedPipe]
|
|
116
|
+
}
|
|
117
|
+
const data = new Uint8Array($.len(p))
|
|
118
|
+
$.copy(data, p)
|
|
119
|
+
this.chunks.push(data)
|
|
120
|
+
return [$.len(p), null]
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
CloseReader(err: $.GoError): $.GoError {
|
|
124
|
+
this.readerClosed = true
|
|
125
|
+
this.readerErr = err
|
|
126
|
+
this.chunks = []
|
|
127
|
+
this.readOffset = 0
|
|
128
|
+
return null
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
CloseWriter(err: $.GoError): $.GoError {
|
|
132
|
+
this.writerClosed = true
|
|
133
|
+
this.writerErr = err
|
|
134
|
+
return null
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// PipeReader is the read half of a pipe.
|
|
139
|
+
export class PipeReader implements Reader, Closer {
|
|
140
|
+
constructor(private pipe: pipeState) {}
|
|
141
|
+
|
|
142
|
+
Read(data: $.Bytes): [number, $.GoError] {
|
|
143
|
+
return this.pipe.Read(data)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
Close(): $.GoError {
|
|
147
|
+
return this.CloseWithError(null)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
CloseWithError(err: $.GoError): $.GoError {
|
|
151
|
+
return this.pipe.CloseReader(err ?? ErrClosedPipe)
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// PipeWriter is the write half of a pipe.
|
|
156
|
+
export class PipeWriter implements Writer, Closer {
|
|
157
|
+
constructor(private pipe: pipeState) {}
|
|
158
|
+
|
|
159
|
+
Write(data: $.Bytes): [number, $.GoError] {
|
|
160
|
+
return this.pipe.Write(data)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
Close(): $.GoError {
|
|
164
|
+
return this.CloseWithError(null)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
CloseWithError(err: $.GoError): $.GoError {
|
|
168
|
+
return this.pipe.CloseWriter(err ?? EOF)
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Pipe creates a synchronous in-memory pipe.
|
|
173
|
+
export function Pipe(): [PipeReader, PipeWriter] {
|
|
174
|
+
const pipe = new pipeState()
|
|
175
|
+
return [new PipeReader(pipe), new PipeWriter(pipe)]
|
|
176
|
+
}
|
|
177
|
+
|
|
71
178
|
// ReaderAt is the interface that wraps the basic ReadAt method
|
|
72
179
|
export interface ReaderAt {
|
|
73
180
|
ReadAt(p: $.Bytes, off: number): [number, $.GoError]
|
|
@@ -150,18 +257,20 @@ export class LimitedReader implements Reader {
|
|
|
150
257
|
}
|
|
151
258
|
|
|
152
259
|
Read(p: $.Bytes): [number, $.GoError] {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
260
|
+
return (async (): Promise<[number, $.GoError]> => {
|
|
261
|
+
if (this.N <= 0) {
|
|
262
|
+
return [0, EOF]
|
|
263
|
+
}
|
|
156
264
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
265
|
+
let readBuf = p
|
|
266
|
+
if ($.len(p) > this.N) {
|
|
267
|
+
readBuf = $.goSlice(p, 0, this.N)
|
|
268
|
+
}
|
|
161
269
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
270
|
+
const [n, err] = await (this.R.Read(readBuf) as any)
|
|
271
|
+
this.N -= n
|
|
272
|
+
return [n, err]
|
|
273
|
+
})() as any
|
|
165
274
|
}
|
|
166
275
|
}
|
|
167
276
|
|
|
@@ -308,24 +417,33 @@ export function NewOffsetWriter(w: WriterAt, off: number): OffsetWriter {
|
|
|
308
417
|
}
|
|
309
418
|
|
|
310
419
|
// Copy copies from src to dst until either EOF is reached on src or an error occurs
|
|
311
|
-
export function Copy(
|
|
312
|
-
|
|
420
|
+
export async function Copy(
|
|
421
|
+
dst: WriterLike,
|
|
422
|
+
src: ReaderLike,
|
|
423
|
+
): Promise<[number, $.GoError]> {
|
|
424
|
+
return await CopyBuffer(dst, src, null)
|
|
313
425
|
}
|
|
314
426
|
|
|
315
427
|
// CopyBuffer is identical to Copy except that it stages through the provided buffer
|
|
316
|
-
export function CopyBuffer(
|
|
317
|
-
dst:
|
|
318
|
-
src:
|
|
428
|
+
export async function CopyBuffer(
|
|
429
|
+
dst: WriterLike,
|
|
430
|
+
src: ReaderLike,
|
|
319
431
|
buf: $.Bytes | null,
|
|
320
|
-
): [number, $.GoError] {
|
|
432
|
+
): Promise<[number, $.GoError]> {
|
|
433
|
+
dst = unwrapWriter(dst)
|
|
434
|
+
src = unwrapReader(src)
|
|
435
|
+
if (dst === null || src === null) {
|
|
436
|
+
return [0, newError('io: copy with nil reader or writer')]
|
|
437
|
+
}
|
|
438
|
+
|
|
321
439
|
// If src implements WriterTo, use it
|
|
322
440
|
if ('WriteTo' in src && typeof (src as any).WriteTo === 'function') {
|
|
323
|
-
return (src as WriterTo).WriteTo(dst)
|
|
441
|
+
return await ((src as WriterTo).WriteTo(dst) as any)
|
|
324
442
|
}
|
|
325
443
|
|
|
326
444
|
// If dst implements ReaderFrom, use it
|
|
327
445
|
if ('ReadFrom' in dst && typeof (dst as any).ReadFrom === 'function') {
|
|
328
|
-
return (dst as ReaderFrom).ReadFrom(src)
|
|
446
|
+
return await ((dst as ReaderFrom).ReadFrom(src) as any)
|
|
329
447
|
}
|
|
330
448
|
|
|
331
449
|
if (buf === null) {
|
|
@@ -334,9 +452,9 @@ export function CopyBuffer(
|
|
|
334
452
|
|
|
335
453
|
let written = 0
|
|
336
454
|
while (true) {
|
|
337
|
-
const [nr, er] = src.Read(buf)
|
|
455
|
+
const [nr, er] = await (src.Read(buf) as any)
|
|
338
456
|
if (nr > 0) {
|
|
339
|
-
const [nw, ew] = dst.Write($.goSlice(buf, 0, nr))
|
|
457
|
+
const [nw, ew] = await (dst.Write($.goSlice(buf, 0, nr)) as any)
|
|
340
458
|
if (nw < 0 || nr < nw) {
|
|
341
459
|
if (ew === null) {
|
|
342
460
|
return [written, ErrShortWrite]
|
|
@@ -361,13 +479,33 @@ export function CopyBuffer(
|
|
|
361
479
|
return [written, null]
|
|
362
480
|
}
|
|
363
481
|
|
|
482
|
+
function unwrapReader(src: ReaderLike): Reader | null {
|
|
483
|
+
if (src == null) {
|
|
484
|
+
return null
|
|
485
|
+
}
|
|
486
|
+
if ('Read' in src && typeof (src as any).Read === 'function') {
|
|
487
|
+
return src as Reader
|
|
488
|
+
}
|
|
489
|
+
return (src as { Reader: Reader | null }).Reader
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
function unwrapWriter(dst: WriterLike): Writer | null {
|
|
493
|
+
if (dst == null) {
|
|
494
|
+
return null
|
|
495
|
+
}
|
|
496
|
+
if ('Write' in dst && typeof (dst as any).Write === 'function') {
|
|
497
|
+
return dst as Writer
|
|
498
|
+
}
|
|
499
|
+
return (dst as { Writer: Writer | null }).Writer
|
|
500
|
+
}
|
|
501
|
+
|
|
364
502
|
// CopyN copies n bytes (or until an error) from src to dst
|
|
365
|
-
export function CopyN(
|
|
503
|
+
export async function CopyN(
|
|
366
504
|
dst: Writer,
|
|
367
505
|
src: Reader,
|
|
368
506
|
n: number,
|
|
369
|
-
): [number, $.GoError] {
|
|
370
|
-
const [written, err] = Copy(dst, LimitReader(src, n))
|
|
507
|
+
): Promise<[number, $.GoError]> {
|
|
508
|
+
const [written, err] = await Copy(dst, LimitReader(src, n))
|
|
371
509
|
if (written === n) {
|
|
372
510
|
return [written, null]
|
|
373
511
|
}
|
|
@@ -379,23 +517,26 @@ export function CopyN(
|
|
|
379
517
|
}
|
|
380
518
|
|
|
381
519
|
// ReadAtLeast reads from r into buf until it has read at least min bytes
|
|
382
|
-
export function ReadAtLeast(
|
|
520
|
+
export async function ReadAtLeast(
|
|
383
521
|
r: Reader,
|
|
384
522
|
buf: $.Bytes,
|
|
385
523
|
min: number,
|
|
386
|
-
): [number, $.GoError] {
|
|
524
|
+
): Promise<[number, $.GoError]> {
|
|
387
525
|
if ($.len(buf) < min) {
|
|
388
526
|
return [0, ErrShortBuffer]
|
|
389
527
|
}
|
|
390
528
|
|
|
391
529
|
let n = 0
|
|
392
530
|
while (n < min) {
|
|
393
|
-
const [nn, err] = r.Read($.goSlice(buf, n))
|
|
531
|
+
const [nn, err] = await (r.Read($.goSlice(buf, n)) as any)
|
|
394
532
|
n += nn
|
|
395
533
|
if (err !== null) {
|
|
396
534
|
if (err === EOF && n >= min) {
|
|
397
535
|
return [n, null]
|
|
398
536
|
}
|
|
537
|
+
if (err === EOF && n === 0) {
|
|
538
|
+
return [n, EOF]
|
|
539
|
+
}
|
|
399
540
|
if (err === EOF && n < min) {
|
|
400
541
|
return [n, ErrUnexpectedEOF]
|
|
401
542
|
}
|
|
@@ -406,20 +547,25 @@ export function ReadAtLeast(
|
|
|
406
547
|
}
|
|
407
548
|
|
|
408
549
|
// ReadFull reads exactly len(buf) bytes from r into buf
|
|
409
|
-
export function ReadFull(
|
|
410
|
-
|
|
550
|
+
export async function ReadFull(
|
|
551
|
+
r: Reader,
|
|
552
|
+
buf: $.Bytes,
|
|
553
|
+
): Promise<[number, $.GoError]> {
|
|
554
|
+
return await ReadAtLeast(r, buf, $.len(buf))
|
|
411
555
|
}
|
|
412
556
|
|
|
413
557
|
// ReadAll reads from r until an error or EOF and returns the data it read
|
|
414
|
-
export function ReadAll(r: Reader): [$.Bytes, $.GoError] {
|
|
558
|
+
export async function ReadAll(r: Reader): Promise<[$.Bytes, $.GoError]> {
|
|
415
559
|
const chunks: $.Bytes[] = []
|
|
416
560
|
let totalLength = 0
|
|
417
561
|
const buf = $.makeSlice<number>(512, undefined, 'byte')
|
|
418
562
|
|
|
419
563
|
while (true) {
|
|
420
|
-
const [n, err] = r.Read(buf)
|
|
564
|
+
const [n, err] = await (r.Read(buf) as any)
|
|
421
565
|
if (n > 0) {
|
|
422
|
-
|
|
566
|
+
const chunk = $.makeSlice<number>(n, undefined, 'byte')
|
|
567
|
+
$.copy(chunk, $.goSlice(buf, 0, n))
|
|
568
|
+
chunks.push(chunk)
|
|
423
569
|
totalLength += n
|
|
424
570
|
}
|
|
425
571
|
if (err !== null) {
|
package/gs/io/meta.json
CHANGED
package/gs/iter/iter.ts
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
// TypeScript implementation of Go's iter package
|
|
2
2
|
// This provides iterator types and functions
|
|
3
3
|
|
|
4
|
+
export type YieldResult = boolean | globalThis.Promise<boolean>
|
|
5
|
+
|
|
4
6
|
// Seq is an iterator over sequences of individual values
|
|
5
|
-
export type Seq<V> = (
|
|
7
|
+
export type Seq<V> = (
|
|
8
|
+
_yield: ((value: V) => YieldResult) | null,
|
|
9
|
+
) => void | globalThis.Promise<void>
|
|
6
10
|
|
|
7
11
|
// Seq2 is an iterator over sequences of pairs of values
|
|
8
|
-
export type Seq2<K, V> = (
|
|
12
|
+
export type Seq2<K, V> = (
|
|
13
|
+
_yield: ((key: K, value: V) => YieldResult) | null,
|
|
14
|
+
) => void | globalThis.Promise<void>
|
|
9
15
|
|
|
10
16
|
// Pull converts the "push-style" iterator sequence seq into a "pull-style" iterator
|
|
11
17
|
// Returns a function that returns the next value and a boolean indicating if iteration should continue
|
package/gs/maps/iter.ts
CHANGED
|
@@ -5,45 +5,39 @@ import * as iter from '@goscript/iter/index.js'
|
|
|
5
5
|
// All returns an iterator over key-value pairs from m.
|
|
6
6
|
// The iteration order is not specified and is not guaranteed
|
|
7
7
|
// to be the same from one call to the next.
|
|
8
|
-
export function All<K extends $.Comparable
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
}
|
|
8
|
+
export function All<K extends $.Comparable | null, V>(
|
|
9
|
+
m: Map<K, V> | null,
|
|
10
|
+
): iter.Seq2<K, V> {
|
|
11
|
+
return (_yield: ((p0: K, p1: V) => iter.YieldResult) | null):
|
|
12
|
+
| void
|
|
13
|
+
| globalThis.Promise<void> => iteratePairs(m?.entries() ?? [], _yield)
|
|
16
14
|
}
|
|
17
15
|
|
|
18
16
|
// Keys returns an iterator over keys in m.
|
|
19
17
|
// The iteration order is not specified and is not guaranteed
|
|
20
18
|
// to be the same from one call to the next.
|
|
21
|
-
export function Keys<K extends $.Comparable
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
}
|
|
19
|
+
export function Keys<K extends $.Comparable | null, V>(
|
|
20
|
+
m: Map<K, V> | null,
|
|
21
|
+
): iter.Seq<K> {
|
|
22
|
+
return (_yield: ((p0: K) => iter.YieldResult) | null):
|
|
23
|
+
| void
|
|
24
|
+
| globalThis.Promise<void> => iterateValues(mapKeys(m), _yield)
|
|
29
25
|
}
|
|
30
26
|
|
|
31
27
|
// Values returns an iterator over values in m.
|
|
32
28
|
// The iteration order is not specified and is not guaranteed
|
|
33
29
|
// to be the same from one call to the next.
|
|
34
|
-
export function Values<K extends $.Comparable
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
}
|
|
30
|
+
export function Values<K extends $.Comparable | null, V>(
|
|
31
|
+
m: Map<K, V> | null,
|
|
32
|
+
): iter.Seq<V> {
|
|
33
|
+
return (_yield: ((p0: V) => iter.YieldResult) | null):
|
|
34
|
+
| void
|
|
35
|
+
| globalThis.Promise<void> => iterateValues(mapValues(m), _yield)
|
|
42
36
|
}
|
|
43
37
|
|
|
44
38
|
// Insert adds the key-value pairs from seq to m.
|
|
45
39
|
// If a key in seq already exists in m, its value will be overwritten.
|
|
46
|
-
export function Insert<K extends $.Comparable, V>(
|
|
40
|
+
export function Insert<K extends $.Comparable | null, V>(
|
|
47
41
|
m: Map<K, V>,
|
|
48
42
|
seq: iter.Seq2<K, V>,
|
|
49
43
|
): void {
|
|
@@ -58,10 +52,65 @@ export function Insert<K extends $.Comparable, V>(
|
|
|
58
52
|
|
|
59
53
|
// Collect collects key-value pairs from seq into a new map
|
|
60
54
|
// and returns it.
|
|
61
|
-
export function Collect<K extends $.Comparable, V>(
|
|
55
|
+
export function Collect<K extends $.Comparable | null, V>(
|
|
62
56
|
seq: iter.Seq2<K, V>,
|
|
63
57
|
): Map<K, V> {
|
|
64
58
|
let m = $.makeMap<K, V>()
|
|
65
59
|
Insert(m, seq)
|
|
66
60
|
return m
|
|
67
61
|
}
|
|
62
|
+
|
|
63
|
+
function mapKeys<K extends $.Comparable | null, V>(m: Map<K, V> | null): K[] {
|
|
64
|
+
return Array.from(m?.keys() ?? [])
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function mapValues<K extends $.Comparable | null, V>(m: Map<K, V> | null): V[] {
|
|
68
|
+
return Array.from(m?.values() ?? [])
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function iterateValues<T>(
|
|
72
|
+
values: Iterable<T>,
|
|
73
|
+
yieldValue: ((value: T) => iter.YieldResult) | null,
|
|
74
|
+
): void | globalThis.Promise<void> {
|
|
75
|
+
const items = Array.from(values)
|
|
76
|
+
const walk = (idx: number): void | globalThis.Promise<void> => {
|
|
77
|
+
for (; idx < items.length; idx++) {
|
|
78
|
+
const keepGoing = yieldValue!(items[idx])
|
|
79
|
+
if (keepGoing instanceof Promise) {
|
|
80
|
+
return keepGoing.then((next) => {
|
|
81
|
+
if (next) {
|
|
82
|
+
return walk(idx + 1)
|
|
83
|
+
}
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
if (!keepGoing) {
|
|
87
|
+
return
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return walk(0)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function iteratePairs<K, V>(
|
|
95
|
+
entries: Iterable<[K, V]>,
|
|
96
|
+
yieldValue: ((key: K, value: V) => iter.YieldResult) | null,
|
|
97
|
+
): void | globalThis.Promise<void> {
|
|
98
|
+
const items = Array.from(entries)
|
|
99
|
+
const walk = (idx: number): void | globalThis.Promise<void> => {
|
|
100
|
+
for (; idx < items.length; idx++) {
|
|
101
|
+
const [key, value] = items[idx]
|
|
102
|
+
const keepGoing = yieldValue!(key, value)
|
|
103
|
+
if (keepGoing instanceof Promise) {
|
|
104
|
+
return keepGoing.then((next) => {
|
|
105
|
+
if (next) {
|
|
106
|
+
return walk(idx + 1)
|
|
107
|
+
}
|
|
108
|
+
})
|
|
109
|
+
}
|
|
110
|
+
if (!keepGoing) {
|
|
111
|
+
return
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return walk(0)
|
|
116
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { Clone, Values } from './index.js'
|
|
4
|
+
|
|
5
|
+
describe('maps overrides', () => {
|
|
6
|
+
it('accept nilable comparable keys', () => {
|
|
7
|
+
const source = new Map<object | null, number>()
|
|
8
|
+
const key = { name: 'type' }
|
|
9
|
+
source.set(null, 1)
|
|
10
|
+
source.set(key, 2)
|
|
11
|
+
|
|
12
|
+
const cloned = Clone(source)
|
|
13
|
+
expect(cloned?.get(null)).toBe(1)
|
|
14
|
+
expect(cloned?.get(key)).toBe(2)
|
|
15
|
+
|
|
16
|
+
const values: number[] = []
|
|
17
|
+
Values(cloned)((value) => {
|
|
18
|
+
values.push(value)
|
|
19
|
+
return true
|
|
20
|
+
})
|
|
21
|
+
expect(values.sort()).toEqual([1, 2])
|
|
22
|
+
})
|
|
23
|
+
})
|
package/gs/maps/maps.ts
CHANGED
|
@@ -4,7 +4,7 @@ import * as _ from '@goscript/unsafe/index.js'
|
|
|
4
4
|
|
|
5
5
|
// Equal reports whether two maps contain the same key/value pairs.
|
|
6
6
|
// Values are compared using ==.
|
|
7
|
-
export function Equal<K extends $.Comparable, V extends $.Comparable>(
|
|
7
|
+
export function Equal<K extends $.Comparable | null, V extends $.Comparable | null>(
|
|
8
8
|
m1: Map<K, V>,
|
|
9
9
|
m2: Map<K, V>,
|
|
10
10
|
): boolean {
|
|
@@ -22,7 +22,7 @@ export function Equal<K extends $.Comparable, V extends $.Comparable>(
|
|
|
22
22
|
|
|
23
23
|
// EqualFunc is like Equal, but compares values using eq.
|
|
24
24
|
// Keys are still compared with ==.
|
|
25
|
-
export function EqualFunc<K extends $.Comparable, V1, V2>(
|
|
25
|
+
export function EqualFunc<K extends $.Comparable | null, V1, V2>(
|
|
26
26
|
m1: Map<K, V1>,
|
|
27
27
|
m2: Map<K, V2>,
|
|
28
28
|
eq: ((p0: V1, p1: V2) => boolean) | null,
|
|
@@ -40,7 +40,7 @@ export function EqualFunc<K extends $.Comparable, V1, V2>(
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
// clone returns a shallow copy of the map.
|
|
43
|
-
export function clone<K extends $.Comparable, V>(
|
|
43
|
+
export function clone<K extends $.Comparable | null, V>(
|
|
44
44
|
m: Map<K, V> | null,
|
|
45
45
|
): Map<K, V> | null {
|
|
46
46
|
if (m == null) {
|
|
@@ -55,29 +55,31 @@ export function clone<K extends $.Comparable, V>(
|
|
|
55
55
|
|
|
56
56
|
// Clone returns a copy of m. This is a shallow clone:
|
|
57
57
|
// the new keys and values are set using ordinary assignment.
|
|
58
|
-
export function Clone<K extends $.Comparable
|
|
58
|
+
export function Clone<K extends $.Comparable | null, V>(
|
|
59
|
+
m: Map<K, V> | null,
|
|
60
|
+
): Map<K, V> | null {
|
|
59
61
|
// Preserve nil in case it matters.
|
|
60
62
|
if (m == null) {
|
|
61
|
-
return null
|
|
63
|
+
return null
|
|
62
64
|
}
|
|
63
|
-
return clone(m)
|
|
65
|
+
return clone(m)
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
// Copy copies all key/value pairs in src adding them to dst.
|
|
67
69
|
// When a key in src is already present in dst,
|
|
68
70
|
// the value in dst will be overwritten by the value associated
|
|
69
71
|
// with the key in src.
|
|
70
|
-
export function Copy<K extends $.Comparable, V>(
|
|
71
|
-
dst: Map<K, V
|
|
72
|
-
src: Map<K, V
|
|
72
|
+
export function Copy<K extends $.Comparable | null, V>(
|
|
73
|
+
dst: Map<K, V> | null,
|
|
74
|
+
src: Map<K, V> | null,
|
|
73
75
|
): void {
|
|
74
|
-
for (const [k, v] of src
|
|
76
|
+
for (const [k, v] of src?.entries() ?? []) {
|
|
75
77
|
$.mapSet(dst, k, v)
|
|
76
78
|
}
|
|
77
79
|
}
|
|
78
80
|
|
|
79
81
|
// DeleteFunc deletes any key/value pairs from m for which del returns true.
|
|
80
|
-
export function DeleteFunc<K extends $.Comparable, V>(
|
|
82
|
+
export function DeleteFunc<K extends $.Comparable | null, V>(
|
|
81
83
|
m: Map<K, V>,
|
|
82
84
|
del: ((p0: K, p1: V) => boolean) | null,
|
|
83
85
|
): void {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { Mul64 } from './index.js'
|
|
4
|
+
|
|
5
|
+
describe('math/bits override', () => {
|
|
6
|
+
it('returns the full 128-bit product from Mul64', () => {
|
|
7
|
+
expect(Mul64(0xffffffffffffffffn, 0xffffffffffffffffn)).toEqual([
|
|
8
|
+
0xfffffffffffffffen,
|
|
9
|
+
1n,
|
|
10
|
+
])
|
|
11
|
+
expect(Mul64(0x1fffffffffffffn, 0x1fffffffffffffn)).toEqual([
|
|
12
|
+
0x3ffffffffffn,
|
|
13
|
+
0xffc0000000000001n,
|
|
14
|
+
])
|
|
15
|
+
expect(Mul64(0x1fffffffffffff, 0x1fffffffffffff)).toEqual([
|
|
16
|
+
0x3ffffffffff,
|
|
17
|
+
0xffc0000000000001n,
|
|
18
|
+
])
|
|
19
|
+
})
|
|
20
|
+
})
|