Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 64 additions & 3 deletions README_SCRIPT_ENGINE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,71 @@ JavaScript execution is performed by an _optional script engine_. I.e., you can
create a browser without one, and it'll just execute behaviour for `<script>`
blocks.

There are two script engines in the code base
## Optional Sub-Modules

- `scripting/v8engine` - Uses V8
- `scripting/sobekengine` -
The script engines are provided as separate Go modules to avoid requiring
heavy dependencies (like V8) when they're not needed. This follows the same
pattern as the AWS SDK v2 for Go.

The main module (`github.com/gost-dom/browser`) has no JavaScript engine
dependencies. To use JavaScript execution, import the desired engine sub-module:

### Using V8 Engine

```go
import (
"github.com/gost-dom/browser"
"github.com/gost-dom/browser/scripting/v8engine"
)

func main() {
b := browser.New(browser.WithScriptEngine(v8engine.DefaultEngine()))
// ...
}
```

Or use the convenience package:

```go
import "github.com/gost-dom/browser/v8browser"

func main() {
b := v8browser.New()
// ...
}
```

### Using Sobek Engine (Pure Go)

```go
import (
"github.com/gost-dom/browser"
"github.com/gost-dom/browser/scripting/sobekengine"
)

func main() {
b := browser.New(browser.WithScriptEngine(sobekengine.DefaultEngine()))
// ...
}
```

### Without JavaScript

```go
import "github.com/gost-dom/browser"

func main() {
b := browser.New() // No script engine, `<script>` blocks are ignored
// ...
}
```

## Available Engines

There are two script engines available:

- `github.com/gost-dom/browser/scripting/v8engine` - Uses V8
- `github.com/gost-dom/browser/scripting/sobekengine` - Pure Go JavaScript engine
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix trailing space.

Proposed fix
-- `github.com/gost-dom/browser/scripting/sobekengine` - Pure Go JavaScript engine 
+- `github.com/gost-dom/browser/scripting/sobekengine` - Pure Go JavaScript engine
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- `github.com/gost-dom/browser/scripting/sobekengine` - Pure Go JavaScript engine
- `github.com/gost-dom/browser/scripting/sobekengine` - Pure Go JavaScript engine
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

71-71: Trailing spaces
Expected: 0 or 2; Actual: 1

(MD009, no-trailing-spaces)


## Pros and cons

