-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
Suggestion
See discussion in #4258 (comment), when load spec enhancers, people should be able to specify order for them.
A proposal would be using a combination of group and alphabet order like how we load observers group by group in https://loopback.io/doc/en/lb4/Life-cycle.html#observer-groups.
Use Cases
When define an enhancer, you can specify the tag in the binding template like @bind(asSpecEnhancer({CoreTags.OAS_SPEC_ENHANCER_GROUP: 'path'}))
Then specify the enhancer order like:
app
.bind(CoreBindings.OAS_SPEC_ENHANCER_OPTIONS)
.to({orderedGroups: ['path', 'component', 'info']});
please note this is just a proposal, the story owner can think of better design to provide the group name and specify the group order through options
For enhancers in the same group, they are loaded according to the name(alphabetically)
Examples
Define a path spec enhancers with tag path and a component enhancer with tag component
@bind(asSpecEnhancer({CoreTags.OAS_SPEC_ENHANCER_GROUP: 'path'}))
export class PathSpecEnhancer implements OASEnhancer {
name = 'path';
modifySpec(spec: OpenApiSpec): OpenApiSpec {
const PathPatchSpec = {
// some spec
};
const mergedSpec = mergeOpenAPISpec(spec, PathPatchSpec);
return mergedSpec;
}
}
@bind(asSpecEnhancer({CoreTags.OAS_SPEC_ENHANCER_GROUP: 'component'}))
export class ComponentSpecEnhancer implements OASEnhancer {
name = 'component';
modifySpec(spec: OpenApiSpec): OpenApiSpec {
const ComponentPatchSpec = {
// some spec
};
const mergedSpec = mergeOpenAPISpec(spec, ComponentPatchSpec);
return mergedSpec;
}
}Then specify the enhancer order like:
app
.bind(CoreBindings.OAS_SPEC_ENHANCER_OPTIONS)
.to({orderedGroups: ['path', 'component', 'info']});
Acceptance criteria
- Allow the OAI spec enhancer service to load enhancers by group names.