Update model & codegen

This commit is contained in:
Ashita Prasad
2024-01-07 14:36:30 +05:30
parent 3823b94531
commit 4cf36b6450
10 changed files with 71 additions and 98 deletions

View File

@ -1,11 +1,8 @@
import 'dart:convert'; import 'dart:convert';
import 'package:apidash/consts.dart';
import 'package:apidash/models/request_model.dart' show RequestModel;
import 'package:apidash/utils/convert_utils.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:apidash/models/request_model.dart' show RequestModel;
import 'package:apidash/consts.dart';
import 'shared.dart'; import 'shared.dart';
class DartDioCodeGen { class DartDioCodeGen {
@ -25,7 +22,7 @@ class DartDioCodeGen {
headers: requestModel.enabledHeadersMap, headers: requestModel.enabledHeadersMap,
body: requestModel.requestBody, body: requestModel.requestBody,
contentType: requestModel.requestBodyContentType, contentType: requestModel.requestBodyContentType,
formData: rowsToFormDataMap(requestModel.formDataList) ?? [], formData: requestModel.formDataMapList,
); );
return next; return next;
} catch (e) { } catch (e) {

View File

@ -1,12 +1,9 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:apidash/consts.dart';
import 'package:apidash/models/models.dart' show RequestModel;
import 'package:apidash/utils/convert_utils.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:apidash/models/models.dart' show RequestModel;
import 'package:apidash/consts.dart';
import 'shared.dart'; import 'shared.dart';
class DartHttpCodeGen { class DartHttpCodeGen {
@ -26,7 +23,7 @@ class DartHttpCodeGen {
headers: requestModel.enabledHeadersMap, headers: requestModel.enabledHeadersMap,
body: requestModel.requestBody, body: requestModel.requestBody,
contentType: requestModel.requestBodyContentType, contentType: requestModel.requestBodyContentType,
formData: rowsToFormDataMap(requestModel.formDataList) ?? [], formData: requestModel.formDataMapList,
); );
return next; return next;
} catch (e) { } catch (e) {
@ -59,10 +56,11 @@ class DartHttpCodeGen {
final strContent = CodeExpression(Code('r\'\'\'$body\'\'\'')); final strContent = CodeExpression(Code('r\'\'\'$body\'\'\''));
dataExp = declareVar('body', type: refer('String')).assign(strContent); dataExp = declareVar('body', type: refer('String')).assign(strContent);
final hasContentTypeHeader = composeHeaders.keys.any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader); final hasContentTypeHeader = composeHeaders.keys
.any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader);
if (!hasContentTypeHeader) { if (!hasContentTypeHeader) {
composeHeaders.putIfAbsent(HttpHeaders.contentTypeHeader, composeHeaders.putIfAbsent(HttpHeaders.contentTypeHeader,
() => kContentTypeMap[contentType] ?? ''); () => kContentTypeMap[contentType] ?? '');
} }
} }

View File

