goscript 0.0.84 → 0.1.1
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 -243
- package/cmd/goscript/cmd-test.go +193 -0
- package/cmd/goscript/cmd-test_test.go +76 -0
- package/cmd/goscript/cmd_compile.go +70 -69
- package/cmd/goscript/cmd_compile_test.go +79 -0
- package/cmd/goscript/main.go +11 -5
- package/compiler/build-flags.go +38 -0
- package/compiler/compile-request.go +220 -0
- package/compiler/compiler.go +16 -1336
- package/compiler/compliance_test.go +188 -0
- package/compiler/config.go +6 -13
- package/compiler/diagnostic.go +70 -0
- package/compiler/gotest/owner.go +24 -0
- package/compiler/gotest/package-result.go +67 -0
- package/compiler/gotest/request.go +145 -0
- package/compiler/gotest/result.go +28 -0
- package/compiler/gotest/runner.go +588 -0
- package/compiler/gotest/runner_test.go +627 -0
- package/compiler/gotest/test.go +9 -0
- package/compiler/index.test.ts +28 -28
- package/compiler/index.ts +40 -72
- package/compiler/lowered-program.go +184 -0
- package/compiler/lowering.go +8072 -0
- package/compiler/override-facts.go +307 -0
- package/compiler/override-registry.go +283 -0
- package/compiler/override-registry_test.go +254 -0
- package/compiler/package-graph.go +254 -0
- package/compiler/package-graph_test.go +316 -0
- package/compiler/package-test-function.go +9 -0
- package/compiler/package-test-graph-package.go +40 -0
- package/compiler/package-test-graph-variant.go +105 -0
- package/compiler/package-test-graph.go +117 -0
- package/compiler/package-test-graph_test.go +144 -0
- package/compiler/result.go +13 -0
- package/compiler/runtime-contract.go +439 -0
- package/compiler/runtime-contract_test.go +104 -0
- package/compiler/semantic-model-types.go +113 -0
- package/compiler/semantic-model.go +1422 -0
- package/compiler/semantic-model_test.go +471 -0
- package/compiler/service.go +133 -0
- package/compiler/skeleton_test.go +1775 -0
- package/compiler/tsworkspace/owner.go +334 -0
- package/compiler/tsworkspace/owner_test.go +93 -0
- package/compiler/tsworkspace/result.go +17 -0
- package/compiler/typescript-emitter.go +1040 -0
- package/compiler/wasm/compile.go +2 -3
- package/compiler/wasm/compile_test.go +79 -0
- package/compiler/wasm_api.go +140 -124
- package/dist/compiler/index.d.ts +1 -3
- package/dist/compiler/index.js +31 -55
- package/dist/compiler/index.js.map +1 -1
- package/dist/gs/builtin/builtin.d.ts +33 -2
- package/dist/gs/builtin/builtin.js +217 -6
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/channel.d.ts +11 -3
- package/dist/gs/builtin/channel.js +12 -0
- package/dist/gs/builtin/channel.js.map +1 -1
- package/dist/gs/builtin/hostio.d.ts +15 -1
- package/dist/gs/builtin/hostio.js +134 -49
- package/dist/gs/builtin/hostio.js.map +1 -1
- package/dist/gs/builtin/index.d.ts +1 -0
- package/dist/gs/builtin/index.js +1 -0
- package/dist/gs/builtin/index.js.map +1 -1
- package/dist/gs/builtin/slice.d.ts +23 -3
- package/dist/gs/builtin/slice.js +216 -44
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/builtin/type.d.ts +16 -2
- package/dist/gs/builtin/type.js +134 -21
- package/dist/gs/builtin/type.js.map +1 -1
- package/dist/gs/builtin/varRef.d.ts +5 -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 +48 -44
- package/dist/gs/bytes/buffer.gs.js.map +1 -1
- package/dist/gs/bytes/bytes.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/context/context.d.ts +5 -4
- package/dist/gs/context/context.js +10 -10
- package/dist/gs/context/context.js.map +1 -1
- 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 +5 -0
- package/dist/gs/crypto/rand/index.js +77 -0
- package/dist/gs/crypto/rand/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 +178 -0
- package/dist/gs/encoding/json/index.js.map +1 -0
- package/dist/gs/errors/errors.d.ts +4 -0
- package/dist/gs/errors/errors.js +81 -0
- 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 +36 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +212 -2
- 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 +825 -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 +163 -0
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +449 -0
- package/dist/gs/github.com/aperturerobotics/starpc/srpc/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/klauspost/compress/internal/le/index.d.ts +9 -0
- package/dist/gs/github.com/klauspost/compress/internal/le/index.js +71 -0
- package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
- package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
- package/dist/gs/github.com/pkg/errors/stack.js.map +1 -1
- 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 +42 -0
- package/dist/gs/go/scanner/index.js +155 -0
- package/dist/gs/go/scanner/index.js.map +1 -0
- package/dist/gs/go/token/index.d.ts +187 -0
- package/dist/gs/go/token/index.js +578 -0
- package/dist/gs/go/token/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/fs.js.map +1 -1
- 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/readdir.js.map +1 -1
- package/dist/gs/io/fs/readfile.js.map +1 -1
- package/dist/gs/io/fs/readlink.d.ts +8 -0
- package/dist/gs/io/fs/readlink.js +64 -0
- package/dist/gs/io/fs/readlink.js.map +1 -0
- package/dist/gs/io/fs/stat.js.map +1 -1
- package/dist/gs/io/fs/sub.js.map +1 -1
- 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/maps/iter.d.ts +3 -3
- package/dist/gs/maps/iter.js +3 -3
- package/dist/gs/maps/iter.js.map +1 -1
- package/dist/gs/maps/maps.d.ts +2 -2
- 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 +66 -34
- 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 +50 -0
- package/dist/gs/mime/index.js.map +1 -0
- package/dist/gs/net/http/httptest/index.d.ts +11 -0
- package/dist/gs/net/http/httptest/index.js +21 -0
- package/dist/gs/net/http/httptest/index.js.map +1 -0
- package/dist/gs/net/http/index.d.ts +27 -0
- package/dist/gs/net/http/index.js +61 -0
- package/dist/gs/net/http/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 +2 -4
- package/dist/gs/os/error.gs.js.map +1 -1
- package/dist/gs/os/exec.gs.js.map +1 -1
- package/dist/gs/os/exec_posix.gs.js.map +1 -1
- package/dist/gs/os/rawconn_js.gs.js.map +1 -1
- package/dist/gs/os/root_js.gs.js.map +1 -1
- package/dist/gs/os/tempfile.gs.js +66 -9
- package/dist/gs/os/tempfile.gs.js.map +1 -1
- package/dist/gs/os/types.gs.js.map +1 -1
- package/dist/gs/os/types_js.gs.js +9 -9
- package/dist/gs/os/types_js.gs.js.map +1 -1
- package/dist/gs/os/types_unix.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 +3 -1
- package/dist/gs/path/filepath/path.js +133 -4
- package/dist/gs/path/filepath/path.js.map +1 -1
- package/dist/gs/path/match.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 +3 -3
- package/dist/gs/reflect/index.js +2 -2
- package/dist/gs/reflect/index.js.map +1 -1
- package/dist/gs/reflect/map.js +3 -0
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +9 -5
- package/dist/gs/reflect/type.js +233 -21
- package/dist/gs/reflect/type.js.map +1 -1
- package/dist/gs/reflect/types.js.map +1 -1
- package/dist/gs/reflect/visiblefields.js.map +1 -1
- package/dist/gs/runtime/debug/index.d.ts +2 -0
- package/dist/gs/runtime/debug/index.js +8 -0
- package/dist/gs/runtime/debug/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/slices/slices.d.ts +24 -5
- package/dist/gs/slices/slices.js +214 -5
- package/dist/gs/slices/slices.js.map +1 -1
- package/dist/gs/sort/slice.gs.d.ts +3 -3
- package/dist/gs/sort/slice.gs.js +6 -6
- 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/strconv/atoi.gs.js.map +1 -1
- package/dist/gs/strconv/quote.gs.js.map +1 -1
- package/dist/gs/strings/builder.d.ts +1 -1
- package/dist/gs/strings/builder.js +3 -2
- package/dist/gs/strings/builder.js.map +1 -1
- package/dist/gs/strings/reader.js.map +1 -1
- package/dist/gs/strings/replace.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/atomic/value.gs.js.map +1 -1
- package/dist/gs/sync/sync.d.ts +3 -0
- package/dist/gs/sync/sync.js +39 -0
- 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 +2 -0
- package/dist/gs/syscall/errors.js +8 -0
- package/dist/gs/syscall/errors.js.map +1 -1
- package/dist/gs/syscall/fs.d.ts +43 -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 +375 -0
- package/dist/gs/syscall/js/index.js.map +1 -0
- package/dist/gs/syscall/types.d.ts +22 -0
- 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 +77 -0
- package/dist/gs/testing/testing.js +301 -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 +205 -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 +71 -0
- package/dist/gs/unique/index.js.map +1 -0
- package/go.mod +2 -2
- package/go.sum +9 -0
- package/gs/builtin/builtin.ts +266 -8
- package/gs/builtin/channel.ts +22 -0
- package/gs/builtin/hostio.test.ts +177 -0
- package/gs/builtin/hostio.ts +171 -56
- package/gs/builtin/index.ts +1 -0
- package/gs/builtin/runtime-contract.test.ts +356 -0
- package/gs/builtin/slice.ts +259 -50
- package/gs/builtin/type.ts +188 -30
- package/gs/builtin/varRef.ts +38 -1
- package/gs/bytes/buffer.gs.ts +48 -44
- package/gs/bytes/meta.json +8 -3
- package/gs/bytes/reader.gs.ts +20 -19
- package/gs/context/context.test.ts +41 -0
- package/gs/context/context.ts +22 -26
- 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 +32 -0
- package/gs/crypto/rand/index.ts +90 -0
- package/gs/crypto/rand/meta.json +5 -0
- package/gs/embed/index.ts +20 -0
- package/gs/embed/meta.json +5 -0
- package/gs/encoding/json/index.test.ts +79 -0
- package/gs/encoding/json/index.ts +210 -0
- package/gs/errors/errors.test.ts +82 -0
- package/gs/errors/errors.ts +104 -0
- package/gs/fmt/fmt.ts +56 -16
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +95 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +300 -2
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +159 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1005 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +719 -0
- package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +40 -0
- package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/meta.json +3 -1
- package/gs/github.com/klauspost/compress/internal/le/index.test.ts +36 -0
- package/gs/github.com/klauspost/compress/internal/le/index.ts +114 -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 +72 -0
- package/gs/go/scanner/index.ts +204 -0
- package/gs/go/token/index.test.ts +67 -0
- package/gs/go/token/index.ts +686 -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 +77 -0
- package/gs/io/fs/walk.test.ts +61 -0
- package/gs/io/fs/walk.ts +9 -9
- package/gs/io/io.ts +174 -31
- package/gs/io/meta.json +10 -2
- package/gs/maps/iter.ts +12 -6
- package/gs/maps/maps.ts +8 -6
- package/gs/math/bits/index.ts +103 -47
- package/gs/math/const.gs.test.ts +11 -5
- package/gs/math/const.gs.ts +5 -6
- package/gs/mime/index.ts +54 -0
- package/gs/net/http/httptest/index.ts +25 -0
- package/gs/net/http/index.test.ts +20 -0
- package/gs/net/http/index.ts +81 -0
- package/gs/os/dir_unix.gs.ts +2 -3
- package/gs/os/file_unix_js.test.ts +50 -0
- package/gs/os/meta.json +1 -2
- package/gs/os/tempfile.gs.test.ts +85 -0
- package/gs/os/tempfile.gs.ts +71 -11
- package/gs/os/types_js.gs.ts +11 -11
- package/gs/path/filepath/match.test.ts +31 -12
- package/gs/path/filepath/match.ts +178 -3
- package/gs/path/filepath/path.test.ts +25 -0
- package/gs/path/filepath/path.ts +159 -5
- package/gs/path/path.ts +20 -5
- package/gs/reflect/index.ts +2 -1
- package/gs/reflect/map.test.ts +19 -0
- package/gs/reflect/map.ts +4 -0
- package/gs/reflect/type.ts +298 -29
- package/gs/reflect/typefor.test.ts +75 -0
- package/gs/runtime/debug/index.test.ts +24 -0
- package/gs/runtime/debug/index.ts +8 -0
- package/gs/runtime/runtime.test.ts +19 -0
- package/gs/runtime/runtime.ts +98 -3
- package/gs/slices/slices.test.ts +94 -0
- package/gs/slices/slices.ts +245 -5
- package/gs/sort/meta.json +7 -0
- package/gs/sort/slice.gs.ts +16 -7
- package/gs/sort/sort.gs.ts +16 -13
- package/gs/strings/builder.ts +4 -3
- package/gs/sync/atomic/type.gs.ts +13 -14
- package/gs/sync/meta.json +3 -1
- package/gs/sync/sync.test.ts +36 -0
- package/gs/sync/sync.ts +39 -0
- package/gs/syscall/constants.ts +39 -24
- package/gs/syscall/errors.ts +10 -0
- package/gs/syscall/fs.ts +195 -0
- package/gs/syscall/js/index.ts +458 -0
- package/gs/syscall/js/meta.json +4 -0
- package/gs/syscall/net.test.ts +85 -0
- package/gs/syscall/types.ts +56 -0
- package/gs/testing/index.ts +1 -0
- package/gs/testing/meta.json +5 -0
- package/gs/testing/testing.test.ts +90 -0
- package/gs/testing/testing.ts +382 -0
- package/gs/time/time.test.ts +106 -0
- package/gs/time/time.ts +278 -57
- package/gs/unicode/unicode.test.ts +25 -0
- package/gs/unicode/unicode.ts +119 -9
- package/gs/unicode/utf8/utf8.test.ts +13 -0
- package/gs/unicode/utf8/utf8.ts +28 -16
- package/gs/unique/index.ts +91 -0
- package/package.json +14 -13
- package/compiler/analysis.go +0 -3475
- package/compiler/analysis_test.go +0 -338
- package/compiler/assignment.go +0 -580
- package/compiler/builtin_test.go +0 -92
- package/compiler/code-writer.go +0 -115
- package/compiler/compiler_test.go +0 -149
- package/compiler/composite-lit.go +0 -779
- package/compiler/config_test.go +0 -62
- package/compiler/constraint.go +0 -86
- package/compiler/decl.go +0 -801
- package/compiler/expr-call-async.go +0 -188
- package/compiler/expr-call-builtins.go +0 -208
- package/compiler/expr-call-helpers.go +0 -382
- package/compiler/expr-call-make.go +0 -318
- package/compiler/expr-call-type-conversion.go +0 -520
- package/compiler/expr-call.go +0 -413
- package/compiler/expr-selector.go +0 -343
- package/compiler/expr-star.go +0 -82
- package/compiler/expr-type.go +0 -442
- package/compiler/expr-value.go +0 -89
- package/compiler/expr.go +0 -773
- package/compiler/field.go +0 -183
- package/compiler/gs_dependencies_test.go +0 -298
- package/compiler/lit.go +0 -322
- package/compiler/output.go +0 -72
- package/compiler/primitive.go +0 -149
- package/compiler/protobuf.go +0 -697
- package/compiler/sanitize.go +0 -100
- package/compiler/spec-struct.go +0 -995
- package/compiler/spec-value.go +0 -540
- package/compiler/spec.go +0 -725
- package/compiler/stmt-assign.go +0 -664
- package/compiler/stmt-for.go +0 -266
- package/compiler/stmt-range.go +0 -475
- package/compiler/stmt-select.go +0 -262
- package/compiler/stmt-type-switch.go +0 -147
- package/compiler/stmt.go +0 -1308
- package/compiler/type-assert.go +0 -386
- package/compiler/type-info.go +0 -156
- package/compiler/type-utils.go +0 -207
- package/compiler/type.go +0 -892
package/compiler/field.go
DELETED
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
package compiler
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"go/ast"
|
|
5
|
-
"go/types"
|
|
6
|
-
)
|
|
7
|
-
|
|
8
|
-
// WriteFieldList translates a Go field list (`ast.FieldList`), which can represent
|
|
9
|
-
// function parameters, function results, or struct fields, into its TypeScript equivalent.
|
|
10
|
-
// - If `isArguments` is true (for function parameters/results):
|
|
11
|
-
// It iterates through `a.List`, writing each field as `name: type`. Parameter
|
|
12
|
-
// names and types are written using `WriteField` and `WriteGoType` respectively.
|
|
13
|
-
// Multiple parameters are comma-separated.
|
|
14
|
-
// - If `isArguments` is false (for struct fields):
|
|
15
|
-
// It writes an opening brace `{`, indents, then writes each field definition
|
|
16
|
-
// using `WriteField`, followed by a closing brace `}`. If the field list is
|
|
17
|
-
// empty or nil, it simply writes `{}`.
|
|
18
|
-
//
|
|
19
|
-
// This function is a key part of generating TypeScript type signatures for functions
|
|
20
|
-
// and interfaces, as well as struct type definitions.
|
|
21
|
-
func (c *GoToTSCompiler) WriteFieldList(a *ast.FieldList, isArguments bool) {
|
|
22
|
-
if !isArguments && (a == nil || a.NumFields() == 0) {
|
|
23
|
-
c.tsw.WriteLiterally("{}")
|
|
24
|
-
return
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if !isArguments && a.Opening.IsValid() {
|
|
28
|
-
c.tsw.WriteLine("{")
|
|
29
|
-
c.tsw.Indent(1)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// Check if this is a variadic function parameter list
|
|
33
|
-
isVariadic := false
|
|
34
|
-
if isArguments && a != nil && len(a.List) > 0 {
|
|
35
|
-
lastParam := a.List[len(a.List)-1]
|
|
36
|
-
if _, ok := lastParam.Type.(*ast.Ellipsis); ok {
|
|
37
|
-
isVariadic = true
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if isArguments && isVariadic {
|
|
42
|
-
// Handle non-variadic parameters first
|
|
43
|
-
for i, field := range a.List[:len(a.List)-1] {
|
|
44
|
-
if i > 0 {
|
|
45
|
-
c.tsw.WriteLiterally(", ")
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Handle multiple parameter names for the same type
|
|
49
|
-
for j, name := range field.Names {
|
|
50
|
-
if j > 0 {
|
|
51
|
-
c.tsw.WriteLiterally(", ")
|
|
52
|
-
}
|
|
53
|
-
c.tsw.WriteLiterally(c.sanitizeIdentifier(name.Name))
|
|
54
|
-
c.tsw.WriteLiterally(": ")
|
|
55
|
-
// Use WriteTypeExpr to preserve qualified names like os.FileInfo
|
|
56
|
-
c.WriteTypeExpr(field.Type)
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Handle the variadic parameter
|
|
61
|
-
lastParam := a.List[len(a.List)-1]
|
|
62
|
-
if len(a.List) > 1 {
|
|
63
|
-
c.tsw.WriteLiterally(", ")
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
for i, name := range lastParam.Names {
|
|
67
|
-
if i > 0 {
|
|
68
|
-
c.tsw.WriteLiterally(", ")
|
|
69
|
-
}
|
|
70
|
-
c.tsw.WriteLiterally("...")
|
|
71
|
-
c.tsw.WriteLiterally(c.sanitizeIdentifier(name.Name))
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
c.tsw.WriteLiterally(": ")
|
|
75
|
-
if ellipsis, ok := lastParam.Type.(*ast.Ellipsis); ok {
|
|
76
|
-
// Get the actual variadic parameter type from the type checker
|
|
77
|
-
// This gives us the slice type (e.g., []interface{})
|
|
78
|
-
variadicType := c.pkg.TypesInfo.TypeOf(lastParam.Type)
|
|
79
|
-
if sliceType, isSlice := variadicType.(*types.Slice); isSlice {
|
|
80
|
-
// For variadic parameters, write the element type followed by []
|
|
81
|
-
// This handles interface{} properly by generating "any[]" instead of "null | any[]"
|
|
82
|
-
c.WriteGoType(sliceType.Elem(), GoTypeContextVariadicParam)
|
|
83
|
-
c.tsw.WriteLiterally("[]")
|
|
84
|
-
} else {
|
|
85
|
-
// Fallback to the original AST-based approach for edge cases
|
|
86
|
-
c.WriteTypeExpr(ellipsis.Elt)
|
|
87
|
-
c.tsw.WriteLiterally("[]")
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
} else {
|
|
91
|
-
// Handle regular parameter list for function declarations
|
|
92
|
-
for i, field := range a.List {
|
|
93
|
-
if i > 0 && isArguments {
|
|
94
|
-
c.tsw.WriteLiterally(", ")
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
if isArguments {
|
|
98
|
-
// For function parameters with multiple names, write each with its type
|
|
99
|
-
for j, name := range field.Names {
|
|
100
|
-
if j > 0 {
|
|
101
|
-
c.tsw.WriteLiterally(", ")
|
|
102
|
-
}
|
|
103
|
-
c.tsw.WriteLiterally(c.sanitizeIdentifier(name.Name))
|
|
104
|
-
c.tsw.WriteLiterally(": ")
|
|
105
|
-
// Use WriteTypeExpr to preserve qualified names like os.FileInfo
|
|
106
|
-
c.WriteTypeExpr(field.Type)
|
|
107
|
-
}
|
|
108
|
-
} else {
|
|
109
|
-
// For struct fields and other non-argument fields
|
|
110
|
-
c.WriteField(field, false)
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
if !isArguments && a.Closing.IsValid() {
|
|
116
|
-
c.tsw.Indent(-1)
|
|
117
|
-
c.tsw.WriteLine("}")
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// WriteField translates a single Go field (`ast.Field`) from a field list
|
|
122
|
-
// (e.g., in a struct type or function signature) into its TypeScript representation.
|
|
123
|
-
// - If `isArguments` is false (struct field):
|
|
124
|
-
// - Documentation comments (`field.Doc`, `field.Comment`) are preserved.
|
|
125
|
-
// - If the field is anonymous (embedded), it's skipped as promotions are handled
|
|
126
|
-
// elsewhere (e.g., during struct class generation).
|
|
127
|
-
// - For named fields, it writes `public fieldName: FieldType_ts`. The field name
|
|
128
|
-
// retains its Go casing. The type is translated using `WriteGoType`.
|
|
129
|
-
// - Go struct tags (`field.Tag`) are written as a trailing comment.
|
|
130
|
-
//
|
|
131
|
-
// - If `isArguments` is true (function parameter):
|
|
132
|
-
// - It writes the parameter name (retaining Go casing). The type is handled
|
|
133
|
-
// by the caller (`WriteFieldList`).
|
|
134
|
-
//
|
|
135
|
-
// This function is used by `WriteFieldList` to process individual items within
|
|
136
|
-
// parameter lists and struct field definitions.
|
|
137
|
-
func (c *GoToTSCompiler) WriteField(field *ast.Field, isArguments bool) {
|
|
138
|
-
if !isArguments {
|
|
139
|
-
if field.Doc != nil {
|
|
140
|
-
c.WriteDoc(field.Doc)
|
|
141
|
-
}
|
|
142
|
-
if field.Comment != nil {
|
|
143
|
-
c.WriteDoc(field.Comment)
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Check if this is an embedded field (anonymous field)
|
|
148
|
-
if len(field.Names) == 0 && !isArguments {
|
|
149
|
-
// This is an embedded field, so we're adding promotions instead of declaring it directly
|
|
150
|
-
return
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
for i, name := range field.Names {
|
|
154
|
-
if i > 0 && isArguments {
|
|
155
|
-
c.tsw.WriteLiterally(", ")
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// argument names: keep original casing, no access modifier
|
|
159
|
-
if isArguments {
|
|
160
|
-
c.tsw.WriteLiterally(c.sanitizeIdentifier(name.Name))
|
|
161
|
-
// Argument type is handled in WriteFieldList, so continue
|
|
162
|
-
continue
|
|
163
|
-
} else {
|
|
164
|
-
// All struct fields are public in TypeScript, keeping original Go casing
|
|
165
|
-
c.tsw.WriteLiterally("public ")
|
|
166
|
-
c.tsw.WriteLiterally(name.Name)
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// write type for struct fields (not arguments)
|
|
170
|
-
c.tsw.WriteLiterally(": ")
|
|
171
|
-
typ := c.pkg.TypesInfo.TypeOf(field.Type)
|
|
172
|
-
c.WriteGoType(typ, GoTypeContextGeneral) // Use WriteGoType for field type
|
|
173
|
-
|
|
174
|
-
if !isArguments {
|
|
175
|
-
// write tag comment if any for struct fields
|
|
176
|
-
if field.Tag != nil {
|
|
177
|
-
c.tsw.WriteCommentLinef("tag: %s", field.Tag.Value)
|
|
178
|
-
} else {
|
|
179
|
-
c.tsw.WriteLine("") // No semicolon
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
package compiler
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"context"
|
|
5
|
-
"os"
|
|
6
|
-
"path/filepath"
|
|
7
|
-
"slices"
|
|
8
|
-
"strings"
|
|
9
|
-
"testing"
|
|
10
|
-
|
|
11
|
-
"github.com/sirupsen/logrus"
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
func TestReadGsPackageMetadata(t *testing.T) {
|
|
15
|
-
// Create a basic compiler configuration
|
|
16
|
-
config := &Config{
|
|
17
|
-
OutputPath: "./test_output",
|
|
18
|
-
Dir: ".",
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// Create a logger (set to warn level to reduce noise in tests)
|
|
22
|
-
logger := logrus.New()
|
|
23
|
-
logger.SetLevel(logrus.WarnLevel)
|
|
24
|
-
le := logrus.NewEntry(logger)
|
|
25
|
-
|
|
26
|
-
// Create a compiler
|
|
27
|
-
comp, err := NewCompiler(config, le, nil)
|
|
28
|
-
if err != nil {
|
|
29
|
-
t.Fatalf("Failed to create compiler: %v", err)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// Test reading metadata from the bytes package
|
|
33
|
-
metadata, err := comp.ReadGsPackageMetadata("gs/bytes")
|
|
34
|
-
if err != nil {
|
|
35
|
-
t.Fatalf("Failed to read metadata: %v", err)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Check that we found the expected dependencies
|
|
39
|
-
if len(metadata.Dependencies) == 0 {
|
|
40
|
-
t.Errorf("Expected at least one dependency, got none")
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Check for the specific "iter" dependency
|
|
44
|
-
foundIter := slices.Contains(metadata.Dependencies, "iter")
|
|
45
|
-
|
|
46
|
-
if !foundIter {
|
|
47
|
-
t.Errorf("Expected to find 'iter' dependency, got dependencies: %v", metadata.Dependencies)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Also check for other expected dependencies from the bytes package
|
|
51
|
-
expectedDeps := []string{"errors", "io", "iter", "unicode", "unicode/utf8", "unsafe"}
|
|
52
|
-
for _, expected := range expectedDeps {
|
|
53
|
-
found := slices.Contains(metadata.Dependencies, expected)
|
|
54
|
-
if !found {
|
|
55
|
-
t.Errorf("Expected to find dependency '%s', got dependencies: %v", expected, metadata.Dependencies)
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
func TestReadGsPackageMetadataWithAsyncMethods(t *testing.T) {
|
|
61
|
-
// Create a basic compiler configuration
|
|
62
|
-
config := &Config{
|
|
63
|
-
OutputPath: "./test_output",
|
|
64
|
-
Dir: ".",
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Create a logger (set to warn level to reduce noise in tests)
|
|
68
|
-
logger := logrus.New()
|
|
69
|
-
logger.SetLevel(logrus.WarnLevel)
|
|
70
|
-
le := logrus.NewEntry(logger)
|
|
71
|
-
|
|
72
|
-
// Create a compiler
|
|
73
|
-
comp, err := NewCompiler(config, le, nil)
|
|
74
|
-
if err != nil {
|
|
75
|
-
t.Fatalf("Failed to create compiler: %v", err)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Test reading metadata from the sync package (which has async methods)
|
|
79
|
-
metadata, err := comp.ReadGsPackageMetadata("gs/sync")
|
|
80
|
-
if err != nil {
|
|
81
|
-
t.Fatalf("Failed to read metadata: %v", err)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Check that we have async methods
|
|
85
|
-
if len(metadata.AsyncMethods) == 0 {
|
|
86
|
-
t.Errorf("Expected at least one async method for sync package, got none")
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Check for specific async methods
|
|
90
|
-
expectedAsyncMethods := []string{"Mutex.Lock", "WaitGroup.Wait", "RWMutex.Lock"}
|
|
91
|
-
for _, methodName := range expectedAsyncMethods {
|
|
92
|
-
if isAsync, exists := metadata.AsyncMethods[methodName]; !exists {
|
|
93
|
-
t.Errorf("Expected to find async method '%s'", methodName)
|
|
94
|
-
} else if !isAsync {
|
|
95
|
-
t.Errorf("Expected method '%s' to be async, but it's not", methodName)
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
func TestReadGsPackageMetadataNonExistent(t *testing.T) {
|
|
101
|
-
// Create a basic compiler configuration
|
|
102
|
-
config := &Config{
|
|
103
|
-
OutputPath: "./test_output",
|
|
104
|
-
Dir: ".",
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// Create a logger (set to warn level to reduce noise in tests)
|
|
108
|
-
logger := logrus.New()
|
|
109
|
-
logger.SetLevel(logrus.WarnLevel)
|
|
110
|
-
le := logrus.NewEntry(logger)
|
|
111
|
-
|
|
112
|
-
// Create a compiler
|
|
113
|
-
comp, err := NewCompiler(config, le, nil)
|
|
114
|
-
if err != nil {
|
|
115
|
-
t.Fatalf("Failed to create compiler: %v", err)
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Test reading metadata from a non-existent package
|
|
119
|
-
metadata, err := comp.ReadGsPackageMetadata("gs/nonexistent")
|
|
120
|
-
if err != nil {
|
|
121
|
-
t.Fatalf("Expected no error for non-existent package, got: %v", err)
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// Should return empty metadata for non-existent packages
|
|
125
|
-
if len(metadata.Dependencies) != 0 {
|
|
126
|
-
t.Errorf("Expected empty dependencies for non-existent package, got: %v", metadata.Dependencies)
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
if len(metadata.AsyncMethods) != 0 {
|
|
130
|
-
t.Errorf("Expected empty async methods for non-existent package, got: %v", metadata.AsyncMethods)
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
func TestCompilePackagesCopiesHandwrittenDependencies(t *testing.T) {
|
|
135
|
-
tempDir, err := os.MkdirTemp("", "goscript-gs-deps")
|
|
136
|
-
if err != nil {
|
|
137
|
-
t.Fatalf("Failed to create temp dir: %v", err)
|
|
138
|
-
}
|
|
139
|
-
defer os.RemoveAll(tempDir)
|
|
140
|
-
|
|
141
|
-
wd, err := os.Getwd()
|
|
142
|
-
if err != nil {
|
|
143
|
-
t.Fatalf("Failed to get working directory: %v", err)
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
config := &Config{
|
|
147
|
-
OutputPath: tempDir,
|
|
148
|
-
Dir: filepath.Dir(wd),
|
|
149
|
-
AllDependencies: true,
|
|
150
|
-
DisableEmitBuiltin: false,
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
logger := logrus.New()
|
|
154
|
-
logger.SetLevel(logrus.WarnLevel)
|
|
155
|
-
le := logrus.NewEntry(logger)
|
|
156
|
-
|
|
157
|
-
comp, err := NewCompiler(config, le, nil)
|
|
158
|
-
if err != nil {
|
|
159
|
-
t.Fatalf("Failed to create compiler: %v", err)
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
_, err = comp.CompilePackages(
|
|
163
|
-
context.Background(),
|
|
164
|
-
"github.com/aperturerobotics/goscript/tests/tests/package_import_slices",
|
|
165
|
-
)
|
|
166
|
-
if err != nil {
|
|
167
|
-
t.Fatalf("Compilation failed: %v", err)
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
cmpPath := filepath.Join(tempDir, "@goscript", "cmp", "index.ts")
|
|
171
|
-
if _, err := os.Stat(cmpPath); err != nil {
|
|
172
|
-
t.Fatalf("Expected handwritten dependency at %s: %v", cmpPath, err)
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
func TestCompilePackagesEmitTypeScriptImportSpecifiers(t *testing.T) {
|
|
177
|
-
tempDir, err := os.MkdirTemp("", "goscript-ts-imports")
|
|
178
|
-
if err != nil {
|
|
179
|
-
t.Fatalf("Failed to create temp dir: %v", err)
|
|
180
|
-
}
|
|
181
|
-
defer os.RemoveAll(tempDir)
|
|
182
|
-
|
|
183
|
-
wd, err := os.Getwd()
|
|
184
|
-
if err != nil {
|
|
185
|
-
t.Fatalf("Failed to get working directory: %v", err)
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
config := &Config{
|
|
189
|
-
OutputPath: tempDir,
|
|
190
|
-
Dir: filepath.Dir(wd),
|
|
191
|
-
AllDependencies: true,
|
|
192
|
-
DisableEmitBuiltin: false,
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
logger := logrus.New()
|
|
196
|
-
logger.SetLevel(logrus.WarnLevel)
|
|
197
|
-
le := logrus.NewEntry(logger)
|
|
198
|
-
|
|
199
|
-
comp, err := NewCompiler(config, le, nil)
|
|
200
|
-
if err != nil {
|
|
201
|
-
t.Fatalf("Failed to create compiler: %v", err)
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
_, err = comp.CompilePackages(
|
|
205
|
-
context.Background(),
|
|
206
|
-
"github.com/aperturerobotics/goscript/tests/tests/package_import",
|
|
207
|
-
"github.com/aperturerobotics/goscript/tests/tests/map_value_field_access_cross_file",
|
|
208
|
-
)
|
|
209
|
-
if err != nil {
|
|
210
|
-
t.Fatalf("Compilation failed: %v", err)
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
assertFileContains(t,
|
|
214
|
-
filepath.Join(
|
|
215
|
-
tempDir,
|
|
216
|
-
"@goscript",
|
|
217
|
-
"github.com",
|
|
218
|
-
"aperturerobotics",
|
|
219
|
-
"goscript",
|
|
220
|
-
"tests",
|
|
221
|
-
"tests",
|
|
222
|
-
"package_import",
|
|
223
|
-
"package_import.gs.ts",
|
|
224
|
-
),
|
|
225
|
-
[]string{
|
|
226
|
-
`@goscript/builtin/index.ts`,
|
|
227
|
-
`@goscript/github.com/aperturerobotics/goscript/tests/tests/package_import/subpkg/index.ts`,
|
|
228
|
-
},
|
|
229
|
-
[]string{
|
|
230
|
-
".js",
|
|
231
|
-
},
|
|
232
|
-
)
|
|
233
|
-
|
|
234
|
-
assertFileContains(t,
|
|
235
|
-
filepath.Join(
|
|
236
|
-
tempDir,
|
|
237
|
-
"@goscript",
|
|
238
|
-
"github.com",
|
|
239
|
-
"aperturerobotics",
|
|
240
|
-
"goscript",
|
|
241
|
-
"tests",
|
|
242
|
-
"tests",
|
|
243
|
-
"package_import",
|
|
244
|
-
"subpkg",
|
|
245
|
-
"index.ts",
|
|
246
|
-
),
|
|
247
|
-
[]string{
|
|
248
|
-
`"./subpkg.gs.ts"`,
|
|
249
|
-
},
|
|
250
|
-
[]string{
|
|
251
|
-
".gs.js",
|
|
252
|
-
},
|
|
253
|
-
)
|
|
254
|
-
|
|
255
|
-
assertFileContains(t,
|
|
256
|
-
filepath.Join(
|
|
257
|
-
tempDir,
|
|
258
|
-
"@goscript",
|
|
259
|
-
"github.com",
|
|
260
|
-
"aperturerobotics",
|
|
261
|
-
"goscript",
|
|
262
|
-
"tests",
|
|
263
|
-
"tests",
|
|
264
|
-
"map_value_field_access_cross_file",
|
|
265
|
-
"read.gs.ts",
|
|
266
|
-
),
|
|
267
|
-
[]string{
|
|
268
|
-
`"./types.gs.ts"`,
|
|
269
|
-
`@goscript/builtin/index.ts`,
|
|
270
|
-
},
|
|
271
|
-
[]string{
|
|
272
|
-
".gs.js",
|
|
273
|
-
"index.js",
|
|
274
|
-
},
|
|
275
|
-
)
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
func assertFileContains(t *testing.T, path string, want []string, wantAbsent []string) {
|
|
279
|
-
t.Helper()
|
|
280
|
-
|
|
281
|
-
data, err := os.ReadFile(path)
|
|
282
|
-
if err != nil {
|
|
283
|
-
t.Fatalf("Failed to read %s: %v", path, err)
|
|
284
|
-
}
|
|
285
|
-
text := string(data)
|
|
286
|
-
|
|
287
|
-
for _, s := range want {
|
|
288
|
-
if !strings.Contains(text, s) {
|
|
289
|
-
t.Fatalf("Expected %s to contain %q\n%s", path, s, text)
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
for _, s := range wantAbsent {
|
|
294
|
-
if strings.Contains(text, s) {
|
|
295
|
-
t.Fatalf("Expected %s to omit %q\n%s", path, s, text)
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|