From a8fbbc96d208d0b292b22f006cb81d48e326b3b5 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Wed, 22 Mar 2023 23:57:55 +0530 Subject: [PATCH] CodeGen class --- lib/codegen/dart/pkg_http.dart | 218 +++++++++--------- .../details_card/code_pane/code_pane.dart | 4 +- 2 files changed, 109 insertions(+), 113 deletions(-) diff --git a/lib/codegen/dart/pkg_http.dart b/lib/codegen/dart/pkg_http.dart index 5474601d..b3daa622 100644 --- a/lib/codegen/dart/pkg_http.dart +++ b/lib/codegen/dart/pkg_http.dart @@ -2,77 +2,79 @@ import 'dart:io'; import 'dart:convert'; import 'package:jinja/jinja.dart' as jj; import 'package:apidash/consts.dart'; +import 'package:apidash/utils/utils.dart' show padMultilineString; import 'package:apidash/models/models.dart' show RequestModel, rowsToMap; -String kTemplateUrl = """import 'package:http/http.dart' as http; +class DartHttpCodeGen { + String kTemplateUrl = """import 'package:http/http.dart' as http; void main() async { var uri = Uri.parse('{{url}}'); """; -String kTemplateParams = """ + String kTemplateParams = """ var queryParams = {{params}}; """; -int kParamsPadding = 20; + int kParamsPadding = 20; -String kStringUrlParams = """ + String kStringUrlParams = """ var urlQueryParams = Map.from(uri.queryParameters); urlQueryParams.addAll(queryParams); uri = uri.replace(queryParameters: urlQueryParams); """; -String kStringNoUrlParams = """ + String kStringNoUrlParams = """ uri = uri.replace(queryParameters: queryParams); """; -String kTemplateBody = """ + String kTemplateBody = """ String body = r'''{{body}}'''; """; -String kBodyImportDartConvert = """ + String kBodyImportDartConvert = """ import 'dart:convert'; """; -String kBodyLength = """ + String kBodyLength = """ var contentLength = utf8.encode(body).length; """; -String kTemplateHeaders = """ + String kTemplateHeaders = """ var headers = {{headers}}; """; -int kHeadersPadding = 16; + int kHeadersPadding = 16; -String kTemplateRequest = """ + String kTemplateRequest = """ final response = await http.{{method}}(uri"""; -String kStringRequestHeaders = """, + String kStringRequestHeaders = """, headers: headers"""; -String kStringRequestBody = """, + String kStringRequestBody = """, body: body"""; -String kStringRequestEnd = """); + String kStringRequestEnd = """); """; -String kTemplateSingleSuccess = """ + String kTemplateSingleSuccess = """ if (response.statusCode == {{code}}) { """; -String kTemplateMultiSuccess = """ + String kTemplateMultiSuccess = """ if ({{codes}}.contains(response.statusCode)) {\n"""; -String kStringResult = r""" + String kStringResult = r""" print('Status Code: ${response.statusCode}'); print('Result: ${response.body}'); @@ -83,107 +85,99 @@ String kStringResult = r""" } """; -String padMultilineString(String text, int padding, - {bool firstLinePadded = false}) { - var lines = kSplitter.convert(text); - int start = firstLinePadded ? 0 : 1; - for (start; start < lines.length; start++) { - lines[start] = ' ' * padding + lines[start]; - } - return lines.join("\n"); -} + String? getCode(RequestModel requestModel) { + try { + String result = ""; + bool hasHeaders = false; + bool hasBody = false; -String? getDartHttpCode(RequestModel requestModel) { - try { - String result = ""; - bool hasHeaders = false; - bool hasBody = false; - - String url = requestModel.url; - if (!url.contains("://") && url.isNotEmpty) { - url = kDefaultUriScheme + url; - } - var templateUrl = jj.Template(kTemplateUrl); - result += templateUrl.render({"url": url}); - - var paramsList = requestModel.requestParams; - if (paramsList != null) { - var params = rowsToMap(requestModel.requestParams) ?? {}; - if (params.isNotEmpty) { - var templateParams = jj.Template(kTemplateParams); - var paramsString = kEncoder.convert(params); - paramsString = padMultilineString(paramsString, kParamsPadding); - result += templateParams.render({"params": paramsString}); - Uri uri = Uri.parse(url); - if (uri.hasQuery) { - result += kStringUrlParams; - } else { - result += kStringNoUrlParams; - } + String url = requestModel.url; + if (!url.contains("://") && url.isNotEmpty) { + url = kDefaultUriScheme + url; } - } + var templateUrl = jj.Template(kTemplateUrl); + result += templateUrl.render({"url": url}); - var method = requestModel.method; - if (kMethodsWithBody.contains(method) && requestModel.requestBody != null) { - var contentLength = utf8.encode(requestModel.requestBody).length; - if (contentLength > 0) { - hasBody = true; - var body = requestModel.requestBody; - var templateBody = jj.Template(kTemplateBody); - result += templateBody.render({"body": body}); - result = kBodyImportDartConvert + result; - result += kBodyLength; - } - } - - var headersList = requestModel.requestHeaders; - if (headersList != null || hasBody) { - var headers = rowsToMap(requestModel.requestHeaders) ?? {}; - if (headers.isNotEmpty || hasBody) { - hasHeaders = true; - if (hasBody) { - headers[HttpHeaders.contentLengthHeader] = r"$contentLength"; - switch (requestModel.requestBodyContentType) { - case ContentType.json: - headers[HttpHeaders.contentTypeHeader] = 'application/json'; - break; - case ContentType.text: - headers[HttpHeaders.contentTypeHeader] = 'text/plain'; - break; + var paramsList = requestModel.requestParams; + if (paramsList != null) { + var params = rowsToMap(requestModel.requestParams) ?? {}; + if (params.isNotEmpty) { + var templateParams = jj.Template(kTemplateParams); + var paramsString = kEncoder.convert(params); + paramsString = padMultilineString(paramsString, kParamsPadding); + result += templateParams.render({"params": paramsString}); + Uri uri = Uri.parse(url); + if (uri.hasQuery) { + result += kStringUrlParams; + } else { + result += kStringNoUrlParams; } } - var headersString = kEncoder.convert(headers); - headersString = padMultilineString(headersString, kHeadersPadding); - var templateHeaders = jj.Template(kTemplateHeaders); - result += templateHeaders.render({"headers": headersString}); } + + var method = requestModel.method; + if (kMethodsWithBody.contains(method) && + requestModel.requestBody != null) { + var contentLength = utf8.encode(requestModel.requestBody).length; + if (contentLength > 0) { + hasBody = true; + var body = requestModel.requestBody; + var templateBody = jj.Template(kTemplateBody); + result += templateBody.render({"body": body}); + result = kBodyImportDartConvert + result; + result += kBodyLength; + } + } + + var headersList = requestModel.requestHeaders; + if (headersList != null || hasBody) { + var headers = rowsToMap(requestModel.requestHeaders) ?? {}; + if (headers.isNotEmpty || hasBody) { + hasHeaders = true; + if (hasBody) { + headers[HttpHeaders.contentLengthHeader] = r"$contentLength"; + switch (requestModel.requestBodyContentType) { + case ContentType.json: + headers[HttpHeaders.contentTypeHeader] = 'application/json'; + break; + case ContentType.text: + headers[HttpHeaders.contentTypeHeader] = 'text/plain'; + break; + } + } + var headersString = kEncoder.convert(headers); + headersString = padMultilineString(headersString, kHeadersPadding); + var templateHeaders = jj.Template(kTemplateHeaders); + result += templateHeaders.render({"headers": headersString}); + } + } + + var templateRequest = jj.Template(kTemplateRequest); + result += templateRequest.render({"method": method.name}); + + if (hasHeaders) { + result += kStringRequestHeaders; + } + + if (hasBody) { + result += kStringRequestBody; + } + + result += kStringRequestEnd; + + var success = kCodegenSuccessStatusCodes[method]!; + if (success.length > 1) { + var templateMultiSuccess = jj.Template(kTemplateMultiSuccess); + result += templateMultiSuccess.render({"codes": success}); + } else { + var templateSingleSuccess = jj.Template(kTemplateSingleSuccess); + result += templateSingleSuccess.render({"code": success[0]}); + } + result += kStringResult; + + return result; + } catch (e) { + return null; } - - var templateRequest = jj.Template(kTemplateRequest); - result += templateRequest.render({"method": method.name}); - - if (hasHeaders) { - result += kStringRequestHeaders; - } - - if (hasBody) { - result += kStringRequestBody; - } - - result += kStringRequestEnd; - - var success = kCodegenSuccessStatusCodes[method]!; - if (success.length > 1) { - var templateMultiSuccess = jj.Template(kTemplateMultiSuccess); - result += templateMultiSuccess.render({"codes": success}); - } else { - var templateSingleSuccess = jj.Template(kTemplateSingleSuccess); - result += templateSingleSuccess.render({"code": success[0]}); - } - result += kStringResult; - - return result; - } catch (e) { - return null; } } diff --git a/lib/screens/home_page/editor_pane/details_card/code_pane/code_pane.dart b/lib/screens/home_page/editor_pane/details_card/code_pane/code_pane.dart index 1f3b0b62..1df0c892 100644 --- a/lib/screens/home_page/editor_pane/details_card/code_pane/code_pane.dart +++ b/lib/screens/home_page/editor_pane/details_card/code_pane/code_pane.dart @@ -13,6 +13,8 @@ class CodePane extends ConsumerStatefulWidget { } class _CodePaneState extends ConsumerState { + final DartHttpCodeGen dartHttpCodeGen = DartHttpCodeGen(); + @override void initState() { super.initState(); @@ -39,7 +41,7 @@ class _CodePaneState extends ConsumerState { borderRadius: kBorderRadius8, ); - final code = getDartHttpCode(requestModel); + final code = dartHttpCodeGen.getCode(requestModel); if (code == null) { return const ErrorMessage( message: "An error was encountered while generating code. $kRaiseIssue",