@ -1,14 +1,9 @@
import 'dart:convert'; import 'dart:convert';
import 'package:apidash/consts.dart';
import 'package:apidash/utils/extensions/request_model_extension.dart';
import 'package:jinja/jinja.dart' as jj; import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/utils/utils.dart' import 'package:apidash/utils/utils.dart'
show show padMultilineString, requestModelToHARJsonRequest, stripUrlParams;
padMultilineString, import 'package:apidash/models/models.dart' show RequestModel;
requestModelToHARJsonRequest, import 'package:apidash/consts.dart';
rowsToFormDataMap,
stripUrlParams;
import 'package:apidash/models/models.dart' show FormDataModel, RequestModel;
class AxiosCodeGen { class AxiosCodeGen {
AxiosCodeGen({this.isNodeJs = false}); AxiosCodeGen({this.isNodeJs = false});
@ -80,7 +75,6 @@ async function buildFormData(fields) {
String defaultUriScheme, String defaultUriScheme,
) { ) {
try { try {
List<FormDataModel> formDataList = requestModel.formDataList ?? [];
jj.Template kNodejsImportTemplate = jj.Template(kStringImportNode); jj.Template kNodejsImportTemplate = jj.Template(kStringImportNode);
String importsData = kNodejsImportTemplate.render({ String importsData = kNodejsImportTemplate.render({
"isFormDataRequest": requestModel.isFormDataRequest, "isFormDataRequest": requestModel.isFormDataRequest,
@ -139,7 +133,7 @@ async function buildFormData(fields) {
result += templateBody.render({ result += templateBody.render({
"body": getFieldDataTemplate.render({ "body": getFieldDataTemplate.render({
"fields_list": json.encode(rowsToFormDataMap(formDataList)), "fields_list": json.encode(requestModel.formDataMapList),
}) })
}); });
} }

View File

@ -1,28 +1,23 @@
import 'dart:convert'; import 'dart:convert';
import 'package:apidash/consts.dart';
import 'package:apidash/utils/convert_utils.dart';
import 'package:apidash/utils/extensions/request_model_extension.dart';
import 'package:jinja/jinja.dart' as jj; import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/utils/utils.dart' import 'package:apidash/utils/utils.dart'
show padMultilineString, requestModelToHARJsonRequest; show padMultilineString, requestModelToHARJsonRequest;
import 'package:apidash/models/models.dart' show FormDataModel, RequestModel; import 'package:apidash/models/models.dart' show RequestModel;
import 'package:apidash/consts.dart';
class FetchCodeGen { class FetchCodeGen {
FetchCodeGen({this.isNodeJs = false}); FetchCodeGen({this.isNodeJs = false});
final bool isNodeJs; final bool isNodeJs;
String kStringImportNode = String kStringImportNode = """
"""
import fetch from 'node-fetch'; import fetch from 'node-fetch';
{% if isFormDataRequest %}const fs = require('fs');{% endif %} {% if isFormDataRequest %}const fs = require('fs');{% endif %}
"""; """;
String kTemplateStart = String kTemplateStart = """let url = '{{url}}';
"""let url = '{{url}}';
let options = { let options = {
method: '{{method}}' method: '{{method}}'
@ -36,8 +31,7 @@ let options = {
body: {{body}} body: {{body}}
"""; """;
String kMultiPartBodyTemplate = String kMultiPartBodyTemplate = r'''
r'''
async function buildDataList(fields) { async function buildDataList(fields) {
var formdata = new FormData(); var formdata = new FormData();
for (const field of fields) { for (const field of fields) {
@ -57,8 +51,7 @@ async function buildDataList(fields) {
const payload = buildDataList({{fields_list}}); const payload = buildDataList({{fields_list}});
'''; ''';
String kStringRequest = String kStringRequest = """
"""
}; };
@ -83,7 +76,6 @@ fetch(url, options)
String defaultUriScheme, String defaultUriScheme,
) { ) {
try { try {
List<FormDataModel> formDataList = requestModel.formDataList ?? [];
jj.Template kNodejsImportTemplate = jj.Template(kStringImportNode); jj.Template kNodejsImportTemplate = jj.Template(kStringImportNode);
String importsData = kNodejsImportTemplate.render({ String importsData = kNodejsImportTemplate.render({
"isFormDataRequest": requestModel.isFormDataRequest, "isFormDataRequest": requestModel.isFormDataRequest,
@ -94,7 +86,7 @@ fetch(url, options)
var templateMultiPartBody = jj.Template(kMultiPartBodyTemplate); var templateMultiPartBody = jj.Template(kMultiPartBodyTemplate);
result += templateMultiPartBody.render({ result += templateMultiPartBody.render({
"isNodeJs": isNodeJs, "isNodeJs": isNodeJs,
"fields_list": json.encode(rowsToFormDataMap(formDataList)), "fields_list": json.encode(requestModel.formDataMapList),
}); });
} }
String url = requestModel.url; String url = requestModel.url;

View File

@ -1,11 +1,9 @@
import 'dart:convert'; import 'dart:convert';
import 'package:apidash/consts.dart';
import 'package:apidash/utils/convert_utils.dart';
import 'package:apidash/utils/extensions/request_model_extension.dart';
import 'package:jinja/jinja.dart' as jj; import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/utils/utils.dart' import 'package:apidash/utils/utils.dart'
show getValidRequestUri, stripUriParams; show getValidRequestUri, stripUriParams;
import '../../models/request_model.dart'; import '../../models/request_model.dart';
import 'package:apidash/consts.dart';
class KotlinOkHttpCodeGen { class KotlinOkHttpCodeGen {
final String kTemplateStart = """import okhttp3.OkHttpClient final String kTemplateStart = """import okhttp3.OkHttpClient
@ -114,7 +112,7 @@ import okhttp3.MediaType.Companion.toMediaType""";
var formDataTemplate = jj.Template(kFormDataBody); var formDataTemplate = jj.Template(kFormDataBody);
result += formDataTemplate.render({ result += formDataTemplate.render({
"formDataList": rowsToFormDataMap(requestModel.formDataList), "formDataList": requestModel.formDataMapList,
}); });
} else if (kMethodsWithBody.contains(method) && requestBody != null) { } else if (kMethodsWithBody.contains(method) && requestBody != null) {
var contentLength = utf8.encode(requestBody).length; var contentLength = utf8.encode(requestBody).length;

View File

@ -1,11 +1,10 @@
import 'dart:io'; import 'dart:io';
import 'dart:convert'; import 'dart:convert';
import 'package:apidash/utils/extensions/request_model_extension.dart';
import 'package:jinja/jinja.dart' as jj; import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/consts.dart';
import 'package:apidash/utils/utils.dart' import 'package:apidash/utils/utils.dart'
show getNewUuid, getValidRequestUri, padMultilineString, rowsToFormDataMap; show getNewUuid, getValidRequestUri, padMultilineString;
import 'package:apidash/models/models.dart' show FormDataModel, RequestModel; import 'package:apidash/models/models.dart' show RequestModel;
import 'package:apidash/consts.dart';
class PythonHttpClientCodeGen { class PythonHttpClientCodeGen {
final String kTemplateStart = """import http.client final String kTemplateStart = """import http.client
@ -91,7 +90,6 @@ body = b'\r\n'.join(dataList)
RequestModel requestModel, RequestModel requestModel,
String defaultUriScheme, String defaultUriScheme,
) { ) {
List<FormDataModel> formDataList = requestModel.formDataList ?? [];
String uuid = getNewUuid(); String uuid = getNewUuid();
try { try {
@ -154,7 +152,8 @@ body = b'\r\n'.join(dataList)
if (headers.isNotEmpty || hasBody) { if (headers.isNotEmpty || hasBody) {
hasHeaders = true; hasHeaders = true;
bool hasContentTypeHeader = headers.keys.any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader); bool hasContentTypeHeader = headers.keys
.any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader);
if (hasBody && !hasContentTypeHeader) { if (hasBody && !hasContentTypeHeader) {
headers[HttpHeaders.contentTypeHeader] = headers[HttpHeaders.contentTypeHeader] =
@ -170,7 +169,7 @@ body = b'\r\n'.join(dataList)
var formDataBodyData = jj.Template(kStringFormDataBody); var formDataBodyData = jj.Template(kStringFormDataBody);
result += formDataBodyData.render( result += formDataBodyData.render(
{ {
"fields_list": json.encode(rowsToFormDataMap(formDataList)), "fields_list": json.encode(requestModel.formDataMapList),
"boundary": uuid, "boundary": uuid,
}, },
); );

View File

@ -1,16 +1,10 @@
import 'dart:io'; import 'dart:io';
import 'dart:convert'; import 'dart:convert';
import 'package:apidash/utils/extensions/request_model_extension.dart';
import 'package:jinja/jinja.dart' as jj; import 'package:jinja/jinja.dart' as jj;
import 'package:apidash/consts.dart'; import 'package:apidash/consts.dart';
import 'package:apidash/utils/utils.dart' import 'package:apidash/utils/utils.dart'
show show getNewUuid, getValidRequestUri, padMultilineString, stripUriParams;
getNewUuid, import 'package:apidash/models/models.dart' show RequestModel;
getValidRequestUri,
padMultilineString,
rowsToFormDataMap,
stripUriParams;
import 'package:apidash/models/models.dart' show FormDataModel, RequestModel;
class PythonRequestsCodeGen { class PythonRequestsCodeGen {
final String kTemplateStart = """import requests final String kTemplateStart = """import requests
@ -107,7 +101,6 @@ print('Response Body:', response.text)
bool hasHeaders = false; bool hasHeaders = false;
bool hasBody = false; bool hasBody = false;
bool hasJsonBody = false; bool hasJsonBody = false;
List<FormDataModel> formDataList = requestModel.formDataList ?? [];
String uuid = getNewUuid(); String uuid = getNewUuid();
String url = requestModel.url; String url = requestModel.url;
@ -181,7 +174,7 @@ print('Response Body:', response.text)
var formDataBodyData = jj.Template(kStringFormDataBody); var formDataBodyData = jj.Template(kStringFormDataBody);
result += formDataBodyData.render( result += formDataBodyData.render(
{ {
"fields_list": json.encode(rowsToFormDataMap(formDataList)), "fields_list": json.encode(requestModel.formDataMapList),
"boundary": uuid, "boundary": uuid,
}, },
); );

View File

@ -1,6 +1,11 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import '../utils/utils.dart'; import '../utils/utils.dart'
show listToFormDataModel, rowsToFormDataMap, mapToRows, rowsToMap, getEnabledRows; show
mapListToFormDataModelRows,
rowsToFormDataMapList,
mapToRows,
rowsToMap,
getEnabledRows;
import '../consts.dart'; import '../consts.dart';
import 'models.dart'; import 'models.dart';
@ -19,10 +24,10 @@ class RequestModel {
this.isParamEnabledList, this.isParamEnabledList,
this.requestBodyContentType = ContentType.json, this.requestBodyContentType = ContentType.json,
this.requestBody, this.requestBody,
this.requestFormDataList,
this.responseStatus, this.responseStatus,
this.message, this.message,
this.responseModel, this.responseModel,
this.formDataList,
}); });
final String id; final String id;
@ -35,9 +40,9 @@ class RequestModel {
final List<NameValueModel>? requestParams; final List<NameValueModel>? requestParams;
final List<bool>? isHeaderEnabledList; final List<bool>? isHeaderEnabledList;
final List<bool>? isParamEnabledList; final List<bool>? isParamEnabledList;
final List<FormDataModel>? requestFormDataList;
final ContentType requestBodyContentType; final ContentType requestBodyContentType;
final String? requestBody; final String? requestBody;
final List<FormDataModel>? requestFormDataList;
final int? responseStatus; final int? responseStatus;
final String? message; final String? message;
final ResponseModel? responseModel; final ResponseModel? responseModel;
@ -54,6 +59,10 @@ class RequestModel {
Map<String, String> get headersMap => rowsToMap(requestHeaders) ?? {}; Map<String, String> get headersMap => rowsToMap(requestHeaders) ?? {};
Map<String, String> get paramsMap => rowsToMap(requestParams) ?? {}; Map<String, String> get paramsMap => rowsToMap(requestParams) ?? {};
List<Map<String, dynamic>> get formDataMapList =>
rowsToFormDataMapList(requestFormDataList) ?? [];
bool get isFormDataRequest => requestBodyContentType == ContentType.formdata;
RequestModel duplicate({ RequestModel duplicate({
required String id, required String id,
}) { }) {
@ -71,7 +80,8 @@ class RequestModel {
isParamEnabledList != null ? [...isParamEnabledList!] : null, isParamEnabledList != null ? [...isParamEnabledList!] : null,
requestBodyContentType: requestBodyContentType, requestBodyContentType: requestBodyContentType,
requestBody: requestBody, requestBody: requestBody,
formDataList: formDataList != null ? [...formDataList!] : null, requestFormDataList:
requestFormDataList != null ? [...requestFormDataList!] : null,
); );
} }
@ -88,10 +98,10 @@ class RequestModel {
List<bool>? isParamEnabledList, List<bool>? isParamEnabledList,
ContentType? requestBodyContentType, ContentType? requestBodyContentType,
String? requestBody, String? requestBody,
List<FormDataModel>? requestFormDataList,
int? responseStatus, int? responseStatus,
String? message, String? message,
ResponseModel? responseModel, ResponseModel? responseModel,
List<FormDataModel>? formDataList,
}) { }) {
var headers = requestHeaders ?? this.requestHeaders; var headers = requestHeaders ?? this.requestHeaders;
var params = requestParams ?? this.requestParams; var params = requestParams ?? this.requestParams;
@ -111,10 +121,10 @@ class RequestModel {
requestBodyContentType: requestBodyContentType:
requestBodyContentType ?? this.requestBodyContentType, requestBodyContentType ?? this.requestBodyContentType,
requestBody: requestBody ?? this.requestBody, requestBody: requestBody ?? this.requestBody,
requestFormDataList: requestFormDataList ?? this.requestFormDataList,
responseStatus: responseStatus ?? this.responseStatus, responseStatus: responseStatus ?? this.responseStatus,
message: message ?? this.message, message: message ?? this.message,
responseModel: responseModel ?? this.responseModel, responseModel: responseModel ?? this.responseModel,
formDataList: formDataList ?? this.formDataList,
); );
} }
@ -143,10 +153,10 @@ class RequestModel {
requestBodyContentType = kDefaultContentType; requestBodyContentType = kDefaultContentType;
} }
final requestBody = data["requestBody"] as String?; final requestBody = data["requestBody"] as String?;
final requestFormDataList = data["requestFormDataList"];
final responseStatus = data["responseStatus"] as int?; final responseStatus = data["responseStatus"] as int?;
final message = data["message"] as String?; final message = data["message"] as String?;
final responseModelJson = data["responseModel"]; final responseModelJson = data["responseModel"];
final formDataList = data["formDataList"];
if (responseModelJson != null) { if (responseModelJson != null) {
responseModel = responseModel =
@ -172,11 +182,12 @@ class RequestModel {
isParamEnabledList: isParamEnabledList, isParamEnabledList: isParamEnabledList,
requestBodyContentType: requestBodyContentType, requestBodyContentType: requestBodyContentType,
requestBody: requestBody, requestBody: requestBody,
requestFormDataList: requestFormDataList != null
? mapListToFormDataModelRows(List<Map>.from(requestFormDataList))
: null,
responseStatus: responseStatus, responseStatus: responseStatus,
message: message, message: message,
responseModel: responseModel, responseModel: responseModel,
formDataList:
formDataList != null ? listToFormDataModel(formDataList) : null,
); );
} }
@ -193,10 +204,10 @@ class RequestModel {
"isParamEnabledList": isParamEnabledList, "isParamEnabledList": isParamEnabledList,
"requestBodyContentType": requestBodyContentType.name, "requestBodyContentType": requestBodyContentType.name,
"requestBody": requestBody, "requestBody": requestBody,
"requestFormDataList": rowsToFormDataMapList(requestFormDataList),
"responseStatus": includeResponse ? responseStatus : null, "responseStatus": includeResponse ? responseStatus : null,
"message": includeResponse ? message : null, "message": includeResponse ? message : null,
"responseModel": includeResponse ? responseModel?.toJson() : null, "responseModel": includeResponse ? responseModel?.toJson() : null,
"formDataList": rowsToFormDataMap(formDataList)
}; };
} }
@ -215,10 +226,10 @@ class RequestModel {
"Enabled Params: ${isParamEnabledList.toString()}", "Enabled Params: ${isParamEnabledList.toString()}",
"Request Body Content Type: ${requestBodyContentType.toString()}", "Request Body Content Type: ${requestBodyContentType.toString()}",
"Request Body: ${requestBody.toString()}", "Request Body: ${requestBody.toString()}",
"Request FormData: ${requestFormDataList.toString()}",
"Response Status: $responseStatus", "Response Status: $responseStatus",
"Response Message: $message", "Response Message: $message",
"Response: ${responseModel.toString()}" "Response: ${responseModel.toString()}"
"FormData: ${formDataList.toString()}"
].join("\n"); ].join("\n");
} }
@ -238,10 +249,10 @@ class RequestModel {
listEquals(other.isParamEnabledList, isParamEnabledList) && listEquals(other.isParamEnabledList, isParamEnabledList) &&
other.requestBodyContentType == requestBodyContentType && other.requestBodyContentType == requestBodyContentType &&
other.requestBody == requestBody && other.requestBody == requestBody &&
other.requestFormDataList == requestFormDataList &&
other.responseStatus == responseStatus && other.responseStatus == responseStatus &&
other.message == message && other.message == message &&
other.responseModel == responseModel && other.responseModel == responseModel;
other.formDataList == formDataList;
} }
@override @override
@ -260,10 +271,10 @@ class RequestModel {
isParamEnabledList, isParamEnabledList,
requestBodyContentType, requestBodyContentType,
requestBody, requestBody,
requestFormDataList,
responseStatus, responseStatus,
message, message,
responseModel, responseModel,
formDataList,
); );
} }
} }

View File

@ -79,7 +79,18 @@ Map<String, String>? rowsToMap(List<NameValueModel>? kvRows,
return finalMap; return finalMap;
} }
List<Map<String, dynamic>>? rowsToFormDataMap( List<NameValueModel>? mapToRows(Map<String, String>? kvMap) {
if (kvMap == null) {
return null;
}
List<NameValueModel> finalRows = [];
for (var k in kvMap.keys) {
finalRows.add(NameValueModel(name: k, value: kvMap[k]));
}
return finalRows;
}
List<Map<String, dynamic>>? rowsToFormDataMapList(
List<FormDataModel>? kvRows, List<FormDataModel>? kvRows,
) { ) {
if (kvRows == null) { if (kvRows == null) {
@ -95,18 +106,7 @@ List<Map<String, dynamic>>? rowsToFormDataMap(
return finalMap; return finalMap;
} }
List<NameValueModel>? mapToRows(Map<String, String>? kvMap) { List<FormDataModel>? mapListToFormDataModelRows(List<Map>? kvMap) {
if (kvMap == null) {
return null;
}
List<NameValueModel> finalRows = [];
for (var k in kvMap.keys) {
finalRows.add(NameValueModel(name: k, value: kvMap[k]));
}
return finalRows;
}
List<FormDataModel>? listToFormDataModel(List? kvMap) {
if (kvMap == null) { if (kvMap == null) {
return null; return null;
} }
@ -123,8 +123,7 @@ List<FormDataModel>? listToFormDataModel(List? kvMap) {
} }
FormDataType getFormDataType(String? type) { FormDataType getFormDataType(String? type) {
List<FormDataType> formData = FormDataType.values; return FormDataType.values.firstWhere((element) => element.name == type,
return formData.firstWhere((element) => element.name == type,
orElse: () => FormDataType.text); orElse: () => FormDataType.text);
} }

View File

@ -1,8 +0,0 @@
import 'package:apidash/consts.dart';
import 'package:apidash/models/models.dart';
extension RequestModelExtension on RequestModel {
bool get isFormDataRequest {
return requestBodyContentType == ContentType.formdata;
}
}