Expand Down
11 changes: 0 additions & 11 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,20 @@ go 1.25
require (
github.com/gost-dom/css v0.1.0
github.com/gost-dom/fixture v0.1.0
github.com/gost-dom/v8go v0.0.0-20250712111039-fd213ddc42d7
github.com/grafana/sobek v0.0.0-20251113105955-976a34df9c09
github.com/onsi/gomega v1.38.2
github.com/stretchr/testify v1.11.1
golang.org/x/net v0.47.0
)

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dlclark/regexp2 v1.11.5 // indirect
github.com/go-sourcemap/sourcemap v2.1.4+incompatible // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/google/pprof v0.0.0-20251114195745-4902fdda35c8 // indirect
github.com/kr/pretty v0.3.0 // indirect
github.com/mitranim/gg v0.1.29 // indirect
github.com/mitranim/gow v0.0.0-20250926091427-aad163e590a8 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rjeczalik/notify v0.9.3 // indirect
github.com/rogpeppe/go-internal v1.14.1 // indirect
github.com/tommie/v8go/deps/android_amd64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/android_arm64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/darwin_amd64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/darwin_arm64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/linux_amd64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/linux_arm64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/sys v0.38.0 // indirect
golang.org/x/term v0.37.0 // indirect
Expand Down
24 changes: 2 additions & 22 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,19 @@ github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lpr
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ=
github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-sourcemap/sourcemap v2.1.4+incompatible h1:a+iTbH5auLKxaNwQFg0B+TCYl6lbukKPc7b5x0n1s6Q=
github.com/go-sourcemap/sourcemap v2.1.4+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg=
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/pprof v0.0.0-20251114195745-4902fdda35c8 h1:3DsUAV+VNEQa2CUVLxCY3f87278uWfIDhJnbdvDjvmE=
github.com/google/pprof v0.0.0-20251114195745-4902fdda35c8/go.mod h1:I6V7YzU0XDpsHqbsyrghnFZLO1gwK6NPTNvmetQIk9U=
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8=
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
github.com/gost-dom/css v0.1.0 h1:O4aXjnYonQH1EDwKysXCQOgGVLwCWd/+HJeGO15sDIE=
github.com/gost-dom/css v0.1.0/go.mod h1:BYfl+dr6Dzl6RoKn4op6TynJ7GmFqP0kFCM44NEVgNs=
github.com/gost-dom/fixture v0.1.0 h1:7PnEpkuww1QBOh4gyoR8updPfyosHJfxmFRY+2t05+w=
github.com/gost-dom/fixture v0.1.0/go.mod h1:7mSGaBhOfi/NO+YiD426CQ1DTkko62vYxoSVRmveqqY=
github.com/gost-dom/v8go v0.0.0-20250712111039-fd213ddc42d7 h1:l8UeevV8eXNZ3t40WrxoT6cfeGyYShV+I4mjfuOcSPc=
github.com/gost-dom/v8go v0.0.0-20250712111039-fd213ddc42d7/go.mod h1:IiR7SWCB6ZLT7HgLd0TCjEaSHdGJvJqhhfujJMrv0Qk=
github.com/grafana/sobek v0.0.0-20251113105955-976a34df9c09 h1:7hKNwELLbDrtpAggI21fqlVnbXS98zJ0pJIEs2t61wM=
github.com/grafana/sobek v0.0.0-20251113105955-976a34df9c09/go.mod h1:YtuqiJX1W3XvRSilL/kUZzduJG3phPJWyzM9DiIEfBo=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
Expand All @@ -48,18 +40,6 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/tommie/v8go/deps/android_amd64 v0.0.0-20251007175045-97bcf8e7d6ed h1:EAuY6zsrTZNI3Eif74wdlH9dTtg71R0gkUKWKqrjIpw=
github.com/tommie/v8go/deps/android_amd64 v0.0.0-20251007175045-97bcf8e7d6ed/go.mod h1:+SU4RWSqMXAx2oR/Gzkyc1YAG6F8SCzttMv3sZkh+qY=
github.com/tommie/v8go/deps/android_arm64 v0.0.0-20251007175045-97bcf8e7d6ed h1:lqRRLLSA3HK5A7OJT2X9oppM5e2cGw3ral9OfmWmQJA=
github.com/tommie/v8go/deps/android_arm64 v0.0.0-20251007175045-97bcf8e7d6ed/go.mod h1:cR4ynUc528GmLCLOb3c1iM2d6qZ5DCVHh+eAD7sJDBQ=
github.com/tommie/v8go/deps/darwin_amd64 v0.0.0-20251007175045-97bcf8e7d6ed h1:n+UcqEz/E7KTITmDJJHHFUWvEwDzJ7twC6znscd1pmM=
github.com/tommie/v8go/deps/darwin_amd64 v0.0.0-20251007175045-97bcf8e7d6ed/go.mod h1:0qn9w9F7mniTrixPYggJNQQtpAkb9OKY3STy3SSEBi4=
github.com/tommie/v8go/deps/darwin_arm64 v0.0.0-20251007175045-97bcf8e7d6ed h1:E+3fhykUdSgXaVBs8wrDUoFgQrxWEno+K0uLyzmIi0U=
github.com/tommie/v8go/deps/darwin_arm64 v0.0.0-20251007175045-97bcf8e7d6ed/go.mod h1:bd8hssu+JaGC4mIE9SukKia0TYs5v977mNodhgpJrdo=
github.com/tommie/v8go/deps/linux_amd64 v0.0.0-20251007175045-97bcf8e7d6ed h1:QaMItRn4d1ly+DfYydIrU2L/28aqn/nYql7knnmU7B8=
github.com/tommie/v8go/deps/linux_amd64 v0.0.0-20251007175045-97bcf8e7d6ed/go.mod h1:ZKG7g6Rah4/ZRzb07qFrQI/EPSm2PMj1cN/9y4fxgO8=
github.com/tommie/v8go/deps/linux_arm64 v0.0.0-20251007175045-97bcf8e7d6ed h1:rITpXa0TASn4PJ9oZ9YL3Yz0ElN2PyHn3YrV1wj1kGw=
github.com/tommie/v8go/deps/linux_arm64 v0.0.0-20251007175045-97bcf8e7d6ed/go.mod h1:B/myVnZ82IRgW//OzDnHArcOzW8Yq7FbWnMnYPbZ0Hc=
go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
Expand Down
8 changes: 8 additions & 0 deletions go.work
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
go 1.25

