Skip to content

Commit b704b68

Browse files
committed
added optional workingdir parameter in constructGotRequest and getCurlRequest
1 parent b02bbf3 commit b704b68

File tree

2 files changed

+26
-21
lines changed

2 files changed

+26
-21
lines changed

src/constructCurl.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ function replaceSingleQuotes<T>(value: T): T {
88
return value.replace(/'/g, "%27") as T & string;
99
}
1010

11-
function formatCurlFormField(key: string, value: string): string {
11+
function formatCurlFormField(key: string, value: string, workingDir?: string): string {
1212
if (isFilePath(value)) {
13-
return ` --form ${key}=@"${path.resolve(value.slice(7))}"`;
13+
return ` --form ${key}=@"${path.resolve(workingDir || "", value.slice(7))}"`; // if workingDir not given, it takes current working directory.
1414
}
1515
return ` --form '${key}="${encodeURIComponent(value)}"'`;
1616
}
@@ -27,30 +27,30 @@ function getFormDataUrlEncoded(request: RequestSpec): string {
2727
return result;
2828
}
2929

30-
function getFormDataCurlRequest(request: RequestSpec): string {
30+
function getFormDataCurlRequest(request: RequestSpec, workingDir?: string): string {
3131
const formValues = request.httpRequest.formValues;
3232
if (!formValues) return "";
3333
let result = "";
3434
for (const { name, value } of formValues) {
35-
result += formatCurlFormField(name, value);
35+
result += formatCurlFormField(name, value, workingDir);
3636
}
3737
return result;
3838
}
3939

40-
export function getCurlRequest(request: RequestSpec): string {
40+
export function getCurlRequest(request: RequestSpec, workingDir?: string): string {
4141
let curl: string = "curl";
4242

4343
if (
4444
request.httpRequest.headers["content-type"] == "multipart/form-data" ||
4545
hasFile(request.httpRequest.formValues)
4646
) {
47-
curl += getFormDataCurlRequest(request);
47+
curl += getFormDataCurlRequest(request, workingDir);
4848
curl += ` '${replaceSingleQuotes(
4949
getURL(
5050
request.httpRequest.baseUrl,
5151
request.httpRequest.url,
52-
getParamsForUrl(request.httpRequest.params, request.options.rawParams),
53-
),
52+
getParamsForUrl(request.httpRequest.params, request.options.rawParams)
53+
)
5454
)}'`;
5555
return curl;
5656
} else if (
@@ -62,8 +62,8 @@ export function getCurlRequest(request: RequestSpec): string {
6262
getURL(
6363
request.httpRequest.baseUrl,
6464
request.httpRequest.url,
65-
getParamsForUrl(request.httpRequest.params, request.options.rawParams),
66-
),
65+
getParamsForUrl(request.httpRequest.params, request.options.rawParams)
66+
)
6767
)}'`;
6868
return curl;
6969
}
@@ -97,8 +97,8 @@ export function getCurlRequest(request: RequestSpec): string {
9797
getURL(
9898
request.httpRequest.baseUrl,
9999
request.httpRequest.url,
100-
getParamsForUrl(request.httpRequest.params, request.options.rawParams),
101-
),
100+
getParamsForUrl(request.httpRequest.params, request.options.rawParams)
101+
)
102102
)}'`;
103103

104104
return curl;

src/executeRequest.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@ import { FormData } from "formdata-node";
1010
import { Readable } from "stream";
1111
import * as path from "path";
1212

13-
export function constructGotRequest(allData: RequestSpec): GotRequest {
13+
export function constructGotRequest(allData: RequestSpec, workingDir?: string): GotRequest {
1414
const completeUrl: string = getURL(
1515
allData.httpRequest.baseUrl,
1616
allData.httpRequest.url,
17-
getParamsForUrl(allData.httpRequest.params, allData.options.rawParams),
17+
getParamsForUrl(allData.httpRequest.params, allData.options.rawParams)
1818
);
1919

2020
const options: OptionsOfTextResponseBody = {
2121
method: allData.httpRequest.method.toLowerCase() as Method,
22-
body: getBody(allData),
22+
body: getBody(allData, workingDir),
2323
headers: allData.httpRequest.headers,
2424
followRedirect: allData.options.follow,
2525
https: { rejectUnauthorized: allData.options.verifySSL },
@@ -29,8 +29,13 @@ export function constructGotRequest(allData: RequestSpec): GotRequest {
2929
return got(completeUrl, options);
3030
}
3131

32-
function getFileFromPath(filePath: string) {
33-
filePath = path.resolve(filePath.slice(7)); // removes file:// prefix
32+
function getFileFromPath(filePath: string, workingDir?: string) {
33+
if (workingDir) {
34+
filePath = path.resolve(workingDir, filePath.slice(7)); // removes <file://> prefix
35+
} else {
36+
filePath = path.resolve(filePath.slice(7)); // takes current working directory
37+
}
38+
3439
const fileName = path.basename(filePath);
3540
return fileFromPathSync(filePath, fileName);
3641
}
@@ -50,14 +55,14 @@ function constructFormUrlEncoded(request: RequestSpec) {
5055
return result.toString();
5156
}
5257

53-
function constructFormData(request: RequestSpec) {
58+
function constructFormData(request: RequestSpec, workingDir?: string) {
5459
const formValues = request.httpRequest.formValues;
5560
if (!formValues) return;
5661
const multipart = new FormData();
5762

5863
for (const fv of formValues) {
5964
if (isFilePath(fv.value)) {
60-
multipart.append(fv.name, getFileFromPath(fv.value));
65+
multipart.append(fv.name, getFileFromPath(fv.value, workingDir));
6166
} else {
6267
multipart.append(fv.name, fv.value);
6368
}
@@ -68,12 +73,12 @@ function constructFormData(request: RequestSpec) {
6873
return Readable.from(fde);
6974
}
7075

71-
export function getBody(request: RequestSpec) {
76+
export function getBody(request: RequestSpec, workingDir?: string) {
7277
const body = request.httpRequest.body;
7378
const formValues = request.httpRequest.formValues;
7479

7580
if (request.httpRequest.headers["content-type"] == "multipart/form-data" || hasFile(formValues)) {
76-
return constructFormData(request);
81+
return constructFormData(request, workingDir);
7782
}
7883

7984
if (formValues) {

0 commit comments

Comments
 (0)