Skip to content

Commit

Permalink
chore: joinSegments fix + tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jackyzha0 committed Jan 1, 2025
1 parent 9466c14 commit e3162f7
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 7 deletions.
19 changes: 19 additions & 0 deletions quartz/util/path.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,25 @@ describe("transforms", () => {
path.isRelativeURL,
)
})

test("joinSegments", () => {
assert.strictEqual(path.joinSegments("a", "b"), "a/b")
assert.strictEqual(path.joinSegments("a/", "b"), "a/b")
assert.strictEqual(path.joinSegments("a", "b/"), "a/b/")
assert.strictEqual(path.joinSegments("a/", "b/"), "a/b/")

// preserve leading and trailing slashes
assert.strictEqual(path.joinSegments("/a", "b"), "/a/b")
assert.strictEqual(path.joinSegments("/a/", "b"), "/a/b")
assert.strictEqual(path.joinSegments("/a", "b/"), "/a/b/")
assert.strictEqual(path.joinSegments("/a/", "b/"), "/a/b/")

// works with protocol specifiers
assert.strictEqual(path.joinSegments("https://example.com", "a"), "https://example.com/a")
assert.strictEqual(path.joinSegments("https://example.com/", "a"), "https://example.com/a")
assert.strictEqual(path.joinSegments("https://example.com", "a/"), "https://example.com/a/")
assert.strictEqual(path.joinSegments("https://example.com/", "a/"), "https://example.com/a/")
})
})

describe("link strategies", () => {
Expand Down
25 changes: 18 additions & 7 deletions quartz/util/path.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,15 +183,26 @@ export function slugTag(tag: string) {
}

export function joinSegments(...args: string[]): string {
return args
if (args.length === 0) {
return ""
}

let joined = args
.filter((segment) => segment !== "")
.map((segment, index) =>
index === 0
? // Deduplicate but not remove leading slashes for first segment
segment.replace(/\/+$/g, "").replace(/^\/\/+/g, "/")
: segment.replace(/^\/+|\/+$/g, ""),
)
.map((segment) => stripSlashes(segment))
.join("/")

// if the first segment starts with a slash, add it back
if (args[0].startsWith("/")) {
joined = "/" + joined
}

// if the last segment is a folder, add a trailing slash
if (args[args.length - 1].endsWith("/")) {
joined = joined + "/"
}

return joined
}

export function getAllSegmentPrefixes(tags: string): string[] {
Expand Down

0 comments on commit e3162f7

Please sign in to comment.