use (
.
./scripting/v8engine
./scripting/sobekengine
./v8browser
)
1 change: 1 addition & 0 deletions internal/test/wpt/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ go 1.25.3
require (
github.com/Marlliton/slogpretty v0.1.3
github.com/gost-dom/browser v0.10.3
github.com/gost-dom/browser/scripting/v8engine v0.0.0
github.com/stretchr/testify v1.11.1
golang.org/x/net v0.48.0
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check golang.org/x/net versions across all go.mod files

echo "=== golang.org/x/net versions in all go.mod files ==="
fd -e mod -x sh -c 'echo "{}:"; grep "golang.org/x/net" {} || echo "  (not present)"'

Repository: gost-dom/browser

Length of output: 464


Align golang.org/x/net versions across modules.

The repository has a version inconsistency for golang.org/x/net: two modules use v0.48.0 (internal/test/wpt/go.mod and internal/code-gen/go.mod), while most others use v0.47.0. Align these versions across the codebase unless the difference is intentional.

)
Expand Down
1 change: 1 addition & 0 deletions internal/test/wpt/go.work
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ go 1.25.3
use (
.
../../..
../../../scripting/v8engine
)
17 changes: 17 additions & 0 deletions scripting/sobekengine/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
module github.com/gost-dom/browser/scripting/sobekengine

go 1.25

require (
github.com/gost-dom/browser v0.10.3
github.com/grafana/sobek v0.0.0-20251113105955-976a34df9c09
)

require (
github.com/dlclark/regexp2 v1.11.5 // indirect
github.com/go-sourcemap/sourcemap v2.1.4+incompatible // indirect
github.com/gost-dom/css v0.1.0 // indirect
github.com/google/pprof v0.0.0-20251114195745-4902fdda35c8 // indirect
golang.org/x/net v0.47.0 // indirect
golang.org/x/text v0.31.0 // indirect
)
19 changes: 19 additions & 0 deletions scripting/v8engine/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
module github.com/gost-dom/browser/scripting/v8engine

go 1.25

require (
github.com/gost-dom/browser v0.10.3
github.com/gost-dom/v8go v0.0.0-20250712111039-fd213ddc42d7
)

require (
github.com/gost-dom/css v0.1.0 // indirect
github.com/tommie/v8go/deps/android_amd64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/android_arm64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/darwin_amd64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/darwin_arm64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/linux_amd64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/linux_arm64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
golang.org/x/net v0.47.0 // indirect
)
20 changes: 20 additions & 0 deletions v8browser/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
module github.com/gost-dom/browser/v8browser

go 1.25

require (
github.com/gost-dom/browser v0.10.3
github.com/gost-dom/browser/scripting/v8engine v0.0.0 // local version via go.work
)

require (
github.com/gost-dom/css v0.1.0 // indirect
github.com/gost-dom/v8go v0.0.0-20250712111039-fd213ddc42d7 // indirect
github.com/tommie/v8go/deps/android_amd64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/android_arm64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/darwin_amd64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/darwin_arm64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/linux_amd64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
github.com/tommie/v8go/deps/linux_arm64 v0.0.0-20251007175045-97bcf8e7d6ed // indirect
golang.org/x/net v0.47.0 // indirect
)