gofront 1.7.0 → 1.8.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 -13
- package/package.json +8 -37
- package/src/backend/js/expressions.js +1341 -148
- package/src/backend/js/fmt-runtime.js +573 -0
- package/src/backend/js/index.js +375 -57
- package/src/backend/js/runtime.js +1460 -133
- package/src/backend/js/statements.js +900 -86
- package/src/backend/js/stdlib/bits.js +87 -14
- package/src/backend/js/stdlib/builder.js +41 -6
- package/src/backend/js/stdlib/bytes.js +253 -7
- package/src/backend/js/stdlib/errors.js +2 -1
- package/src/backend/js/stdlib/fmt.js +349 -10
- package/src/backend/js/stdlib/index.js +8 -3
- package/src/backend/js/stdlib/json.js +247 -52
- package/src/backend/js/stdlib/maps.js +0 -8
- package/src/backend/js/stdlib/math.js +17 -1
- package/src/backend/js/stdlib/simd.js +10 -0
- package/src/backend/js/stdlib/slices.js +36 -6
- package/src/backend/js/stdlib/strconv.js +10 -5
- package/src/backend/js/stdlib/strings.js +83 -4
- package/src/backend/js/stdlib/testing.js +7 -0
- package/src/backend/js/stdlib/time.js +79 -55
- package/src/backend/js/stdlib/unicode.js +1 -1
- package/src/backend/js/stdlib/utf8.js +1 -1
- package/src/backend/js/templ.js +38 -76
- package/src/backend/js/type-info.js +272 -0
- package/src/backend/shared/fmt-types.js +188 -0
- package/src/backend/wasm/boundary.js +436 -80
- package/src/backend/wasm/emit-builtins.js +303 -13
- package/src/backend/wasm/emit-exprs.js +1397 -203
- package/src/backend/wasm/emit-maps.js +61 -13
- package/src/backend/wasm/emit-stmts.js +1359 -164
- package/src/backend/wasm/emit.js +512 -77
- package/src/backend/wasm/encode.js +43 -13
- package/src/backend/wasm/globals.js +452 -0
- package/src/backend/wasm/index.js +194 -2489
- package/src/backend/wasm/method-expr.js +381 -0
- package/src/backend/wasm/module-emitter.js +2240 -0
- package/src/backend/wasm/monomorph.js +62 -4
- package/src/backend/wasm/prescan.js +397 -0
- package/src/backend/wasm/stdlib/bytes.js +1804 -127
- package/src/backend/wasm/stdlib/core.js +1574 -199
- package/src/backend/wasm/stdlib/index.js +0 -5
- package/src/backend/wasm/stdlib/io.js +1567 -150
- package/src/backend/wasm/stdlib/packages.js +2 -0
- package/src/backend/wasm/stdlib/simd.js +293 -28
- package/src/backend/wasm/stdlib/time.js +1041 -12
- package/src/backend/wasm/types.js +200 -15
- package/src/backend/wasm/variadic.js +93 -0
- package/src/backend/wasm/wat.js +47 -20
- package/src/{cli-core.js → cli/cli-core.js} +236 -10
- package/src/{test-runner.js → cli/test-runner.js} +332 -39
- package/src/{vendor.js → cli/vendor.js} +3 -4
- package/src/compiler.js +107 -269
- package/src/index.js +15 -169
- package/src/{lexer.js → lexer/lexer.js} +102 -55
- package/src/{tokens.js → lexer/tokens.js} +1 -0
- package/src/link/sourcemap.js +97 -0
- package/src/link/stdlib.js +515 -0
- package/src/link/wasm.js +294 -0
- package/src/lower/bounds.js +394 -0
- package/src/lower/boxing.js +1 -1
- package/src/lower/captures.js +176 -32
- package/src/lower/index.js +26 -18
- package/src/lower/json-codecs.js +1398 -0
- package/src/lower/ownership.js +22 -1
- package/src/lower/range.js +86 -1
- package/src/lower/reachability.js +132 -0
- package/src/parser/declarations.js +58 -13
- package/src/parser/expressions.js +29 -7
- package/src/parser/index.js +2 -1
- package/src/parser/statements.js +37 -22
- package/src/{templ-parser.js → parser/templ.js} +138 -15
- package/src/parser/types.js +69 -9
- package/src/resolver.js +22 -1
- package/src/typechecker/assignability.js +176 -17
- package/src/typechecker/const-fold.js +356 -0
- package/src/typechecker/constants.js +256 -0
- package/src/typechecker/expressions.js +931 -122
- package/src/typechecker/index.js +459 -67
- package/src/typechecker/init-order.js +330 -0
- package/src/typechecker/resolve.js +451 -56
- package/src/typechecker/statements.js +90 -9
- package/src/typechecker/stdlib/core.js +333 -55
- package/src/typechecker/stdlib/excluded.js +898 -0
- package/src/typechecker/stdlib/extended.js +322 -26
- package/src/typechecker/{stdlib.js → stdlib/index.js} +5 -5
- package/src/typechecker/stdlib/simd.js +65 -15
- package/src/typechecker/termination.js +1 -1
- package/src/typechecker/types.js +149 -25
- package/stdlib/bytes/iter.go +192 -0
- package/stdlib/bytes/search.go +240 -0
- package/stdlib/bytes/split.go +218 -0
- package/stdlib/cmp/cmp.go +65 -0
- package/stdlib/encoding/json/errors.go +31 -0
- package/stdlib/encoding/json/indent.go +71 -0
- package/stdlib/encoding/json/number.go +12 -0
- package/stdlib/encoding/json/stream.go +173 -0
- package/stdlib/errors/overlay.go +12 -0
- package/stdlib/hash/hash.go +53 -0
- package/stdlib/internal/jsonrt/dec.go +738 -0
- package/stdlib/internal/jsonrt/enc.go +366 -0
- package/stdlib/internal/jsonrt/indent.go +135 -0
- package/stdlib/internal/jsonrt/number.go +27 -0
- package/stdlib/internal/jsonrt/reader.go +73 -0
- package/stdlib/internal/jsonrt/scanner.go +649 -0
- package/stdlib/io/io.go +346 -0
- package/stdlib/iter/iter.go +18 -0
- package/stdlib/maps/iter.go +65 -0
- package/stdlib/math/extra.go +270 -0
- package/stdlib/slices/extra.go +73 -0
- package/stdlib/slices/iter.go +113 -0
- package/stdlib/sort/sort.go +561 -0
- package/stdlib/strconv/quote.go +341 -0
- package/stdlib/strings/extra.go +35 -0
- package/stdlib/strings/iter.go +122 -0
- package/stdlib/sync/extra.go +105 -0
- package/stdlib/unicode/unicode.go +112 -0
- package/stdlib/unicode/utf8/bytes.go +239 -0
- package/src/backend/wasm/const-fold.js +0 -205
- package/src/backend/wasm/emit-stdlib.js +0 -13
- /package/src/{asset-manager.js → cli/asset-manager.js} +0 -0
- /package/src/{colors.js → cli/colors.js} +0 -0
- /package/src/{dev-server.js → cli/dev-server.js} +0 -0
- /package/src/{minifier.js → cli/minifier.js} +0 -0
- /package/src/{project-config.js → cli/project-config.js} +0 -0
- /package/src/{pwa.js → cli/pwa.js} +0 -0
- /package/src/{templ-lexer.js → lexer/templ-lexer.js} +0 -0
package/README.md
CHANGED
|
@@ -228,6 +228,7 @@ Key syntax features:
|
|
|
228
228
|
- `@Component(args)` — call another templ component and mount it as a child
|
|
229
229
|
- `if cond { } else if cond { } else { }` — conditional rendering (arbitrary depth)
|
|
230
230
|
- `for _, v := range slice { }` — loop rendering inside template bodies
|
|
231
|
+
- Go expressions in template bodies are type-checked like the rest of the package
|
|
231
232
|
- `switch expr { case v: ... default: ... }` — switch rendering inside template bodies
|
|
232
233
|
- `@templ.Raw(htmlStr)` — inject raw/trusted HTML (uses `insertAdjacentHTML`)
|
|
233
234
|
- `ref="name"` — capture the element at mount time into an optional `refs map[string]any`
|
|
@@ -329,11 +330,17 @@ example/hybrid/
|
|
|
329
330
|
|
|
330
331
|
### Build and run
|
|
331
332
|
|
|
333
|
+
The examples are not committed pre-built. Build them once, then serve an example's
|
|
334
|
+
directory and open it in a browser:
|
|
335
|
+
|
|
332
336
|
```sh
|
|
333
337
|
npm run build # compile all example applications
|
|
334
|
-
# open the
|
|
338
|
+
npx serve example/simple # then open the printed address
|
|
335
339
|
```
|
|
336
340
|
|
|
341
|
+
`example/preact/vendor.js` is the exception: it is committed, and
|
|
342
|
+
`node src/index.js prep example/preact` regenerates it.
|
|
343
|
+
|
|
337
344
|
---
|
|
338
345
|
|
|
339
346
|
## The Hybrid Architecture: JS + WasmGC
|
|
@@ -398,7 +405,7 @@ The compiler analyzes both sides of the boundary and synthesizes a facade into `
|
|
|
398
405
|
- **Slices & Arrays:** Slices and arrays copy element-wise in both directions; TypedArrays (`Float32Array`, `Int32Array`, etc.) are natively accepted.
|
|
399
406
|
- **Closures & Interfaces:** Function values, callbacks, and named non-empty interfaces cross the boundary transparently.
|
|
400
407
|
- **Shared Linear-Memory Buffers:** `gofront/shared` (`shared.NewFloat32`, etc.) exposes zero-copy TypedArray views over linear memory for bulk per-frame data.
|
|
401
|
-
- **WASM SIMD (`gofront/simd
|
|
408
|
+
- **WASM SIMD (`gofront/simd`, experimental):** 4-wide float vector type (`simd.F32x4`) compiling directly to native `v128` instructions with zero GC overhead, including `simd.LoadF32x4`/`StoreF32x4` for direct linear-memory access (about 1.6× faster than a scalar loop on a particle-integration benchmark).
|
|
402
409
|
- **WASM Loader:** The generated JS bundle automatically fetches `app.wasm` relative to `app.js` (`import.meta.url`, customizable via `globalThis.__GOFRONT_WASM_URL` or `globalThis.__GOFRONT_WASM_BYTES`).
|
|
403
410
|
- **WAT Inspection:** Passing `--emit-wat` writes human-readable `app.wat` alongside the binary module.
|
|
404
411
|
- **Binaryen Optimization:** Passing `--release` or `--wasm-opt` optimizes `app.wasm` via Binaryen (`-O3` + GUFA), achieving ~23% smaller binaries and generating `app.wasm.map` source maps.
|
|
@@ -447,26 +454,19 @@ For detailed command flags, project configuration (`gofront.json`), multi-file p
|
|
|
447
454
|
* [Go to JS Mapping](docs/compilation-mapping.md) — what each construct compiles to
|
|
448
455
|
* [Go Compatibility Differences](docs/go-compatibility.md) — where GoFront deliberately differs from Go
|
|
449
456
|
* [Compiler Architecture & Internals](docs/architecture.md) — pipeline stages and source layout
|
|
450
|
-
|
|
451
|
-
---
|
|
452
|
-
|
|
453
|
-
## Roadmap
|
|
454
|
-
|
|
455
|
-
See [`docs/roadmap.md`](docs/roadmap.md) for the full roadmap and release history.
|
|
456
|
-
Design documents for planned features are organised by release under `docs/v*/`
|
|
457
|
-
(e.g. [`docs/v0.0.8/`](docs/v0.0.8/), [`docs/v1.2.0/`](docs/v1.2.0/), [`docs/v1.3.0/`](docs/v1.3.0/), [`docs/v1.6.0/`](docs/v1.6.0/)).
|
|
457
|
+
* [Changelog](CHANGELOG.md) — release history and upgrade notes
|
|
458
458
|
|
|
459
459
|
---
|
|
460
460
|
|
|
461
461
|
## Tests
|
|
462
462
|
|
|
463
463
|
```sh
|
|
464
|
-
npm test # unit, zero-alloc perf, and example tests (~
|
|
464
|
+
npm test # unit, zero-alloc perf, and example tests (~2,900 tests, no browser required)
|
|
465
465
|
npm run test:e2e # E2E browser tests (Playwright, headless Chromium)
|
|
466
|
-
npm run bench #
|
|
466
|
+
npm run bench # Raycast, JSON, and SIMD particle benchmarks (pure JS vs hybrid WASM)
|
|
467
467
|
```
|
|
468
468
|
|
|
469
|
-
**Unit tests** (~
|
|
469
|
+
**Unit tests** (~2,900) cover language features, type errors, edge cases, DOM (jsdom),
|
|
470
470
|
external `.d.ts`, npm resolver, TypeScript tuple return signatures, multi-file compilation,
|
|
471
471
|
embedded structs, string formatting, compile-time `encoding/json` serialization with struct tags,
|
|
472
472
|
map iteration order, integer overflow semantics, unused variable detection,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gofront",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"author": "Luuk van Venrooij",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -28,19 +28,21 @@
|
|
|
28
28
|
},
|
|
29
29
|
"type": "module",
|
|
30
30
|
"files": [
|
|
31
|
-
"src/"
|
|
31
|
+
"src/",
|
|
32
|
+
"stdlib/"
|
|
32
33
|
],
|
|
33
34
|
"bin": {
|
|
34
35
|
"gofront": "src/index.js"
|
|
35
36
|
},
|
|
36
37
|
"scripts": {
|
|
37
|
-
"build": "node
|
|
38
|
-
"test": "node test/unit/run.js && node test/
|
|
38
|
+
"build": "node scripts/build-examples.js",
|
|
39
|
+
"test": "node test/unit/run.js && node test/perf/zero-alloc.js && node test/perf/bce-mathx.js && node src/index.js test --dom example/...",
|
|
39
40
|
"test:e2e": "playwright test",
|
|
40
41
|
"test:coverage": "c8 --include='src/**' --reporter=text --reporter=lcov node test/unit/run.js",
|
|
41
|
-
"bench": "node --expose-gc test/
|
|
42
|
+
"bench": "node --expose-gc test/perf/raycast-bench.js && node test/perf/json-bench.js && node --expose-gc test/perf/particle-bench.js",
|
|
43
|
+
"check:layers": "node scripts/check-layers.js",
|
|
42
44
|
"format": "biome format --write .",
|
|
43
|
-
"check": "biome check . && sentrux check && sentrux gate && node src/index.js check example/...",
|
|
45
|
+
"check": "biome check . && node scripts/check-layers.js && sentrux check && sentrux gate && node src/index.js check example/...",
|
|
44
46
|
"prepare": "lefthook install"
|
|
45
47
|
},
|
|
46
48
|
"devDependencies": {
|
|
@@ -55,36 +57,5 @@
|
|
|
55
57
|
},
|
|
56
58
|
"optionalDependencies": {
|
|
57
59
|
"binaryen": "^132.0.0"
|
|
58
|
-
},
|
|
59
|
-
"gofront": {
|
|
60
|
-
"vendor": {
|
|
61
|
-
"dest": "example/preact/vendor.js",
|
|
62
|
-
"packages": [
|
|
63
|
-
"preact",
|
|
64
|
-
"preact/hooks"
|
|
65
|
-
],
|
|
66
|
-
"globals": {
|
|
67
|
-
"preact": "preact",
|
|
68
|
-
"preact/hooks": [
|
|
69
|
-
"preact/hooks",
|
|
70
|
-
"preact_hooks"
|
|
71
|
-
]
|
|
72
|
-
},
|
|
73
|
-
"namedExports": {
|
|
74
|
-
"preact": [
|
|
75
|
-
"h",
|
|
76
|
-
"render",
|
|
77
|
-
"Component"
|
|
78
|
-
],
|
|
79
|
-
"preact/hooks": [
|
|
80
|
-
"useState",
|
|
81
|
-
"useEffect",
|
|
82
|
-
"useRef",
|
|
83
|
-
"useMemo",
|
|
84
|
-
"useCallback",
|
|
85
|
-
"useReducer"
|
|
86
|
-
]
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
60
|
}
|
|
90
61
|
}
|