goscript 0.0.83 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -1
- package/cmd/goscript/cmd_compile.go +70 -69
- package/cmd/goscript/cmd_compile_test.go +79 -0
- package/cmd/goscript/main.go +10 -5
- package/compiler/compile-request.go +218 -0
- package/compiler/compiler.go +16 -1336
- package/compiler/compliance_test.go +196 -0
- package/compiler/config.go +6 -13
- package/compiler/diagnostic.go +70 -0
- package/compiler/index.test.ts +28 -28
- package/compiler/index.ts +40 -72
- package/compiler/lowered-program.go +132 -0
- package/compiler/lowering.go +3576 -0
- package/compiler/override-registry.go +422 -0
- package/compiler/override-registry_test.go +207 -0
- package/compiler/package-graph.go +231 -0
- package/compiler/package-graph_test.go +281 -0
- package/compiler/result.go +13 -0
- package/compiler/runtime-contract.go +279 -0
- package/compiler/runtime-contract_test.go +90 -0
- package/compiler/semantic-model-types.go +110 -0
- package/compiler/semantic-model.go +922 -0
- package/compiler/semantic-model_test.go +416 -0
- package/compiler/service.go +133 -0
- package/compiler/skeleton_test.go +1145 -0
- package/compiler/typescript-emitter.go +663 -0
- package/compiler/wasm/compile.go +2 -3
- package/compiler/wasm/compile_test.go +29 -0
- package/compiler/wasm_api.go +10 -159
- 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 +13 -0
- package/dist/gs/builtin/builtin.js +27 -7
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/channel.d.ts +3 -3
- package/dist/gs/builtin/channel.js.map +1 -1
- package/dist/gs/builtin/hostio.d.ts +86 -0
- package/dist/gs/builtin/hostio.js +266 -0
- package/dist/gs/builtin/hostio.js.map +1 -0
- 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/print.d.ts +8 -0
- package/dist/gs/builtin/print.js +111 -0
- package/dist/gs/builtin/print.js.map +1 -0
- package/dist/gs/builtin/slice.d.ts +1 -1
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/builtin/type.d.ts +11 -0
- package/dist/gs/builtin/type.js +55 -1
- package/dist/gs/builtin/type.js.map +1 -1
- 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.map +1 -1
- package/dist/gs/context/context.js.map +1 -1
- 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/encoding/json/index.d.ts +3 -0
- package/dist/gs/encoding/json/index.js +160 -0
- package/dist/gs/encoding/json/index.js.map +1 -0
- package/dist/gs/fmt/fmt.js +2 -22
- package/dist/gs/fmt/fmt.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +1 -1
- package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
- package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
- 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/scanner/index.d.ts +29 -0
- package/dist/gs/go/scanner/index.js +120 -0
- package/dist/gs/go/scanner/index.js.map +1 -0
- package/dist/gs/go/token/index.d.ts +31 -0
- package/dist/gs/go/token/index.js +82 -0
- package/dist/gs/go/token/index.js.map +1 -0
- package/dist/gs/internal/abi/index.js.map +1 -1
- package/dist/gs/io/fs/fs.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/stat.js.map +1 -1
- package/dist/gs/io/fs/sub.js.map +1 -1
- package/dist/gs/io/io.js.map +1 -1
- 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.d.ts +2 -51
- package/dist/gs/os/types_js.gs.js +67 -105
- 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.map +1 -1
- package/dist/gs/path/match.js.map +1 -1
- package/dist/gs/path/path.js.map +1 -1
- package/dist/gs/reflect/index.d.ts +2 -2
- package/dist/gs/reflect/index.js +1 -1
- package/dist/gs/reflect/index.js.map +1 -1
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +2 -1
- package/dist/gs/reflect/type.js +85 -14
- 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/runtime.js.map +1 -1
- 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.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.js.map +1 -1
- package/dist/gs/sync/atomic/value.gs.js.map +1 -1
- package/dist/gs/sync/sync.d.ts +1 -0
- package/dist/gs/sync/sync.js +12 -0
- package/dist/gs/sync/sync.js.map +1 -1
- package/dist/gs/time/time.js.map +1 -1
- package/dist/gs/unicode/unicode.js.map +1 -1
- package/go.mod +2 -2
- package/gs/builtin/builtin.ts +31 -6
- package/gs/builtin/hostio.test.ts +246 -0
- package/gs/builtin/hostio.ts +413 -0
- package/gs/builtin/index.ts +1 -0
- package/gs/builtin/print.test.ts +48 -0
- package/gs/builtin/print.ts +154 -0
- package/gs/builtin/runtime-contract.test.ts +230 -0
- package/gs/builtin/type.ts +84 -1
- 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/encoding/json/index.test.ts +65 -0
- package/gs/encoding/json/index.ts +186 -0
- package/gs/fmt/fmt.test.ts +41 -30
- package/gs/fmt/fmt.ts +2 -22
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +23 -0
- package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +3 -1
- package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/meta.json +3 -1
- package/gs/go/scanner/index.test.ts +50 -0
- package/gs/go/scanner/index.ts +157 -0
- package/gs/go/token/index.test.ts +21 -0
- package/gs/go/token/index.ts +120 -0
- package/gs/os/file_unix_js.test.ts +103 -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 +74 -153
- package/gs/reflect/index.ts +1 -1
- package/gs/reflect/type.ts +106 -17
- package/gs/reflect/typefor.test.ts +75 -0
- package/gs/sync/sync.test.ts +24 -0
- package/gs/sync/sync.ts +12 -0
- package/package.json +13 -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
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import {
|
|
3
|
+
TypeKind,
|
|
4
|
+
registerInterfaceType,
|
|
5
|
+
registerStructType,
|
|
6
|
+
} from '../builtin/index.js'
|
|
7
|
+
import { Int, Struct, TypeFor } from './type.js'
|
|
8
|
+
|
|
9
|
+
describe('TypeFor', () => {
|
|
10
|
+
it('uses generic runtime type descriptors', () => {
|
|
11
|
+
const intType = TypeFor({
|
|
12
|
+
T: {
|
|
13
|
+
type: { kind: TypeKind.Basic, name: 'int' },
|
|
14
|
+
zero: () => 0,
|
|
15
|
+
},
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
expect(intType.String()).toBe('int')
|
|
19
|
+
expect(intType.Kind()).toBe(Int)
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
it('formats literal interface methods from type metadata', () => {
|
|
23
|
+
const ifaceType = TypeFor({
|
|
24
|
+
T: {
|
|
25
|
+
type: {
|
|
26
|
+
kind: TypeKind.Interface,
|
|
27
|
+
methods: [{ name: 'SomeMethod', args: [], returns: [] }],
|
|
28
|
+
},
|
|
29
|
+
zero: () => null,
|
|
30
|
+
},
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
expect(ifaceType.String()).toBe('interface { SomeMethod() }')
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
it('formats unnamed function signatures from type metadata', () => {
|
|
37
|
+
const fnType = TypeFor({
|
|
38
|
+
T: {
|
|
39
|
+
type: {
|
|
40
|
+
kind: TypeKind.Function,
|
|
41
|
+
params: [{ kind: TypeKind.Basic, name: 'int' }],
|
|
42
|
+
results: [{ kind: TypeKind.Basic, name: 'string' }],
|
|
43
|
+
},
|
|
44
|
+
zero: () => null,
|
|
45
|
+
},
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
expect(fnType.String()).toBe('func(int) string')
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
it('resolves registered type names from descriptors', () => {
|
|
52
|
+
class RegisteredStruct {}
|
|
53
|
+
registerStructType(
|
|
54
|
+
'main.RegisteredStruct',
|
|
55
|
+
new RegisteredStruct(),
|
|
56
|
+
[],
|
|
57
|
+
RegisteredStruct,
|
|
58
|
+
{},
|
|
59
|
+
)
|
|
60
|
+
registerInterfaceType('main.RegisteredInterface', null, [
|
|
61
|
+
{ name: 'SomeMethod', args: [], returns: [] },
|
|
62
|
+
])
|
|
63
|
+
|
|
64
|
+
const structType = TypeFor({
|
|
65
|
+
T: { type: 'main.RegisteredStruct', zero: () => new RegisteredStruct() },
|
|
66
|
+
})
|
|
67
|
+
const ifaceType = TypeFor({
|
|
68
|
+
T: { type: 'main.RegisteredInterface', zero: () => null },
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
expect(structType.String()).toBe('main.RegisteredStruct')
|
|
72
|
+
expect(structType.Kind()).toBe(Struct)
|
|
73
|
+
expect(ifaceType.String()).toBe('interface { SomeMethod() }')
|
|
74
|
+
})
|
|
75
|
+
})
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { WaitGroup } from './sync.js'
|
|
4
|
+
|
|
5
|
+
describe('sync.WaitGroup', () => {
|
|
6
|
+
it('Go tracks scheduled work and unblocks Wait after completion', async () => {
|
|
7
|
+
const wg = new WaitGroup()
|
|
8
|
+
const events: string[] = []
|
|
9
|
+
|
|
10
|
+
wg.Go(async () => {
|
|
11
|
+
events.push('worker start')
|
|
12
|
+
await Promise.resolve()
|
|
13
|
+
events.push('worker done')
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
const wait = wg.Wait().then(() => {
|
|
17
|
+
events.push('wait done')
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
expect(events).toEqual([])
|
|
21
|
+
await wait
|
|
22
|
+
expect(events).toEqual(['worker start', 'worker done', 'wait done'])
|
|
23
|
+
})
|
|
24
|
+
})
|
package/gs/sync/sync.ts
CHANGED
|
@@ -193,6 +193,18 @@ export class WaitGroup {
|
|
|
193
193
|
this.Add(-1)
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
+
// Go calls f in a new goroutine and adds that task to the WaitGroup.
|
|
197
|
+
public Go(f: () => void | Promise<void>): void {
|
|
198
|
+
this.Add(1)
|
|
199
|
+
queueMicrotask(async () => {
|
|
200
|
+
try {
|
|
201
|
+
await f()
|
|
202
|
+
} finally {
|
|
203
|
+
this.Done()
|
|
204
|
+
}
|
|
205
|
+
})
|
|
206
|
+
}
|
|
207
|
+
|
|
196
208
|
// Wait blocks until the WaitGroup counter is zero
|
|
197
209
|
public async Wait(): Promise<void> {
|
|
198
210
|
if (this._counter === 0) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "goscript",
|
|
3
3
|
"description": "Go to TypeScript transpiler",
|
|
4
|
-
"version": "0.0
|
|
4
|
+
"version": "0.1.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Aperture Robotics LLC.",
|
|
7
7
|
"email": "support@aperture.us",
|
|
@@ -42,27 +42,27 @@
|
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
45
|
-
"build": "
|
|
46
|
-
"build:updategover": "
|
|
47
|
-
"prepublishOnly": "
|
|
45
|
+
"build": "bun run build:updategover && tsgo -p tsconfig.build.json",
|
|
46
|
+
"build:updategover": "bun run scripts/update-go-version.ts",
|
|
47
|
+
"prepublishOnly": "bun run build",
|
|
48
48
|
"example": "cd ./example/simple && bash run.bash",
|
|
49
|
-
"test": "
|
|
49
|
+
"test": "bun run test:go && bun run test:js",
|
|
50
50
|
"test:go": "go test ./...",
|
|
51
|
-
"test:js": "
|
|
51
|
+
"test:js": "bun run typecheck && vitest run",
|
|
52
52
|
"test:browser": "bun run scripts/generate-browser-tests.ts && vitest run --config vitest.browser.config.ts",
|
|
53
53
|
"test:browser:ui": "bun run scripts/generate-browser-tests.ts && vitest --config vitest.browser.config.ts --ui",
|
|
54
54
|
"typecheck": "tsgo --noEmit -p tsconfig.build.json",
|
|
55
|
-
"format": "
|
|
55
|
+
"format": "bun run format:go && bun run format:js && bun run format:config",
|
|
56
56
|
"format:config": "prettier --write tsconfig.json package.json",
|
|
57
57
|
"format:go": "gofumpt -w .",
|
|
58
58
|
"format:js": "prettier --write './{src,gs,example}/**/(*.ts|*.tsx|*.html|*.css|*.scss)'",
|
|
59
|
-
"release": "
|
|
60
|
-
"release:minor": "
|
|
61
|
-
"release:version": "
|
|
62
|
-
"release:version:minor": "
|
|
63
|
-
"release:commit": "git reset && git add package.json && git commit -s -m \"release: v$(
|
|
59
|
+
"release": "bun run release:version && bun run release:commit",
|
|
60
|
+
"release:minor": "bun run release:version:minor && bun run release:commit",
|
|
61
|
+
"release:version": "bun run scripts/bump-version.ts patch",
|
|
62
|
+
"release:version:minor": "bun run scripts/bump-version.ts minor",
|
|
63
|
+
"release:commit": "git reset && git add package.json && git commit -s -m \"release: v$(bun -p \"require('./package.json').version\")\" && git tag v$(bun -p \"require('./package.json').version\")",
|
|
64
64
|
"release:publish": "git push && git push --tags",
|
|
65
|
-
"lint": "
|
|
65
|
+
"lint": "bun run lint:go && bun run lint:js",
|
|
66
66
|
"lint:go": "golangci-lint run .",
|
|
67
67
|
"lint:js": "eslint -c eslint.config.mjs ./",
|
|
68
68
|
"lint:js:fix": "eslint -c eslint.config.mjs ./ --fix",
|