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.
Files changed (197) hide show
  1. package/README.md +13 -1
  2. package/cmd/goscript/cmd_compile.go +70 -69
  3. package/cmd/goscript/cmd_compile_test.go +79 -0
  4. package/cmd/goscript/main.go +10 -5
  5. package/compiler/compile-request.go +218 -0
  6. package/compiler/compiler.go +16 -1336
  7. package/compiler/compliance_test.go +196 -0
  8. package/compiler/config.go +6 -13
  9. package/compiler/diagnostic.go +70 -0
  10. package/compiler/index.test.ts +28 -28
  11. package/compiler/index.ts +40 -72
  12. package/compiler/lowered-program.go +132 -0
  13. package/compiler/lowering.go +3576 -0
  14. package/compiler/override-registry.go +422 -0
  15. package/compiler/override-registry_test.go +207 -0
  16. package/compiler/package-graph.go +231 -0
  17. package/compiler/package-graph_test.go +281 -0
  18. package/compiler/result.go +13 -0
  19. package/compiler/runtime-contract.go +279 -0
  20. package/compiler/runtime-contract_test.go +90 -0
  21. package/compiler/semantic-model-types.go +110 -0
  22. package/compiler/semantic-model.go +922 -0
  23. package/compiler/semantic-model_test.go +416 -0
  24. package/compiler/service.go +133 -0
  25. package/compiler/skeleton_test.go +1145 -0
  26. package/compiler/typescript-emitter.go +663 -0
  27. package/compiler/wasm/compile.go +2 -3
  28. package/compiler/wasm/compile_test.go +29 -0
  29. package/compiler/wasm_api.go +10 -159
  30. package/dist/compiler/index.d.ts +1 -3
  31. package/dist/compiler/index.js +31 -55
  32. package/dist/compiler/index.js.map +1 -1
  33. package/dist/gs/builtin/builtin.d.ts +13 -0
  34. package/dist/gs/builtin/builtin.js +27 -7
  35. package/dist/gs/builtin/builtin.js.map +1 -1
  36. package/dist/gs/builtin/channel.d.ts +3 -3
  37. package/dist/gs/builtin/channel.js.map +1 -1
  38. package/dist/gs/builtin/hostio.d.ts +86 -0
  39. package/dist/gs/builtin/hostio.js +266 -0
  40. package/dist/gs/builtin/hostio.js.map +1 -0
  41. package/dist/gs/builtin/index.d.ts +1 -0
  42. package/dist/gs/builtin/index.js +1 -0
  43. package/dist/gs/builtin/index.js.map +1 -1
  44. package/dist/gs/builtin/print.d.ts +8 -0
  45. package/dist/gs/builtin/print.js +111 -0
  46. package/dist/gs/builtin/print.js.map +1 -0
  47. package/dist/gs/builtin/slice.d.ts +1 -1
  48. package/dist/gs/builtin/slice.js.map +1 -1
  49. package/dist/gs/builtin/type.d.ts +11 -0
  50. package/dist/gs/builtin/type.js +55 -1
  51. package/dist/gs/builtin/type.js.map +1 -1
  52. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  53. package/dist/gs/bytes/bytes.gs.js.map +1 -1
  54. package/dist/gs/bytes/reader.gs.js.map +1 -1
  55. package/dist/gs/context/context.js.map +1 -1
  56. package/dist/gs/crypto/rand/index.d.ts +5 -0
  57. package/dist/gs/crypto/rand/index.js +77 -0
  58. package/dist/gs/crypto/rand/index.js.map +1 -0
  59. package/dist/gs/encoding/json/index.d.ts +3 -0
  60. package/dist/gs/encoding/json/index.js +160 -0
  61. package/dist/gs/encoding/json/index.js.map +1 -0
  62. package/dist/gs/fmt/fmt.js +2 -22
  63. package/dist/gs/fmt/fmt.js.map +1 -1
  64. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +1 -1
  65. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +1 -1
  66. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  67. package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
  68. package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
  69. package/dist/gs/github.com/pkg/errors/stack.js.map +1 -1
  70. package/dist/gs/go/scanner/index.d.ts +29 -0
  71. package/dist/gs/go/scanner/index.js +120 -0
  72. package/dist/gs/go/scanner/index.js.map +1 -0
  73. package/dist/gs/go/token/index.d.ts +31 -0
  74. package/dist/gs/go/token/index.js +82 -0
  75. package/dist/gs/go/token/index.js.map +1 -0
  76. package/dist/gs/internal/abi/index.js.map +1 -1
  77. package/dist/gs/io/fs/fs.js.map +1 -1
  78. package/dist/gs/io/fs/readdir.js.map +1 -1
  79. package/dist/gs/io/fs/readfile.js.map +1 -1
  80. package/dist/gs/io/fs/stat.js.map +1 -1
  81. package/dist/gs/io/fs/sub.js.map +1 -1
  82. package/dist/gs/io/io.js.map +1 -1
  83. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  84. package/dist/gs/os/error.gs.js +2 -4
  85. package/dist/gs/os/error.gs.js.map +1 -1
  86. package/dist/gs/os/exec.gs.js.map +1 -1
  87. package/dist/gs/os/exec_posix.gs.js.map +1 -1
  88. package/dist/gs/os/rawconn_js.gs.js.map +1 -1
  89. package/dist/gs/os/root_js.gs.js.map +1 -1
  90. package/dist/gs/os/tempfile.gs.js +66 -9
  91. package/dist/gs/os/tempfile.gs.js.map +1 -1
  92. package/dist/gs/os/types.gs.js.map +1 -1
  93. package/dist/gs/os/types_js.gs.d.ts +2 -51
  94. package/dist/gs/os/types_js.gs.js +67 -105
  95. package/dist/gs/os/types_js.gs.js.map +1 -1
  96. package/dist/gs/os/types_unix.gs.js.map +1 -1
  97. package/dist/gs/path/filepath/match.js.map +1 -1
  98. package/dist/gs/path/match.js.map +1 -1
  99. package/dist/gs/path/path.js.map +1 -1
  100. package/dist/gs/reflect/index.d.ts +2 -2
  101. package/dist/gs/reflect/index.js +1 -1
  102. package/dist/gs/reflect/index.js.map +1 -1
  103. package/dist/gs/reflect/map.js.map +1 -1
  104. package/dist/gs/reflect/type.d.ts +2 -1
  105. package/dist/gs/reflect/type.js +85 -14
  106. package/dist/gs/reflect/type.js.map +1 -1
  107. package/dist/gs/reflect/types.js.map +1 -1
  108. package/dist/gs/reflect/visiblefields.js.map +1 -1
  109. package/dist/gs/runtime/runtime.js.map +1 -1
  110. package/dist/gs/sort/sort.gs.js.map +1 -1
  111. package/dist/gs/strconv/atoi.gs.js.map +1 -1
  112. package/dist/gs/strconv/quote.gs.js.map +1 -1
  113. package/dist/gs/strings/builder.js.map +1 -1
  114. package/dist/gs/strings/reader.js.map +1 -1
  115. package/dist/gs/strings/replace.js.map +1 -1
  116. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  117. package/dist/gs/sync/atomic/value.gs.js.map +1 -1
  118. package/dist/gs/sync/sync.d.ts +1 -0
  119. package/dist/gs/sync/sync.js +12 -0
  120. package/dist/gs/sync/sync.js.map +1 -1
  121. package/dist/gs/time/time.js.map +1 -1
  122. package/dist/gs/unicode/unicode.js.map +1 -1
  123. package/go.mod +2 -2
  124. package/gs/builtin/builtin.ts +31 -6
  125. package/gs/builtin/hostio.test.ts +246 -0
  126. package/gs/builtin/hostio.ts +413 -0
  127. package/gs/builtin/index.ts +1 -0
  128. package/gs/builtin/print.test.ts +48 -0
  129. package/gs/builtin/print.ts +154 -0
  130. package/gs/builtin/runtime-contract.test.ts +230 -0
  131. package/gs/builtin/type.ts +84 -1
  132. package/gs/crypto/rand/index.test.ts +32 -0
  133. package/gs/crypto/rand/index.ts +90 -0
  134. package/gs/crypto/rand/meta.json +5 -0
  135. package/gs/encoding/json/index.test.ts +65 -0
  136. package/gs/encoding/json/index.ts +186 -0
  137. package/gs/fmt/fmt.test.ts +41 -30
  138. package/gs/fmt/fmt.ts +2 -22
  139. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +23 -0
  140. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +3 -1
  141. package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/meta.json +3 -1
  142. package/gs/go/scanner/index.test.ts +50 -0
  143. package/gs/go/scanner/index.ts +157 -0
  144. package/gs/go/token/index.test.ts +21 -0
  145. package/gs/go/token/index.ts +120 -0
  146. package/gs/os/file_unix_js.test.ts +103 -0
  147. package/gs/os/meta.json +1 -2
  148. package/gs/os/tempfile.gs.test.ts +85 -0
  149. package/gs/os/tempfile.gs.ts +71 -11
  150. package/gs/os/types_js.gs.ts +74 -153
  151. package/gs/reflect/index.ts +1 -1
  152. package/gs/reflect/type.ts +106 -17
  153. package/gs/reflect/typefor.test.ts +75 -0
  154. package/gs/sync/sync.test.ts +24 -0
  155. package/gs/sync/sync.ts +12 -0
  156. package/package.json +13 -13
  157. package/compiler/analysis.go +0 -3475
  158. package/compiler/analysis_test.go +0 -338
  159. package/compiler/assignment.go +0 -580
  160. package/compiler/builtin_test.go +0 -92
  161. package/compiler/code-writer.go +0 -115
  162. package/compiler/compiler_test.go +0 -149
  163. package/compiler/composite-lit.go +0 -779
  164. package/compiler/config_test.go +0 -62
  165. package/compiler/constraint.go +0 -86
  166. package/compiler/decl.go +0 -801
  167. package/compiler/expr-call-async.go +0 -188
  168. package/compiler/expr-call-builtins.go +0 -208
  169. package/compiler/expr-call-helpers.go +0 -382
  170. package/compiler/expr-call-make.go +0 -318
  171. package/compiler/expr-call-type-conversion.go +0 -520
  172. package/compiler/expr-call.go +0 -413
  173. package/compiler/expr-selector.go +0 -343
  174. package/compiler/expr-star.go +0 -82
  175. package/compiler/expr-type.go +0 -442
  176. package/compiler/expr-value.go +0 -89
  177. package/compiler/expr.go +0 -773
  178. package/compiler/field.go +0 -183
  179. package/compiler/gs_dependencies_test.go +0 -298
  180. package/compiler/lit.go +0 -322
  181. package/compiler/output.go +0 -72
  182. package/compiler/primitive.go +0 -149
  183. package/compiler/protobuf.go +0 -697
  184. package/compiler/sanitize.go +0 -100
  185. package/compiler/spec-struct.go +0 -995
  186. package/compiler/spec-value.go +0 -540
  187. package/compiler/spec.go +0 -725
  188. package/compiler/stmt-assign.go +0 -664
  189. package/compiler/stmt-for.go +0 -266
  190. package/compiler/stmt-range.go +0 -475
  191. package/compiler/stmt-select.go +0 -262
  192. package/compiler/stmt-type-switch.go +0 -147
  193. package/compiler/stmt.go +0 -1308
  194. package/compiler/type-assert.go +0 -386
  195. package/compiler/type-info.go +0 -156
  196. package/compiler/type-utils.go +0 -207
  197. 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.83",
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": "npm run build:updategover && tsc -p tsconfig.build.json",
46
- "build:updategover": "node -e \"const fs = require('fs'); const { execSync } = require('child_process'); const goVersion = execSync('go mod edit -json', { encoding: 'utf8' }); const goData = JSON.parse(goVersion); const version = goData.Go; const runtimePath = 'gs/runtime/runtime.ts'; const content = fs.readFileSync(runtimePath, 'utf8'); const updatedContent = content.replace(/export const GOVERSION = 'go[^']*'/, \\`export const GOVERSION = 'go\\${version}'\\`); fs.writeFileSync(runtimePath, updatedContent);\"",
47
- "prepublishOnly": "npm run build",
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": "npm run test:go && npm run test:js",
49
+ "test": "bun run test:go && bun run test:js",
50
50
  "test:go": "go test ./...",
51
- "test:js": "npm run typecheck && vitest run",
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": "npm run format:go && npm run format:js && npm run format:config",
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": "npm run release:version && npm run release:commit",
60
- "release:minor": "npm run release:version:minor && npm run release:commit",
61
- "release:version": "npm version patch -m \"release: v%s\" --no-git-tag-version",
62
- "release:version:minor": "npm version minor -m \"release: v%s\" --no-git-tag-version",
63
- "release:commit": "git reset && git add package.json && git commit -s -m \"release: v$(node -p \"require('./package.json').version\")\" && git tag v$(node -p \"require('./package.json').version\")",
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": "npm run lint:go && npm run lint:js",
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",