Skip to content

Commit 948cf90

Browse files
committed
Bug fix curl_parser
1 parent 792e458 commit 948cf90

File tree

5 files changed

+60
-3
lines changed

5 files changed

+60
-3
lines changed

packages/curl_parser/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.1.3
2+
3+
- Bugfix: Header with `:` in value gets parsed properly
4+
15
## 0.1.2
26

37
- Bump dependencies.

packages/curl_parser/lib/models/curl.dart

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,15 @@ class Curl extends Equatable {
130130
headers = <String, String>{};
131131
for (var headerString in headersList) {
132132
final splittedHeaderString = headerString.split(RegExp(r':\s*'));
133-
if (splittedHeaderString.length != 2) {
133+
if (splittedHeaderString.length > 2) {
134+
headers.addAll({
135+
splittedHeaderString[0]: splittedHeaderString.sublist(1).join(":")
136+
});
137+
} else if (splittedHeaderString.length < 2) {
134138
throw Exception('Failed to split the `$headerString` header');
139+
} else {
140+
headers.addAll({splittedHeaderString[0]: splittedHeaderString[1]});
135141
}
136-
headers.addAll({splittedHeaderString[0]: splittedHeaderString[1]});
137142
}
138143
}
139144
}

packages/curl_parser/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: curl_parser
22
description: Parse cURL command to Dart object and convert Dart object to cURL command.
3-
version: 0.1.2
3+
version: 0.1.3
44
homepage: https://github.com/foss42/apidash/tree/main/packages/curl_parser
55
repository: https://github.com/foss42/apidash/tree/main/packages/curl_parser
66
issue_tracker: https://github.com/foss42/apidash/issues

packages/curl_parser/test/curl_parser_test.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,30 @@ void main() {
1919
},
2020
);
2121

22+
test(
23+
'parse another easy cURL',
24+
() async {
25+
expect(
26+
Curl.parse(
27+
r"""curl --location --request GET 'https://dummyimage.com/150/92c952' \
28+
--header 'user-agent: Dart/3.8 (dart:io)' \
29+
--header 'accept-encoding: gzip' \
30+
--header 'content-length: 0' \
31+
--header 'host: dummyimage.com'"""),
32+
Curl(
33+
method: 'GET',
34+
uri: Uri.parse('https://dummyimage.com/150/92c952'),
35+
headers: {
36+
'user-agent': 'Dart/3.8 (dart:io)',
37+
'accept-encoding': 'gzip',
38+
'content-length': '0',
39+
'host': 'dummyimage.com'
40+
},
41+
location: true),
42+
);
43+
},
44+
);
45+
2246
test('parse POST request with multipart/form-data', () {
2347
const curl = r'''curl -X POST 'https://api.apidash.dev/io/img' \
2448
-H 'Content-Type: multipart/form-data' \

packages/curl_parser/test/utility_test.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,30 @@ void main() {
3232
);
3333
}, timeout: defaultTimeout);
3434

35+
test('parse cURL DevTools', () async {
36+
expect(
37+
splitAsCommandLineArgs(
38+
r"""--request GET 'https://dummyimage.com/150/92c952' \
39+
--header 'user-agent: Dart/3.8 (dart:io)' \
40+
--header 'accept-encoding: gzip' \
41+
--header 'content-length: 0' \
42+
--header 'host: dummyimage.com'"""),
43+
[
44+
'--request',
45+
'GET',
46+
'https://dummyimage.com/150/92c952',
47+
'--header',
48+
'user-agent: Dart/3.8 (dart:io)',
49+
'--header',
50+
'accept-encoding: gzip',
51+
'--header',
52+
'content-length: 0',
53+
'--header',
54+
'host: dummyimage.com'
55+
],
56+
);
57+
}, timeout: defaultTimeout);
58+
3559
test('parse cURL with body', () async {
3660
expect(
3761
splitAsCommandLineArgs(r"""--request POST \

0 commit comments

Comments
 (0)