fix(importer-curl): keep an = inside --url-query and form values (#606)

This commit is contained in:
Ngo Quoc Viet
2026-08-24 21:14:37 -07:00
committed by GitHub
parent cef1129d4b
commit 068afe325e
2 changed files with 23 additions and 2 deletions
+6 -2
View File
@@ -359,7 +359,9 @@ function importCommand(parseEntries: string[], workspaceId: string) {
if (typeof p !== "string") { if (typeof p !== "string") {
continue; continue;
} }
const [name, value] = p.split("="); // splitOnce: a query value may itself contain "=" (a base64 payload, a
// nested filter), and only the first one separates name from value.
const [name, value] = splitOnce(p, "=");
urlParameters.push({ urlParameters.push({
name: name ?? "", name: name ?? "",
value: value ?? "", value: value ?? "",
@@ -475,7 +477,9 @@ function importCommand(parseEntries: string[], workspaceId: string) {
...((flagsByName.form as string[] | undefined) || []), ...((flagsByName.form as string[] | undefined) || []),
...((flagsByName.F as string[] | undefined) || []), ...((flagsByName.F as string[] | undefined) || []),
].map((str) => { ].map((str) => {
const parts = str.split("="); // splitOnce for the same reason as --url-query above: base64 padding
// ("...==") and any value containing "=" must survive intact.
const parts = splitOnce(str, "=");
const name = parts[0] ?? ""; const name = parts[0] ?? "";
const value = parts[1] ?? ""; const value = parts[1] ?? "";
const item: { name: string; value?: string; file?: string; enabled: boolean } = { const item: { name: string; value?: string; file?: string; enabled: boolean } = {
+17
View File
@@ -942,6 +942,23 @@ describe("importer-curl", () => {
}, },
}); });
}); });
test("Keeps an = inside a --url-query value", () => {
const imported = convertCurl(
'curl --url-query "filter=type=book" --url-query "t=eyJhIjoxfQ==" https://yaak.app',
);
expect(imported.resources.httpRequests?.[0]?.urlParameters).toEqual([
{ enabled: true, name: "filter", value: "type=book" },
{ enabled: true, name: "t", value: "eyJhIjoxfQ==" },
]);
});
test("Keeps an = inside a form value", () => {
const imported = convertCurl('curl -F "t=eyJhIjoxfQ==" -F "q=a=b" https://yaak.app');
expect(imported.resources.httpRequests?.[0]?.body?.form).toEqual([
{ enabled: true, name: "t", value: "eyJhIjoxfQ==" },
{ enabled: true, name: "q", value: "a=b" },
]);
});
}); });
const idCount: Partial<Record<string, number>> = {}; const idCount: Partial<Record<string, number>> = {};