Support passing additional properties to OpenAPI server generator
Signed-off-by: Adam Kunicki <kunickiaj@gmail.com>
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/repo-tools': patch
|
||||
---
|
||||
|
||||
Support passing additional properties to OpenAPI server generator
|
||||
@@ -56,6 +56,10 @@ function registerPackageCommand(program: Command) {
|
||||
.description(
|
||||
'Additional properties that can be passed to @openapitools/openapi-generator-cli',
|
||||
)
|
||||
.option('--server-additional-properties [properties]')
|
||||
.description(
|
||||
'Additional properties that can be passed to @openapitools/openapi-generator-cli',
|
||||
)
|
||||
.option('--watch')
|
||||
.description('Watch the OpenAPI spec for changes and regenerate on save.')
|
||||
.action(lazy(() => import('./package/schema/openapi/generate'), 'command'));
|
||||
|
||||
@@ -51,7 +51,7 @@ export async function command(opts: OptionValues) {
|
||||
);
|
||||
}
|
||||
if (opts.server) {
|
||||
promises.push(generateServer(options));
|
||||
promises.push(generateServer(options, opts.serverAdditionalProperties));
|
||||
}
|
||||
await Promise.all(promises);
|
||||
};
|
||||
|
||||
@@ -30,6 +30,7 @@ import { resolvePackagePath } from '@backstage/backend-plugin-api';
|
||||
import {
|
||||
getPathToCurrentOpenApiSpec,
|
||||
getRelativePathToFile,
|
||||
toGeneratorAdditionalProperties,
|
||||
} from '../../../../../lib/openapi/helpers';
|
||||
|
||||
async function generateSpecFile() {
|
||||
@@ -70,7 +71,7 @@ export const createOpenApiRouter = async (
|
||||
const indexFile = join(schemaDir, '..', 'index.ts');
|
||||
await fs.writeFile(
|
||||
indexFile,
|
||||
`//
|
||||
`//
|
||||
export * from './generated';`,
|
||||
);
|
||||
|
||||
@@ -82,7 +83,10 @@ export const createOpenApiRouter = async (
|
||||
}
|
||||
}
|
||||
|
||||
async function generate(abortSignal?: AbortController) {
|
||||
async function generate(
|
||||
serverAdditionalProperties?: string,
|
||||
abortSignal?: AbortController,
|
||||
) {
|
||||
const resolvedOpenapiPath = await getPathToCurrentOpenApiSpec();
|
||||
const resolvedOutputDirectory = await getRelativePathToFile(OUTPUT_PATH);
|
||||
|
||||
@@ -93,6 +97,10 @@ async function generate(abortSignal?: AbortController) {
|
||||
OPENAPI_IGNORE_FILES.join('\n'),
|
||||
);
|
||||
|
||||
const additionalProperties = toGeneratorAdditionalProperties({
|
||||
initialValue: serverAdditionalProperties,
|
||||
});
|
||||
|
||||
await exec(
|
||||
'node',
|
||||
[
|
||||
@@ -111,6 +119,9 @@ async function generate(abortSignal?: AbortController) {
|
||||
),
|
||||
'--generator-key',
|
||||
'v3.0',
|
||||
additionalProperties
|
||||
? `--additional-properties=${additionalProperties}`
|
||||
: '',
|
||||
],
|
||||
{
|
||||
maxBuffer: Number.MAX_VALUE,
|
||||
@@ -147,15 +158,18 @@ async function generate(abortSignal?: AbortController) {
|
||||
await generateSpecFile();
|
||||
}
|
||||
|
||||
export async function command({
|
||||
abortSignal,
|
||||
isWatch = false,
|
||||
}: {
|
||||
abortSignal?: AbortController;
|
||||
isWatch?: boolean;
|
||||
}): Promise<void> {
|
||||
export async function command(
|
||||
{
|
||||
abortSignal,
|
||||
isWatch = false,
|
||||
}: {
|
||||
abortSignal?: AbortController;
|
||||
isWatch?: boolean;
|
||||
},
|
||||
serverAdditionalProperties?: string,
|
||||
): Promise<void> {
|
||||
try {
|
||||
await generate(abortSignal);
|
||||
await generate(serverAdditionalProperties, abortSignal);
|
||||
console.log(chalk.green('Generated server files.'));
|
||||
} catch (err) {
|
||||
if (err.name === 'AbortError') {
|
||||
|
||||
Reference in New Issue
Block a user