From 8510a9101963a4210b118599dffe2c8ea74cff0c Mon Sep 17 00:00:00 2001 From: Zloooy Date: Sun, 27 Apr 2025 20:48:20 +0300 Subject: [PATCH] Make it possible to process a specification without defined `components`. According to [OpenAPI spec](https://spec.openapis.org/oas/v3.1.1.html#fixed-fields-5) the `components`, `components.schemas` and `components.securitySchemas` fields are optional. Commit makes it possible to process such files. Removed part *.g.dart file declaration because the lack of schemas makes it redundant. --- .../lib/src/openapi_code_builder.dart | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/openapi_code_builder/lib/src/openapi_code_builder.dart b/packages/openapi_code_builder/lib/src/openapi_code_builder.dart index 4ab0490..6d7a187 100644 --- a/packages/openapi_code_builder/lib/src/openapi_code_builder.dart +++ b/packages/openapi_code_builder/lib/src/openapi_code_builder.dart @@ -134,9 +134,10 @@ class OpenApiLibraryGenerator { final lb = LibraryBuilder(); final securitySchemesClass = ClassBuilder()..name = 'SecuritySchemes'; final List routerConfig = []; + bool createdSchemaClass = false; + bool createdSchemaEnum = false; Library generate() { - lb.body.add(Directive.part(partFileName)); var myRequireFreezed = false; void requireFreezed() { if (myRequireFreezed) { @@ -151,10 +152,12 @@ class OpenApiLibraryGenerator { } // create class for each schema.. - for (final schemaEntry in api.components!.schemas!.entries) { - _schemaReference(schemaEntry.key, schemaEntry.value!); + if (api.components?.schemas != null) { + for (final schemaEntry in api.components!.schemas!.entries) { + _schemaReference(schemaEntry.key, schemaEntry.value!); + } } - if (api.components!.securitySchemes != null && !ignoreSecuritySchemes) { + if (api.components?.securitySchemes != null && !ignoreSecuritySchemes) { for (final securityScheme in api.components!.securitySchemes!.entries) { _securitySchemeReference(securityScheme.key, securityScheme.value!); } @@ -788,6 +791,9 @@ class OpenApiLibraryGenerator { } } } + if (createdSchemaClass || createdSchemaEnum) { + lb.body.insert(1, Directive.part(partFileName)); + } }); lb.body.add(c); lb.body.add(clientInterface.build()); @@ -1023,11 +1029,12 @@ class OpenApiLibraryGenerator { 'Creating schema class. for ${schemaObject.referenceURI} / $key'); if (schemaObject.enumerated?.isNotEmpty == true) { final e = _createEnum(componentName, schemaObject.enumerated!); + createdSchemaEnum = true; return e; } final c = _createSchemaClass(componentName, schemaObject); lb.body.add(c); - + createdSchemaClass = true; return reference; }