-
Notifications
You must be signed in to change notification settings - Fork 158
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
Prevent redocly bundle
from creating new schema objects in #/components/schemas
when using --dereferenced
option
#1798
Comments
Have you tried using the |
I have. It removes some, but not all, of the components. In this example, I also don't want to remove all the components. I would like to keep |
Ah, so you want to bundle your files, preserve the existing components, and not add the new ones? Then it's more of an enhancement rather than a bug. I'm not sure it would be an easy change. It will require modifying the internals, as the bundler currently resolves external references into the const filterSchemas = () => {
let originalSchemas;
return {
Components: {
leave(components) {
for (const key in components.schemas || {}) {
if (originalSchemas?.[key] === undefined) {
delete components.schemas[key];
}
}
},
NamedSchemas: {
enter(schemas) {
originalSchemas = schemas;
},
},
},
};
}; Please let me know if that works! |
Ideally, we would like to bundle the files and only dereference/inline schemas that aren't already in Thanks for the custom decorator plugin code, we will try it out. |
We're currently using swagger-cli to bundle our OpenAPI specifications and we're trying to migrate to redocly. This issue seems to be a blocker for us that we can't even really work around. I created a minimal, reproducible example to demonstrate the issue: https://github.com/gnvk/redocly_example We also use oapi-codegen to generate Go code from the bundled schemas. Actually this is the main reason to bundle them in the first place. The original, We even tried custom decorators to work around this but without success. We'd be happy with either of these:
Can anyone here recommend a solution, or at least a workaround? |
Hi @gnvk. I don't see an easy workaround for your problem. To achieve that, we'd need to change the current behaviour of Redocly CLI which might impact existing users. Have you considered renaming the duplicated files into something like |
Yes, in fact I even did all the renames, just to realise that that messes up the generated files for the server components. For example the trade in Basically, I can either generate the correct |
@gnvk I see. Then the only workaround I can suggest is running a decorator on the stock.yaml to remove the needless Just in case you want to explore that path, here's the idea. First, you have to create a plugin like the following: // plugin.mjs
export default () => {
return {
id: "my-plugin",
decorators: {
oas3: {
"remove-prefix": ({ prefix }) => ({
ref: {
leave(refObject) {
// after partially resolving refs, we check if it still has a $ref field
if (refObject?.$ref) {
// ...and if it does, we remove the prefix
refObject.$ref = refObject.$ref.replace(prefix, "");
}
},
},
NamedSchemas: {
leave(schemas) {
// replace all keys that start with the prefix with the new key in components.schemas
for (const key in schemas) {
if (key.startsWith(prefix)) {
const newKey = key.replace(prefix, "");
schemas[newKey] = schemas[key];
delete schemas[key];
}
}
},
},
}),
},
},
};
}; Then, use it use it in your configuration file: # redocly.yaml
plugins:
- plugin.mjs
apis:
openapi:
root: api/openapi.yaml
output: generated/redocly/openapi.yaml
stock:
root: api/stock.yaml
output: generated/redocly/stock.yaml
# set up the custom decorator specific to the 'stock' api
decorators:
"my-plugin/remove-prefix":
prefix: "stock-" You don't need to declare the On Please let me know it that helps. BTW, @gnvk's case is rather a variation of #661, and is not directly related to the original issue. |
Describe the bug
The
redocly bundle
command is adding schema objects to the#/components/schemas
section of the bundled schema, even when using the--dereferenced
option is used.Closed issue #239 seems to be similar and points to using the
--dereferenced
option to solve this issue.To Reproduce
Steps to reproduce the behavior:
redocly.yaml
filenpx redocly bundle schema/openapi.json --dereferenced -o out/openapi.json
PropertyValuePair
andError
schema objects are added to#/components/schemas
in the bundled OpenAPI documentExpected behavior
I would expect only (dereferenced versions of) the schema objects present in
schemas.json
to be in the#/components/schemas
section of the bundled and dereference OpenAPI document.Logs
OpenAPI description
OpenAPI v3.1 - see example repo
Redocly Version(s)
"@redocly/cli": "^1.25.11",
Node.js Version(s)
v18.20.4
andv20.12.2
OS, environment
Kubuntu 22.04
Additional context
The text was updated successfully, but these errors were encountered: