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/syscall/fs.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as $ from '@goscript/builtin/index.js'
|
|
2
|
+
import { RWMutex } from '@goscript/sync/index.js'
|
|
2
3
|
import { ENOSYS } from './errors.js'
|
|
4
|
+
import type { Iovec, Sockaddr } from './types.js'
|
|
3
5
|
|
|
4
6
|
// Dirent structure with Reclen field
|
|
5
7
|
export class Dirent {
|
|
@@ -54,9 +56,202 @@ export function Sysctl(_name: string): [string, $.GoError] {
|
|
|
54
56
|
return ['', ENOSYS]
|
|
55
57
|
}
|
|
56
58
|
|
|
59
|
+
export function Unlink(_path: string): $.GoError {
|
|
60
|
+
return ENOSYS
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export const ForkLock = new RWMutex()
|
|
64
|
+
|
|
65
|
+
export function Close(_fd: number): $.GoError {
|
|
66
|
+
return null
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function CloseOnExec(_fd: number): void {}
|
|
70
|
+
|
|
71
|
+
export function SetNonblock(_fd: number, _nonblocking: boolean): $.GoError {
|
|
72
|
+
return null
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function Fchdir(_fd: number): $.GoError {
|
|
76
|
+
return ENOSYS
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function Fchmod(_fd: number, _mode: number): $.GoError {
|
|
80
|
+
return ENOSYS
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function Fchown(_fd: number, _uid: number, _gid: number): $.GoError {
|
|
84
|
+
return ENOSYS
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export function Fstat(
|
|
88
|
+
_fd: number,
|
|
89
|
+
_stat: Stat_t | $.VarRef<Stat_t> | null,
|
|
90
|
+
): $.GoError {
|
|
91
|
+
return ENOSYS
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function Fsync(_fd: number): $.GoError {
|
|
95
|
+
return ENOSYS
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function Ftruncate(_fd: number, _length: number): $.GoError {
|
|
99
|
+
return ENOSYS
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function Read(_fd: number, _b: $.Bytes | null): [number, $.GoError] {
|
|
103
|
+
return [0, ENOSYS]
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function ReadDirent(
|
|
107
|
+
_fd: number,
|
|
108
|
+
_buf: $.Bytes | null,
|
|
109
|
+
): [number, $.GoError] {
|
|
110
|
+
return [0, ENOSYS]
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export function Pread(
|
|
114
|
+
_fd: number,
|
|
115
|
+
_b: $.Bytes | null,
|
|
116
|
+
_offset: number,
|
|
117
|
+
): [number, $.GoError] {
|
|
118
|
+
return [0, ENOSYS]
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export function Pwrite(
|
|
122
|
+
_fd: number,
|
|
123
|
+
_b: $.Bytes | null,
|
|
124
|
+
_offset: number,
|
|
125
|
+
): [number, $.GoError] {
|
|
126
|
+
return [0, ENOSYS]
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export function Seek(
|
|
130
|
+
_fd: number,
|
|
131
|
+
_offset: number,
|
|
132
|
+
_whence: number,
|
|
133
|
+
): [number, $.GoError] {
|
|
134
|
+
return [0, ENOSYS]
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export function Write(_fd: number, _b: $.Bytes | null): [number, $.GoError] {
|
|
138
|
+
return [0, ENOSYS]
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export function Dup(_fd: number): [number, $.GoError] {
|
|
142
|
+
return [0, ENOSYS]
|
|
143
|
+
}
|
|
144
|
+
|
|
57
145
|
// Getpagesize returns the underlying system's memory page size.
|
|
58
146
|
export function Getpagesize(): number {
|
|
59
147
|
// Return a standard page size for JavaScript environment
|
|
60
148
|
// Most systems use 4096 bytes as the default page size
|
|
61
149
|
return 4096
|
|
62
150
|
}
|
|
151
|
+
|
|
152
|
+
export function Socket(
|
|
153
|
+
_domain: number,
|
|
154
|
+
_typ: number,
|
|
155
|
+
_proto: number,
|
|
156
|
+
): [number, $.GoError] {
|
|
157
|
+
return [-1, ENOSYS]
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export function Connect(_fd: number, _sa: Sockaddr | null): $.GoError {
|
|
161
|
+
return ENOSYS
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export function Listen(_fd: number, _backlog: number): $.GoError {
|
|
165
|
+
return ENOSYS
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export function Bind(_fd: number, _sa: Sockaddr | null): $.GoError {
|
|
169
|
+
return ENOSYS
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export function StopIO(_fd: number): $.GoError {
|
|
173
|
+
return ENOSYS
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export function Accept(_fd: number): [number, Sockaddr | null, $.GoError] {
|
|
177
|
+
return [0, null, ENOSYS]
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export function Recvfrom(
|
|
181
|
+
_fd: number,
|
|
182
|
+
_p: $.Bytes | null,
|
|
183
|
+
_flags: number,
|
|
184
|
+
): [number, Sockaddr | null, $.GoError] {
|
|
185
|
+
return [0, null, ENOSYS]
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export function Sendto(
|
|
189
|
+
_fd: number,
|
|
190
|
+
_p: $.Bytes | null,
|
|
191
|
+
_flags: number,
|
|
192
|
+
_to: Sockaddr | null,
|
|
193
|
+
): $.GoError {
|
|
194
|
+
return ENOSYS
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export function Recvmsg(
|
|
198
|
+
_fd: number,
|
|
199
|
+
_p: $.Bytes | null,
|
|
200
|
+
_oob: $.Bytes | null,
|
|
201
|
+
_flags: number,
|
|
202
|
+
): [number, number, number, Sockaddr | null, $.GoError] {
|
|
203
|
+
return [0, 0, 0, null, ENOSYS]
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export function SendmsgN(
|
|
207
|
+
_fd: number,
|
|
208
|
+
_p: $.Bytes | null,
|
|
209
|
+
_oob: $.Bytes | null,
|
|
210
|
+
_to: Sockaddr | null,
|
|
211
|
+
_flags: number,
|
|
212
|
+
): [number, $.GoError] {
|
|
213
|
+
return [0, ENOSYS]
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export function SetReadDeadline(_fd: number, _t: number): $.GoError {
|
|
217
|
+
return ENOSYS
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export function SetWriteDeadline(_fd: number, _t: number): $.GoError {
|
|
221
|
+
return ENOSYS
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export function Shutdown(_fd: number, _how: number): $.GoError {
|
|
225
|
+
return ENOSYS
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export function GetsockoptInt(
|
|
229
|
+
_fd: number,
|
|
230
|
+
_level: number,
|
|
231
|
+
_opt: number,
|
|
232
|
+
): [number, $.GoError] {
|
|
233
|
+
return [0, ENOSYS]
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export function SetsockoptInt(
|
|
237
|
+
_fd: number,
|
|
238
|
+
_level: number,
|
|
239
|
+
_opt: number,
|
|
240
|
+
_value: number,
|
|
241
|
+
): $.GoError {
|
|
242
|
+
return null
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export function readv(
|
|
246
|
+
_fd: number,
|
|
247
|
+
_iovecs: $.Slice<Iovec> | null,
|
|
248
|
+
): [number, $.GoError] {
|
|
249
|
+
return [0, ENOSYS]
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export function writev(
|
|
253
|
+
_fd: number,
|
|
254
|
+
_iovecs: $.Slice<Iovec> | null,
|
|
255
|
+
): [number, $.GoError] {
|
|
256
|
+
return [0, ENOSYS]
|
|
257
|
+
}
|
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
import * as $ from '@goscript/builtin/index.js'
|
|
2
|
+
|
|
3
|
+
export type Type = number
|
|
4
|
+
|
|
5
|
+
export const TypeUndefined: Type = 0
|
|
6
|
+
export const TypeNull: Type = 1
|
|
7
|
+
export const TypeBoolean: Type = 2
|
|
8
|
+
export const TypeNumber: Type = 3
|
|
9
|
+
export const TypeString: Type = 4
|
|
10
|
+
export const TypeSymbol: Type = 5
|
|
11
|
+
export const TypeObject: Type = 6
|
|
12
|
+
export const TypeFunction: Type = 7
|
|
13
|
+
|
|
14
|
+
export class Value {
|
|
15
|
+
public _raw: unknown
|
|
16
|
+
|
|
17
|
+
constructor(init?: Partial<{ raw: unknown }> | unknown) {
|
|
18
|
+
if (isRawInit(init)) {
|
|
19
|
+
this._raw = init.raw
|
|
20
|
+
return
|
|
21
|
+
}
|
|
22
|
+
this._raw = init
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public clone(): Value {
|
|
26
|
+
return new Value({ raw: this._raw })
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public Equal(w: Value): boolean {
|
|
30
|
+
return this._raw === w._raw && !Number.isNaN(this._raw)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public IsUndefined(): boolean {
|
|
34
|
+
return this._raw === undefined
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public IsNull(): boolean {
|
|
38
|
+
return this._raw === null
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public IsNaN(): boolean {
|
|
42
|
+
return typeof this._raw === 'number' && Number.isNaN(this._raw)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public Type(): Type {
|
|
46
|
+
if (this._raw === undefined) {
|
|
47
|
+
return TypeUndefined
|
|
48
|
+
}
|
|
49
|
+
if (this._raw === null) {
|
|
50
|
+
return TypeNull
|
|
51
|
+
}
|
|
52
|
+
switch (typeof this._raw) {
|
|
53
|
+
case 'boolean':
|
|
54
|
+
return TypeBoolean
|
|
55
|
+
case 'number':
|
|
56
|
+
return TypeNumber
|
|
57
|
+
case 'string':
|
|
58
|
+
return TypeString
|
|
59
|
+
case 'symbol':
|
|
60
|
+
return TypeSymbol
|
|
61
|
+
case 'function':
|
|
62
|
+
return TypeFunction
|
|
63
|
+
case 'object':
|
|
64
|
+
return TypeObject
|
|
65
|
+
default:
|
|
66
|
+
$.panic('bad type')
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public Get(p: string): Value {
|
|
71
|
+
this.requireObject('Value.Get')
|
|
72
|
+
return new Value({ raw: Reflect.get(this._raw as object, p) })
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public Set(p: string, x: unknown): void {
|
|
76
|
+
this.requireObject('Value.Set')
|
|
77
|
+
Reflect.set(this._raw as object, p, ValueOf(x)._raw)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public Delete(p: string): void {
|
|
81
|
+
this.requireObject('Value.Delete')
|
|
82
|
+
Reflect.deleteProperty(this._raw as object, p)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
public Index(i: number): Value {
|
|
86
|
+
this.requireObject('Value.Index')
|
|
87
|
+
return new Value({ raw: Reflect.get(this._raw as object, i) })
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
public SetIndex(i: number, x: unknown): void {
|
|
91
|
+
this.requireObject('Value.SetIndex')
|
|
92
|
+
Reflect.set(this._raw as object, i, ValueOf(x)._raw)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
public Length(): number {
|
|
96
|
+
this.requireObject('Value.SetIndex')
|
|
97
|
+
return Number(Reflect.get(this._raw as object, 'length') ?? 0)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public Call(m: string, ...args: unknown[]): Value {
|
|
101
|
+
this.requireObject('Value.Call')
|
|
102
|
+
const fn = Reflect.get(this._raw as object, m)
|
|
103
|
+
if (typeof fn !== 'function') {
|
|
104
|
+
$.panic(
|
|
105
|
+
`syscall/js: Value.Call: property ${m} is not a function, got ${Type_String(ValueOf(fn).Type())}`,
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
return new Value({
|
|
109
|
+
raw: fn.apply(
|
|
110
|
+
this._raw,
|
|
111
|
+
args.map((arg) => ValueOf(arg)._raw),
|
|
112
|
+
),
|
|
113
|
+
})
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
public Invoke(...args: unknown[]): Value {
|
|
117
|
+
if (typeof this._raw !== 'function') {
|
|
118
|
+
$.panic(new ValueError({ Method: 'Value.Invoke', Type: this.Type() }))
|
|
119
|
+
}
|
|
120
|
+
return new Value({
|
|
121
|
+
raw: this._raw(...args.map((arg) => ValueOf(arg)._raw)),
|
|
122
|
+
})
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
public New(...args: unknown[]): Value {
|
|
126
|
+
if (typeof this._raw !== 'function') {
|
|
127
|
+
$.panic(new ValueError({ Method: 'Value.Invoke', Type: this.Type() }))
|
|
128
|
+
}
|
|
129
|
+
return new Value({
|
|
130
|
+
raw: Reflect.construct(
|
|
131
|
+
this._raw,
|
|
132
|
+
args.map((arg) => ValueOf(arg)._raw),
|
|
133
|
+
),
|
|
134
|
+
})
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
public InstanceOf(t: Value): boolean {
|
|
138
|
+
if (typeof t._raw !== 'function') {
|
|
139
|
+
return false
|
|
140
|
+
}
|
|
141
|
+
return this._raw instanceof t._raw
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
public Float(): number {
|
|
145
|
+
return this.number('Value.Float')
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
public Int(): number {
|
|
149
|
+
return Math.trunc(this.number('Value.Int'))
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
public Bool(): boolean {
|
|
153
|
+
if (typeof this._raw !== 'boolean') {
|
|
154
|
+
$.panic(new ValueError({ Method: 'Value.Bool', Type: this.Type() }))
|
|
155
|
+
}
|
|
156
|
+
return this._raw
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
public Truthy(): boolean {
|
|
160
|
+
return !!this._raw
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
public String(): string {
|
|
164
|
+
switch (this.Type()) {
|
|
165
|
+
case TypeString:
|
|
166
|
+
return this._raw as string
|
|
167
|
+
case TypeUndefined:
|
|
168
|
+
return '<undefined>'
|
|
169
|
+
case TypeNull:
|
|
170
|
+
return '<null>'
|
|
171
|
+
case TypeBoolean:
|
|
172
|
+
case TypeNumber:
|
|
173
|
+
return `<${Type_String(this.Type())}: ${String(this._raw)}>`
|
|
174
|
+
case TypeSymbol:
|
|
175
|
+
return '<symbol>'
|
|
176
|
+
case TypeObject:
|
|
177
|
+
return '<object>'
|
|
178
|
+
case TypeFunction:
|
|
179
|
+
return '<function>'
|
|
180
|
+
default:
|
|
181
|
+
$.panic('bad type')
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
private requireObject(method: string): void {
|
|
186
|
+
if (!Type_isObject(this.Type())) {
|
|
187
|
+
$.panic(new ValueError({ Method: method, Type: this.Type() }))
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
private number(method: string): number {
|
|
192
|
+
if (typeof this._raw !== 'number') {
|
|
193
|
+
$.panic(new ValueError({ Method: method, Type: this.Type() }))
|
|
194
|
+
}
|
|
195
|
+
return this._raw
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export class Error {
|
|
200
|
+
public Value: Value
|
|
201
|
+
|
|
202
|
+
constructor(init?: Partial<Error>) {
|
|
203
|
+
this.Value = init?.Value?.clone() ?? Undefined()
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
public clone(): Error {
|
|
207
|
+
return new Error({ Value: this.Value })
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
public Error(): string {
|
|
211
|
+
return `JavaScript error: ${this.Value.Get('message').String()}`
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export class ValueError {
|
|
216
|
+
public Method: string
|
|
217
|
+
public Type: Type
|
|
218
|
+
|
|
219
|
+
constructor(init?: Partial<ValueError>) {
|
|
220
|
+
this.Method = init?.Method ?? ''
|
|
221
|
+
this.Type = init?.Type ?? TypeUndefined
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
public clone(): ValueError {
|
|
225
|
+
return new ValueError({ Method: this.Method, Type: this.Type })
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
public Error(): string {
|
|
229
|
+
return `syscall/js: call of ${this.Method} on ${Type_String(this.Type)}`
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export class Func {
|
|
234
|
+
public Value: Value
|
|
235
|
+
private _released = false
|
|
236
|
+
|
|
237
|
+
constructor(
|
|
238
|
+
init?: Partial<Func> & {
|
|
239
|
+
fn?: (this$: Value, args: $.Slice<Value>) => unknown
|
|
240
|
+
},
|
|
241
|
+
) {
|
|
242
|
+
const fn = init?.fn
|
|
243
|
+
this.Value =
|
|
244
|
+
init?.Value?.clone() ??
|
|
245
|
+
new Value({
|
|
246
|
+
raw: function (this: unknown, ...args: unknown[]) {
|
|
247
|
+
if (fn === undefined) {
|
|
248
|
+
return undefined
|
|
249
|
+
}
|
|
250
|
+
return ValueOf(
|
|
251
|
+
fn(
|
|
252
|
+
new Value({ raw: this }),
|
|
253
|
+
args.map((arg) => new Value({ raw: arg })) as $.Slice<Value>,
|
|
254
|
+
),
|
|
255
|
+
)._raw
|
|
256
|
+
},
|
|
257
|
+
})
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
public clone(): Func {
|
|
261
|
+
return new Func({ Value: this.Value })
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
public Release(): void {
|
|
265
|
+
this._released = true
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
public Equal(w: Value): boolean {
|
|
269
|
+
return this.Value.Equal(w)
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
public IsUndefined(): boolean {
|
|
273
|
+
return this.Value.IsUndefined()
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
public IsNull(): boolean {
|
|
277
|
+
return this.Value.IsNull()
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
public IsNaN(): boolean {
|
|
281
|
+
return this.Value.IsNaN()
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
public Type(): Type {
|
|
285
|
+
return this.Value.Type()
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
public Get(p: string): Value {
|
|
289
|
+
return this.Value.Get(p)
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
public Set(p: string, x: unknown): void {
|
|
293
|
+
this.Value.Set(p, x)
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
public Delete(p: string): void {
|
|
297
|
+
this.Value.Delete(p)
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
public Index(i: number): Value {
|
|
301
|
+
return this.Value.Index(i)
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
public SetIndex(i: number, x: unknown): void {
|
|
305
|
+
this.Value.SetIndex(i, x)
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
public Length(): number {
|
|
309
|
+
return this.Value.Length()
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
public Call(m: string, ...args: unknown[]): Value {
|
|
313
|
+
return this.Value.Call(m, ...args)
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
public Invoke(...args: unknown[]): Value {
|
|
317
|
+
return this.Value.Invoke(...args)
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
public New(...args: unknown[]): Value {
|
|
321
|
+
return this.Value.New(...args)
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
public InstanceOf(t: Value): boolean {
|
|
325
|
+
return this.Value.InstanceOf(t)
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
public Float(): number {
|
|
329
|
+
return this.Value.Float()
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
public Int(): number {
|
|
333
|
+
return this.Value.Int()
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
public Bool(): boolean {
|
|
337
|
+
return this.Value.Bool()
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
public Truthy(): boolean {
|
|
341
|
+
return this.Value.Truthy()
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
public String(): string {
|
|
345
|
+
return this.Value.String()
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
export function Undefined(): Value {
|
|
350
|
+
return new Value({ raw: undefined })
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export function Null(): Value {
|
|
354
|
+
return new Value({ raw: null })
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
export function Global(): Value {
|
|
358
|
+
return new Value({ raw: globalThis })
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
export function ValueOf(x: unknown): Value {
|
|
362
|
+
if (x instanceof Value) {
|
|
363
|
+
return x.clone()
|
|
364
|
+
}
|
|
365
|
+
if (x instanceof Func) {
|
|
366
|
+
return x.Value.clone()
|
|
367
|
+
}
|
|
368
|
+
if (x === null || x === undefined) {
|
|
369
|
+
return Null()
|
|
370
|
+
}
|
|
371
|
+
if (
|
|
372
|
+
typeof x === 'boolean' ||
|
|
373
|
+
typeof x === 'number' ||
|
|
374
|
+
typeof x === 'string'
|
|
375
|
+
) {
|
|
376
|
+
return new Value({ raw: x })
|
|
377
|
+
}
|
|
378
|
+
if (typeof x === 'bigint') {
|
|
379
|
+
return new Value({ raw: Number(x) })
|
|
380
|
+
}
|
|
381
|
+
if (x instanceof Uint8Array) {
|
|
382
|
+
return new Value({ raw: x })
|
|
383
|
+
}
|
|
384
|
+
if (Array.isArray(x)) {
|
|
385
|
+
return new Value({ raw: x.map((item) => ValueOf(item)._raw) })
|
|
386
|
+
}
|
|
387
|
+
if (x instanceof Map) {
|
|
388
|
+
const out: Record<string, unknown> = {}
|
|
389
|
+
for (const [key, value] of x.entries()) {
|
|
390
|
+
out[String(key)] = ValueOf(value)._raw
|
|
391
|
+
}
|
|
392
|
+
return new Value({ raw: out })
|
|
393
|
+
}
|
|
394
|
+
return new Value({ raw: x })
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
export function FuncOf(
|
|
398
|
+
fn: (this$: Value, args: $.Slice<Value>) => unknown,
|
|
399
|
+
): Func {
|
|
400
|
+
return new Func({ fn })
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
export function Type_String(t: Type): string {
|
|
404
|
+
switch (t) {
|
|
405
|
+
case TypeUndefined:
|
|
406
|
+
return 'undefined'
|
|
407
|
+
case TypeNull:
|
|
408
|
+
return 'null'
|
|
409
|
+
case TypeBoolean:
|
|
410
|
+
return 'boolean'
|
|
411
|
+
case TypeNumber:
|
|
412
|
+
return 'number'
|
|
413
|
+
case TypeString:
|
|
414
|
+
return 'string'
|
|
415
|
+
case TypeSymbol:
|
|
416
|
+
return 'symbol'
|
|
417
|
+
case TypeObject:
|
|
418
|
+
return 'object'
|
|
419
|
+
case TypeFunction:
|
|
420
|
+
return 'function'
|
|
421
|
+
default:
|
|
422
|
+
$.panic('bad type')
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
export function Type_isObject(t: Type): boolean {
|
|
427
|
+
return t === TypeObject || t === TypeFunction
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
export function CopyBytesToGo(dst: $.Bytes | null, src: Value): number {
|
|
431
|
+
const bytes = sourceBytes(src)
|
|
432
|
+
const n = Math.min($.len(dst), bytes.length)
|
|
433
|
+
if (dst instanceof Uint8Array) {
|
|
434
|
+
dst.set(bytes.subarray(0, n), 0)
|
|
435
|
+
return n
|
|
436
|
+
}
|
|
437
|
+
const arr = $.asArray(dst)
|
|
438
|
+
for (let i = 0; i < n; i++) {
|
|
439
|
+
arr[i] = bytes[i]
|
|
440
|
+
}
|
|
441
|
+
return n
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
export function CopyBytesToJS(dst: Value, src: $.Bytes | null): number {
|
|
445
|
+
const target = dstRawBytes(dst)
|
|
446
|
+
const bytes =
|
|
447
|
+
src instanceof Uint8Array ? src : Uint8Array.from($.asArray(src))
|
|
448
|
+
const n = Math.min(target.length, bytes.length)
|
|
449
|
+
target.set(bytes.subarray(0, n), 0)
|
|
450
|
+
return n
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
function sourceBytes(src: Value): Uint8Array {
|
|
454
|
+
const raw = srcRaw(src)
|
|
455
|
+
if (raw instanceof Uint8Array || raw instanceof Uint8ClampedArray) {
|
|
456
|
+
return raw instanceof Uint8Array ? raw : (
|
|
457
|
+
new Uint8Array(raw.buffer, raw.byteOffset, raw.byteLength)
|
|
458
|
+
)
|
|
459
|
+
}
|
|
460
|
+
$.panic(
|
|
461
|
+
'syscall/js: CopyBytesToGo: expected src to be a Uint8Array or Uint8ClampedArray',
|
|
462
|
+
)
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
function dstRawBytes(dst: Value): Uint8Array | Uint8ClampedArray {
|
|
466
|
+
const raw = srcRaw(dst)
|
|
467
|
+
if (raw instanceof Uint8Array || raw instanceof Uint8ClampedArray) {
|
|
468
|
+
return raw
|
|
469
|
+
}
|
|
470
|
+
$.panic(
|
|
471
|
+
'syscall/js: CopyBytesToJS: expected dst to be a Uint8Array or Uint8ClampedArray',
|
|
472
|
+
)
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
function srcRaw(value: Value): unknown {
|
|
476
|
+
return (value as unknown as { _raw: unknown })._raw
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
function isRawInit(value: unknown): value is { raw: unknown } {
|
|
480
|
+
return (
|
|
481
|
+
typeof value === 'object' &&
|
|
482
|
+
value !== null &&
|
|
483
|
+
Object.prototype.hasOwnProperty.call(value, 'raw')
|
|
484
|
+
)
|
|
485
|
+
}
|