diff --git a/packages/apidash_core/lib/import_export/postman_io.dart b/packages/apidash_core/lib/import_export/postman_io.dart index e69de29b..25ba1866 100644 --- a/packages/apidash_core/lib/import_export/postman_io.dart +++ b/packages/apidash_core/lib/import_export/postman_io.dart @@ -0,0 +1,101 @@ +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) { + content = content.trim(); + try { + final pc = pm.postmanCollectionFromJsonStr(content); + final requests = pm.getRequestsFromPostmanCollection(pc); + return requests + .map((req) => (req.$1, postmanRequestToHttpRequestModel(req.$2))) + .toList(); + } catch (e) { + return null; + } + } + + HttpRequestModel postmanRequestToHttpRequestModel(pm.Request request) { + HTTPVerb method; + + try { + method = HTTPVerb.values.byName((request.method ?? "").toLowerCase()); + } catch (e) { + method = kDefaultHttpMethod; + } + String url = stripUrlParams(request.url?.raw ?? ""); + List<NameValueModel> headers = []; + List<bool> isHeaderEnabledList = []; + + List<NameValueModel> params = []; + List<bool> isParamEnabledList = []; + + for (var header in request.header ?? <pm.Header>[]) { + var name = header.key ?? ""; + var value = header.value; + var activeHeader = header.disabled ?? false; + headers.add(NameValueModel(name: name, value: value)); + isHeaderEnabledList.add(!activeHeader); + } + + for (var query in request.url?.query ?? <pm.Query>[]) { + var name = query.key ?? ""; + var value = query.value; + var activeQuery = query.disabled ?? false; + params.add(NameValueModel(name: name, value: value)); + isParamEnabledList.add(!activeQuery); + } + + ContentType bodyContentType = kDefaultContentType; + String? body; + List<FormDataModel>? formData; + if (request.body != null) { + if (request.body?.mode == 'raw') { + try { + bodyContentType = ContentType.values + .byName(request.body?.options?.raw?.language ?? ""); + } catch (e) { + bodyContentType = kDefaultContentType; + } + body = request.body?.raw; + } + if (request.body?.mode == 'formdata') { + bodyContentType = ContentType.formdata; + formData = []; + for (var fd in request.body?.formdata ?? <pm.Formdatum>[]) { + var name = fd.key ?? ""; + FormDataType formDataType; + try { + formDataType = FormDataType.values.byName(fd.type ?? ""); + } catch (e) { + formDataType = FormDataType.text; + } + var value = switch (formDataType) { + FormDataType.text => fd.value ?? "", + FormDataType.file => fd.src ?? "" + }; + formData.add(FormDataModel( + name: name, + value: value, + type: formDataType, + )); + } + } + } + + return HttpRequestModel( + method: method, + url: url, + headers: headers, + params: params, + isHeaderEnabledList: isHeaderEnabledList, + isParamEnabledList: isParamEnabledList, + body: body, + bodyContentType: bodyContentType, + formData: formData, + ); + } +}