chore: joinSegments fix + tests
| | |
| | | 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", () => { |
| | |
| | | } |
| | | |
| | | 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[] { |