-
-
Notifications
You must be signed in to change notification settings - Fork 8.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for versioned sidebars which are .js
not .json
#10407
Comments
@robert-j-webb I agree that we could support reading from both Just wanted to explain the reason why we historically only support When creating versions with the CLI, we kind-of have to run the sidebar code and transform it from JS to JSON. If we don't do this, if your sidebar code has dynamic logic like reading file-system paths or using relative imports, we would have to emit a versioned sidebar I don't think it's possible to solve all the possible edge cases here, this is why when versioning docs you get a Does it make sense? Now if you don't care about the ability of the CLI to emit versioned |
Interesting, that does make sense. I think it's basically impossible to write something that would rewrite code to be aware in that way.
I'm really glad you mentioned that, I think it's a reasonable use case too. Should I write something up to support I'm not quite sure the best way to do this or how to test it, something like this: /** `[siteDir]/community_versioned_sidebars/version-1.0.0-sidebars.json` */
export function getVersionSidebarsPath(
siteDir: string,
pluginId: string,
versionName: string,
): string {
const isJs = (fs.existsSync(ath.join(
siteDir,
addPluginIdPrefix(VERSIONED_SIDEBARS_DIR, pluginId),
`version-${versionName}-sidebars.js`,
))
return path.join(
siteDir,
addPluginIdPrefix(VERSIONED_SIDEBARS_DIR, pluginId),
`version-${versionName}-sidebars.${isJs ? 'js' : 'json}`,
);
} May work, but not for .ts ? Is there a better way to do that? |
I think it's preferable if I implement this myself because I'm not sure how it should be done. In any case, we'd want to avoid sync IOs like this. We also need to take into consideration future goals because I'd like to get rid of the |
Have you read the Contributing Guidelines on issues?
Prerequisites
npm run clear
oryarn clear
command.rm -rf node_modules yarn.lock package-lock.json
and re-installing packages.Description
Version sidebars are hard coded to be
.json
. files.It doesn't mention this in the documentation on versioning - it just kind of implies it.
Maybe there should be an
alert
warning people about it? or there could be some kind of fix that would make it possible to use either.Here's my proposed fix:
Make the
getVersionSidebarsPath
function read the user's source code to see if it's.js
or.json
before it returns. I'm sure a more elegant way exists but this seems fine, unless I'm missing something.Reproducible demo
https://codesandbox.io/p/devbox/priceless-goldwasser-qdeo7?file=%2FREADME.md&privacy=public
Steps to reproduce
Make a new version `npm run docusaurus docs:version 1.1.0
Replace the
version-1.1.0-sidebar.json
with an equivalent.js
file like:Expected behavior
Versioned sidebars should behave like normal ones, allowing
js
(or events
)Actual behavior
It crashes, it can't find the sidebar
Your environment
Self-service
The text was updated successfully, but these errors were encountered: