mirror of
https://github.com/Redocly/redoc.git
synced 2025-08-06 21:30:21 +03:00
feat: Support options from .redocly.yaml in cli
This commit is contained in:
parent
186f5a98bd
commit
9698972082
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -28,6 +28,7 @@ bundles/
|
||||||
typings/*
|
typings/*
|
||||||
!typings/styled-patch.d.ts
|
!typings/styled-patch.d.ts
|
||||||
cli/index.js
|
cli/index.js
|
||||||
|
cli/__test__/*/**/redoc-static.html
|
||||||
|
|
||||||
/benchmark/revisions
|
/benchmark/revisions
|
||||||
|
|
||||||
|
|
2
cli/__test__/build/configRedoc/.redocly.yaml
Normal file
2
cli/__test__/build/configRedoc/.redocly.yaml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
features.openapi:
|
||||||
|
disableSearch: true
|
34
cli/__test__/build/configRedoc/index.test.ts
Normal file
34
cli/__test__/build/configRedoc/index.test.ts
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
import { spawnSync } from 'child_process';
|
||||||
|
|
||||||
|
describe('build', () => {
|
||||||
|
it('should use .redocly.yaml', () => {
|
||||||
|
const r = spawnSync('node', ['../../../index.js', 'build', ' ../../../../demo/openapi.yaml'], {
|
||||||
|
cwd: __dirname,
|
||||||
|
shell: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
const out = r.stdout.toString('utf-8');
|
||||||
|
expect(out).toContain('Found .redocly.yaml and use option from features.openapi');
|
||||||
|
expect(out).toContain('bundled successfully');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should use inline options and ignore .redocly.yaml', () => {
|
||||||
|
const r = spawnSync(
|
||||||
|
'node',
|
||||||
|
[
|
||||||
|
'../../../index.js',
|
||||||
|
'build',
|
||||||
|
' ../../../../demo/openapi.yaml',
|
||||||
|
'--options.disableSearch=true',
|
||||||
|
],
|
||||||
|
{
|
||||||
|
cwd: __dirname,
|
||||||
|
shell: true,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
const out = r.stdout.toString('utf-8');
|
||||||
|
expect(out).not.toContain('Found .redocly.yaml and use option from features.openapi');
|
||||||
|
expect(out).toContain('bundled successfully');
|
||||||
|
});
|
||||||
|
});
|
17
cli/index.ts
17
cli/index.ts
|
@ -25,6 +25,12 @@ import {
|
||||||
import * as mkdirp from 'mkdirp';
|
import * as mkdirp from 'mkdirp';
|
||||||
|
|
||||||
import * as YargsParser from 'yargs';
|
import * as YargsParser from 'yargs';
|
||||||
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||||
|
import { findConfig } from '@redocly/openapi-core';
|
||||||
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||||
|
import { parseYaml } from '@redocly/openapi-core';
|
||||||
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||||
|
import { Config } from '@redocly/openapi-core';
|
||||||
|
|
||||||
interface Options {
|
interface Options {
|
||||||
ssr?: boolean;
|
ssr?: boolean;
|
||||||
|
@ -447,6 +453,17 @@ function getObjectOrJSON(options) {
|
||||||
handleError(e);
|
handleError(e);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
const configFile = findConfig();
|
||||||
|
if (configFile) {
|
||||||
|
console.log(`Found ${configFile} and use option from features.openapi`);
|
||||||
|
try {
|
||||||
|
const config = parseYaml(readFileSync(configFile, 'utf-8')) as Config;
|
||||||
|
|
||||||
|
return config['features.openapi'];
|
||||||
|
} catch (e) {
|
||||||
|
console.warn(`Found ${configFile} but failed to parse: ${e.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
"bundle:standalone": "webpack --env production --env standalone --mode=production",
|
"bundle:standalone": "webpack --env production --env standalone --mode=production",
|
||||||
"bundle:lib": "webpack --mode=production && npm run declarations",
|
"bundle:lib": "webpack --mode=production && npm run declarations",
|
||||||
"bundle:browser": "webpack --env production --env browser --mode=production",
|
"bundle:browser": "webpack --env production --env browser --mode=production",
|
||||||
"bundle": "npm run bundle:clean && npm run bundle:lib && npm run bundle:browser && npm run bundle:standalone",
|
"bundle": "npm run bundle:clean && npm run bundle:lib && npm run bundle:browser && npm run bundle:standalone && npm run compile:cli",
|
||||||
"declarations": "tsc --emitDeclarationOnly -p tsconfig.lib.json && cp -R src/types typings/",
|
"declarations": "tsc --emitDeclarationOnly -p tsconfig.lib.json && cp -R src/types typings/",
|
||||||
"stats": "webpack --env production --env standalone --json --profile --mode=production > stats.json",
|
"stats": "webpack --env production --env standalone --json --profile --mode=production > stats.json",
|
||||||
"prettier": "prettier --write \"cli/index.ts\" \"src/**/*.{ts,tsx}\"",
|
"prettier": "prettier --write \"cli/index.ts\" \"src/**/*.{ts,tsx}\"",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user