Skip to content

fix(sidebars): use startsWith to extract basePath instead of split#1368

Merged
sserrata merged 1 commit intomainfrom
fix/basepath-substr-split
Mar 30, 2026
Merged

fix(sidebars): use startsWith to extract basePath instead of split#1368
sserrata merged 1 commit intomainfrom
fix/basepath-substr-split

Conversation

@sserrata
Copy link
Copy Markdown
Member

Summary

getBasePathFromOutput used output.split(doc) to strip the docPath prefix from outputDir. Because split treats its argument as a substring, any folder name containing docPath as a substring (e.g. docspace when docPath is docs) caused the split to fire mid-segment, producing double slashes or missing path segments in generated sidebar IDs.

Before:

outputDir: "docs/test/docspace", docPath: "docs"
→ "docs/test/docspace".split("docs") = ["", "/test/doc", "pace"]
→ basePath = "/test/doc"  ❌

After:

outputDir.startsWith("docs/") → true
→ basePath = "test/docspace"  ✓

The fix uses startsWith(doc + "/") + substring so only an exact path-boundary prefix match strips the docPath.

Test plan

  • outputDir: "docs/test/docspace" with docPath: "docs" generates IDs like test/docspace/api (no double slashes)
  • outputDir: "docs/test/mydocs" with docPath: "docs" generates IDs like test/mydocs/api
  • outputDir: "docs/api" (standard case) is unaffected
  • outputDir without a matching docPath prefix falls through to the slash-index fallback correctly

Closes #1305

🤖 Generated with Claude Code

String.split(doc) matched doc as a substring, so outputDir paths like
"docs/test/docspace" with docPath "docs" would split on the second
occurrence of "doc" inside "docspace", producing double slashes or
missing path segments in generated sidebar IDs.

Replacing with startsWith + substring ensures only the exact path prefix
is stripped at a path boundary.

Closes #1305
@github-actions
Copy link
Copy Markdown

Size Change: 0 B

Total Size: 2.21 MB

ℹ️ View Unchanged
Filename Size
demo/.docusaurus/codeTranslations.json 2 B
demo/.docusaurus/docusaurus.config.mjs 14.7 kB
demo/.docusaurus/globalData.json 66.5 kB
demo/.docusaurus/i18n.json 372 B
demo/.docusaurus/registry.js 96.4 kB
demo/.docusaurus/routes.js 91.1 kB
demo/.docusaurus/routesChunkNames.json 37.8 kB
demo/.docusaurus/site-metadata.json 1.51 kB
demo/build/assets/css/styles.********.css 164 kB
demo/build/assets/js/main.********.js 659 kB
demo/build/assets/js/runtime~main.********.js 22.6 kB
demo/build/index.html 97.6 kB
demo/build/petstore/add-pet/index.html 29.3 kB
demo/build/petstore/create-user/index.html 24 kB
demo/build/petstore/create-users-with-array-input/index.html 24.1 kB
demo/build/petstore/create-users-with-list-input/index.html 24.1 kB
demo/build/petstore/delete-order/index.html 23.8 kB
demo/build/petstore/delete-pet/index.html 24.1 kB
demo/build/petstore/delete-user/index.html 24.3 kB
demo/build/petstore/find-pets-by-status/index.html 24.8 kB
demo/build/petstore/find-pets-by-tags/index.html 25.4 kB
demo/build/petstore/get-inventory/index.html 23.1 kB
demo/build/petstore/get-order-by-id/index.html 24.1 kB
demo/build/petstore/get-pet-by-id/index.html 24.9 kB
demo/build/petstore/get-user-by-name/index.html 24.4 kB
demo/build/petstore/login-user/index.html 24.9 kB
demo/build/petstore/logout-user/index.html 23.7 kB
demo/build/petstore/new-pet/index.html 24.3 kB
demo/build/petstore/pet/index.html 22.5 kB
demo/build/petstore/place-order/index.html 23.3 kB
demo/build/petstore/schemas/apiresponse/index.html 24.6 kB
demo/build/petstore/schemas/cat/index.html 38.7 kB
demo/build/petstore/schemas/category/index.html 25.7 kB
demo/build/petstore/schemas/dog/index.html 39 kB
demo/build/petstore/schemas/honeybee/index.html 39.1 kB
demo/build/petstore/schemas/id/index.html 22.7 kB
demo/build/petstore/schemas/order/index.html 26.8 kB
demo/build/petstore/schemas/pet/index.html 38.5 kB
demo/build/petstore/schemas/tag/index.html 24.1 kB
demo/build/petstore/schemas/user/index.html 40.6 kB
demo/build/petstore/store/index.html 21.5 kB
demo/build/petstore/subscribe-to-the-store-events/index.html 30.2 kB
demo/build/petstore/swagger-petstore-yaml/index.html 30.2 kB
demo/build/petstore/update-pet-with-form/index.html 24.3 kB
demo/build/petstore/update-pet/index.html 24.7 kB
demo/build/petstore/update-user/index.html 24.3 kB
demo/build/petstore/upload-file/index.html 24.1 kB
demo/build/petstore/user/index.html 22.2 kB

compressed-size-action

@github-actions
Copy link
Copy Markdown

Visit the preview URL for this PR (updated for commit 5ecc60a):

https://docusaurus-openapi-36b86--pr1368-83nmtgao.web.app

(expires Wed, 29 Apr 2026 19:54:44 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: bf293780ee827f578864d92193b8c2866acd459f

@sserrata sserrata merged commit 81bfa7d into main Mar 30, 2026
11 checks passed
@sserrata sserrata deleted the fix/basepath-substr-split branch March 30, 2026 20:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: basePath generation breaks when outputDir folder names contain the configured docPath substring

1 participant