mirror of
https://github.com/foss42/apidash.git
synced 2025-07-02 14:06:58 +08:00
apidash_core: networking contents removed & platform-wide changes made
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
@ -1,7 +1,7 @@
|
||||
import 'package:apidash/models/settings_model.dart';
|
||||
import 'package:apidash/providers/providers.dart';
|
||||
import 'package:apidash/services/services.dart';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class CCurlCodeGen {
|
||||
|
@ -1,7 +1,7 @@
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'package:apidash/models/models.dart';
|
||||
import 'package:apidash/utils/utils.dart' show getNewUuid;
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'c/curl.dart';
|
||||
import 'csharp/http_client.dart';
|
||||
import 'csharp/rest_sharp.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class CSharpHttpClientCodeGen {
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'dart:convert';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class CSharpRestSharp {
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'dart:convert';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:code_builder/code_builder.dart';
|
||||
import 'package:pub_semver/pub_semver.dart';
|
||||
import 'package:dart_style/dart_style.dart';
|
||||
|
@ -1,6 +1,6 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:code_builder/code_builder.dart';
|
||||
import 'package:pub_semver/pub_semver.dart';
|
||||
import 'package:dart_style/dart_style.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class GoHttpCodeGen {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class JavaAsyncHttpClientGen {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
import '../../utils/har_utils.dart';
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'dart:convert';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class JavaOkHttpCodeGen {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class JavaUnirestGen {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
import '../../utils/utils.dart';
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
import '../../utils/utils.dart';
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'dart:io';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class JuliaHttpClientCodeGen {
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'dart:convert';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class KotlinOkHttpCodeGen {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
import '../../utils/utils.dart';
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import '../../utils/utils.dart';
|
||||
|
||||
class HARCodeGen {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class PHPcURLCodeGen {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class PhpGuzzleCodeGen {
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'dart:convert';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class PhpHttpPlugCodeGen {
|
||||
|
@ -1,6 +1,6 @@
|
||||
import 'dart:io';
|
||||
import 'dart:convert';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class PythonHttpClientCodeGen {
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'dart:io';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
import '../../utils/utils.dart';
|
||||
import '../codegen_utils.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
// Note that delete is a special case in Faraday as API Dash supports request
|
||||
|
@ -1,3 +1,4 @@
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
import 'dart:io';
|
||||
import 'dart:convert';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
import '../../utils/utils.dart';
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
import '../../utils/utils.dart';
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'dart:core';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class RustHyperCodeGen {
|
||||
|
@ -1,6 +1,6 @@
|
||||
import 'dart:io';
|
||||
import 'dart:convert';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
||||
class RustReqwestCodeGen {
|
||||
|
@ -1,6 +1,6 @@
|
||||
import 'dart:io';
|
||||
import 'dart:convert';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
import '../../utils/utils.dart';
|
||||
|
||||
@ -126,7 +126,8 @@ multipart/form-data; boundary={{boundary}}''';
|
||||
Uri? uri = rec.$1;
|
||||
var method = requestModel.method;
|
||||
var requestBody = requestModel.body;
|
||||
if (requestModel.bodyContentType == ContentType.json && requestBody?.isNotEmpty == true){
|
||||
if (requestModel.bodyContentType == ContentType.json &&
|
||||
requestBody?.isNotEmpty == true) {
|
||||
result += kJsonImport;
|
||||
}
|
||||
if (uri != null) {
|
||||
@ -136,8 +137,7 @@ multipart/form-data; boundary={{boundary}}''';
|
||||
'isFormDataRequest': requestModel.hasFormData,
|
||||
"method": requestModel.method.name.toLowerCase()
|
||||
});
|
||||
|
||||
|
||||
|
||||
if (kMethodsWithBody.contains(method) && requestBody != null) {
|
||||
var contentLength = utf8.encode(requestBody).length;
|
||||
if (contentLength > 0) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
@ -96,22 +96,22 @@ task.resume()
|
||||
semaphore.wait()
|
||||
""";
|
||||
|
||||
|
||||
String? getCode(HttpRequestModel requestModel) {
|
||||
try {
|
||||
String result = kTemplateStart;
|
||||
|
||||
var rec = getValidRequestUri(requestModel.url, requestModel.enabledParams);
|
||||
var rec =
|
||||
getValidRequestUri(requestModel.url, requestModel.enabledParams);
|
||||
Uri? uri = rec.$1;
|
||||
|
||||
if (requestModel.hasFormData) {
|
||||
result += kTemplateFormDataImport;
|
||||
|
||||
|
||||
var formDataList = requestModel.formDataMapList.map((param) {
|
||||
if (param['type'] == 'file') {
|
||||
final filePath = param['value'] as String;
|
||||
final fileName = path.basename(filePath);
|
||||
final fileExtension =
|
||||
final fileExtension =
|
||||
path.extension(fileName).toLowerCase().replaceFirst('.', '');
|
||||
return {
|
||||
'type': 'file',
|
||||
@ -133,20 +133,16 @@ semaphore.wait()
|
||||
result += templateFormData.render({
|
||||
"formData": formDataList,
|
||||
});
|
||||
}
|
||||
}
|
||||
// Handle JSON data
|
||||
else if (requestModel.hasJsonData) {
|
||||
var templateJsonData = jj.Template(kTemplateJsonData);
|
||||
result += templateJsonData.render({
|
||||
"jsonData": requestModel.body!
|
||||
});
|
||||
}
|
||||
result += templateJsonData.render({"jsonData": requestModel.body!});
|
||||
}
|
||||
// Handle text data
|
||||
else if (requestModel.hasTextData) {
|
||||
var templateTextData = jj.Template(kTemplateTextData);
|
||||
result += templateTextData.render({
|
||||
"textData": requestModel.body!
|
||||
});
|
||||
result += templateTextData.render({"textData": requestModel.body!});
|
||||
}
|
||||
|
||||
var templateRequest = jj.Template(kTemplateRequest);
|
||||
@ -157,11 +153,11 @@ semaphore.wait()
|
||||
|
||||
var headers = requestModel.enabledHeadersMap;
|
||||
if (requestModel.hasFormData) {
|
||||
headers['Content-Type'] =
|
||||
headers['Content-Type'] =
|
||||
"multipart/form-data; boundary=\\(boundary.stringValue)";
|
||||
} else if(requestModel.hasJsonData||requestModel.hasTextData){
|
||||
} else if (requestModel.hasJsonData || requestModel.hasTextData) {
|
||||
headers['Content-Type'] = 'application/json';
|
||||
}
|
||||
}
|
||||
|
||||
if (headers.isNotEmpty) {
|
||||
var templateHeader = jj.Template(kTemplateHeaders);
|
||||
|
@ -1,6 +1,6 @@
|
||||
import 'dart:io';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
|
||||
class Importer {
|
||||
Future<List<(String?, HttpRequestModel)>?> getHttpRequestModelList(
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
|
||||
part 'history_meta_model.freezed.dart';
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'models.dart';
|
||||
|
||||
part 'history_request_model.freezed.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
|
||||
part 'request_model.freezed.dart';
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:apidash/consts.dart';
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:apidash/consts.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import '../models/models.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:apidash/providers/providers.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:apidash/widgets/widgets.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'dart:math';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'dart:math';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'dart:math';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:apidash/providers/providers.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../models/models.dart';
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
import 'dart:typed_data';
|
||||
import 'dart:convert';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
String humanizeDate(DateTime? date) {
|
||||
|
@ -1,4 +1,5 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash/consts.dart';
|
||||
|
||||
String getEnvironmentTitle(String? name) {
|
||||
|
@ -5,7 +5,7 @@ import 'dart:convert';
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'package:apidash/utils/utils.dart' show getNewUuid, getFilenameFromPath;
|
||||
import 'package:apidash/models/models.dart';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
|
||||
Future<Map<String, dynamic>> collectionToHAR(
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import '../consts.dart';
|
||||
|
||||
String getRequestTitleFromUrl(String? url) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import '../consts.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:apidash/models/models.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:apidash/consts.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:apidash/utils/utils.dart';
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'dart:convert';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:jinja/jinja.dart' as jj;
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:highlighter/highlighter.dart' show highlight, Node;
|
||||
import 'package:apidash/consts.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash/models/models.dart';
|
||||
import 'package:apidash/utils/utils.dart';
|
||||
import 'package:apidash/consts.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'button_copy.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:data_table_2/data_table_2.dart';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:apidash/utils/utils.dart';
|
||||
|
@ -3,9 +3,8 @@ library apidash_core;
|
||||
export 'consts.dart';
|
||||
export 'extensions/extensions.dart';
|
||||
export 'models/models.dart';
|
||||
export 'utils/utils.dart';
|
||||
export 'services/services.dart';
|
||||
export 'import_export/import_export.dart';
|
||||
export 'utils/utils.dart';
|
||||
|
||||
// Export 3rd party packages
|
||||
export 'package:collection/collection.dart';
|
||||
|
@ -1,98 +1 @@
|
||||
import 'dart:convert';
|
||||
|
||||
enum APIType {
|
||||
rest("HTTP", "HTTP"),
|
||||
graphql("GraphQL", "GQL");
|
||||
|
||||
const APIType(this.label, this.abbr);
|
||||
final String label;
|
||||
final String abbr;
|
||||
}
|
||||
|
||||
enum EnvironmentVariableType { variable, secret }
|
||||
|
||||
enum HTTPVerb {
|
||||
get("GET"),
|
||||
head("HEAD"),
|
||||
post("POST"),
|
||||
put("PUT"),
|
||||
patch("PAT"),
|
||||
delete("DEL"),
|
||||
options("OPT");
|
||||
|
||||
const HTTPVerb(this.abbr);
|
||||
final String abbr;
|
||||
}
|
||||
|
||||
enum SupportedUriSchemes { https, http }
|
||||
|
||||
final kSupportedUriSchemes =
|
||||
SupportedUriSchemes.values.map((i) => i.name).toList();
|
||||
const kDefaultUriScheme = SupportedUriSchemes.https;
|
||||
final kLocalhostRegex = RegExp(r'^localhost(:\d+)?(/.*)?$');
|
||||
final kIPHostRegex =
|
||||
RegExp(r'^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}(:\d+)?(/.*)?$');
|
||||
|
||||
const kMethodsWithBody = [
|
||||
HTTPVerb.post,
|
||||
HTTPVerb.put,
|
||||
HTTPVerb.patch,
|
||||
HTTPVerb.delete,
|
||||
];
|
||||
|
||||
const kDefaultHttpMethod = HTTPVerb.get;
|
||||
const kDefaultContentType = ContentType.json;
|
||||
|
||||
const kTypeApplication = 'application';
|
||||
// application
|
||||
const kSubTypeJson = 'json';
|
||||
const kSubTypeOctetStream = 'octet-stream';
|
||||
const kSubTypePdf = 'pdf';
|
||||
const kSubTypeSql = 'sql';
|
||||
const kSubTypeXml = 'xml';
|
||||
const kSubTypeYaml = 'yaml';
|
||||
const kSubTypeXYaml = 'x-yaml';
|
||||
const kSubTypeYml = 'x-yml';
|
||||
const kSubTypeXWwwFormUrlencoded = 'x-www-form-urlencoded';
|
||||
|
||||
const kTypeText = 'text';
|
||||
// text
|
||||
const kSubTypeCss = 'css';
|
||||
const kSubTypeCsv = 'csv';
|
||||
const kSubTypeHtml = 'html';
|
||||
const kSubTypeJavascript = 'javascript';
|
||||
const kSubTypeMarkdown = 'markdown';
|
||||
const kSubTypePlain = 'plain';
|
||||
const kSubTypeTextXml = 'xml';
|
||||
const kSubTypeTextYaml = 'yaml';
|
||||
const kSubTypeTextYml = 'yml';
|
||||
|
||||
const kTypeImage = 'image';
|
||||
//image
|
||||
const kSubTypeSvg = 'svg+xml';
|
||||
|
||||
const kTypeAudio = 'audio';
|
||||
const kTypeVideo = 'video';
|
||||
|
||||
const kTypeMultipart = "multipart";
|
||||
const kSubTypeFormData = "form-data";
|
||||
|
||||
const kSubTypeDefaultViewOptions = 'all';
|
||||
|
||||
enum ContentType {
|
||||
json("$kTypeApplication/$kSubTypeJson"),
|
||||
text("$kTypeText/$kSubTypePlain"),
|
||||
formdata("$kTypeMultipart/$kSubTypeFormData");
|
||||
|
||||
const ContentType(this.header);
|
||||
final String header;
|
||||
}
|
||||
|
||||
const JsonEncoder kJsonEncoder = JsonEncoder.withIndent(' ');
|
||||
const JsonDecoder kJsonDecoder = JsonDecoder();
|
||||
const LineSplitter kSplitter = LineSplitter();
|
||||
|
||||
const kCodeCharsPerLineLimit = 200;
|
||||
|
||||
const kHeaderContentType = "Content-Type";
|
||||
const kMsgRequestCancelled = 'Request Cancelled';
|
||||
|
@ -1,2 +1 @@
|
||||
export 'string_extensions.dart';
|
||||
export 'map_extensions.dart';
|
||||
|
@ -1,32 +0,0 @@
|
||||
import 'dart:io';
|
||||
|
||||
extension MapExtension on Map {
|
||||
bool hasKeyContentType() {
|
||||
return keys.any((k) => (k is String)
|
||||
? k.toLowerCase() == HttpHeaders.contentTypeHeader
|
||||
: false);
|
||||
}
|
||||
|
||||
String? getKeyContentType() {
|
||||
if (isEmpty) {
|
||||
return null;
|
||||
}
|
||||
bool present = hasKeyContentType();
|
||||
if (present) {
|
||||
return keys.firstWhere((e) => (e is String)
|
||||
? e.toLowerCase() == HttpHeaders.contentTypeHeader
|
||||
: false);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
String? getValueContentType() {
|
||||
return this[getKeyContentType()];
|
||||
}
|
||||
|
||||
Map removeKeyContentType() {
|
||||
removeWhere(
|
||||
(key, value) => key.toLowerCase() == HttpHeaders.contentTypeHeader);
|
||||
return this;
|
||||
}
|
||||
}
|
@ -1,7 +1,5 @@
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:curl_parser/curl_parser.dart';
|
||||
import '../consts.dart';
|
||||
import '../models/models.dart';
|
||||
import '../utils/utils.dart';
|
||||
|
||||
class CurlIO {
|
||||
List<HttpRequestModel>? getHttpRequestModelList(String content) {
|
||||
|
@ -1,9 +1,9 @@
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:insomnia_collection/insomnia_collection.dart';
|
||||
import 'package:seed/seed.dart';
|
||||
import '../consts.dart';
|
||||
import '../models/models.dart';
|
||||
import '../utils/utils.dart';
|
||||
|
||||
class InsomniaIO {
|
||||
List<(String?, HttpRequestModel)>? getHttpRequestModelList(String content) {
|
||||
|
@ -1,8 +1,5 @@
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:postman/postman.dart' as pm;
|
||||
import 'package:seed/seed.dart';
|
||||
import '../consts.dart';
|
||||
import '../models/models.dart';
|
||||
import '../utils/utils.dart';
|
||||
|
||||
class PostmanIO {
|
||||
List<(String?, HttpRequestModel)>? getHttpRequestModelList(String content) {
|
||||
|
@ -1,71 +0,0 @@
|
||||
import 'dart:convert';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:seed/seed.dart';
|
||||
import '../extensions/extensions.dart';
|
||||
import '../utils/utils.dart'
|
||||
show rowsToFormDataMapList, rowsToMap, getEnabledRows;
|
||||
import '../consts.dart';
|
||||
|
||||
part 'http_request_model.freezed.dart';
|
||||
part 'http_request_model.g.dart';
|
||||
|
||||
@freezed
|
||||
class HttpRequestModel with _$HttpRequestModel {
|
||||
const HttpRequestModel._();
|
||||
|
||||
@JsonSerializable(
|
||||
explicitToJson: true,
|
||||
anyMap: true,
|
||||
)
|
||||
const factory HttpRequestModel({
|
||||
@Default(HTTPVerb.get) HTTPVerb method,
|
||||
@Default("") String url,
|
||||
List<NameValueModel>? headers,
|
||||
List<NameValueModel>? params,
|
||||
List<bool>? isHeaderEnabledList,
|
||||
List<bool>? isParamEnabledList,
|
||||
@Default(ContentType.json) ContentType bodyContentType,
|
||||
String? body,
|
||||
String? query,
|
||||
List<FormDataModel>? formData,
|
||||
}) = _HttpRequestModel;
|
||||
|
||||
factory HttpRequestModel.fromJson(Map<String, Object?> json) =>
|
||||
_$HttpRequestModelFromJson(json);
|
||||
|
||||
Map<String, String> get headersMap => rowsToMap(headers) ?? {};
|
||||
Map<String, String> get paramsMap => rowsToMap(params) ?? {};
|
||||
List<NameValueModel>? get enabledHeaders =>
|
||||
getEnabledRows(headers, isHeaderEnabledList);
|
||||
List<NameValueModel>? get enabledParams =>
|
||||
getEnabledRows(params, isParamEnabledList);
|
||||
|
||||
Map<String, String> get enabledHeadersMap => rowsToMap(enabledHeaders) ?? {};
|
||||
Map<String, String> get enabledParamsMap => rowsToMap(enabledParams) ?? {};
|
||||
|
||||
bool get hasContentTypeHeader => enabledHeadersMap.hasKeyContentType();
|
||||
bool get hasFormDataContentType => bodyContentType == ContentType.formdata;
|
||||
bool get hasJsonContentType => bodyContentType == ContentType.json;
|
||||
bool get hasTextContentType => bodyContentType == ContentType.text;
|
||||
int get contentLength => utf8.encode(body ?? "").length;
|
||||
bool get hasBody => hasJsonData || hasTextData || hasFormData;
|
||||
bool get hasJsonData =>
|
||||
kMethodsWithBody.contains(method) &&
|
||||
hasJsonContentType &&
|
||||
contentLength > 0;
|
||||
bool get hasTextData =>
|
||||
kMethodsWithBody.contains(method) &&
|
||||
hasTextContentType &&
|
||||
contentLength > 0;
|
||||
bool get hasFormData =>
|
||||
kMethodsWithBody.contains(method) &&
|
||||
hasFormDataContentType &&
|
||||
formDataMapList.isNotEmpty;
|
||||
bool get hasQuery => query?.isNotEmpty ?? false;
|
||||
List<FormDataModel> get formDataList => formData ?? <FormDataModel>[];
|
||||
List<Map<String, String>> get formDataMapList =>
|
||||
rowsToFormDataMapList(formDataList) ?? [];
|
||||
bool get hasFileInFormData => formDataList
|
||||
.map((e) => e.type == FormDataType.file)
|
||||
.any((element) => element);
|
||||
}
|
@ -1,415 +0,0 @@
|
||||
// coverage:ignore-file
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'http_request_model.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
T _$identity<T>(T value) => value;
|
||||
|
||||
final _privateConstructorUsedError = UnsupportedError(
|
||||
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models');
|
||||
|
||||
HttpRequestModel _$HttpRequestModelFromJson(Map<String, dynamic> json) {
|
||||
return _HttpRequestModel.fromJson(json);
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$HttpRequestModel {
|
||||
HTTPVerb get method => throw _privateConstructorUsedError;
|
||||
String get url => throw _privateConstructorUsedError;
|
||||
List<NameValueModel>? get headers => throw _privateConstructorUsedError;
|
||||
List<NameValueModel>? get params => throw _privateConstructorUsedError;
|
||||
List<bool>? get isHeaderEnabledList => throw _privateConstructorUsedError;
|
||||
List<bool>? get isParamEnabledList => throw _privateConstructorUsedError;
|
||||
ContentType get bodyContentType => throw _privateConstructorUsedError;
|
||||
String? get body => throw _privateConstructorUsedError;
|
||||
String? get query => throw _privateConstructorUsedError;
|
||||
List<FormDataModel>? get formData => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this HttpRequestModel to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of HttpRequestModel
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$HttpRequestModelCopyWith<HttpRequestModel> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class $HttpRequestModelCopyWith<$Res> {
|
||||
factory $HttpRequestModelCopyWith(
|
||||
HttpRequestModel value, $Res Function(HttpRequestModel) then) =
|
||||
_$HttpRequestModelCopyWithImpl<$Res, HttpRequestModel>;
|
||||
@useResult
|
||||
$Res call(
|
||||
{HTTPVerb method,
|
||||
String url,
|
||||
List<NameValueModel>? headers,
|
||||
List<NameValueModel>? params,
|
||||
List<bool>? isHeaderEnabledList,
|
||||
List<bool>? isParamEnabledList,
|
||||
ContentType bodyContentType,
|
||||
String? body,
|
||||
String? query,
|
||||
List<FormDataModel>? formData});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class _$HttpRequestModelCopyWithImpl<$Res, $Val extends HttpRequestModel>
|
||||
implements $HttpRequestModelCopyWith<$Res> {
|
||||
_$HttpRequestModelCopyWithImpl(this._value, this._then);
|
||||
|
||||
// ignore: unused_field
|
||||
final $Val _value;
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of HttpRequestModel
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? method = null,
|
||||
Object? url = null,
|
||||
Object? headers = freezed,
|
||||
Object? params = freezed,
|
||||
Object? isHeaderEnabledList = freezed,
|
||||
Object? isParamEnabledList = freezed,
|
||||
Object? bodyContentType = null,
|
||||
Object? body = freezed,
|
||||
Object? query = freezed,
|
||||
Object? formData = freezed,
|
||||
}) {
|
||||
return _then(_value.copyWith(
|
||||
method: null == method
|
||||
? _value.method
|
||||
: method // ignore: cast_nullable_to_non_nullable
|
||||
as HTTPVerb,
|
||||
url: null == url
|
||||
? _value.url
|
||||
: url // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
headers: freezed == headers
|
||||
? _value.headers
|
||||
: headers // ignore: cast_nullable_to_non_nullable
|
||||
as List<NameValueModel>?,
|
||||
params: freezed == params
|
||||
? _value.params
|
||||
: params // ignore: cast_nullable_to_non_nullable
|
||||
as List<NameValueModel>?,
|
||||
isHeaderEnabledList: freezed == isHeaderEnabledList
|
||||
? _value.isHeaderEnabledList
|
||||
: isHeaderEnabledList // ignore: cast_nullable_to_non_nullable
|
||||
as List<bool>?,
|
||||
isParamEnabledList: freezed == isParamEnabledList
|
||||
? _value.isParamEnabledList
|
||||
: isParamEnabledList // ignore: cast_nullable_to_non_nullable
|
||||
as List<bool>?,
|
||||
bodyContentType: null == bodyContentType
|
||||
? _value.bodyContentType
|
||||
: bodyContentType // ignore: cast_nullable_to_non_nullable
|
||||
as ContentType,
|
||||
body: freezed == body
|
||||
? _value.body
|
||||
: body // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
query: freezed == query
|
||||
? _value.query
|
||||
: query // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
formData: freezed == formData
|
||||
? _value.formData
|
||||
: formData // ignore: cast_nullable_to_non_nullable
|
||||
as List<FormDataModel>?,
|
||||
) as $Val);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$HttpRequestModelImplCopyWith<$Res>
|
||||
implements $HttpRequestModelCopyWith<$Res> {
|
||||
factory _$$HttpRequestModelImplCopyWith(_$HttpRequestModelImpl value,
|
||||
$Res Function(_$HttpRequestModelImpl) then) =
|
||||
__$$HttpRequestModelImplCopyWithImpl<$Res>;
|
||||
@override
|
||||
@useResult
|
||||
$Res call(
|
||||
{HTTPVerb method,
|
||||
String url,
|
||||
List<NameValueModel>? headers,
|
||||
List<NameValueModel>? params,
|
||||
List<bool>? isHeaderEnabledList,
|
||||
List<bool>? isParamEnabledList,
|
||||
ContentType bodyContentType,
|
||||
String? body,
|
||||
String? query,
|
||||
List<FormDataModel>? formData});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$HttpRequestModelImplCopyWithImpl<$Res>
|
||||
extends _$HttpRequestModelCopyWithImpl<$Res, _$HttpRequestModelImpl>
|
||||
implements _$$HttpRequestModelImplCopyWith<$Res> {
|
||||
__$$HttpRequestModelImplCopyWithImpl(_$HttpRequestModelImpl _value,
|
||||
$Res Function(_$HttpRequestModelImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of HttpRequestModel
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? method = null,
|
||||
Object? url = null,
|
||||
Object? headers = freezed,
|
||||
Object? params = freezed,
|
||||
Object? isHeaderEnabledList = freezed,
|
||||
Object? isParamEnabledList = freezed,
|
||||
Object? bodyContentType = null,
|
||||
Object? body = freezed,
|
||||
Object? query = freezed,
|
||||
Object? formData = freezed,
|
||||
}) {
|
||||
return _then(_$HttpRequestModelImpl(
|
||||
method: null == method
|
||||
? _value.method
|
||||
: method // ignore: cast_nullable_to_non_nullable
|
||||
as HTTPVerb,
|
||||
url: null == url
|
||||
? _value.url
|
||||
: url // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
headers: freezed == headers
|
||||
? _value._headers
|
||||
: headers // ignore: cast_nullable_to_non_nullable
|
||||
as List<NameValueModel>?,
|
||||
params: freezed == params
|
||||
? _value._params
|
||||
: params // ignore: cast_nullable_to_non_nullable
|
||||
as List<NameValueModel>?,
|
||||
isHeaderEnabledList: freezed == isHeaderEnabledList
|
||||
? _value._isHeaderEnabledList
|
||||
: isHeaderEnabledList // ignore: cast_nullable_to_non_nullable
|
||||
as List<bool>?,
|
||||
isParamEnabledList: freezed == isParamEnabledList
|
||||
? _value._isParamEnabledList
|
||||
: isParamEnabledList // ignore: cast_nullable_to_non_nullable
|
||||
as List<bool>?,
|
||||
bodyContentType: null == bodyContentType
|
||||
? _value.bodyContentType
|
||||
: bodyContentType // ignore: cast_nullable_to_non_nullable
|
||||
as ContentType,
|
||||
body: freezed == body
|
||||
? _value.body
|
||||
: body // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
query: freezed == query
|
||||
? _value.query
|
||||
: query // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
formData: freezed == formData
|
||||
? _value._formData
|
||||
: formData // ignore: cast_nullable_to_non_nullable
|
||||
as List<FormDataModel>?,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
@JsonSerializable(explicitToJson: true, anyMap: true)
|
||||
class _$HttpRequestModelImpl extends _HttpRequestModel {
|
||||
const _$HttpRequestModelImpl(
|
||||
{this.method = HTTPVerb.get,
|
||||
this.url = "",
|
||||
final List<NameValueModel>? headers,
|
||||
final List<NameValueModel>? params,
|
||||
final List<bool>? isHeaderEnabledList,
|
||||
final List<bool>? isParamEnabledList,
|
||||
this.bodyContentType = ContentType.json,
|
||||
this.body,
|
||||
this.query,
|
||||
final List<FormDataModel>? formData})
|
||||
: _headers = headers,
|
||||
_params = params,
|
||||
_isHeaderEnabledList = isHeaderEnabledList,
|
||||
_isParamEnabledList = isParamEnabledList,
|
||||
_formData = formData,
|
||||
super._();
|
||||
|
||||
factory _$HttpRequestModelImpl.fromJson(Map<String, dynamic> json) =>
|
||||
_$$HttpRequestModelImplFromJson(json);
|
||||
|
||||
@override
|
||||
@JsonKey()
|
||||
final HTTPVerb method;
|
||||
@override
|
||||
@JsonKey()
|
||||
final String url;
|
||||
final List<NameValueModel>? _headers;
|
||||
@override
|
||||
List<NameValueModel>? get headers {
|
||||
final value = _headers;
|
||||
if (value == null) return null;
|
||||
if (_headers is EqualUnmodifiableListView) return _headers;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableListView(value);
|
||||
}
|
||||
|
||||
final List<NameValueModel>? _params;
|
||||
@override
|
||||
List<NameValueModel>? get params {
|
||||
final value = _params;
|
||||
if (value == null) return null;
|
||||
if (_params is EqualUnmodifiableListView) return _params;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableListView(value);
|
||||
}
|
||||
|
||||
final List<bool>? _isHeaderEnabledList;
|
||||
@override
|
||||
List<bool>? get isHeaderEnabledList {
|
||||
final value = _isHeaderEnabledList;
|
||||
if (value == null) return null;
|
||||
if (_isHeaderEnabledList is EqualUnmodifiableListView)
|
||||
return _isHeaderEnabledList;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableListView(value);
|
||||
}
|
||||
|
||||
final List<bool>? _isParamEnabledList;
|
||||
@override
|
||||
List<bool>? get isParamEnabledList {
|
||||
final value = _isParamEnabledList;
|
||||
if (value == null) return null;
|
||||
if (_isParamEnabledList is EqualUnmodifiableListView)
|
||||
return _isParamEnabledList;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableListView(value);
|
||||
}
|
||||
|
||||
@override
|
||||
@JsonKey()
|
||||
final ContentType bodyContentType;
|
||||
@override
|
||||
final String? body;
|
||||
@override
|
||||
final String? query;
|
||||
final List<FormDataModel>? _formData;
|
||||
@override
|
||||
List<FormDataModel>? get formData {
|
||||
final value = _formData;
|
||||
if (value == null) return null;
|
||||
if (_formData is EqualUnmodifiableListView) return _formData;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableListView(value);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'HttpRequestModel(method: $method, url: $url, headers: $headers, params: $params, isHeaderEnabledList: $isHeaderEnabledList, isParamEnabledList: $isParamEnabledList, bodyContentType: $bodyContentType, body: $body, query: $query, formData: $formData)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$HttpRequestModelImpl &&
|
||||
(identical(other.method, method) || other.method == method) &&
|
||||
(identical(other.url, url) || other.url == url) &&
|
||||
const DeepCollectionEquality().equals(other._headers, _headers) &&
|
||||
const DeepCollectionEquality().equals(other._params, _params) &&
|
||||
const DeepCollectionEquality()
|
||||
.equals(other._isHeaderEnabledList, _isHeaderEnabledList) &&
|
||||
const DeepCollectionEquality()
|
||||
.equals(other._isParamEnabledList, _isParamEnabledList) &&
|
||||
(identical(other.bodyContentType, bodyContentType) ||
|
||||
other.bodyContentType == bodyContentType) &&
|
||||
(identical(other.body, body) || other.body == body) &&
|
||||
(identical(other.query, query) || other.query == query) &&
|
||||
const DeepCollectionEquality().equals(other._formData, _formData));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType,
|
||||
method,
|
||||
url,
|
||||
const DeepCollectionEquality().hash(_headers),
|
||||
const DeepCollectionEquality().hash(_params),
|
||||
const DeepCollectionEquality().hash(_isHeaderEnabledList),
|
||||
const DeepCollectionEquality().hash(_isParamEnabledList),
|
||||
bodyContentType,
|
||||
body,
|
||||
query,
|
||||
const DeepCollectionEquality().hash(_formData));
|
||||
|
||||
/// Create a copy of HttpRequestModel
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$HttpRequestModelImplCopyWith<_$HttpRequestModelImpl> get copyWith =>
|
||||
__$$HttpRequestModelImplCopyWithImpl<_$HttpRequestModelImpl>(
|
||||
this, _$identity);
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
return _$$HttpRequestModelImplToJson(
|
||||
this,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _HttpRequestModel extends HttpRequestModel {
|
||||
const factory _HttpRequestModel(
|
||||
{final HTTPVerb method,
|
||||
final String url,
|
||||
final List<NameValueModel>? headers,
|
||||
final List<NameValueModel>? params,
|
||||
final List<bool>? isHeaderEnabledList,
|
||||
final List<bool>? isParamEnabledList,
|
||||
final ContentType bodyContentType,
|
||||
final String? body,
|
||||
final String? query,
|
||||
final List<FormDataModel>? formData}) = _$HttpRequestModelImpl;
|
||||
const _HttpRequestModel._() : super._();
|
||||
|
||||
factory _HttpRequestModel.fromJson(Map<String, dynamic> json) =
|
||||
_$HttpRequestModelImpl.fromJson;
|
||||
|
||||
@override
|
||||
HTTPVerb get method;
|
||||
@override
|
||||
String get url;
|
||||
@override
|
||||
List<NameValueModel>? get headers;
|
||||
@override
|
||||
List<NameValueModel>? get params;
|
||||
@override
|
||||
List<bool>? get isHeaderEnabledList;
|
||||
@override
|
||||
List<bool>? get isParamEnabledList;
|
||||
@override
|
||||
ContentType get bodyContentType;
|
||||
@override
|
||||
String? get body;
|
||||
@override
|
||||
String? get query;
|
||||
@override
|
||||
List<FormDataModel>? get formData;
|
||||
|
||||
/// Create a copy of HttpRequestModel
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$HttpRequestModelImplCopyWith<_$HttpRequestModelImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'http_request_model.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
_$HttpRequestModelImpl _$$HttpRequestModelImplFromJson(Map json) =>
|
||||
_$HttpRequestModelImpl(
|
||||
method: $enumDecodeNullable(_$HTTPVerbEnumMap, json['method']) ??
|
||||
HTTPVerb.get,
|
||||
url: json['url'] as String? ?? "",
|
||||
headers: (json['headers'] as List<dynamic>?)
|
||||
?.map((e) =>
|
||||
NameValueModel.fromJson(Map<String, Object?>.from(e as Map)))
|
||||
.toList(),
|
||||
params: (json['params'] as List<dynamic>?)
|
||||
?.map((e) =>
|
||||
NameValueModel.fromJson(Map<String, Object?>.from(e as Map)))
|
||||
.toList(),
|
||||
isHeaderEnabledList: (json['isHeaderEnabledList'] as List<dynamic>?)
|
||||
?.map((e) => e as bool)
|
||||
.toList(),
|
||||
isParamEnabledList: (json['isParamEnabledList'] as List<dynamic>?)
|
||||
?.map((e) => e as bool)
|
||||
.toList(),
|
||||
bodyContentType:
|
||||
$enumDecodeNullable(_$ContentTypeEnumMap, json['bodyContentType']) ??
|
||||
ContentType.json,
|
||||
body: json['body'] as String?,
|
||||
query: json['query'] as String?,
|
||||
formData: (json['formData'] as List<dynamic>?)
|
||||
?.map((e) =>
|
||||
FormDataModel.fromJson(Map<String, Object?>.from(e as Map)))
|
||||
.toList(),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$$HttpRequestModelImplToJson(
|
||||
_$HttpRequestModelImpl instance) =>
|
||||
<String, dynamic>{
|
||||
'method': _$HTTPVerbEnumMap[instance.method]!,
|
||||
'url': instance.url,
|
||||
'headers': instance.headers?.map((e) => e.toJson()).toList(),
|
||||
'params': instance.params?.map((e) => e.toJson()).toList(),
|
||||
'isHeaderEnabledList': instance.isHeaderEnabledList,
|
||||
'isParamEnabledList': instance.isParamEnabledList,
|
||||
'bodyContentType': _$ContentTypeEnumMap[instance.bodyContentType]!,
|
||||
'body': instance.body,
|
||||
'query': instance.query,
|
||||
'formData': instance.formData?.map((e) => e.toJson()).toList(),
|
||||
};
|
||||
|
||||
const _$HTTPVerbEnumMap = {
|
||||
HTTPVerb.get: 'get',
|
||||
HTTPVerb.head: 'head',
|
||||
HTTPVerb.post: 'post',
|
||||
HTTPVerb.put: 'put',
|
||||
HTTPVerb.patch: 'patch',
|
||||
HTTPVerb.delete: 'delete',
|
||||
HTTPVerb.options: 'options',
|
||||
};
|
||||
|
||||
const _$ContentTypeEnumMap = {
|
||||
ContentType.json: 'json',
|
||||
ContentType.text: 'text',
|
||||
ContentType.formdata: 'formdata',
|
||||
};
|
@ -1,88 +0,0 @@
|
||||
import 'dart:io';
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:collection/collection.dart' show mergeMaps;
|
||||
import 'package:http/http.dart';
|
||||
import 'package:http_parser/http_parser.dart';
|
||||
import '../extensions/extensions.dart';
|
||||
import '../utils/utils.dart';
|
||||
import '../consts.dart';
|
||||
|
||||
part 'http_response_model.freezed.dart';
|
||||
part 'http_response_model.g.dart';
|
||||
|
||||
class Uint8ListConverter implements JsonConverter<Uint8List?, List<int>?> {
|
||||
const Uint8ListConverter();
|
||||
|
||||
@override
|
||||
Uint8List? fromJson(List<int>? json) {
|
||||
return json == null ? null : Uint8List.fromList(json);
|
||||
}
|
||||
|
||||
@override
|
||||
List<int>? toJson(Uint8List? object) {
|
||||
return object?.toList();
|
||||
}
|
||||
}
|
||||
|
||||
class DurationConverter implements JsonConverter<Duration?, int?> {
|
||||
const DurationConverter();
|
||||
|
||||
@override
|
||||
Duration? fromJson(int? json) {
|
||||
return json == null ? null : Duration(microseconds: json);
|
||||
}
|
||||
|
||||
@override
|
||||
int? toJson(Duration? object) {
|
||||
return object?.inMicroseconds;
|
||||
}
|
||||
}
|
||||
|
||||
@freezed
|
||||
class HttpResponseModel with _$HttpResponseModel {
|
||||
const HttpResponseModel._();
|
||||
|
||||
@JsonSerializable(
|
||||
explicitToJson: true,
|
||||
anyMap: true,
|
||||
)
|
||||
const factory HttpResponseModel({
|
||||
int? statusCode,
|
||||
Map<String, String>? headers,
|
||||
Map<String, String>? requestHeaders,
|
||||
String? body,
|
||||
String? formattedBody,
|
||||
@Uint8ListConverter() Uint8List? bodyBytes,
|
||||
@DurationConverter() Duration? time,
|
||||
}) = _HttpResponseModel;
|
||||
|
||||
factory HttpResponseModel.fromJson(Map<String, Object?> json) =>
|
||||
_$HttpResponseModelFromJson(json);
|
||||
|
||||
String? get contentType => headers?.getValueContentType();
|
||||
MediaType? get mediaType => getMediaTypeFromHeaders(headers);
|
||||
|
||||
HttpResponseModel fromResponse({
|
||||
required Response response,
|
||||
Duration? time,
|
||||
}) {
|
||||
final responseHeaders = mergeMaps(
|
||||
{HttpHeaders.contentLengthHeader: response.contentLength.toString()},
|
||||
response.headers);
|
||||
MediaType? mediaType = getMediaTypeFromHeaders(responseHeaders);
|
||||
final body = (mediaType?.subtype == kSubTypeJson)
|
||||
? utf8.decode(response.bodyBytes)
|
||||
: response.body;
|
||||
return HttpResponseModel(
|
||||
statusCode: response.statusCode,
|
||||
headers: responseHeaders,
|
||||
requestHeaders: response.request?.headers,
|
||||
body: body,
|
||||
formattedBody: formatBody(body, mediaType),
|
||||
bodyBytes: response.bodyBytes,
|
||||
time: time,
|
||||
);
|
||||
}
|
||||
}
|
@ -1,327 +0,0 @@
|
||||
// coverage:ignore-file
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'http_response_model.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
T _$identity<T>(T value) => value;
|
||||
|
||||
final _privateConstructorUsedError = UnsupportedError(
|
||||
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models');
|
||||
|
||||
HttpResponseModel _$HttpResponseModelFromJson(Map<String, dynamic> json) {
|
||||
return _HttpResponseModel.fromJson(json);
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$HttpResponseModel {
|
||||
int? get statusCode => throw _privateConstructorUsedError;
|
||||
Map<String, String>? get headers => throw _privateConstructorUsedError;
|
||||
Map<String, String>? get requestHeaders => throw _privateConstructorUsedError;
|
||||
String? get body => throw _privateConstructorUsedError;
|
||||
String? get formattedBody => throw _privateConstructorUsedError;
|
||||
@Uint8ListConverter()
|
||||
Uint8List? get bodyBytes => throw _privateConstructorUsedError;
|
||||
@DurationConverter()
|
||||
Duration? get time => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this HttpResponseModel to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of HttpResponseModel
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$HttpResponseModelCopyWith<HttpResponseModel> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class $HttpResponseModelCopyWith<$Res> {
|
||||
factory $HttpResponseModelCopyWith(
|
||||
HttpResponseModel value, $Res Function(HttpResponseModel) then) =
|
||||
_$HttpResponseModelCopyWithImpl<$Res, HttpResponseModel>;
|
||||
@useResult
|
||||
$Res call(
|
||||
{int? statusCode,
|
||||
Map<String, String>? headers,
|
||||
Map<String, String>? requestHeaders,
|
||||
String? body,
|
||||
String? formattedBody,
|
||||
@Uint8ListConverter() Uint8List? bodyBytes,
|
||||
@DurationConverter() Duration? time});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class _$HttpResponseModelCopyWithImpl<$Res, $Val extends HttpResponseModel>
|
||||
implements $HttpResponseModelCopyWith<$Res> {
|
||||
_$HttpResponseModelCopyWithImpl(this._value, this._then);
|
||||
|
||||
// ignore: unused_field
|
||||
final $Val _value;
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of HttpResponseModel
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? statusCode = freezed,
|
||||
Object? headers = freezed,
|
||||
Object? requestHeaders = freezed,
|
||||
Object? body = freezed,
|
||||
Object? formattedBody = freezed,
|
||||
Object? bodyBytes = freezed,
|
||||
Object? time = freezed,
|
||||
}) {
|
||||
return _then(_value.copyWith(
|
||||
statusCode: freezed == statusCode
|
||||
? _value.statusCode
|
||||
: statusCode // ignore: cast_nullable_to_non_nullable
|
||||
as int?,
|
||||
headers: freezed == headers
|
||||
? _value.headers
|
||||
: headers // ignore: cast_nullable_to_non_nullable
|
||||
as Map<String, String>?,
|
||||
requestHeaders: freezed == requestHeaders
|
||||
? _value.requestHeaders
|
||||
: requestHeaders // ignore: cast_nullable_to_non_nullable
|
||||
as Map<String, String>?,
|
||||
body: freezed == body
|
||||
? _value.body
|
||||
: body // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
formattedBody: freezed == formattedBody
|
||||
? _value.formattedBody
|
||||
: formattedBody // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
bodyBytes: freezed == bodyBytes
|
||||
? _value.bodyBytes
|
||||
: bodyBytes // ignore: cast_nullable_to_non_nullable
|
||||
as Uint8List?,
|
||||
time: freezed == time
|
||||
? _value.time
|
||||
: time // ignore: cast_nullable_to_non_nullable
|
||||
as Duration?,
|
||||
) as $Val);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$HttpResponseModelImplCopyWith<$Res>
|
||||
implements $HttpResponseModelCopyWith<$Res> {
|
||||
factory _$$HttpResponseModelImplCopyWith(_$HttpResponseModelImpl value,
|
||||
$Res Function(_$HttpResponseModelImpl) then) =
|
||||
__$$HttpResponseModelImplCopyWithImpl<$Res>;
|
||||
@override
|
||||
@useResult
|
||||
$Res call(
|
||||
{int? statusCode,
|
||||
Map<String, String>? headers,
|
||||
Map<String, String>? requestHeaders,
|
||||
String? body,
|
||||
String? formattedBody,
|
||||
@Uint8ListConverter() Uint8List? bodyBytes,
|
||||
@DurationConverter() Duration? time});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$HttpResponseModelImplCopyWithImpl<$Res>
|
||||
extends _$HttpResponseModelCopyWithImpl<$Res, _$HttpResponseModelImpl>
|
||||
implements _$$HttpResponseModelImplCopyWith<$Res> {
|
||||
__$$HttpResponseModelImplCopyWithImpl(_$HttpResponseModelImpl _value,
|
||||
$Res Function(_$HttpResponseModelImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of HttpResponseModel
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? statusCode = freezed,
|
||||
Object? headers = freezed,
|
||||
Object? requestHeaders = freezed,
|
||||
Object? body = freezed,
|
||||
Object? formattedBody = freezed,
|
||||
Object? bodyBytes = freezed,
|
||||
Object? time = freezed,
|
||||
}) {
|
||||
return _then(_$HttpResponseModelImpl(
|
||||
statusCode: freezed == statusCode
|
||||
? _value.statusCode
|
||||
: statusCode // ignore: cast_nullable_to_non_nullable
|
||||
as int?,
|
||||
headers: freezed == headers
|
||||
? _value._headers
|
||||
: headers // ignore: cast_nullable_to_non_nullable
|
||||
as Map<String, String>?,
|
||||
requestHeaders: freezed == requestHeaders
|
||||
? _value._requestHeaders
|
||||
: requestHeaders // ignore: cast_nullable_to_non_nullable
|
||||
as Map<String, String>?,
|
||||
body: freezed == body
|
||||
? _value.body
|
||||
: body // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
formattedBody: freezed == formattedBody
|
||||
? _value.formattedBody
|
||||
: formattedBody // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
bodyBytes: freezed == bodyBytes
|
||||
? _value.bodyBytes
|
||||
: bodyBytes // ignore: cast_nullable_to_non_nullable
|
||||
as Uint8List?,
|
||||
time: freezed == time
|
||||
? _value.time
|
||||
: time // ignore: cast_nullable_to_non_nullable
|
||||
as Duration?,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
@JsonSerializable(explicitToJson: true, anyMap: true)
|
||||
class _$HttpResponseModelImpl extends _HttpResponseModel {
|
||||
const _$HttpResponseModelImpl(
|
||||
{this.statusCode,
|
||||
final Map<String, String>? headers,
|
||||
final Map<String, String>? requestHeaders,
|
||||
this.body,
|
||||
this.formattedBody,
|
||||
@Uint8ListConverter() this.bodyBytes,
|
||||
@DurationConverter() this.time})
|
||||
: _headers = headers,
|
||||
_requestHeaders = requestHeaders,
|
||||
super._();
|
||||
|
||||
factory _$HttpResponseModelImpl.fromJson(Map<String, dynamic> json) =>
|
||||
_$$HttpResponseModelImplFromJson(json);
|
||||
|
||||
@override
|
||||
final int? statusCode;
|
||||
final Map<String, String>? _headers;
|
||||
@override
|
||||
Map<String, String>? get headers {
|
||||
final value = _headers;
|
||||
if (value == null) return null;
|
||||
if (_headers is EqualUnmodifiableMapView) return _headers;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableMapView(value);
|
||||
}
|
||||
|
||||
final Map<String, String>? _requestHeaders;
|
||||
@override
|
||||
Map<String, String>? get requestHeaders {
|
||||
final value = _requestHeaders;
|
||||
if (value == null) return null;
|
||||
if (_requestHeaders is EqualUnmodifiableMapView) return _requestHeaders;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableMapView(value);
|
||||
}
|
||||
|
||||
@override
|
||||
final String? body;
|
||||
@override
|
||||
final String? formattedBody;
|
||||
@override
|
||||
@Uint8ListConverter()
|
||||
final Uint8List? bodyBytes;
|
||||
@override
|
||||
@DurationConverter()
|
||||
final Duration? time;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'HttpResponseModel(statusCode: $statusCode, headers: $headers, requestHeaders: $requestHeaders, body: $body, formattedBody: $formattedBody, bodyBytes: $bodyBytes, time: $time)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$HttpResponseModelImpl &&
|
||||
(identical(other.statusCode, statusCode) ||
|
||||
other.statusCode == statusCode) &&
|
||||
const DeepCollectionEquality().equals(other._headers, _headers) &&
|
||||
const DeepCollectionEquality()
|
||||
.equals(other._requestHeaders, _requestHeaders) &&
|
||||
(identical(other.body, body) || other.body == body) &&
|
||||
(identical(other.formattedBody, formattedBody) ||
|
||||
other.formattedBody == formattedBody) &&
|
||||
const DeepCollectionEquality().equals(other.bodyBytes, bodyBytes) &&
|
||||
(identical(other.time, time) || other.time == time));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType,
|
||||
statusCode,
|
||||
const DeepCollectionEquality().hash(_headers),
|
||||
const DeepCollectionEquality().hash(_requestHeaders),
|
||||
body,
|
||||
formattedBody,
|
||||
const DeepCollectionEquality().hash(bodyBytes),
|
||||
time);
|
||||
|
||||
/// Create a copy of HttpResponseModel
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$HttpResponseModelImplCopyWith<_$HttpResponseModelImpl> get copyWith =>
|
||||
__$$HttpResponseModelImplCopyWithImpl<_$HttpResponseModelImpl>(
|
||||
this, _$identity);
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
return _$$HttpResponseModelImplToJson(
|
||||
this,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _HttpResponseModel extends HttpResponseModel {
|
||||
const factory _HttpResponseModel(
|
||||
{final int? statusCode,
|
||||
final Map<String, String>? headers,
|
||||
final Map<String, String>? requestHeaders,
|
||||
final String? body,
|
||||
final String? formattedBody,
|
||||
@Uint8ListConverter() final Uint8List? bodyBytes,
|
||||
@DurationConverter() final Duration? time}) = _$HttpResponseModelImpl;
|
||||
const _HttpResponseModel._() : super._();
|
||||
|
||||
factory _HttpResponseModel.fromJson(Map<String, dynamic> json) =
|
||||
_$HttpResponseModelImpl.fromJson;
|
||||
|
||||
@override
|
||||
int? get statusCode;
|
||||
@override
|
||||
Map<String, String>? get headers;
|
||||
@override
|
||||
Map<String, String>? get requestHeaders;
|
||||
@override
|
||||
String? get body;
|
||||
@override
|
||||
String? get formattedBody;
|
||||
@override
|
||||
@Uint8ListConverter()
|
||||
Uint8List? get bodyBytes;
|
||||
@override
|
||||
@DurationConverter()
|
||||
Duration? get time;
|
||||
|
||||
/// Create a copy of HttpResponseModel
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$HttpResponseModelImplCopyWith<_$HttpResponseModelImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'http_response_model.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
_$HttpResponseModelImpl _$$HttpResponseModelImplFromJson(Map json) =>
|
||||
_$HttpResponseModelImpl(
|
||||
statusCode: (json['statusCode'] as num?)?.toInt(),
|
||||
headers: (json['headers'] as Map?)?.map(
|
||||
(k, e) => MapEntry(k as String, e as String),
|
||||
),
|
||||
requestHeaders: (json['requestHeaders'] as Map?)?.map(
|
||||
(k, e) => MapEntry(k as String, e as String),
|
||||
),
|
||||
body: json['body'] as String?,
|
||||
formattedBody: json['formattedBody'] as String?,
|
||||
bodyBytes:
|
||||
const Uint8ListConverter().fromJson(json['bodyBytes'] as List<int>?),
|
||||
time: const DurationConverter().fromJson((json['time'] as num?)?.toInt()),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$$HttpResponseModelImplToJson(
|
||||
_$HttpResponseModelImpl instance) =>
|
||||
<String, dynamic>{
|
||||
'statusCode': instance.statusCode,
|
||||
'headers': instance.headers,
|
||||
'requestHeaders': instance.requestHeaders,
|
||||
'body': instance.body,
|
||||
'formattedBody': instance.formattedBody,
|
||||
'bodyBytes': const Uint8ListConverter().toJson(instance.bodyBytes),
|
||||
'time': const DurationConverter().toJson(instance.time),
|
||||
};
|
@ -1,3 +1 @@
|
||||
export 'environment_model.dart';
|
||||
export 'http_request_model.dart';
|
||||
export 'http_response_model.dart';
|
||||
|
@ -1,65 +0,0 @@
|
||||
import 'dart:io';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:http/io_client.dart';
|
||||
|
||||
http.Client createHttpClientWithNoSSL() {
|
||||
var ioClient = HttpClient()
|
||||
..badCertificateCallback =
|
||||
(X509Certificate cert, String host, int port) => true;
|
||||
return IOClient(ioClient);
|
||||
}
|
||||
|
||||
class HttpClientManager {
|
||||
static final HttpClientManager _instance = HttpClientManager._internal();
|
||||
static const int _maxCancelledRequests = 100;
|
||||
final Map<String, http.Client> _clients = {};
|
||||
final Set<String> _cancelledRequests = {};
|
||||
|
||||
factory HttpClientManager() {
|
||||
return _instance;
|
||||
}
|
||||
|
||||
HttpClientManager._internal();
|
||||
|
||||
http.Client createClient(
|
||||
String requestId, {
|
||||
bool noSSL = false,
|
||||
}) {
|
||||
final client =
|
||||
(noSSL && !kIsWeb) ? createHttpClientWithNoSSL() : http.Client();
|
||||
_clients[requestId] = client;
|
||||
return client;
|
||||
}
|
||||
|
||||
void cancelRequest(String? requestId) {
|
||||
if (requestId != null && _clients.containsKey(requestId)) {
|
||||
_clients[requestId]?.close();
|
||||
_clients.remove(requestId);
|
||||
|
||||
_cancelledRequests.add(requestId);
|
||||
if (_cancelledRequests.length > _maxCancelledRequests) {
|
||||
_cancelledRequests.remove(_cancelledRequests.first);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool wasRequestCancelled(String requestId) {
|
||||
return _cancelledRequests.contains(requestId);
|
||||
}
|
||||
|
||||
void removeCancelledRequest(String requestId) {
|
||||
_cancelledRequests.remove(requestId);
|
||||
}
|
||||
|
||||
void closeClient(String requestId) {
|
||||
if (_clients.containsKey(requestId)) {
|
||||
_clients[requestId]?.close();
|
||||
_clients.remove(requestId);
|
||||
}
|
||||
}
|
||||
|
||||
bool hasActiveClient(String requestId) {
|
||||
return _clients.containsKey(requestId);
|
||||
}
|
||||
}
|
@ -1,169 +0,0 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:seed/seed.dart';
|
||||
import '../consts.dart';
|
||||
import '../extensions/extensions.dart';
|
||||
import '../models/models.dart';
|
||||
import '../utils/utils.dart';
|
||||
import 'http_client_manager.dart';
|
||||
|
||||
typedef HttpResponse = http.Response;
|
||||
|
||||
final httpClientManager = HttpClientManager();
|
||||
|
||||
Future<(HttpResponse?, Duration?, String?)> sendHttpRequest(
|
||||
String requestId,
|
||||
APIType apiType,
|
||||
HttpRequestModel requestModel, {
|
||||
SupportedUriSchemes defaultUriScheme = kDefaultUriScheme,
|
||||
bool noSSL = false,
|
||||
}) async {
|
||||
if (httpClientManager.wasRequestCancelled(requestId)) {
|
||||
httpClientManager.removeCancelledRequest(requestId);
|
||||
}
|
||||
final client = httpClientManager.createClient(requestId, noSSL: noSSL);
|
||||
|
||||
(Uri?, String?) uriRec = getValidRequestUri(
|
||||
requestModel.url,
|
||||
requestModel.enabledParams,
|
||||
defaultUriScheme: defaultUriScheme,
|
||||
);
|
||||
|
||||
if (uriRec.$1 != null) {
|
||||
Uri requestUrl = uriRec.$1!;
|
||||
Map<String, String> headers = requestModel.enabledHeadersMap;
|
||||
bool overrideContentType = false;
|
||||
HttpResponse? response;
|
||||
String? body;
|
||||
try {
|
||||
Stopwatch stopwatch = Stopwatch()..start();
|
||||
if (apiType == APIType.rest) {
|
||||
var isMultiPartRequest =
|
||||
requestModel.bodyContentType == ContentType.formdata;
|
||||
|
||||
if (kMethodsWithBody.contains(requestModel.method)) {
|
||||
var requestBody = requestModel.body;
|
||||
if (requestBody != null &&
|
||||
!isMultiPartRequest &&
|
||||
requestBody.isNotEmpty) {
|
||||
body = requestBody;
|
||||
if (requestModel.hasContentTypeHeader) {
|
||||
overrideContentType = true;
|
||||
} else {
|
||||
headers[HttpHeaders.contentTypeHeader] =
|
||||
requestModel.bodyContentType.header;
|
||||
}
|
||||
}
|
||||
if (isMultiPartRequest) {
|
||||
var multiPartRequest = http.MultipartRequest(
|
||||
requestModel.method.name.toUpperCase(),
|
||||
requestUrl,
|
||||
);
|
||||
multiPartRequest.headers.addAll(headers);
|
||||
for (var formData in requestModel.formDataList) {
|
||||
if (formData.type == FormDataType.text) {
|
||||
multiPartRequest.fields.addAll({formData.name: formData.value});
|
||||
} else {
|
||||
multiPartRequest.files.add(
|
||||
await http.MultipartFile.fromPath(
|
||||
formData.name,
|
||||
formData.value,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
http.StreamedResponse multiPartResponse =
|
||||
await client.send(multiPartRequest);
|
||||
|
||||
stopwatch.stop();
|
||||
http.Response convertedMultiPartResponse =
|
||||
await convertStreamedResponse(multiPartResponse);
|
||||
return (convertedMultiPartResponse, stopwatch.elapsed, null);
|
||||
}
|
||||
}
|
||||
switch (requestModel.method) {
|
||||
case HTTPVerb.get:
|
||||
response = await client.get(requestUrl, headers: headers);
|
||||
break;
|
||||
case HTTPVerb.head:
|
||||
response = await client.head(requestUrl, headers: headers);
|
||||
break;
|
||||
case HTTPVerb.post:
|
||||
case HTTPVerb.put:
|
||||
case HTTPVerb.patch:
|
||||
case HTTPVerb.delete:
|
||||
case HTTPVerb.options:
|
||||
final request = prepareHttpRequest(
|
||||
url: requestUrl,
|
||||
method: requestModel.method.name.toUpperCase(),
|
||||
headers: headers,
|
||||
body: body,
|
||||
overrideContentType: overrideContentType,
|
||||
);
|
||||
final streamed = await client.send(request);
|
||||
response = await http.Response.fromStream(streamed);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (apiType == APIType.graphql) {
|
||||
var requestBody = getGraphQLBody(requestModel);
|
||||
if (requestBody != null) {
|
||||
var contentLength = utf8.encode(requestBody).length;
|
||||
if (contentLength > 0) {
|
||||
body = requestBody;
|
||||
headers[HttpHeaders.contentLengthHeader] = contentLength.toString();
|
||||
if (!requestModel.hasContentTypeHeader) {
|
||||
headers[HttpHeaders.contentTypeHeader] = ContentType.json.header;
|
||||
}
|
||||
}
|
||||
}
|
||||
response = await client.post(
|
||||
requestUrl,
|
||||
headers: headers,
|
||||
body: body,
|
||||
);
|
||||
}
|
||||
stopwatch.stop();
|
||||
return (response, stopwatch.elapsed, null);
|
||||
} catch (e) {
|
||||
if (httpClientManager.wasRequestCancelled(requestId)) {
|
||||
return (null, null, kMsgRequestCancelled);
|
||||
}
|
||||
return (null, null, e.toString());
|
||||
} finally {
|
||||
httpClientManager.closeClient(requestId);
|
||||
}
|
||||
} else {
|
||||
return (null, null, uriRec.$2);
|
||||
}
|
||||
}
|
||||
|
||||
void cancelHttpRequest(String? requestId) {
|
||||
httpClientManager.cancelRequest(requestId);
|
||||
}
|
||||
|
||||
http.Request prepareHttpRequest({
|
||||
required Uri url,
|
||||
required String method,
|
||||
required Map<String, String> headers,
|
||||
required String? body,
|
||||
bool overrideContentType = false,
|
||||
}) {
|
||||
var request = http.Request(method, url);
|
||||
if (headers.getValueContentType() != null) {
|
||||
request.headers[HttpHeaders.contentTypeHeader] =
|
||||
headers.getValueContentType()!;
|
||||
if (!overrideContentType) {
|
||||
headers.removeKeyContentType();
|
||||
}
|
||||
}
|
||||
if (body != null) {
|
||||
request.body = body;
|
||||
headers[HttpHeaders.contentLengthHeader] =
|
||||
request.bodyBytes.length.toString();
|
||||
}
|
||||
request.headers.addAll(headers);
|
||||
return request;
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
export 'http_client_manager.dart';
|
||||
export 'http_service.dart';
|
@ -1,54 +0,0 @@
|
||||
import 'package:http_parser/http_parser.dart';
|
||||
import '../consts.dart';
|
||||
import '../extensions/extensions.dart';
|
||||
|
||||
ContentType? getContentTypeFromHeadersMap(
|
||||
Map<String, String>? kvMap,
|
||||
) {
|
||||
if (kvMap != null && kvMap.hasKeyContentType()) {
|
||||
var val = getMediaTypeFromHeaders(kvMap);
|
||||
return getContentTypeFromMediaType(val);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
MediaType? getMediaTypeFromHeaders(Map? headers) {
|
||||
var contentType = headers?.getValueContentType();
|
||||
MediaType? mediaType = getMediaTypeFromContentType(contentType);
|
||||
return mediaType;
|
||||
}
|
||||
|
||||
MediaType? getMediaTypeFromContentType(String? contentType) {
|
||||
if (contentType != null) {
|
||||
try {
|
||||
MediaType mediaType = MediaType.parse(contentType);
|
||||
return mediaType;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
ContentType? getContentTypeFromMediaType(MediaType? mediaType) {
|
||||
if (mediaType != null) {
|
||||
if (mediaType.subtype.contains(kSubTypeJson)) {
|
||||
return ContentType.json;
|
||||
} else if (mediaType.type == kTypeMultipart &&
|
||||
mediaType.subtype == kSubTypeFormData) {
|
||||
return ContentType.formdata;
|
||||
}
|
||||
return ContentType.text;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
ContentType? getContentTypeFromContentTypeStr(
|
||||
String? contentType,
|
||||
) {
|
||||
if (contentType != null) {
|
||||
var val = getMediaTypeFromContentType(contentType);
|
||||
return getContentTypeFromMediaType(val);
|
||||
}
|
||||
return null;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
import '../consts.dart';
|
||||
import '../models/models.dart';
|
||||
|
||||
String? getGraphQLBody(HttpRequestModel httpRequestModel) {
|
||||
if (httpRequestModel.hasQuery) {
|
||||
return kJsonEncoder.convert({
|
||||
"query": httpRequestModel.query,
|
||||
});
|
||||
}
|
||||
return null;
|
||||
}
|
@ -1,114 +0,0 @@
|
||||
import 'package:apidash_core/consts.dart';
|
||||
import 'package:seed/seed.dart';
|
||||
import '../models/models.dart';
|
||||
import 'graphql_utils.dart';
|
||||
import 'package:json5/json5.dart' as json5;
|
||||
|
||||
Map<String, String>? rowsToMap(
|
||||
List<NameValueModel>? kvRows, {
|
||||
bool isHeader = false,
|
||||
}) {
|
||||
if (kvRows == null) {
|
||||
return null;
|
||||
}
|
||||
Map<String, String> finalMap = {};
|
||||
for (var row in kvRows) {
|
||||
if (row.name.trim() != "") {
|
||||
String key = row.name;
|
||||
if (isHeader) {
|
||||
key = key.toLowerCase();
|
||||
}
|
||||
finalMap[key] = row.value.toString();
|
||||
}
|
||||
}
|
||||
return finalMap;
|
||||
}
|
||||
|
||||
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, String>>? rowsToFormDataMapList(
|
||||
List<FormDataModel>? kvRows,
|
||||
) {
|
||||
if (kvRows == null) {
|
||||
return null;
|
||||
}
|
||||
List<Map<String, String>> finalMap = kvRows
|
||||
.map((FormDataModel formData) =>
|
||||
(formData.name.trim().isEmpty && formData.value.trim().isEmpty)
|
||||
? null
|
||||
: {
|
||||
"name": formData.name,
|
||||
"value": formData.value,
|
||||
"type": formData.type.name,
|
||||
})
|
||||
.nonNulls
|
||||
.toList();
|
||||
return finalMap;
|
||||
}
|
||||
|
||||
List<FormDataModel>? mapListToFormDataModelRows(
|
||||
List<Map>? kvMap,
|
||||
) {
|
||||
if (kvMap == null) {
|
||||
return null;
|
||||
}
|
||||
List<FormDataModel> finalRows = kvMap.map(
|
||||
(formData) {
|
||||
return FormDataModel(
|
||||
name: formData["name"],
|
||||
value: formData["value"],
|
||||
type: getFormDataType(formData["type"]),
|
||||
);
|
||||
},
|
||||
).toList();
|
||||
return finalRows;
|
||||
}
|
||||
|
||||
FormDataType getFormDataType(String? type) {
|
||||
return FormDataType.values.firstWhere((element) => element.name == type,
|
||||
orElse: () => FormDataType.text);
|
||||
}
|
||||
|
||||
List<NameValueModel>? getEnabledRows(
|
||||
List<NameValueModel>? rows,
|
||||
List<bool>? isRowEnabledList,
|
||||
) {
|
||||
if (rows == null || isRowEnabledList == null) {
|
||||
return rows;
|
||||
}
|
||||
List<NameValueModel> finalRows =
|
||||
rows.where((element) => isRowEnabledList[rows.indexOf(element)]).toList();
|
||||
return finalRows == [] ? null : finalRows;
|
||||
}
|
||||
|
||||
String? getRequestBody(APIType type, HttpRequestModel httpRequestModel) {
|
||||
return switch (type) {
|
||||
APIType.rest =>
|
||||
(httpRequestModel.hasJsonData || httpRequestModel.hasTextData)
|
||||
? httpRequestModel.body
|
||||
: null,
|
||||
APIType.graphql => getGraphQLBody(httpRequestModel),
|
||||
};
|
||||
}
|
||||
|
||||
// TODO: Expose this function to remove JSON comments
|
||||
String? removeJsonComments(String? json) {
|
||||
try {
|
||||
if (json == null) return null;
|
||||
var parsed = json5.json5Decode(json);
|
||||
return kJsonEncoder.convert(parsed);
|
||||
} catch (e) {
|
||||
return json;
|
||||
}
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:http_parser/http_parser.dart';
|
||||
import 'package:xml/xml.dart';
|
||||
import '../consts.dart';
|
||||
|
||||
String? formatBody(String? body, MediaType? mediaType) {
|
||||
if (mediaType != null && body != null) {
|
||||
var subtype = mediaType.subtype;
|
||||
try {
|
||||
if (subtype.contains(kSubTypeJson)) {
|
||||
final tmp = jsonDecode(body);
|
||||
String result = kJsonEncoder.convert(tmp);
|
||||
return result;
|
||||
}
|
||||
if (subtype.contains(kSubTypeXml)) {
|
||||
final document = XmlDocument.parse(body);
|
||||
String result = document.toXmlString(pretty: true, indent: ' ');
|
||||
return result;
|
||||
}
|
||||
if (subtype == kSubTypeHtml) {
|
||||
var len = body.length;
|
||||
var lines = kSplitter.convert(body);
|
||||
var numOfLines = lines.length;
|
||||
if (numOfLines != 0 && len / numOfLines <= kCodeCharsPerLineLimit) {
|
||||
return body;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Future<http.Response> convertStreamedResponse(
|
||||
http.StreamedResponse streamedResponse,
|
||||
) async {
|
||||
Uint8List bodyBytes = await streamedResponse.stream.toBytes();
|
||||
|
||||
http.Response response = http.Response.bytes(
|
||||
bodyBytes,
|
||||
streamedResponse.statusCode,
|
||||
headers: streamedResponse.headers,
|
||||
persistentConnection: streamedResponse.persistentConnection,
|
||||
reasonPhrase: streamedResponse.reasonPhrase,
|
||||
request: streamedResponse.request,
|
||||
);
|
||||
|
||||
return response;
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
import 'package:collection/collection.dart' show mergeMaps;
|
||||
import 'package:seed/seed.dart';
|
||||
import '../consts.dart';
|
||||
import 'http_request_utils.dart';
|
||||
|
||||
(String?, bool) getUriScheme(Uri uri) {
|
||||
if (uri.hasScheme) {
|
||||
if (kSupportedUriSchemes.contains(uri.scheme.toLowerCase())) {
|
||||
return (uri.scheme, true);
|
||||
}
|
||||
return (uri.scheme, false);
|
||||
}
|
||||
return (null, false);
|
||||
}
|
||||
|
||||
String stripUriParams(Uri uri) {
|
||||
return "${uri.scheme}://${uri.authority}${uri.path}";
|
||||
}
|
||||
|
||||
String stripUrlParams(String url) {
|
||||
var idx = url.indexOf("?");
|
||||
return idx > 0 ? url.substring(0, idx) : url;
|
||||
}
|
||||
|
||||
(Uri?, String?) getValidRequestUri(
|
||||
String? url, List<NameValueModel>? requestParams,
|
||||
{SupportedUriSchemes defaultUriScheme = kDefaultUriScheme}) {
|
||||
url = url?.trim();
|
||||
if (url == null || url == "") {
|
||||
return (null, "URL is missing!");
|
||||
}
|
||||
|
||||
if (kLocalhostRegex.hasMatch(url) || kIPHostRegex.hasMatch(url)) {
|
||||
url = '${SupportedUriSchemes.http.name}://$url';
|
||||
}
|
||||
|
||||
Uri? uri = Uri.tryParse(url);
|
||||
if (uri == null) {
|
||||
return (null, "Check URL (malformed)");
|
||||
}
|
||||
(String?, bool) urlScheme = getUriScheme(uri);
|
||||
|
||||
if (urlScheme.$1 != null) {
|
||||
if (!urlScheme.$2) {
|
||||
return (null, "Unsupported URL Scheme (${urlScheme.$1})");
|
||||
}
|
||||
} else {
|
||||
url = "${defaultUriScheme.name}://$url";
|
||||
}
|
||||
|
||||
uri = Uri.parse(url);
|
||||
if (uri.hasFragment) {
|
||||
uri = uri.removeFragment();
|
||||
}
|
||||
|
||||
Map<String, String>? queryParams = rowsToMap(requestParams);
|
||||
if (queryParams != null && queryParams.isNotEmpty) {
|
||||
if (uri.hasQuery) {
|
||||
Map<String, String> urlQueryParams = uri.queryParameters;
|
||||
queryParams = mergeMaps(urlQueryParams, queryParams);
|
||||
}
|
||||
uri = uri.replace(queryParameters: queryParams);
|
||||
}
|
||||
return (uri, null);
|
||||
}
|
@ -1,6 +1 @@
|
||||
export 'content_type_utils.dart';
|
||||
export 'graphql_utils.dart';
|
||||
export 'http_request_utils.dart';
|
||||
export 'http_response_utils.dart';
|
||||
export 'string_utils.dart';
|
||||
export 'uri_utils.dart';
|
||||
|
@ -24,6 +24,8 @@ dependencies:
|
||||
path: ../postman
|
||||
seed: ^0.0.3
|
||||
xml: ^6.3.0
|
||||
better_networking:
|
||||
path: ../better_networking
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
@ -2,6 +2,6 @@
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
|
||||
void main() {}
|
||||
|
@ -1,129 +0,0 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
void main() {
|
||||
group('Testing MapExtensions', () {
|
||||
group('Testing hasKeyContentType()', () {
|
||||
test('Content-Type present should return true', () {
|
||||
Map<String, String> mapEx = {"Content-Type": "x", "Agent": "Test"};
|
||||
expect(mapEx.hasKeyContentType(), true);
|
||||
});
|
||||
|
||||
test('content-Type present should return true', () {
|
||||
Map<String, String> mapEx = {"content-Type": "x", "Agent": "Test"};
|
||||
expect(mapEx.hasKeyContentType(), true);
|
||||
});
|
||||
|
||||
test('empty should return false', () {
|
||||
Map<String, String> mapEx = {};
|
||||
expect(mapEx.hasKeyContentType(), false);
|
||||
});
|
||||
|
||||
test('No content-type present should return false', () {
|
||||
Map<String, String> mapEx = {"Agent": "Test"};
|
||||
expect(mapEx.hasKeyContentType(), false);
|
||||
});
|
||||
|
||||
test('Different datatype should return false', () {
|
||||
Map mapEx = {1: "Test"};
|
||||
expect(mapEx.hasKeyContentType(), false);
|
||||
});
|
||||
|
||||
test('Mixed datatype but should return true', () {
|
||||
Map mapEx = {1: "Test", "content-type": "x"};
|
||||
expect(mapEx.hasKeyContentType(), true);
|
||||
});
|
||||
});
|
||||
|
||||
group('Testing getKeyContentType()', () {
|
||||
test('Content-Type present', () {
|
||||
Map<String, String> mapEx = {"Agent": "Test", "Content-Type": "x"};
|
||||
expect(mapEx.getKeyContentType(), "Content-Type");
|
||||
});
|
||||
|
||||
test('content-Type present', () {
|
||||
Map<String, String> mapEx = {"Agent": "Test", "content-Type": "x"};
|
||||
expect(mapEx.getKeyContentType(), "content-Type");
|
||||
});
|
||||
|
||||
test('empty should return null', () {
|
||||
Map<String, String> mapEx = {};
|
||||
expect(mapEx.getKeyContentType(), null);
|
||||
});
|
||||
|
||||
test('No content-type present should return null', () {
|
||||
Map<String, String> mapEx = {"Agent": "Test"};
|
||||
expect(mapEx.getKeyContentType(), null);
|
||||
});
|
||||
|
||||
test('Different datatype should return null', () {
|
||||
Map mapEx = {1: "Test"};
|
||||
expect(mapEx.getKeyContentType(), null);
|
||||
});
|
||||
|
||||
test('Mixed datatype but should return content-type', () {
|
||||
Map mapEx = {1: "Test", "content-type": "x"};
|
||||
expect(mapEx.getKeyContentType(), "content-type");
|
||||
});
|
||||
|
||||
test('Multiple occurence should return first', () {
|
||||
Map mapEx = {1: "Test", "content-Type": "y", "content-type": "x"};
|
||||
expect(mapEx.getKeyContentType(), "content-Type");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
group('Testing getValueContentType()', () {
|
||||
test('Content-Type present', () {
|
||||
Map<String, String> mapEx = {"Agent": "Test", "Content-Type": "x"};
|
||||
expect(mapEx.getValueContentType(), "x");
|
||||
});
|
||||
|
||||
test('content-Type present', () {
|
||||
Map<String, String> mapEx = {"Agent": "Test", "content-Type": "x"};
|
||||
expect(mapEx.getValueContentType(), "x");
|
||||
});
|
||||
|
||||
test('empty should return null', () {
|
||||
Map<String, String> mapEx = {};
|
||||
expect(mapEx.getValueContentType(), null);
|
||||
});
|
||||
|
||||
test('No content-type present should return null', () {
|
||||
Map<String, String> mapEx = {"Agent": "Test"};
|
||||
expect(mapEx.getValueContentType(), null);
|
||||
});
|
||||
|
||||
test('Different datatype should return null', () {
|
||||
Map mapEx = {1: "Test"};
|
||||
expect(mapEx.getValueContentType(), null);
|
||||
});
|
||||
|
||||
test('Mixed datatype but should return x', () {
|
||||
Map mapEx = {1: "Test", "content-type": "x"};
|
||||
expect(mapEx.getValueContentType(), "x");
|
||||
});
|
||||
|
||||
test('Multiple occurence should return first', () {
|
||||
Map mapEx = {1: "Test", "content-Type": "y", "content-type": "x"};
|
||||
expect(mapEx.getValueContentType(), "y");
|
||||
});
|
||||
});
|
||||
|
||||
group("Testing ?.getValueContentType() function", () {
|
||||
test('Testing ?.getValueContentType() for header1', () {
|
||||
Map<String, String> header1 = {
|
||||
"content-type": "application/json",
|
||||
};
|
||||
String contentType1Expected = "application/json";
|
||||
expect(header1.getValueContentType(), contentType1Expected);
|
||||
});
|
||||
test('Testing ?.getValueContentType() when header keys are in header case',
|
||||
() {
|
||||
Map<String, String> header2 = {
|
||||
"Content-Type": "application/json",
|
||||
};
|
||||
expect(header2.getValueContentType(), "application/json");
|
||||
});
|
||||
});
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
import 'package:test/test.dart';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:better_networking/better_networking.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
void main() {
|
||||
group('CurlFileImport Tests', () {
|
||||
|
@ -1,74 +0,0 @@
|
||||
import 'package:apidash_core/utils/http_request_utils.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
void main() {
|
||||
group('Testing RemoveJsonComments', () {
|
||||
test('Removes single-line comments', () {
|
||||
String input = '''
|
||||
{
|
||||
// This is a single-line comment
|
||||
"key": "value"
|
||||
}
|
||||
''';
|
||||
|
||||
String expected = '''{
|
||||
"key": "value"
|
||||
}''';
|
||||
expect(removeJsonComments(input), expected);
|
||||
});
|
||||
|
||||
test('Removes multi-line comments', () {
|
||||
String input = '''
|
||||
{
|
||||
/*
|
||||
This is a multi-line comment
|
||||
*/
|
||||
"key": "value"
|
||||
}
|
||||
''';
|
||||
|
||||
String expected = '''{
|
||||
"key": "value"
|
||||
}''';
|
||||
expect(removeJsonComments(input), expected);
|
||||
});
|
||||
|
||||
test('Handles valid JSON without comments', () {
|
||||
String input = '{"key":"value"}';
|
||||
String expected = '''{
|
||||
"key": "value"
|
||||
}''';
|
||||
expect(removeJsonComments(input), expected);
|
||||
});
|
||||
|
||||
test('Returns original string if invalid JSON', () {
|
||||
String input = '{key: value}';
|
||||
String expected = '{key: value}';
|
||||
expect(removeJsonComments(input), expected);
|
||||
});
|
||||
|
||||
test('Removes trailing commas', () {
|
||||
String input = '''
|
||||
{
|
||||
"key1": "value1",
|
||||
"key2": "value2", // trailing comma
|
||||
}
|
||||
''';
|
||||
|
||||
String expected = '''{
|
||||
"key1": "value1",
|
||||
"key2": "value2"
|
||||
}''';
|
||||
expect(removeJsonComments(input), expected);
|
||||
});
|
||||
|
||||
test('Test blank json', () {
|
||||
String input = '''
|
||||
{}
|
||||
''';
|
||||
|
||||
String expected = '{}';
|
||||
expect(removeJsonComments(input), expected);
|
||||
});
|
||||
});
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user