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
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"context"
|
|
5
|
+
"io"
|
|
6
|
+
"os"
|
|
7
|
+
"runtime"
|
|
8
|
+
"runtime/pprof"
|
|
9
|
+
"strconv"
|
|
10
|
+
"strings"
|
|
11
|
+
"time"
|
|
12
|
+
|
|
13
|
+
"github.com/aperturerobotics/cli"
|
|
14
|
+
"github.com/aperturerobotics/goscript/compiler/gotest"
|
|
15
|
+
"github.com/pkg/errors"
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
func testCommands() []*cli.Command {
|
|
19
|
+
return []*cli.Command{newTestCommand()}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
func newTestCommand() *cli.Command {
|
|
23
|
+
var tags cli.StringSlice
|
|
24
|
+
var overrideDirs cli.StringSlice
|
|
25
|
+
var run string
|
|
26
|
+
var count int
|
|
27
|
+
var short bool
|
|
28
|
+
var timeout time.Duration
|
|
29
|
+
var verbose bool
|
|
30
|
+
var outputRoot string
|
|
31
|
+
var workDir string
|
|
32
|
+
var dir string
|
|
33
|
+
var parallelism int
|
|
34
|
+
var runtimeGroups bool
|
|
35
|
+
var cpuProfile string
|
|
36
|
+
var memProfile string
|
|
37
|
+
var incrementalTypeCheck bool
|
|
38
|
+
|
|
39
|
+
return &cli.Command{
|
|
40
|
+
Name: "test",
|
|
41
|
+
Category: "test",
|
|
42
|
+
Usage: "compile and run Go package tests through GoScript",
|
|
43
|
+
Action: func(c *cli.Context) (err error) {
|
|
44
|
+
req := &gotest.Request{
|
|
45
|
+
Dir: dir,
|
|
46
|
+
Patterns: c.Args().Slice(),
|
|
47
|
+
BuildTags: tags.Value(),
|
|
48
|
+
OverrideDirs: overrideDirs.Value(),
|
|
49
|
+
Run: run,
|
|
50
|
+
Count: count,
|
|
51
|
+
Short: short,
|
|
52
|
+
Timeout: timeout,
|
|
53
|
+
Verbose: verbose,
|
|
54
|
+
WorkDir: workDir,
|
|
55
|
+
OutputRoot: outputRoot,
|
|
56
|
+
Parallelism: parallelism,
|
|
57
|
+
RuntimeGroups: runtimeGroups,
|
|
58
|
+
IncrementalTypeCheck: incrementalTypeCheck,
|
|
59
|
+
}
|
|
60
|
+
stopProfile, err := startCPUProfile(cpuProfile)
|
|
61
|
+
if err != nil {
|
|
62
|
+
return err
|
|
63
|
+
}
|
|
64
|
+
if stopProfile != nil {
|
|
65
|
+
defer stopProfile()
|
|
66
|
+
}
|
|
67
|
+
defer func() {
|
|
68
|
+
if profileErr := writeMemProfile(memProfile); profileErr != nil && err == nil {
|
|
69
|
+
err = profileErr
|
|
70
|
+
}
|
|
71
|
+
}()
|
|
72
|
+
result, err := gotest.NewRunner().Run(c.Context, req)
|
|
73
|
+
if err != nil {
|
|
74
|
+
return err
|
|
75
|
+
}
|
|
76
|
+
if err := printTestResult(c.Context, c.App.Writer, result); err != nil {
|
|
77
|
+
return err
|
|
78
|
+
}
|
|
79
|
+
if !result.Passed() {
|
|
80
|
+
return errors.New("goscript test failed")
|
|
81
|
+
}
|
|
82
|
+
return nil
|
|
83
|
+
},
|
|
84
|
+
Flags: []cli.Flag{
|
|
85
|
+
&cli.StringSliceFlag{
|
|
86
|
+
Name: "tags",
|
|
87
|
+
Usage: "comma-separated Go build tags",
|
|
88
|
+
Destination: &tags,
|
|
89
|
+
},
|
|
90
|
+
&cli.StringSliceFlag{
|
|
91
|
+
Name: "gs-path",
|
|
92
|
+
Aliases: []string{"override-dir"},
|
|
93
|
+
Usage: "additional GoScript override root containing package-path directories",
|
|
94
|
+
Destination: &overrideDirs,
|
|
95
|
+
},
|
|
96
|
+
&cli.StringFlag{
|
|
97
|
+
Name: "run",
|
|
98
|
+
Usage: "run only tests matching the regexp",
|
|
99
|
+
Destination: &run,
|
|
100
|
+
},
|
|
101
|
+
&cli.IntFlag{
|
|
102
|
+
Name: "count",
|
|
103
|
+
Usage: "run each selected test this many times",
|
|
104
|
+
Destination: &count,
|
|
105
|
+
Value: 1,
|
|
106
|
+
},
|
|
107
|
+
&cli.BoolFlag{
|
|
108
|
+
Name: "short",
|
|
109
|
+
Usage: "report true from testing.Short",
|
|
110
|
+
Destination: &short,
|
|
111
|
+
},
|
|
112
|
+
&cli.DurationFlag{
|
|
113
|
+
Name: "timeout",
|
|
114
|
+
Usage: "maximum time for the package-test run",
|
|
115
|
+
Destination: &timeout,
|
|
116
|
+
Value: 30 * time.Second,
|
|
117
|
+
},
|
|
118
|
+
&cli.BoolFlag{
|
|
119
|
+
Name: "v",
|
|
120
|
+
Aliases: []string{"verbose"},
|
|
121
|
+
Usage: "emit verbose test output",
|
|
122
|
+
Destination: &verbose,
|
|
123
|
+
},
|
|
124
|
+
&cli.StringFlag{
|
|
125
|
+
Name: "output",
|
|
126
|
+
Usage: "generated TypeScript output root",
|
|
127
|
+
Destination: &outputRoot,
|
|
128
|
+
},
|
|
129
|
+
&cli.StringFlag{
|
|
130
|
+
Name: "workdir",
|
|
131
|
+
Usage: "generated test workspace directory",
|
|
132
|
+
Destination: &workDir,
|
|
133
|
+
},
|
|
134
|
+
&cli.StringFlag{
|
|
135
|
+
Name: "dir",
|
|
136
|
+
Usage: "Go module working directory",
|
|
137
|
+
Destination: &dir,
|
|
138
|
+
},
|
|
139
|
+
&cli.IntFlag{
|
|
140
|
+
Name: "p",
|
|
141
|
+
Usage: "maximum package typecheck/runtime commands to run concurrently",
|
|
142
|
+
Destination: ¶llelism,
|
|
143
|
+
Value: gotest.DefaultParallelism(),
|
|
144
|
+
},
|
|
145
|
+
&cli.BoolFlag{
|
|
146
|
+
Name: "runtime-groups",
|
|
147
|
+
Usage: "run package runtimes in grouped Bun worker processes",
|
|
148
|
+
Destination: &runtimeGroups,
|
|
149
|
+
},
|
|
150
|
+
&cli.BoolFlag{
|
|
151
|
+
Name: "incremental-typecheck",
|
|
152
|
+
Usage: "reuse TypeScript build-info files in the test workdir",
|
|
153
|
+
Destination: &incrementalTypeCheck,
|
|
154
|
+
},
|
|
155
|
+
&cli.StringFlag{
|
|
156
|
+
Name: "cpuprofile",
|
|
157
|
+
Usage: "write a Go CPU profile for the goscript test process",
|
|
158
|
+
Destination: &cpuProfile,
|
|
159
|
+
},
|
|
160
|
+
&cli.StringFlag{
|
|
161
|
+
Name: "memprofile",
|
|
162
|
+
Usage: "write a Go heap profile for the goscript test process",
|
|
163
|
+
Destination: &memProfile,
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
func startCPUProfile(path string) (func(), error) {
|
|
170
|
+
path = strings.TrimSpace(path)
|
|
171
|
+
if path == "" {
|
|
172
|
+
return nil, nil
|
|
173
|
+
}
|
|
174
|
+
file, err := os.Create(path)
|
|
175
|
+
if err != nil {
|
|
176
|
+
return nil, errors.Wrap(err, "create CPU profile")
|
|
177
|
+
}
|
|
178
|
+
if err := pprof.StartCPUProfile(file); err != nil {
|
|
179
|
+
_ = file.Close()
|
|
180
|
+
return nil, errors.Wrap(err, "start CPU profile")
|
|
181
|
+
}
|
|
182
|
+
return func() {
|
|
183
|
+
pprof.StopCPUProfile()
|
|
184
|
+
_ = file.Close()
|
|
185
|
+
}, nil
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
func writeMemProfile(path string) error {
|
|
189
|
+
path = strings.TrimSpace(path)
|
|
190
|
+
if path == "" {
|
|
191
|
+
return nil
|
|
192
|
+
}
|
|
193
|
+
file, err := os.Create(path)
|
|
194
|
+
if err != nil {
|
|
195
|
+
return errors.Wrap(err, "create memory profile")
|
|
196
|
+
}
|
|
197
|
+
defer func() { _ = file.Close() }()
|
|
198
|
+
runtime.GC()
|
|
199
|
+
if err := pprof.WriteHeapProfile(file); err != nil {
|
|
200
|
+
return errors.Wrap(err, "write memory profile")
|
|
201
|
+
}
|
|
202
|
+
return nil
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
func printTestResult(ctx context.Context, w io.Writer, result *gotest.Result) error {
|
|
206
|
+
if err := ctx.Err(); err != nil {
|
|
207
|
+
return err
|
|
208
|
+
}
|
|
209
|
+
if result == nil {
|
|
210
|
+
return errors.New("goscript test result is nil")
|
|
211
|
+
}
|
|
212
|
+
for _, pkg := range result.Packages {
|
|
213
|
+
if strings.TrimSpace(pkg.Output) != "" {
|
|
214
|
+
if _, err := io.WriteString(w, strings.TrimSpace(pkg.Output)+"\n"); err != nil {
|
|
215
|
+
return err
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
switch pkg.Action {
|
|
219
|
+
case gotest.ActionPass:
|
|
220
|
+
if _, err := io.WriteString(w, "ok \t"+pkg.PackagePath+"\t"+formatElapsed(pkg.Elapsed)+"\n"); err != nil {
|
|
221
|
+
return err
|
|
222
|
+
}
|
|
223
|
+
case gotest.ActionSkip:
|
|
224
|
+
if _, err := io.WriteString(w, "? \t"+pkg.PackagePath+"\t[no test files]\n"); err != nil {
|
|
225
|
+
return err
|
|
226
|
+
}
|
|
227
|
+
case gotest.ActionFail:
|
|
228
|
+
line := "FAIL\t" + pkg.PackagePath
|
|
229
|
+
if pkg.Owner != "" {
|
|
230
|
+
line += "\towner=" + string(pkg.Owner)
|
|
231
|
+
}
|
|
232
|
+
if phase := failedPhase(pkg.Phases); phase != "" {
|
|
233
|
+
line += "\tphase=" + phase
|
|
234
|
+
}
|
|
235
|
+
if _, err := io.WriteString(w, line+"\n"); err != nil {
|
|
236
|
+
return err
|
|
237
|
+
}
|
|
238
|
+
if strings.TrimSpace(pkg.Error) != "" {
|
|
239
|
+
if _, err := io.WriteString(w, strings.TrimSpace(pkg.Error)+"\n"); err != nil {
|
|
240
|
+
return err
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if result.WorkDir != "" {
|
|
246
|
+
if _, err := io.WriteString(w, "goscript test workdir: "+result.WorkDir+"\n"); err != nil {
|
|
247
|
+
return err
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return nil
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
func failedPhase(phases gotest.PackagePhases) string {
|
|
254
|
+
switch {
|
|
255
|
+
case phases.Workspace == gotest.PhaseStatusFail:
|
|
256
|
+
return "workspace"
|
|
257
|
+
case phases.Compile == gotest.PhaseStatusFail:
|
|
258
|
+
return "compile"
|
|
259
|
+
case phases.Emit == gotest.PhaseStatusFail:
|
|
260
|
+
return "emit"
|
|
261
|
+
case phases.TypeCheck == gotest.PhaseStatusFail:
|
|
262
|
+
return "typecheck"
|
|
263
|
+
case phases.Runtime == gotest.PhaseStatusFail:
|
|
264
|
+
return "runtime"
|
|
265
|
+
default:
|
|
266
|
+
return ""
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
func formatElapsed(elapsed time.Duration) string {
|
|
271
|
+
if elapsed <= 0 {
|
|
272
|
+
return "0.000s"
|
|
273
|
+
}
|
|
274
|
+
millis := elapsed.Milliseconds()
|
|
275
|
+
seconds := millis / 1000
|
|
276
|
+
remainder := millis % 1000
|
|
277
|
+
return strconv.FormatInt(seconds, 10) + "." + leftPadMillis(remainder) + "s"
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
func leftPadMillis(value int64) string {
|
|
281
|
+
raw := strconv.FormatInt(value, 10)
|
|
282
|
+
for len(raw) < 3 {
|
|
283
|
+
raw = "0" + raw
|
|
284
|
+
}
|
|
285
|
+
return raw
|
|
286
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"bytes"
|
|
5
|
+
"path/filepath"
|
|
6
|
+
"strings"
|
|
7
|
+
"testing"
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
func TestTestCommandHelp(t *testing.T) {
|
|
11
|
+
var out bytes.Buffer
|
|
12
|
+
app := newApp()
|
|
13
|
+
app.Writer = &out
|
|
14
|
+
|
|
15
|
+
err := app.Run([]string{"goscript", "test", "--help"})
|
|
16
|
+
if err != nil {
|
|
17
|
+
t.Fatalf("test help failed: %v", err)
|
|
18
|
+
}
|
|
19
|
+
help := out.String()
|
|
20
|
+
for _, expected := range []string{"compile and run Go package tests through GoScript", "--tags", "--run", "--count", "--short", "--timeout", "-p", "--runtime-groups", "--cpuprofile", "--memprofile"} {
|
|
21
|
+
if !strings.Contains(help, expected) {
|
|
22
|
+
t.Fatalf("help output missing %q:\n%s", expected, help)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
func TestTestCommandRunsPackageTest(t *testing.T) {
|
|
28
|
+
dir := t.TempDir()
|
|
29
|
+
writeFile(t, filepath.Join(dir, "go.mod"), "module example.test/cmdtest\n\ngo 1.25.3\n")
|
|
30
|
+
writeFile(t, filepath.Join(dir, "value.go"), strings.Join([]string{
|
|
31
|
+
"package cmdtest",
|
|
32
|
+
"func Value() int { return 7 }",
|
|
33
|
+
"",
|
|
34
|
+
}, "\n"))
|
|
35
|
+
writeFile(t, filepath.Join(dir, "value_test.go"), strings.Join([]string{
|
|
36
|
+
"package cmdtest",
|
|
37
|
+
"import \"testing\"",
|
|
38
|
+
"func TestValue(t *testing.T) {",
|
|
39
|
+
"\tif Value() != 7 {",
|
|
40
|
+
"\t\tt.Fatal(\"bad value\")",
|
|
41
|
+
"\t}",
|
|
42
|
+
"}",
|
|
43
|
+
"",
|
|
44
|
+
}, "\n"))
|
|
45
|
+
|
|
46
|
+
var out bytes.Buffer
|
|
47
|
+
app := newApp()
|
|
48
|
+
app.Writer = &out
|
|
49
|
+
err := app.Run([]string{
|
|
50
|
+
"goscript",
|
|
51
|
+
"test",
|
|
52
|
+
"--dir",
|
|
53
|
+
dir,
|
|
54
|
+
"--workdir",
|
|
55
|
+
filepath.Join(dir, ".tmp", "cmd-test"),
|
|
56
|
+
"-v",
|
|
57
|
+
".",
|
|
58
|
+
})
|
|
59
|
+
if err != nil {
|
|
60
|
+
t.Fatalf("test command failed: %v\n%s", err, out.String())
|
|
61
|
+
}
|
|
62
|
+
if !strings.Contains(out.String(), "ok \texample.test/cmdtest") {
|
|
63
|
+
t.Fatalf("expected ok package output, got:\n%s", out.String())
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
func TestTestCommandRejectsUnsupportedFlags(t *testing.T) {
|
|
68
|
+
app := newApp()
|
|
69
|
+
err := app.Run([]string{"goscript", "test", "--cover", "."})
|
|
70
|
+
if err == nil {
|
|
71
|
+
t.Fatalf("expected unsupported flag to fail")
|
|
72
|
+
}
|
|
73
|
+
if !strings.Contains(err.Error(), "flag provided but not defined") {
|
|
74
|
+
t.Fatalf("unexpected unsupported flag error: %v", err)
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -18,6 +18,7 @@ func newCompileCommand() *cli.Command {
|
|
|
18
18
|
var config compiler.Config
|
|
19
19
|
var packages cli.StringSlice
|
|
20
20
|
var buildFlags cli.StringSlice
|
|
21
|
+
var overrideDirs cli.StringSlice
|
|
21
22
|
|
|
22
23
|
return &cli.Command{
|
|
23
24
|
Name: "compile",
|
|
@@ -25,6 +26,7 @@ func newCompileCommand() *cli.Command {
|
|
|
25
26
|
Usage: "compile a Go package to TypeScript",
|
|
26
27
|
Action: func(c *cli.Context) error {
|
|
27
28
|
config.BuildFlags = slices.Clone(buildFlags.Value())
|
|
29
|
+
config.OverrideDirs = slices.Clone(overrideDirs.Value())
|
|
28
30
|
return compilePackage(c.Context, &config, packages.Value())
|
|
29
31
|
},
|
|
30
32
|
Flags: []cli.Flag{
|
|
@@ -56,6 +58,13 @@ func newCompileCommand() *cli.Command {
|
|
|
56
58
|
Destination: &buildFlags,
|
|
57
59
|
EnvVars: []string{"GOSCRIPT_BUILD_FLAGS"},
|
|
58
60
|
},
|
|
61
|
+
&cli.StringSliceFlag{
|
|
62
|
+
Name: "gs-path",
|
|
63
|
+
Aliases: []string{"override-dir"},
|
|
64
|
+
Usage: "additional GoScript override root containing package-path directories",
|
|
65
|
+
Destination: &overrideDirs,
|
|
66
|
+
EnvVars: []string{"GOSCRIPT_GS_PATH"},
|
|
67
|
+
},
|
|
59
68
|
&cli.BoolFlag{
|
|
60
69
|
Name: "disable-emit-builtin",
|
|
61
70
|
Usage: "disable emitting built-in packages that have handwritten equivalents",
|
package/cmd/goscript/main.go
CHANGED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
package compiler
|
|
2
|
+
|
|
3
|
+
import "slices"
|
|
4
|
+
|
|
5
|
+
import "strings"
|
|
6
|
+
|
|
7
|
+
const goScriptBuildTag = "goscript"
|
|
8
|
+
|
|
9
|
+
func goScriptBuildFlags(flags []string) []string {
|
|
10
|
+
normalized := append([]string(nil), flags...)
|
|
11
|
+
for i, flag := range normalized {
|
|
12
|
+
switch {
|
|
13
|
+
case flag == "-tags" && i+1 < len(normalized):
|
|
14
|
+
normalized[i+1] = appendBuildTag(normalized[i+1], goScriptBuildTag)
|
|
15
|
+
return normalized
|
|
16
|
+
case strings.HasPrefix(flag, "-tags="):
|
|
17
|
+
normalized[i] = "-tags=" + appendBuildTag(strings.TrimPrefix(flag, "-tags="), goScriptBuildTag)
|
|
18
|
+
return normalized
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return append(normalized, "-tags="+goScriptBuildTag)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
func appendBuildTag(value string, tag string) string {
|
|
25
|
+
tags := strings.FieldsFunc(value, func(r rune) bool {
|
|
26
|
+
return r == ',' || r == ' ' || r == '\t' || r == '\n'
|
|
27
|
+
})
|
|
28
|
+
if slices.Contains(tags, tag) {
|
|
29
|
+
return value
|
|
30
|
+
}
|
|
31
|
+
if strings.TrimSpace(value) == "" {
|
|
32
|
+
return tag
|
|
33
|
+
}
|
|
34
|
+
if strings.ContainsAny(value, " \t\n") {
|
|
35
|
+
return value + " " + tag
|
|
36
|
+
}
|
|
37
|
+
return value + "," + tag
|
|
38
|
+
}
|
|
@@ -36,10 +36,14 @@ type CompileRequest struct {
|
|
|
36
36
|
OutputPath string
|
|
37
37
|
// BuildFlags are forwarded to the Go package loader.
|
|
38
38
|
BuildFlags []string
|
|
39
|
+
// OverrideDirs are additional GoScript override roots.
|
|
40
|
+
OverrideDirs []string
|
|
39
41
|
// DependencyMode controls whether dependencies are included in the graph.
|
|
40
42
|
DependencyMode DependencyMode
|
|
41
43
|
// RuntimeEmissionMode controls runtime package emission policy.
|
|
42
44
|
RuntimeEmissionMode RuntimeEmissionMode
|
|
45
|
+
// Tests controls whether package loading includes Go package-test variants.
|
|
46
|
+
Tests bool
|
|
43
47
|
// AllDependencies controls whether the package graph should include deps.
|
|
44
48
|
AllDependencies bool
|
|
45
49
|
// DisableEmitBuiltin controls whether runtime packages are emitted.
|
|
@@ -75,6 +79,7 @@ func (o *CompileRequestOwner) NewRequest(conf Config, patterns []string) *Compil
|
|
|
75
79
|
Dir: strings.TrimSpace(dir),
|
|
76
80
|
OutputPath: strings.TrimSpace(conf.OutputPath),
|
|
77
81
|
BuildFlags: append([]string(nil), conf.BuildFlags...),
|
|
82
|
+
OverrideDirs: append([]string(nil), conf.OverrideDirs...),
|
|
78
83
|
DependencyMode: dependencyMode,
|
|
79
84
|
RuntimeEmissionMode: runtimeEmissionMode,
|
|
80
85
|
AllDependencies: conf.AllDependencies,
|
|
@@ -163,6 +168,34 @@ func (o *CompileRequestOwner) Validate(req *CompileRequest) []Diagnostic {
|
|
|
163
168
|
})
|
|
164
169
|
}
|
|
165
170
|
}
|
|
171
|
+
for _, dir := range req.OverrideDirs {
|
|
172
|
+
dir = strings.TrimSpace(dir)
|
|
173
|
+
if dir == "" {
|
|
174
|
+
diagnostics = append(diagnostics, Diagnostic{
|
|
175
|
+
Severity: DiagnosticSeverityError,
|
|
176
|
+
Code: "goscript/request:empty-override-dir",
|
|
177
|
+
Message: "override directories must not be empty",
|
|
178
|
+
})
|
|
179
|
+
continue
|
|
180
|
+
}
|
|
181
|
+
info, err := os.Stat(dir)
|
|
182
|
+
switch {
|
|
183
|
+
case err != nil:
|
|
184
|
+
diagnostics = append(diagnostics, Diagnostic{
|
|
185
|
+
Severity: DiagnosticSeverityError,
|
|
186
|
+
Code: "goscript/request:override-dir",
|
|
187
|
+
Message: "override directory is not readable",
|
|
188
|
+
Detail: err.Error(),
|
|
189
|
+
})
|
|
190
|
+
case !info.IsDir():
|
|
191
|
+
diagnostics = append(diagnostics, Diagnostic{
|
|
192
|
+
Severity: DiagnosticSeverityError,
|
|
193
|
+
Code: "goscript/request:override-dir",
|
|
194
|
+
Message: "override path must be a directory",
|
|
195
|
+
Detail: dir,
|
|
196
|
+
})
|
|
197
|
+
}
|
|
198
|
+
}
|
|
166
199
|
|
|
167
200
|
for _, pattern := range req.Patterns {
|
|
168
201
|
trimmed := strings.TrimSpace(pattern)
|
package/compiler/compiler.go
CHANGED
|
@@ -125,14 +125,11 @@ var expectedV2ComplianceGaps = map[string]bool{
|
|
|
125
125
|
"buffer_value_field_error": true,
|
|
126
126
|
"bytes": true,
|
|
127
127
|
"chan_type_assertion": true,
|
|
128
|
-
"constants_iota": true,
|
|
129
128
|
"debug_marshal": true,
|
|
130
129
|
"debug_simple": true,
|
|
131
|
-
"embedded_interface_null_assertion": true,
|
|
132
130
|
"filepath_walkfunc_call": true,
|
|
133
131
|
"flag_bitwise_op": true,
|
|
134
132
|
"for_init_multi_assign": true,
|
|
135
|
-
"for_post_multi_assign": true,
|
|
136
133
|
"for_range": true,
|
|
137
134
|
"function_call_variable_shadowing": true,
|
|
138
135
|
"function_signature_type": true,
|
|
@@ -143,7 +140,6 @@ var expectedV2ComplianceGaps = map[string]bool{
|
|
|
143
140
|
"if_type_assert": true,
|
|
144
141
|
"import_interface": true,
|
|
145
142
|
"index_expr_type_assertion": true,
|
|
146
|
-
"interface_async_method_call": true,
|
|
147
143
|
"interface_embedding": true,
|
|
148
144
|
"interface_type_reference": true,
|
|
149
145
|
"json_debug": true,
|
|
@@ -164,8 +160,6 @@ var expectedV2ComplianceGaps = map[string]bool{
|
|
|
164
160
|
"method_receiver_with_call_expr": true,
|
|
165
161
|
"missing_valueof_error": true,
|
|
166
162
|
"multi_return_same_type": true,
|
|
167
|
-
"named_return_method": true,
|
|
168
|
-
"named_return_multiple": true,
|
|
169
163
|
"named_slice_wrapper": true,
|
|
170
164
|
"named_struct_async_method": true,
|
|
171
165
|
"named_types_valueof": true,
|
|
@@ -175,22 +169,18 @@ var expectedV2ComplianceGaps = map[string]bool{
|
|
|
175
169
|
"pointer_circular_ref": true,
|
|
176
170
|
"pointer_composite_literal_untyped": true,
|
|
177
171
|
"pointer_range_loop": true,
|
|
178
|
-
"primitive_error_type": true,
|
|
179
172
|
"promise_return_type": true,
|
|
180
173
|
"protobuf_lite_ts": true,
|
|
181
|
-
"range_const_reassign": true,
|
|
182
174
|
"receiver_variable": true,
|
|
183
175
|
"reflect_implements": true,
|
|
184
176
|
"reflect_numfield": true,
|
|
185
177
|
"reserved_words": true,
|
|
186
|
-
"star_compound_assign": true,
|
|
187
178
|
"star_expr_destructuring": true,
|
|
188
179
|
"struct_embedding": true,
|
|
189
180
|
"struct_embedding_bytes_buffer": true,
|
|
190
181
|
"type_conversion_interface_ptr_nil": true,
|
|
191
182
|
"type_declaration_receiver": true,
|
|
192
183
|
"util_promise": true,
|
|
193
|
-
"variable_shadowing_scope": true,
|
|
194
184
|
"varref_deref_struct": true,
|
|
195
185
|
"wrapper_type_args": true,
|
|
196
186
|
}
|
package/compiler/config.go
CHANGED
|
@@ -16,6 +16,8 @@ type Config struct {
|
|
|
16
16
|
OutputPath string
|
|
17
17
|
// BuildFlags are the Go build flags to use during package loading.
|
|
18
18
|
BuildFlags []string
|
|
19
|
+
// OverrideDirs are additional GoScript override roots.
|
|
20
|
+
OverrideDirs []string
|
|
19
21
|
// AllDependencies controls whether dependencies are included in the graph.
|
|
20
22
|
AllDependencies bool
|
|
21
23
|
// DisableEmitBuiltin controls whether runtime packages are emitted.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Package gotest owns GoScript package-test execution.
|
|
2
|
+
package gotest
|
|
3
|
+
|
|
4
|
+
// Owner classifies the package owner that should receive a test-runner failure.
|
|
5
|
+
type Owner string
|
|
6
|
+
|
|
7
|
+
const (
|
|
8
|
+
// OwnerPackageGraph classifies package pattern, build tag, or dependency graph failures.
|
|
9
|
+
OwnerPackageGraph Owner = "PackageGraphOwner"
|
|
10
|
+
// OwnerSemanticModel classifies Go type or semantic fact failures.
|
|
11
|
+
OwnerSemanticModel Owner = "SemanticModelOwner"
|
|
12
|
+
// OwnerLowering classifies unsupported Go-to-GoScript lowering failures.
|
|
13
|
+
OwnerLowering Owner = "LoweringOwner"
|
|
14
|
+
// OwnerTypeScriptEmitter classifies invalid emitted TypeScript failures.
|
|
15
|
+
OwnerTypeScriptEmitter Owner = "TypeScriptEmitterOwner"
|
|
16
|
+
// OwnerRuntimePackage classifies GoScript runtime primitive failures.
|
|
17
|
+
OwnerRuntimePackage Owner = "RuntimePackageOwner"
|
|
18
|
+
// OwnerOverridePackage classifies handwritten package override failures.
|
|
19
|
+
OwnerOverridePackage Owner = "OverridePackageOwner"
|
|
20
|
+
// OwnerTestRunner classifies generated testmain, execution, and aggregation failures.
|
|
21
|
+
OwnerTestRunner Owner = "TestRunnerOwner"
|
|
22
|
+
// OwnerSpacewaveHarness classifies target-ring or harness selection failures.
|
|
23
|
+
OwnerSpacewaveHarness Owner = "SpacewaveHarnessOwner"
|
|
24
|
+
)
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
package gotest
|
|
2
|
+
|
|
3
|
+
import "time"
|
|
4
|
+
|
|
5
|
+
// Action names the package-level result action.
|
|
6
|
+
type Action string
|
|
7
|
+
|
|
8
|
+
const (
|
|
9
|
+
// ActionPass means the package tests passed.
|
|
10
|
+
ActionPass Action = "pass"
|
|
11
|
+
// ActionFail means the package tests failed.
|
|
12
|
+
ActionFail Action = "fail"
|
|
13
|
+
// ActionSkip means the package has no runnable tests.
|
|
14
|
+
ActionSkip Action = "skip"
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
// PhaseStatus names a package-test phase state.
|
|
18
|
+
type PhaseStatus string
|
|
19
|
+
|
|
20
|
+
const (
|
|
21
|
+
// PhaseStatusPending means the phase has not run yet.
|
|
22
|
+
PhaseStatusPending PhaseStatus = "pending"
|
|
23
|
+
// PhaseStatusPass means the phase passed.
|
|
24
|
+
PhaseStatusPass PhaseStatus = "pass"
|
|
25
|
+
// PhaseStatusFail means the phase failed.
|
|
26
|
+
PhaseStatusFail PhaseStatus = "fail"
|
|
27
|
+
// PhaseStatusSkip means the phase was skipped.
|
|
28
|
+
PhaseStatusSkip PhaseStatus = "skip"
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
// PackagePhases records structured package-test phase status.
|
|
32
|
+
type PackagePhases struct {
|
|
33
|
+
// Workspace covers workspace files and tool discovery.
|
|
34
|
+
Workspace PhaseStatus
|
|
35
|
+
// Compile covers GoScript compile/lowering work.
|
|
36
|
+
Compile PhaseStatus
|
|
37
|
+
// Emit covers TypeScript emit/copy output work.
|
|
38
|
+
Emit PhaseStatus
|
|
39
|
+
// TypeCheck covers tsgo execution.
|
|
40
|
+
TypeCheck PhaseStatus
|
|
41
|
+
// Runtime covers Bun test execution.
|
|
42
|
+
Runtime PhaseStatus
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// PackageResult describes one package-test result.
|
|
46
|
+
type PackageResult struct {
|
|
47
|
+
// PackagePath is the package under test.
|
|
48
|
+
PackagePath string
|
|
49
|
+
// SourceDir is the package source directory used as the runtime cwd.
|
|
50
|
+
SourceDir string
|
|
51
|
+
// TestPackagePath is the package variant that contains test functions.
|
|
52
|
+
TestPackagePath string
|
|
53
|
+
// TestImports are direct imports from selected test variants.
|
|
54
|
+
TestImports []string
|
|
55
|
+
// Tests are the selected tests for this package.
|
|
56
|
+
Tests []Test
|
|
57
|
+
// Action is the package result.
|
|
58
|
+
Action Action
|
|
59
|
+
// Phases records structured status for each runner phase.
|
|
60
|
+
Phases PackagePhases
|
|
61
|
+
// Owner is the primary owner classification for failures.
|
|
62
|
+
Owner Owner
|
|
63
|
+
// Error is the concise package failure message.
|
|
64
|
+
Error string
|
|
65
|
+
// Output is raw process output for the package.
|
|
66
|
+
Output string
|
|
67
|
+
// Elapsed is the package runtime.
|
|
68
|
+
Elapsed time.Duration
|
|
69
|
+
}
|