diff --git a/__tests__/helpers.ts b/__tests__/helpers.ts index 7fbfa5f7be..0de06c5cda 100644 --- a/__tests__/helpers.ts +++ b/__tests__/helpers.ts @@ -16,8 +16,7 @@ type CLICommands = | 'push' | 'split' | 'stats' - | 'build-docs' - | 'respect'; + | 'build-docs'; export function getParams( indexEntryPoint: string, diff --git a/docs/usage-data.md b/docs/usage-data.md index 2c161efe25..c7fcb8b9dc 100644 --- a/docs/usage-data.md +++ b/docs/usage-data.md @@ -18,6 +18,7 @@ When a command is run, the following data is collected: - Node.js and NPM versions - whether the `redocly.yaml` configuration file exists - API specification version +- Platform (Linux, macOS, Windows) Values such as file names, organization IDs, and URLs are removed, replaced by just "URL" or "file", etc. diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 3fe03385e9..aa126af35d 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -19,7 +19,7 @@ import { notifyUpdateCliVersion, version, } from './utils/update-version-notifier'; -import { type CommandArgs, commandWrapper } from './wrapper'; +import { commandWrapper } from './wrapper'; import { previewProject } from './commands/preview-project'; import { handleTranslations } from './commands/translations'; import { handleEject } from './commands/eject'; @@ -28,9 +28,10 @@ import { commonPushHandler } from './commands/push'; import type { Arguments } from 'yargs'; import type { OutputFormat, RuleSeverity } from '@redocly/openapi-core'; +import type { GenerateArazzoFileOptions, RespectOptions } from '@redocly/respect-core'; import type { BuildDocsArgv } from './commands/build-docs/types'; import type { PushStatusOptions } from './reunite/commands/push-status'; -import type { CommandOptions, PushArguments } from './types'; +import type { PushArguments } from './types'; import type { EjectOptions } from './commands/eject'; dotenv.config({ path: path.resolve(process.cwd(), './.env') }); @@ -867,12 +868,12 @@ yargs } ) .command( - 'respect [files..]', - 'Run workflow tests', + 'respect [files...]', + 'Run Arazzo tests.', (yargs) => { return yargs .positional('files', { - describe: 'Test files or glob pattern', + describe: 'Test files or glob pattern.', type: 'string', array: true, default: [], @@ -881,53 +882,53 @@ yargs .options({ input: { alias: 'i', - describe: 'Input parameters', + describe: 'Input parameters.', type: 'string', }, server: { alias: 'S', - describe: 'Server parameters', + describe: 'Server parameters.', type: 'string', }, workflow: { alias: 'w', - describe: 'Workflow name', + describe: 'Workflow name.', type: 'string', array: true, }, skip: { alias: 's', - describe: 'Workflow to skip', + describe: 'Workflow to skip.', type: 'string', array: true, }, verbose: { alias: 'v', - describe: 'Apply verbose mode', + describe: 'Apply verbose mode.', type: 'boolean', }, 'har-output': { - describe: 'Har file output name', + describe: 'Har file output name.', type: 'string', }, 'json-output': { - describe: 'JSON file output name', + describe: 'JSON file output name.', type: 'string', }, 'client-cert': { - describe: 'Mutual TLS client certificate', + describe: 'Mutual TLS client certificate.', type: 'string', }, 'client-key': { - describe: 'Mutual TLS client key', + describe: 'Mutual TLS client key.', type: 'string', }, 'ca-cert': { - describe: 'Mutual TLS CA certificate', + describe: 'Mutual TLS CA certificate.', type: 'string', }, severity: { - describe: 'Severity of the check', + describe: 'Severity of the check.', type: 'string', }, }); @@ -935,23 +936,23 @@ yargs async (argv) => { process.env.REDOCLY_CLI_COMMAND = 'respect'; const { handleRun } = await import('@redocly/respect-core'); - commandWrapper(handleRun)(argv); + commandWrapper(handleRun)(argv as Arguments); } ) .command( 'generate-arazzo ', - 'Auto-generate test config file from description', + 'Auto-generate arazzo description file from an API description.', (yargs) => { return yargs .positional('descriptionPath', { - describe: 'Description file path', + describe: 'Description file path.', type: 'string', }) .env('REDOCLY_CLI_RESPECT') .options({ 'output-file': { alias: 'o', - describe: 'Output File name', + describe: 'Output File name.', type: 'string', }, }); @@ -959,9 +960,7 @@ yargs async (argv) => { process.env.REDOCLY_CLI_COMMAND = 'generate-arazzo'; const { handleGenerate } = await import('@redocly/respect-core'); - commandWrapper( - handleGenerate as (wrapperArgs: CommandArgs) => Promise - )(argv); + commandWrapper(handleGenerate)(argv as Arguments); } ) .completion('completion', 'Generate autocomplete script for `redocly` command.') diff --git a/packages/cli/src/types.ts b/packages/cli/src/types.ts index 3ccb8d9866..e43805e262 100644 --- a/packages/cli/src/types.ts +++ b/packages/cli/src/types.ts @@ -1,4 +1,5 @@ import type { BundleOutputFormat, Region, Config, RuleSeverity } from '@redocly/openapi-core'; +import type { RespectOptions, GenerateArazzoFileOptions } from '@redocly/respect-core'; import type { ArgumentsCamelCase } from 'yargs'; import type { LintOptions } from './commands/lint'; import type { BundleOptions } from './commands/bundle'; @@ -43,7 +44,9 @@ export type CommandOptions = | PushStatusOptions | PreviewProjectOptions | TranslationsOptions - | EjectOptions; + | EjectOptions + | RespectOptions + | GenerateArazzoFileOptions; export type VerifyConfigOptions = { config?: string; diff --git a/packages/respect-core/src/handlers/generate.ts b/packages/respect-core/src/handlers/generate.ts index cc7f4b0a98..6c46371c05 100644 --- a/packages/respect-core/src/handlers/generate.ts +++ b/packages/respect-core/src/handlers/generate.ts @@ -1,7 +1,7 @@ import { blue, yellow, gray } from 'colorette'; import { writeFileSync } from 'fs'; import { stringifyYaml } from '../utils/yaml'; -import { generateTestConfig } from '../modules/test-config-generator'; +import { generateArazzoDescription } from '../modules/arazzo-description-generator'; import { DefaultLogger } from '../utils/logger/logger'; import { exitWithError } from '../utils/exit-with-error'; import { type CommandArgs } from '../types'; @@ -9,22 +9,25 @@ import { type CommandArgs } from '../types'; export type GenerateArazzoFileOptions = { descriptionPath: string; 'output-file'?: string; + config?: never; }; const logger = DefaultLogger.getInstance(); export async function handleGenerate({ argv }: CommandArgs) { try { - logger.log(gray('\n Generating test configuration... \n')); + logger.log(gray('\n Generating Arazzo description... \n')); - const generatedConfig = await generateTestConfig(argv); + const generatedConfig = await generateArazzoDescription(argv); const content = stringifyYaml(generatedConfig); const fileName = argv['output-file'] || 'auto-generated.arazzo.yaml'; writeFileSync(fileName, content); - logger.log('\n' + blue(`Config ${yellow(fileName)} successfully generated.`) + '\n'); + logger.log( + '\n' + blue(`Arazzo description ${yellow(fileName)} successfully generated.`) + '\n' + ); } catch (_err) { - exitWithError('\n' + '❌ Auto config generation failed.'); + exitWithError('\n' + '❌ Arazzo description generation failed.'); } } diff --git a/packages/respect-core/src/handlers/run.ts b/packages/respect-core/src/handlers/run.ts index bfe2757c6a..63cb5b65df 100644 --- a/packages/respect-core/src/handlers/run.ts +++ b/packages/respect-core/src/handlers/run.ts @@ -24,6 +24,7 @@ export type RespectOptions = { 'client-key'?: string; 'ca-cert'?: string; severity?: string; + config?: never; }; const logger = DefaultLogger.getInstance(); diff --git a/packages/respect-core/src/modules/__tests__/test-config-generator/cleanup-test-description.test.ts b/packages/respect-core/src/modules/__tests__/arazzo-description-generator/cleanup-test-description.test.ts similarity index 94% rename from packages/respect-core/src/modules/__tests__/test-config-generator/cleanup-test-description.test.ts rename to packages/respect-core/src/modules/__tests__/arazzo-description-generator/cleanup-test-description.test.ts index 66482cd98f..937507a1a9 100644 --- a/packages/respect-core/src/modules/__tests__/test-config-generator/cleanup-test-description.test.ts +++ b/packages/respect-core/src/modules/__tests__/arazzo-description-generator/cleanup-test-description.test.ts @@ -1,6 +1,6 @@ import type { TestDescription } from '../../../types'; -import { cleanupTestDescription } from '../../test-config-generator'; +import { cleanupTestDescription } from '../../arazzo-description-generator'; describe('cleanupTestDescription', () => { it('should cleanup sensitive information from a test config', () => { diff --git a/packages/respect-core/src/modules/__tests__/test-config-generator/generate-test-config.test.ts b/packages/respect-core/src/modules/__tests__/arazzo-description-generator/generate-arazzo-description.test.ts similarity index 94% rename from packages/respect-core/src/modules/__tests__/test-config-generator/generate-test-config.test.ts rename to packages/respect-core/src/modules/__tests__/arazzo-description-generator/generate-arazzo-description.test.ts index 659177729f..cda03f6159 100644 --- a/packages/respect-core/src/modules/__tests__/test-config-generator/generate-test-config.test.ts +++ b/packages/respect-core/src/modules/__tests__/arazzo-description-generator/generate-arazzo-description.test.ts @@ -1,4 +1,4 @@ -import { generateTestConfig } from '../../test-config-generator'; +import { generateArazzoDescription } from '../../arazzo-description-generator'; import { bundleOpenApi, getOperationFromDescription, @@ -41,11 +41,11 @@ const BUNDLED_DESCRIPTION_MOCK = { }, }; -describe('generateTestConfig', () => { +describe('generateArazzoDescription', () => { it('should generate test config when output file is provided', async () => { (bundleOpenApi as jest.Mock).mockReturnValue(BUNDLED_DESCRIPTION_MOCK); expect( - await generateTestConfig({ + await generateArazzoDescription({ descriptionPath: 'description.yaml', 'output-file': './final-test-location/output.yaml', }) @@ -109,7 +109,7 @@ describe('generateTestConfig', () => { }); expect( - await generateTestConfig({ + await generateArazzoDescription({ descriptionPath: 'description.yaml', }) ).toEqual({ @@ -152,7 +152,7 @@ describe('generateTestConfig', () => { it('should generate test config with not existing description', async () => { (bundleOpenApi as jest.Mock).mockReturnValue(undefined); expect( - await generateTestConfig({ + await generateArazzoDescription({ descriptionPath: 'description.yaml', }) ).toEqual({ diff --git a/packages/respect-core/src/modules/__tests__/test-config-generator/generate-example-value.test.ts b/packages/respect-core/src/modules/__tests__/arazzo-description-generator/generate-example-value.test.ts similarity index 93% rename from packages/respect-core/src/modules/__tests__/test-config-generator/generate-example-value.test.ts rename to packages/respect-core/src/modules/__tests__/arazzo-description-generator/generate-example-value.test.ts index d29c708ef3..a485520430 100644 --- a/packages/respect-core/src/modules/__tests__/test-config-generator/generate-example-value.test.ts +++ b/packages/respect-core/src/modules/__tests__/arazzo-description-generator/generate-example-value.test.ts @@ -1,6 +1,6 @@ import type { Parameter } from '../../../types'; -import { generateExampleValue } from '../../test-config-generator'; +import { generateExampleValue } from '../../arazzo-description-generator'; describe('generateExampleValue', () => { it('should generate example value from parameter example', () => { diff --git a/packages/respect-core/src/modules/__tests__/test-config-generator/generate-test-data-from-json-schema.test.ts b/packages/respect-core/src/modules/__tests__/arazzo-description-generator/generate-test-data-from-json-schema.test.ts similarity index 95% rename from packages/respect-core/src/modules/__tests__/test-config-generator/generate-test-data-from-json-schema.test.ts rename to packages/respect-core/src/modules/__tests__/arazzo-description-generator/generate-test-data-from-json-schema.test.ts index 468fbfa85f..6fe14e3c3f 100644 --- a/packages/respect-core/src/modules/__tests__/test-config-generator/generate-test-data-from-json-schema.test.ts +++ b/packages/respect-core/src/modules/__tests__/arazzo-description-generator/generate-test-data-from-json-schema.test.ts @@ -1,7 +1,7 @@ import * as Sampler from 'openapi-sampler'; import { DefaultLogger } from '../../../utils/logger/logger'; -import { generateTestDataFromJsonSchema } from '../../test-config-generator'; +import { generateTestDataFromJsonSchema } from '../../arazzo-description-generator'; const logger = DefaultLogger.getInstance(); diff --git a/packages/respect-core/src/modules/test-config-generator/cleanup-test-description.ts b/packages/respect-core/src/modules/arazzo-description-generator/cleanup-test-description.ts similarity index 100% rename from packages/respect-core/src/modules/test-config-generator/cleanup-test-description.ts rename to packages/respect-core/src/modules/arazzo-description-generator/cleanup-test-description.ts diff --git a/packages/respect-core/src/modules/test-config-generator/generate-test-config.ts b/packages/respect-core/src/modules/arazzo-description-generator/generate-arazzo-description.ts similarity index 98% rename from packages/respect-core/src/modules/test-config-generator/generate-test-config.ts rename to packages/respect-core/src/modules/arazzo-description-generator/generate-arazzo-description.ts index b81fa1cf87..03eee71ddc 100644 --- a/packages/respect-core/src/modules/test-config-generator/generate-test-config.ts +++ b/packages/respect-core/src/modules/arazzo-description-generator/generate-arazzo-description.ts @@ -89,7 +89,7 @@ function resolveDescriptionNameFromPath(descriptionPath: string): string { return path.parse(descriptionPath).name; } -export async function generateTestConfig({ +export async function generateArazzoDescription({ descriptionPath, 'output-file': outputFile, }: GenerateArazzoFileOptions) { diff --git a/packages/respect-core/src/modules/test-config-generator/generate-example-value.ts b/packages/respect-core/src/modules/arazzo-description-generator/generate-example-value.ts similarity index 100% rename from packages/respect-core/src/modules/test-config-generator/generate-example-value.ts rename to packages/respect-core/src/modules/arazzo-description-generator/generate-example-value.ts diff --git a/packages/respect-core/src/modules/test-config-generator/generate-test-data-from-json-schema.ts b/packages/respect-core/src/modules/arazzo-description-generator/generate-test-data-from-json-schema.ts similarity index 100% rename from packages/respect-core/src/modules/test-config-generator/generate-test-data-from-json-schema.ts rename to packages/respect-core/src/modules/arazzo-description-generator/generate-test-data-from-json-schema.ts diff --git a/packages/respect-core/src/modules/test-config-generator/index.ts b/packages/respect-core/src/modules/arazzo-description-generator/index.ts similarity index 75% rename from packages/respect-core/src/modules/test-config-generator/index.ts rename to packages/respect-core/src/modules/arazzo-description-generator/index.ts index fbc8abe4f6..fb2d5a665f 100644 --- a/packages/respect-core/src/modules/test-config-generator/index.ts +++ b/packages/respect-core/src/modules/arazzo-description-generator/index.ts @@ -1,4 +1,4 @@ -export * from './generate-test-config'; +export * from './generate-arazzo-description'; export * from './cleanup-test-description'; export * from './generate-test-data-from-json-schema'; export * from './generate-example-value'; diff --git a/packages/respect-core/src/modules/description-parser/get-request-data-from-openapi.ts b/packages/respect-core/src/modules/description-parser/get-request-data-from-openapi.ts index ff1d7ab601..226164fad7 100644 --- a/packages/respect-core/src/modules/description-parser/get-request-data-from-openapi.ts +++ b/packages/respect-core/src/modules/description-parser/get-request-data-from-openapi.ts @@ -1,5 +1,8 @@ import { isPlainObject } from '@redocly/openapi-core/lib/utils'; -import { generateTestDataFromJsonSchema, generateExampleValue } from '../test-config-generator'; +import { + generateTestDataFromJsonSchema, + generateExampleValue, +} from '../arazzo-description-generator'; import { extractFirstExample } from './extract-first-example'; import { isParameterWithIn } from '../config-parser'; diff --git a/packages/respect-core/src/modules/flow-runner/context/create-test-context.ts b/packages/respect-core/src/modules/flow-runner/context/create-test-context.ts index 600ac97bcb..b95c68328b 100644 --- a/packages/respect-core/src/modules/flow-runner/context/create-test-context.ts +++ b/packages/respect-core/src/modules/flow-runner/context/create-test-context.ts @@ -8,7 +8,7 @@ import { import { type ApiFetcher } from '../../../utils/api-fetcher'; import { bundleOpenApi } from '../../description-parser'; import { createFaker } from '../../faker'; -import { infoSubstitute } from '../../test-config-generator'; +import { infoSubstitute } from '../../arazzo-description-generator'; import { formatCliInputs } from '../inputs'; import { bundleArazzo } from '../get-test-description-from-file'; import { readEnvVariables } from '../read-env-variables';