Skip to content

Commit 4a73ca9

Browse files
authoredMar 20, 2025
Merge pull request #2434 from alixander/relative-url
d2ir: allow root URL paths
2 parents 080f52f + 0e269b7 commit 4a73ca9

File tree

5 files changed

+169
-3
lines changed

5 files changed

+169
-3
lines changed
 

‎ci/release/changelogs/next.md

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828

2929
- d2cli:
3030
- Support `validate` command. [#2415](https://github.com/terrastruct/d2/pull/2415)
31+
- d2compiler:
32+
- `link`s can be set to root path, e.g. `/xyz`. [#2357](https://github.com/terrastruct/d2/issues/2357)
3133

3234
#### Bugfixes ⛑️
3335

‎d2compiler/compile.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1265,7 +1265,7 @@ func (c *compiler) validateBoardLinks(g *d2graph.Graph) {
12651265
}
12661266

12671267
u, err := url.Parse(html.UnescapeString(obj.Link.Value))
1268-
isRemote := err == nil && u.Scheme != ""
1268+
isRemote := err == nil && (u.Scheme != "" || strings.HasPrefix(u.Path, "/"))
12691269
if isRemote {
12701270
continue
12711271
}

‎d2compiler/compile_test.go

+16
Original file line numberDiff line numberDiff line change
@@ -1658,6 +1658,22 @@ x -> y: {
16581658
}
16591659
},
16601660
},
1661+
{
1662+
name: "url_relative_link",
1663+
1664+
text: `x: {
1665+
link: /google
1666+
}
1667+
`,
1668+
assertions: func(t *testing.T, g *d2graph.Graph) {
1669+
if len(g.Objects) != 1 {
1670+
t.Fatal(g.Objects)
1671+
}
1672+
if g.Objects[0].Link.Value != "/google" {
1673+
t.Fatal(g.Objects[0].Link.Value)
1674+
}
1675+
},
1676+
},
16611677
{
16621678
name: "non_url_link",
16631679

‎d2ir/compile.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -1146,7 +1146,7 @@ func (c *compiler) extendLinks(m *Map, importF *Field, importDir string) {
11461146
val := f.Primary().Value.ScalarString()
11471147

11481148
u, err := url.Parse(html.UnescapeString(val))
1149-
isRemote := err == nil && u.Scheme != ""
1149+
isRemote := err == nil && (u.Scheme != "" || strings.HasPrefix(u.Path, "/"))
11501150
if isRemote {
11511151
continue
11521152
}
@@ -1184,7 +1184,7 @@ func (c *compiler) extendLinks(m *Map, importF *Field, importDir string) {
11841184
continue
11851185
}
11861186
u, err := url.Parse(html.UnescapeString(val))
1187-
isRemoteImg := err == nil && u.Scheme != ""
1187+
isRemoteImg := err == nil && (u.Scheme != "" || strings.HasPrefix(u.Path, "/"))
11881188
if isRemoteImg {
11891189
continue
11901190
}

‎testdata/d2compiler/TestCompile/url_relative_link.exp.json

+148
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)