From 1ecea62e0c93e2356788997545939438e0a466df Mon Sep 17 00:00:00 2001 From: jld3103 Date: Mon, 27 Feb 2023 18:01:51 +0100 Subject: [PATCH] dynamite: Do not rely on globally defined tags --- packages/dynamite/lib/dynamite.dart | 1 - .../dynamite/lib/src/openapi_builder.dart | 26 ++++++++++++------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/packages/dynamite/lib/dynamite.dart b/packages/dynamite/lib/dynamite.dart index a030c8e1..c678ebf1 100644 --- a/packages/dynamite/lib/dynamite.dart +++ b/packages/dynamite/lib/dynamite.dart @@ -9,7 +9,6 @@ import 'package:dynamite/src/models/open_api.dart'; import 'package:dynamite/src/models/parameter.dart' as spec_parameter; import 'package:dynamite/src/models/path_item.dart'; import 'package:dynamite/src/models/schema.dart'; -import 'package:dynamite/src/models/tag.dart'; import 'package:path/path.dart' as p; part 'src/openapi_builder.dart'; diff --git a/packages/dynamite/lib/src/openapi_builder.dart b/packages/dynamite/lib/src/openapi_builder.dart index a2185a2b..fe22beca 100644 --- a/packages/dynamite/lib/src/openapi_builder.dart +++ b/packages/dynamite/lib/src/openapi_builder.dart @@ -28,12 +28,18 @@ class OpenAPIBuilder implements Builder { throw Exception('Only OpenAPI ${supportedVersions.join(', ')} are supported'); } - final tags = [ + final tags = { null, - if (spec.tags != null) ...[ - ...spec.tags!, - ], - ]; + if (spec.paths != null) ...{ + for (final pathItem in spec.paths!.values) ...{ + for (final operation in pathItem.operations.values) ...{ + if (operation.tags != null) ...{ + ...operation.tags!, + }, + }, + }, + }, + }; final hasAnySecurity = spec.security?.isNotEmpty ?? false; final state = State(prefix); @@ -321,7 +327,7 @@ class OpenAPIBuilder implements Builder { final pathItem = spec.paths![path]!; for (final method in pathItem.operations.keys) { final operation = pathItem.operations[method]!; - if ((tag != null && operation.tags != null && operation.tags!.contains(tag.name)) || + if ((tag != null && operation.tags != null && operation.tags!.contains(tag)) || (tag == null && (operation.tags == null || operation.tags!.isEmpty))) { if (paths[path] == null) { paths[path] = PathItem( @@ -441,10 +447,10 @@ class OpenAPIBuilder implements Builder { ) ..methods.addAll([ if (isRootClient) ...[ - for (final tag in tags.where((final tag) => tag != null).toList().cast()) ...[ + for (final tag in tags.where((final tag) => tag != null).toList().cast()) ...[ Method( (final b) => b - ..name = _toDartName(tag.name) + ..name = _toDartName(tag) ..lambda = true ..type = MethodType.getter ..returns = refer('$prefix${_clientName(tag)}') @@ -744,7 +750,7 @@ class OpenAPIBuilder implements Builder { String? headersValue; if (response.headers != null) { final identifier = - '${tag != null ? _toDartName(tag.name, uppercaseFirstCharacter: true) : null}${_toDartName(operationId, uppercaseFirstCharacter: true)}Headers'; + '${tag != null ? _toDartName(tag, uppercaseFirstCharacter: true) : null}${_toDartName(operationId, uppercaseFirstCharacter: true)}Headers'; final headerParseFunctions = {}; for (final headerName in response.headers!.keys) { final functionIdentifier = '_${_toDartName('${identifier}Parse$headerName')}'; @@ -951,7 +957,7 @@ class OpenAPIBuilder implements Builder { } } -String _clientName(final Tag tag) => '${_toDartName(tag.name, uppercaseFirstCharacter: true)}Client'; +String _clientName(final String tag) => '${_toDartName(tag, uppercaseFirstCharacter: true)}Client'; String _toDartName( final String input, {