Skip to content
This repository has been archived by the owner on Sep 21, 2023. It is now read-only.

Commit

Permalink
Release 2.2.1 (epam-cross-platform-lab#260)
Browse files Browse the repository at this point in the history
* FIX epam-cross-platform-lab#244

* Update CHANGELOG.md

* Fix test

Co-authored-by: uladzimir_paliukhovich <>
Co-authored-by: Eugeny Sampir <ysampir@gmail.com>
  • Loading branch information
Vovanella95 and fryette authored Oct 7, 2021
1 parent 84f73f0 commit 2d767aa
Show file tree
Hide file tree
Showing 9 changed files with 162 additions and 82 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
# 2.2.1

* Added ability to generated models to separate file
* **BREAKING** Removed generation of client_index if generate only models
* Fixed Issue ([#244](https://github.com/epam-cross-platform-lab/swagger-dart-code-generator/issues/244))

# 2.2.0+1

* Updated changelog (see previous version changes)
Expand Down
1 change: 1 addition & 0 deletions example/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ targets:
use_path_for_request_names: true
use_default_null_for_lists: false
build_only_models: false
separate_models: true
enums_case_sensitive: false
ignore_headers: false
use_required_attribute_for_headers: false
Expand Down
21 changes: 17 additions & 4 deletions lib/src/code_generators/swagger_additions_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,13 @@ $maps};
}

///Generated imports for concrete service
String generateImportsContent(String swaggerFileName, bool hasModels,
bool buildOnlyModels, bool hasEnums) {
String generateImportsContent(
String swaggerFileName,
bool hasModels,
bool buildOnlyModels,
bool hasEnums,
bool separateModels,
) {
final result = StringBuffer();

final chopperPartImport =
Expand All @@ -75,13 +80,17 @@ import 'package:chopper/chopper.dart' as chopper;''';
final enumsExport =
hasEnums ? "export '$swaggerFileName.enums.swagger.dart';" : '';

if (hasModels) {
if (hasModels && !separateModels) {
result.writeln("""
import 'package:json_annotation/json_annotation.dart';
import 'package:collection/collection.dart';
""");
}

if (hasModels && separateModels) {
result.write("import '$swaggerFileName.models.swagger.dart';");
}

if (chopperImports.isNotEmpty) {
result.write(chopperImports);
}
Expand All @@ -93,12 +102,16 @@ import 'package:collection/collection.dart';
result.write(enumsExport);
}

if (hasModels && separateModels) {
result.write("export '$swaggerFileName.models.swagger.dart';");
}

result.write('\n\n');

if (chopperPartImport.isNotEmpty) {
result.write(chopperPartImport);
}
if (hasModels) {
if (hasModels && !separateModels) {
result.write("part '$swaggerFileName.swagger.g.dart';");
}

Expand Down
4 changes: 4 additions & 0 deletions lib/src/models/generator_options.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ class GeneratorOptions {
this.withBaseUrl = true,
this.withConverter = true,
this.ignoreHeaders = false,
this.separateModels = false,
this.useDefaultNullForLists = false,
this.buildOnlyModels = false,
this.defaultValuesMap = const <DefaultValueMap>[],
Expand All @@ -35,6 +36,9 @@ class GeneratorOptions {
@JsonKey(defaultValue: true)
final bool withConverter;

@JsonKey(defaultValue: false)
final bool separateModels;

@JsonKey(defaultValue: true)
final bool useRequiredAttributeForHeaders;

Expand Down
121 changes: 59 additions & 62 deletions lib/src/models/generator_options.g2.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 13 additions & 3 deletions lib/src/swagger_code_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,20 @@ class SwaggerCodeGenerator {
_getSwaggerAdditionsGenerator(dartCode)
.generateConverterMappings(buildExtensions, hasModels);

String generateImportsContent(String dartCode, String swaggerFileName,
bool hasModels, bool buildOnlyModels, bool hasEnums) =>
String generateImportsContent(
String dartCode,
String swaggerFileName,
bool hasModels,
bool buildOnlyModels,
bool hasEnums,
bool separateModels,
) =>
_getSwaggerAdditionsGenerator(dartCode).generateImportsContent(
swaggerFileName, hasModels, buildOnlyModels, hasEnums);
swaggerFileName,
hasModels,
buildOnlyModels,
hasEnums,
separateModels);

String generateConverter(
String dartCode, String fileName, GeneratorOptions options) =>
Expand Down
69 changes: 59 additions & 10 deletions lib/swagger_dart_code_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const _inputFileExtensions = ['.swagger', '.json'];

const String _outputFileExtension = '.swagger.dart';
const String _outputEnumsFileExtension = '.enums.swagger.dart';
const String _outputModelsFileExtension = '.models.swagger.dart';
const String _outputResponsesFileExtension = '.responses.swagger.dart';
const String _indexFileName = 'client_index.dart';
const String _mappingFileName = 'client_mapping.dart';
Expand All @@ -29,6 +30,7 @@ Map<String, List<String>> _generateExtensions(GeneratorOptions options) {
result[element.path] = <String>[
'${options.outputFolder}$name$_outputFileExtension',
'${options.outputFolder}$name$_outputEnumsFileExtension',
'${options.outputFolder}$name$_outputModelsFileExtension',
'${options.outputFolder}$name$_outputResponsesFileExtension',
];
});
Expand Down Expand Up @@ -79,11 +81,13 @@ class SwaggerDartCodeGenerator implements Builder {
contents, getFileNameWithoutExtension(fileNameWithExtension));

final imports = codeGenerator.generateImportsContent(
contents,
fileNameWithoutExtension,
models.isNotEmpty,
options.buildOnlyModels,
enums.isNotEmpty);
contents,
fileNameWithoutExtension,
models.isNotEmpty,
options.buildOnlyModels,
enums.isNotEmpty,
options.separateModels,
);

final converter = codeGenerator.generateConverter(
contents, getFileNameWithoutExtension(fileNameWithExtension), options);
Expand All @@ -102,10 +106,19 @@ class SwaggerDartCodeGenerator implements Builder {
final copyAssetId = AssetId(buildStep.inputId.package,
'${options.outputFolder}$fileNameWithoutExtension$_outputFileExtension');

await buildStep.writeAsString(
copyAssetId,
_generateFileContent(imports, requests, converter, models, responses,
requestBodies, customDecoder, dateToJson));
if (!options.separateModels || !options.buildOnlyModels) {
await buildStep.writeAsString(
copyAssetId,
_generateFileContent(
imports,
requests,
converter,
options.separateModels ? '' : models,
responses,
requestBodies,
customDecoder,
dateToJson));
}

if (enums.isNotEmpty) {
///Write enums
Expand All @@ -117,6 +130,20 @@ class SwaggerDartCodeGenerator implements Builder {
await buildStep.writeAsString(enumsAssetId, formatterEnums);
}

if (options.separateModels) {
///Write models to separate file
final formattedModels = _tryFormatCode(_generateSeparateModelsFileContent(
models,
fileNameWithoutExtension,
enums.isNotEmpty,
));

final enumsAssetId = AssetId(buildStep.inputId.package,
'${options.outputFolder}$fileNameWithoutExtension$_outputModelsFileExtension');

await buildStep.writeAsString(enumsAssetId, formattedModels);
}

///Write additional files on first input
if (buildExtensions.keys.first == buildStep.inputId.path) {
await _generateAdditionalFiles(
Expand Down Expand Up @@ -175,7 +202,9 @@ $dateToJson

final imports = codeGenerator.generateIndexes(swaggerCode, buildExtensions);

await buildStep.writeAsString(indexAssetId, _formatter.format(imports));
if (!options.buildOnlyModels) {
await buildStep.writeAsString(indexAssetId, _formatter.format(imports));
}

if (options.withConverter && !options.buildOnlyModels) {
final mappingAssetId =
Expand All @@ -187,4 +216,24 @@ $dateToJson
await buildStep.writeAsString(mappingAssetId, _formatter.format(mapping));
}
}

String _generateSeparateModelsFileContent(
String models,
String fileNameWithoutExtension,
bool hasEnums,
) {
final enumsImport = hasEnums
? "import '$fileNameWithoutExtension.enums.swagger.dart' as enums;"
: '';

return '''
import 'package:json_annotation/json_annotation.dart';
import 'package:collection/collection.dart';
$enumsImport
part '$fileNameWithoutExtension.models.swagger.g.dart';
$models
''';
}
}
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: swagger_dart_code_generator

version: 2.2.0+1
version: 2.2.1

homepage: https://github.com/epam-cross-platform-lab/swagger-dart-code-generator
repository: https://github.com/epam-cross-platform-lab/swagger-dart-code-generator
Expand Down
Loading

0 comments on commit 2d767aa

Please sign in to comment.