|
|
@ -1,16 +1,17 @@ |
|
|
|
import 'dart:convert'; |
|
|
|
import 'dart:convert'; |
|
|
|
|
|
|
|
|
|
|
|
import 'package:build/build.dart'; |
|
|
|
import 'package:build/build.dart'; |
|
|
|
|
|
|
|
import 'package:built_collection/built_collection.dart'; |
|
|
|
import 'package:code_builder/code_builder.dart'; |
|
|
|
import 'package:code_builder/code_builder.dart'; |
|
|
|
import 'package:dart_style/dart_style.dart'; |
|
|
|
import 'package:dart_style/dart_style.dart'; |
|
|
|
import 'package:dynamite/src/builder/client.dart'; |
|
|
|
import 'package:dynamite/src/builder/client.dart'; |
|
|
|
|
|
|
|
import 'package:dynamite/src/builder/imports.dart'; |
|
|
|
import 'package:dynamite/src/builder/resolve_type.dart'; |
|
|
|
import 'package:dynamite/src/builder/resolve_type.dart'; |
|
|
|
import 'package:dynamite/src/builder/serializer.dart'; |
|
|
|
import 'package:dynamite/src/builder/serializer.dart'; |
|
|
|
import 'package:dynamite/src/builder/state.dart'; |
|
|
|
import 'package:dynamite/src/builder/state.dart'; |
|
|
|
import 'package:dynamite/src/helpers/dart_helpers.dart'; |
|
|
|
import 'package:dynamite/src/helpers/dart_helpers.dart'; |
|
|
|
import 'package:dynamite/src/models/open_api.dart'; |
|
|
|
import 'package:dynamite/src/models/open_api.dart'; |
|
|
|
import 'package:dynamite/src/type_result/type_result.dart'; |
|
|
|
import 'package:dynamite/src/type_result/type_result.dart'; |
|
|
|
import 'package:path/path.dart' as p; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OpenAPIBuilder implements Builder { |
|
|
|
class OpenAPIBuilder implements Builder { |
|
|
|
@override |
|
|
|
@override |
|
|
@ -42,34 +43,21 @@ class OpenAPIBuilder implements Builder { |
|
|
|
|
|
|
|
|
|
|
|
final state = State(spec.info.title); |
|
|
|
final state = State(spec.info.title); |
|
|
|
|
|
|
|
|
|
|
|
final output = <String>[ |
|
|
|
final output = ListBuilder<Spec>() |
|
|
|
'// ignore_for_file: camel_case_types', |
|
|
|
..addAll(generateImports(outputId)) |
|
|
|
'// ignore_for_file: public_member_api_docs', |
|
|
|
..addAll(generateClients(spec, state)); |
|
|
|
"import 'dart:convert';", |
|
|
|
|
|
|
|
"import 'dart:typed_data';", |
|
|
|
|
|
|
|
'', |
|
|
|
|
|
|
|
"import 'package:built_collection/built_collection.dart';", |
|
|
|
|
|
|
|
"import 'package:built_value/built_value.dart';", |
|
|
|
|
|
|
|
"import 'package:built_value/json_object.dart';", |
|
|
|
|
|
|
|
"import 'package:built_value/serializer.dart';", |
|
|
|
|
|
|
|
"import 'package:built_value/standard_json_plugin.dart';", |
|
|
|
|
|
|
|
"import 'package:dynamite_runtime/content_string.dart';", |
|
|
|
|
|
|
|
"import 'package:dynamite_runtime/http_client.dart';", |
|
|
|
|
|
|
|
"import 'package:universal_io/io.dart';", |
|
|
|
|
|
|
|
'', |
|
|
|
|
|
|
|
"export 'package:dynamite_runtime/http_client.dart';", |
|
|
|
|
|
|
|
'', |
|
|
|
|
|
|
|
"part '${p.basename(outputId.changeExtension('.g.dart').path)}';", |
|
|
|
|
|
|
|
'', |
|
|
|
|
|
|
|
...generateDynamiteOverrides(state).map((final e) => e.accept(emitter).toString()), |
|
|
|
|
|
|
|
...generateClients(spec, state).map((final e) => e.accept(emitter).toString()), |
|
|
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (spec.components?.schemas != null) { |
|
|
|
if (spec.components?.schemas != null) { |
|
|
|
for (final schema in spec.components!.schemas!.entries) { |
|
|
|
for (final schema in spec.components!.schemas!.entries) { |
|
|
|
final identifier = toDartName(schema.key, uppercaseFirstCharacter: true); |
|
|
|
final identifier = toDartName(schema.key, uppercaseFirstCharacter: true); |
|
|
|
if (schema.value.type == null && schema.value.ref == null && schema.value.ofs == null) { |
|
|
|
if (schema.value.type == null && schema.value.ref == null && schema.value.ofs == null) { |
|
|
|
output.add('typedef $identifier = dynamic;'); |
|
|
|
output.add( |
|
|
|
|
|
|
|
TypeDef( |
|
|
|
|
|
|
|
(final b) => b |
|
|
|
|
|
|
|
..name = identifier |
|
|
|
|
|
|
|
..definition = refer('dynamic'), |
|
|
|
|
|
|
|
), |
|
|
|
|
|
|
|
); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
final result = resolveType( |
|
|
|
final result = resolveType( |
|
|
|
spec, |
|
|
|
spec, |
|
|
@ -78,14 +66,20 @@ class OpenAPIBuilder implements Builder { |
|
|
|
schema.value, |
|
|
|
schema.value, |
|
|
|
); |
|
|
|
); |
|
|
|
if (result is TypeResultBase) { |
|
|
|
if (result is TypeResultBase) { |
|
|
|
output.add('typedef $identifier = ${result.name};'); |
|
|
|
output.add( |
|
|
|
|
|
|
|
TypeDef( |
|
|
|
|
|
|
|
(final b) => b |
|
|
|
|
|
|
|
..name = identifier |
|
|
|
|
|
|
|
..definition = refer(result.name), |
|
|
|
|
|
|
|
), |
|
|
|
|
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
output |
|
|
|
output |
|
|
|
..addAll(state.output.map((final e) => e.accept(emitter).toString())) |
|
|
|
..addAll(state.output) |
|
|
|
..addAll(buildSerializer(state)); |
|
|
|
..addAll(buildSerializer(state)); |
|
|
|
|
|
|
|
|
|
|
|
final patterns = [ |
|
|
|
final patterns = [ |
|
|
@ -102,7 +96,8 @@ class OpenAPIBuilder implements Builder { |
|
|
|
r'static BuiltSet<.*> get values => _\$.*Values;', |
|
|
|
r'static BuiltSet<.*> get values => _\$.*Values;', |
|
|
|
), |
|
|
|
), |
|
|
|
]; |
|
|
|
]; |
|
|
|
var outputString = output.join('\n'); |
|
|
|
|
|
|
|
|
|
|
|
var outputString = output.build().map((final e) => e.accept(emitter)).join('\n'); |
|
|
|
for (final pattern in patterns) { |
|
|
|
for (final pattern in patterns) { |
|
|
|
outputString = outputString.replaceAllMapped( |
|
|
|
outputString = outputString.replaceAllMapped( |
|
|
|
pattern, |
|
|
|
pattern, |
|
|
|