@scalar/snippetz 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/clients.d.ts.map +1 -1
- package/dist/clients.js +9 -1
- package/dist/clients.js.map +2 -2
- package/dist/plugins/python/httpx/async.d.ts +6 -0
- package/dist/plugins/python/httpx/async.d.ts.map +1 -0
- package/dist/plugins/python/httpx/async.js +16 -0
- package/dist/plugins/python/httpx/async.js.map +7 -0
- package/dist/plugins/python/httpx/index.d.ts +3 -0
- package/dist/plugins/python/httpx/index.d.ts.map +1 -0
- package/dist/plugins/python/httpx/index.js +3 -0
- package/dist/plugins/python/httpx/index.js.map +7 -0
- package/dist/plugins/python/httpx/sync.d.ts +6 -0
- package/dist/plugins/python/httpx/sync.d.ts.map +1 -0
- package/dist/plugins/python/httpx/sync.js +13 -0
- package/dist/plugins/python/httpx/sync.js.map +7 -0
- package/dist/plugins/python/requests/requests.d.ts.map +1 -1
- package/dist/plugins/python/requests/requests.js +2 -93
- package/dist/plugins/python/requests/requests.js.map +3 -3
- package/dist/plugins/python/requestsLike.d.ts +3 -0
- package/dist/plugins/python/requestsLike.d.ts.map +1 -0
- package/dist/plugins/python/requestsLike.js +120 -0
- package/dist/plugins/python/requestsLike.js.map +7 -0
- package/dist/plugins/rust/reqwest/index.d.ts +2 -0
- package/dist/plugins/rust/reqwest/index.d.ts.map +1 -0
- package/dist/plugins/rust/reqwest/index.js +2 -0
- package/dist/plugins/rust/reqwest/index.js.map +7 -0
- package/dist/plugins/rust/reqwest/reqwest.d.ts +6 -0
- package/dist/plugins/rust/reqwest/reqwest.d.ts.map +1 -0
- package/dist/plugins/rust/reqwest/reqwest.js +90 -0
- package/dist/plugins/rust/reqwest/reqwest.js.map +7 -0
- package/dist/plugins/rust/rustString.d.ts +9 -0
- package/dist/plugins/rust/rustString.d.ts.map +1 -0
- package/dist/plugins/rust/rustString.js +10 -0
- package/dist/plugins/rust/rustString.js.map +7 -0
- package/dist/plugins/shell/curl/curl.js +1 -1
- package/dist/plugins/shell/curl/curl.js.map +2 -2
- package/dist/snippetz.d.ts +2 -2
- package/dist/utils/convertWithHttpSnippetLite.d.ts +1 -1
- package/dist/utils/convertWithHttpSnippetLite.js.map +1 -1
- package/package.json +14 -4
- package/dist/plugins/c/libcurl/libcurl.test.js +0 -208
- package/dist/plugins/c/libcurl/libcurl.test.js.map +0 -7
- package/dist/plugins/clojure/clj_http/clj_http.test.js +0 -151
- package/dist/plugins/clojure/clj_http/clj_http.test.js.map +0 -7
- package/dist/plugins/dart/http/http.test.js +0 -550
- package/dist/plugins/dart/http/http.test.js.map +0 -7
- package/dist/plugins/go/native/native.test.js +0 -366
- package/dist/plugins/go/native/native.test.js.map +0 -7
- package/dist/plugins/http/http11/http11.test.js +0 -175
- package/dist/plugins/http/http11/http11.test.js.map +0 -7
- package/dist/plugins/java/okhttp/okhttp.test.js +0 -164
- package/dist/plugins/java/okhttp/okhttp.test.js.map +0 -7
- package/dist/plugins/js/fetch/fetch.test.js +0 -214
- package/dist/plugins/js/fetch/fetch.test.js.map +0 -7
- package/dist/plugins/js/ofetch/ofetch.test.js +0 -126
- package/dist/plugins/js/ofetch/ofetch.test.js.map +0 -7
- package/dist/plugins/kotlin/okhttp/okhttp.test.js +0 -164
- package/dist/plugins/kotlin/okhttp/okhttp.test.js.map +0 -7
- package/dist/plugins/node/fetch/fetch.test.js +0 -200
- package/dist/plugins/node/fetch/fetch.test.js.map +0 -7
- package/dist/plugins/node/ofetch/ofetch.test.js +0 -126
- package/dist/plugins/node/ofetch/ofetch.test.js.map +0 -7
- package/dist/plugins/node/undici/undici.test.js +0 -133
- package/dist/plugins/node/undici/undici.test.js.map +0 -7
- package/dist/plugins/php/curl/curl.test.js +0 -564
- package/dist/plugins/php/curl/curl.test.js.map +0 -7
- package/dist/plugins/php/guzzle/guzzle.test.js +0 -546
- package/dist/plugins/php/guzzle/guzzle.test.js.map +0 -7
- package/dist/plugins/python/requests/requests.test.js +0 -419
- package/dist/plugins/python/requests/requests.test.js.map +0 -7
- package/dist/plugins/ruby/native/native.test.js +0 -240
- package/dist/plugins/ruby/native/native.test.js.map +0 -7
- package/dist/plugins/shell/curl/curl.test.js +0 -427
- package/dist/plugins/shell/curl/curl.test.js.map +0 -7
- package/dist/plugins/shell/httpie/httpie.test.js +0 -113
- package/dist/plugins/shell/httpie/httpie.test.js.map +0 -7
- package/dist/plugins/shell/wget/wget.test.js +0 -143
- package/dist/plugins/shell/wget/wget.test.js.map +0 -7
- package/dist/plugins/swift/nsurlsession/nsurlsession.test.js +0 -344
- package/dist/plugins/swift/nsurlsession/nsurlsession.test.js.map +0 -7
- package/dist/snippetz.test.js +0 -79
- package/dist/snippetz.test.js.map +0 -7
- package/dist/utils/convertWithHttpSnippetLite.test.js +0 -106
- package/dist/utils/convertWithHttpSnippetLite.test.js.map +0 -7
- package/dist/utils/create-search-params.test.js +0 -49
- package/dist/utils/create-search-params.test.js.map +0 -7
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/plugins/rust/reqwest/reqwest.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Plugin } from '@scalar/types/snippetz'\nimport { toRustString } from '@/plugins/rust/rustString'\n\n/**\n * rust/reqwest\n */\nexport const rustReqwest: Plugin = {\n target: 'rust',\n client: 'reqwest',\n title: 'reqwest',\n generate(request, options?: { auth?: { username: string; password: string } }) {\n // Defaults\n const normalizedRequest = {\n method: 'GET',\n ...request,\n }\n\n // Normalize method to uppercase\n normalizedRequest.method = normalizedRequest.method.toUpperCase()\n\n // Start building the Rust code\n let code = `let client = reqwest::Client::new();\\n`\n\n // Handle query string\n const queryString = normalizedRequest.queryString?.length\n ? '?' +\n normalizedRequest.queryString\n .map((param) => `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`)\n .join('&')\n : ''\n const url = `${normalizedRequest.url}${queryString}`\n\n // Start building request\n const method = normalizedRequest.method.toLowerCase()\n code += `let request = client.${method}(${toRustString(url)})`\n\n // Handle headers\n const headers =\n normalizedRequest.headers?.reduce(\n (acc, header) => {\n if (header.value && !/[; ]/.test(header.name)) {\n acc[header.name] = header.value\n }\n return acc\n },\n {} as Record<string, string>,\n ) || {}\n\n // Handle cookies\n if (normalizedRequest.cookies && normalizedRequest.cookies.length > 0) {\n const cookieString = normalizedRequest.cookies\n .map((cookie) => `${encodeURIComponent(cookie.name)}=${encodeURIComponent(cookie.value)}`)\n .join('; ')\n headers['Cookie'] = cookieString\n }\n\n // Add Authorization header if credentials are provided\n if (options?.auth) {\n const { username, password } = options.auth\n if (username && password) {\n code += `\\n .basic_auth(${toRustString(username)}, ${toRustString(password)})`\n }\n }\n\n // Add headers to request\n for (const [key, value] of Object.entries(headers)) {\n code += `\\n .header(${toRustString(key)}, ${toRustString(value)})`\n }\n\n // Handle body\n let isJsonRequest = false\n if (normalizedRequest.postData) {\n if (normalizedRequest.postData.mimeType === 'application/json') {\n isJsonRequest = true\n code += `\\n .json(&serde_json::json!(${normalizedRequest.postData.text}))`\n } else if (normalizedRequest.postData.mimeType === 'application/x-www-form-urlencoded') {\n const formData =\n normalizedRequest.postData.params\n ?.map((param) => `(${toRustString(param.name)}, ${toRustString(param.value || '')})`)\n .join(', ') || ''\n code += `\\n .form(&[${formData}])`\n } else if (normalizedRequest.postData.mimeType === 'multipart/form-data') {\n code += '\\n .multipart({'\n const formParts =\n normalizedRequest.postData.params\n ?.map((param) => {\n if (param.fileName) {\n return `\\n let part = reqwest::multipart::Part::text(${toRustString(param.value || '')})\\n .file_name(${toRustString(param.fileName)});\\n form = form.part(${toRustString(param.name)}, part);`\n } else {\n return `\\n form = form.text(${toRustString(param.name)}, ${toRustString(param.value || '')});`\n }\n })\n .join('') || ''\n code += `\\n let mut form = reqwest::multipart::Form::new();${formParts}\\n form\\n })`\n } else {\n code += `\\n .body(${toRustString(normalizedRequest.postData.text || '')})`\n }\n }\n\n code += ';\\n'\n code += `let response = request.send().await?;\\n`\n\n if (isJsonRequest) {\n code += `let body = response.json::<serde_json::Value>().await?;\\n`\n } else {\n code += `let body = response.text().await?;\\n`\n }\n\n return code\n },\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for escaping strings in Rust code generation
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Safely formats a string for use in Rust string literals
|
|
6
|
+
* Returns the escaped string wrapped in double quotes
|
|
7
|
+
*/
|
|
8
|
+
export declare function toRustString(str: string): string;
|
|
9
|
+
//# sourceMappingURL=rustString.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rustString.d.ts","sourceRoot":"","sources":["../../../src/plugins/rust/rustString.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
function escapeRustString(str) {
|
|
2
|
+
return str.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t").replace(/\0/g, "\\0");
|
|
3
|
+
}
|
|
4
|
+
function toRustString(str) {
|
|
5
|
+
return `"${escapeRustString(str)}"`;
|
|
6
|
+
}
|
|
7
|
+
export {
|
|
8
|
+
toRustString
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=rustString.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/plugins/rust/rustString.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Utilities for escaping strings in Rust code generation\n */\n\n/**\n * Escapes a string for use in Rust string literals\n * Handles quotes, backslashes, newlines, and other special characters\n */\nfunction escapeRustString(str: string): string {\n return str\n .replace(/\\\\/g, '\\\\\\\\') // Escape backslashes first\n .replace(/\"/g, '\\\\\"') // Escape double quotes\n .replace(/\\n/g, '\\\\n') // Escape newlines\n .replace(/\\r/g, '\\\\r') // Escape carriage returns\n .replace(/\\t/g, '\\\\t') // Escape tabs\n .replace(/\\0/g, '\\\\0') // Escape null bytes\n}\n\n/**\n * Safely formats a string for use in Rust string literals\n * Returns the escaped string wrapped in double quotes\n */\nexport function toRustString(str: string): string {\n return `\"${escapeRustString(str)}\"`\n}\n"],
|
|
5
|
+
"mappings": "AAQA,SAAS,iBAAiB,KAAqB;AAC7C,SAAO,IACJ,QAAQ,OAAO,MAAM,EACrB,QAAQ,MAAM,KAAK,EACnB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,KAAK;AACzB;AAMO,SAAS,aAAa,KAAqB;AAChD,SAAO,IAAI,iBAAiB,GAAG,CAAC;AAClC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -15,7 +15,7 @@ const shellCurl = {
|
|
|
15
15
|
return `${encodedName}=${encodedValue}`;
|
|
16
16
|
}).join("&") : "";
|
|
17
17
|
const url = `${normalizedRequest.url}${queryString}`;
|
|
18
|
-
const hasSpecialChars = /[\s<>[\]{}
|
|
18
|
+
const hasSpecialChars = /[\s<>[\]{}|\\^%$]/.test(url);
|
|
19
19
|
const urlPart = queryString || hasSpecialChars ? `'${url}'` : url;
|
|
20
20
|
parts[0] = `curl ${urlPart}`;
|
|
21
21
|
if (normalizedRequest.method !== "GET") {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/plugins/shell/curl/curl.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Plugin } from '@scalar/types/snippetz'\n\n/**\n * shell/curl\n */\nexport const shellCurl: Plugin = {\n target: 'shell',\n client: 'curl',\n title: 'Curl',\n generate(request, configuration) {\n // Defaults\n const normalizedRequest = {\n method: 'GET',\n ...request,\n }\n\n // Normalization\n normalizedRequest.method = normalizedRequest.method.toUpperCase()\n\n // Build curl command parts\n const parts: string[] = ['curl']\n\n // URL (quote if has query parameters or special characters)\n const queryString = normalizedRequest.queryString?.length\n ? '?' +\n normalizedRequest.queryString\n .map((param) => {\n // Ensure both name and value are fully URI encoded\n const encodedName = encodeURIComponent(param.name)\n const encodedValue = encodeURIComponent(param.value)\n return `${encodedName}=${encodedValue}`\n })\n .join('&')\n : ''\n const url = `${normalizedRequest.url}${queryString}`\n const hasSpecialChars = /[\\s<>[\\]{}
|
|
5
|
-
"mappings": "AAKO,MAAM,YAAoB;AAAA,EAC/B,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS,SAAS,eAAe;AAE/B,UAAM,oBAAoB;AAAA,MACxB,QAAQ;AAAA,MACR,GAAG;AAAA,IACL;AAGA,sBAAkB,SAAS,kBAAkB,OAAO,YAAY;AAGhE,UAAM,QAAkB,CAAC,MAAM;AAG/B,UAAM,cAAc,kBAAkB,aAAa,SAC/C,MACA,kBAAkB,YACf,IAAI,CAAC,UAAU;AAEd,YAAM,cAAc,mBAAmB,MAAM,IAAI;AACjD,YAAM,eAAe,mBAAmB,MAAM,KAAK;AACnD,aAAO,GAAG,WAAW,IAAI,YAAY;AAAA,IACvC,CAAC,EACA,KAAK,GAAG,IACX;AACJ,UAAM,MAAM,GAAG,kBAAkB,GAAG,GAAG,WAAW;AAClD,UAAM,kBAAkB,
|
|
4
|
+
"sourcesContent": ["import type { Plugin } from '@scalar/types/snippetz'\n\n/**\n * shell/curl\n */\nexport const shellCurl: Plugin = {\n target: 'shell',\n client: 'curl',\n title: 'Curl',\n generate(request, configuration) {\n // Defaults\n const normalizedRequest = {\n method: 'GET',\n ...request,\n }\n\n // Normalization\n normalizedRequest.method = normalizedRequest.method.toUpperCase()\n\n // Build curl command parts\n const parts: string[] = ['curl']\n\n // URL (quote if has query parameters or special characters)\n const queryString = normalizedRequest.queryString?.length\n ? '?' +\n normalizedRequest.queryString\n .map((param) => {\n // Ensure both name and value are fully URI encoded\n const encodedName = encodeURIComponent(param.name)\n const encodedValue = encodeURIComponent(param.value)\n return `${encodedName}=${encodedValue}`\n })\n .join('&')\n : ''\n const url = `${normalizedRequest.url}${queryString}`\n const hasSpecialChars = /[\\s<>[\\]{}|\\\\^%$]/.test(url)\n const urlPart = queryString || hasSpecialChars ? `'${url}'` : url\n parts[0] = `curl ${urlPart}`\n\n // Method\n if (normalizedRequest.method !== 'GET') {\n parts.push(`--request ${normalizedRequest.method}`)\n }\n\n // Basic Auth\n if (configuration?.auth?.username && configuration?.auth?.password) {\n parts.push(`--user '${configuration.auth.username}:${configuration.auth.password}'`)\n }\n\n // Headers\n if (normalizedRequest.headers?.length) {\n normalizedRequest.headers.forEach((header) => {\n parts.push(`--header '${header.name}: ${header.value}'`)\n })\n\n // Add compressed flag if Accept-Encoding header includes compression\n const acceptEncoding = normalizedRequest.headers.find((header) => header.name.toLowerCase() === 'accept-encoding')\n if (acceptEncoding && /gzip|deflate/.test(acceptEncoding.value)) {\n parts.push('--compressed')\n }\n }\n\n // Cookies\n if (normalizedRequest.cookies?.length) {\n const cookieString = normalizedRequest.cookies\n .map((cookie) => {\n // Encode both cookie name and value to handle special characters\n const encodedName = encodeURIComponent(cookie.name)\n const encodedValue = encodeURIComponent(cookie.value)\n return `${encodedName}=${encodedValue}`\n })\n .join('; ')\n parts.push(`--cookie '${cookieString}'`)\n }\n\n // Body\n if (normalizedRequest.postData) {\n if (normalizedRequest.postData.mimeType === 'application/json') {\n // Pretty print JSON data\n if (normalizedRequest.postData.text) {\n try {\n const jsonData = JSON.parse(normalizedRequest.postData.text)\n const prettyJson = JSON.stringify(jsonData, null, 2)\n parts.push(`--data '${prettyJson}'`)\n } catch {\n // If JSON parsing fails, use the original text\n parts.push(`--data '${normalizedRequest.postData.text}'`)\n }\n }\n } else if (normalizedRequest.postData.mimeType === 'application/octet-stream') {\n parts.push(`--data-binary '${normalizedRequest.postData.text}'`)\n } else if (\n normalizedRequest.postData.mimeType === 'application/x-www-form-urlencoded' &&\n normalizedRequest.postData.params\n ) {\n // Handle URL-encoded form data\n normalizedRequest.postData.params.forEach((param) => {\n parts.push(`--data-urlencode '${encodeURIComponent(param.name)}=${param.value}'`)\n })\n } else if (normalizedRequest.postData.mimeType === 'multipart/form-data' && normalizedRequest.postData.params) {\n // Handle multipart form data\n normalizedRequest.postData.params.forEach((param) => {\n if (param.fileName !== undefined) {\n parts.push(`--form '${param.name}=@${param.fileName}'`)\n } else {\n parts.push(`--form '${param.name}=${param.value}'`)\n }\n })\n } else {\n // Try to parse and pretty print if it's JSON, otherwise use raw text\n try {\n const jsonData = JSON.parse(normalizedRequest.postData.text ?? '')\n const prettyJson = JSON.stringify(jsonData, null, 2)\n parts.push(`--data '${prettyJson}'`)\n } catch {\n parts.push(`--data '${normalizedRequest.postData.text}'`)\n }\n }\n }\n\n return parts.join(' \\\\\\n ')\n },\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/snippetz.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ export declare function snippetz(): {
|
|
|
6
6
|
print<T extends TargetId>(target: T, client: ClientId<T>, request: Partial<HarRequest>): string | undefined;
|
|
7
7
|
clients(): import("@scalar/types/snippetz").Target[];
|
|
8
8
|
plugins(): {
|
|
9
|
-
target: "c" | "clojure" | "csharp" | "
|
|
10
|
-
client: "libcurl" | "clj_http" | "httpclient" | "restsharp" | "
|
|
9
|
+
target: "c" | "clojure" | "csharp" | "dart" | "http" | "go" | "java" | "js" | "kotlin" | "node" | "objc" | "ocaml" | "php" | "powershell" | "python" | "r" | "ruby" | "rust" | "shell" | "swift";
|
|
10
|
+
client: "libcurl" | "clj_http" | "httpclient" | "restsharp" | "http" | "native" | "http1.1" | "asynchttp" | "nethttp" | "okhttp" | "unirest" | "axios" | "fetch" | "jquery" | "ofetch" | "xhr" | "undici" | "nsurlsession" | "cohttp" | "curl" | "guzzle" | "restmethod" | "webrequest" | "python3" | "requests" | "httpx_sync" | "httpx_async" | "httr" | "reqwest" | "httpie" | "wget";
|
|
11
11
|
}[];
|
|
12
12
|
findPlugin: <T extends TargetId>(target: T | string, client: ClientId<T> | string) => import("@scalar/types/snippetz").Plugin | undefined;
|
|
13
13
|
hasPlugin<T extends TargetId>(target: T | string, client: ClientId<T> | string): boolean;
|
|
@@ -2,7 +2,7 @@ import type { HarRequest } from '@scalar/types/snippetz';
|
|
|
2
2
|
/**
|
|
3
3
|
* Takes a httpsnippet-lite client and converts the given request to a code example with it.
|
|
4
4
|
*
|
|
5
|
-
* @deprecated This a temporary wrapper around httpsnippet-lite. Let
|
|
5
|
+
* @deprecated This a temporary wrapper around httpsnippet-lite. Let's write all the generators ourselves instead.
|
|
6
6
|
*/
|
|
7
7
|
export declare function convertWithHttpSnippetLite(client: Record<string, unknown>, request?: Partial<HarRequest>): string;
|
|
8
8
|
//# sourceMappingURL=convertWithHttpSnippetLite.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/convertWithHttpSnippetLite.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Request } from '@/httpsnippet-lite/types/httpsnippet'\nimport type { HarRequest } from '@scalar/types/snippetz'\n\n/**\n * Takes a httpsnippet-lite client and converts the given request to a code example with it.\n *\n * @deprecated This a temporary wrapper around httpsnippet-lite. Let
|
|
4
|
+
"sourcesContent": ["import type { Request } from '@/httpsnippet-lite/types/httpsnippet'\nimport type { HarRequest } from '@scalar/types/snippetz'\n\n/**\n * Takes a httpsnippet-lite client and converts the given request to a code example with it.\n *\n * @deprecated This a temporary wrapper around httpsnippet-lite. Let's write all the generators ourselves instead.\n */\nexport function convertWithHttpSnippetLite(\n // Couldn't find the proper type, there was always a mismatch.\n client: Record<string, unknown>,\n request?: Partial<HarRequest>,\n): string {\n const urlObject = new URL(request?.url ?? '')\n\n // If it's just the domain, omit the trailing slash\n const url = urlObject.pathname === '/' ? urlObject.origin : urlObject.toString()\n\n const harRequest: HarRequest = {\n method: request?.method ?? 'GET',\n url,\n httpVersion: 'HTTP/1.1',\n cookies: [], // Cookies are handled through headers\n headers: request?.headers ?? [],\n headersSize: -1,\n bodySize: -1,\n queryString: Array.from(urlObject.searchParams.entries()).map(([name, value]) => ({\n name,\n value,\n })),\n postData: request?.postData,\n }\n\n const allHeaders = (harRequest?.headers ?? []).reduce(\n (acc, header) => ({\n ...acc,\n [header.name]: header.value,\n }),\n {} as Record<string, string>,\n )\n\n const queryObj = (harRequest.queryString ?? []).reduce(\n (acc, param) => ({\n ...acc,\n [param.name]: param.value,\n }),\n {} as Record<string, string>,\n )\n\n const cookiesObj = (harRequest.cookies ?? []).reduce(\n (acc, cookie) => ({\n ...acc,\n [cookie.name]: cookie.value,\n }),\n {} as Record<string, string>,\n )\n\n const parsedUrl = new URL(harRequest.url)\n const uriObj = {\n protocol: parsedUrl.protocol,\n hostname: parsedUrl.hostname,\n host: parsedUrl.hostname,\n port: parsedUrl.port,\n pathname:\n parsedUrl.pathname\n .split('/')\n .map((segment) => encodeURIComponent(decodeURIComponent(segment)))\n .join('/') + parsedUrl.search,\n path:\n parsedUrl.pathname\n .split('/')\n .map((segment) => encodeURIComponent(decodeURIComponent(segment)))\n .join('/') + parsedUrl.search,\n search: parsedUrl.search,\n hash: parsedUrl.hash,\n href: parsedUrl.href,\n origin: parsedUrl.origin,\n password: parsedUrl.password,\n searchParams: parsedUrl.searchParams,\n username: parsedUrl.username,\n toString: parsedUrl.toString,\n toJSON: () => parsedUrl.toJSON(),\n }\n\n const convertRequest = {\n url: harRequest.url,\n uriObj,\n method: harRequest.method?.toLocaleUpperCase() ?? 'GET',\n httpVersion: harRequest.httpVersion,\n cookies: harRequest.cookies ?? [],\n headers: harRequest.headers ?? [],\n headersSize: harRequest.headersSize ?? 0,\n headersObj: allHeaders ?? {},\n bodySize: harRequest.bodySize ?? 0,\n queryString: harRequest.queryString ?? [],\n postData: harRequest.postData\n ? {\n mimeType: harRequest.postData.mimeType ?? 'application/json',\n text: harRequest.postData.text ?? '',\n params: harRequest.postData.params ?? [],\n paramsObj:\n harRequest.postData.params?.reduce(\n (acc, param) => {\n if (param.name && param.value !== undefined) {\n acc[param.name] = param.value\n }\n return acc\n },\n {} as Record<string, string>,\n ) ?? {},\n }\n : undefined,\n allHeaders: allHeaders ?? {},\n fullUrl: harRequest.url,\n queryObj: queryObj ?? {},\n cookiesObj: cookiesObj ?? {},\n } as Request\n\n // If the request is a JSON request, parse the text as JSON\n if (convertRequest.postData?.mimeType === 'application/json' && convertRequest.postData?.text) {\n try {\n convertRequest.postData.jsonObj = JSON.parse(convertRequest.postData.text)\n } catch (error) {\n console.error('Error parsing JSON:', error)\n }\n }\n\n if (typeof client.convert === 'function') {\n return client.convert(convertRequest)\n }\n\n return ''\n}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"url": "git+https://github.com/scalar/scalar.git",
|
|
10
10
|
"directory": "packages/snippetz"
|
|
11
11
|
},
|
|
12
|
-
"version": "0.
|
|
12
|
+
"version": "0.4.0",
|
|
13
13
|
"engines": {
|
|
14
14
|
"node": ">=20"
|
|
15
15
|
},
|
|
@@ -156,6 +156,11 @@
|
|
|
156
156
|
"types": "./dist/plugins/powershell/webrequest/index.d.ts",
|
|
157
157
|
"default": "./dist/plugins/powershell/webrequest/index.js"
|
|
158
158
|
},
|
|
159
|
+
"./plugins/python/httpx": {
|
|
160
|
+
"import": "./dist/plugins/python/httpx/index.js",
|
|
161
|
+
"types": "./dist/plugins/python/httpx/index.d.ts",
|
|
162
|
+
"default": "./dist/plugins/python/httpx/index.js"
|
|
163
|
+
},
|
|
159
164
|
"./plugins/python/python3": {
|
|
160
165
|
"import": "./dist/plugins/python/python3/index.js",
|
|
161
166
|
"types": "./dist/plugins/python/python3/index.d.ts",
|
|
@@ -176,6 +181,11 @@
|
|
|
176
181
|
"types": "./dist/plugins/ruby/native/index.d.ts",
|
|
177
182
|
"default": "./dist/plugins/ruby/native/index.js"
|
|
178
183
|
},
|
|
184
|
+
"./plugins/rust/reqwest": {
|
|
185
|
+
"import": "./dist/plugins/rust/reqwest/index.js",
|
|
186
|
+
"types": "./dist/plugins/rust/reqwest/index.d.ts",
|
|
187
|
+
"default": "./dist/plugins/rust/reqwest/index.js"
|
|
188
|
+
},
|
|
179
189
|
"./plugins/shell/curl": {
|
|
180
190
|
"import": "./dist/plugins/shell/curl/index.js",
|
|
181
191
|
"types": "./dist/plugins/shell/curl/index.d.ts",
|
|
@@ -208,12 +218,12 @@
|
|
|
208
218
|
],
|
|
209
219
|
"module": "./dist/index.js",
|
|
210
220
|
"dependencies": {
|
|
211
|
-
"stringify-object": "^5.0.0"
|
|
221
|
+
"stringify-object": "^5.0.0",
|
|
222
|
+
"@scalar/types": "0.2.7"
|
|
212
223
|
},
|
|
213
224
|
"devDependencies": {
|
|
214
225
|
"vite": "5.4.19",
|
|
215
|
-
"@scalar/build-tooling": "0.2.
|
|
216
|
-
"@scalar/types": "0.2.1"
|
|
226
|
+
"@scalar/build-tooling": "0.2.4"
|
|
217
227
|
},
|
|
218
228
|
"scripts": {
|
|
219
229
|
"build": "scalar-build-esbuild",
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { cLibcurl } from "./libcurl.js";
|
|
3
|
-
describe("cLibcurl", () => {
|
|
4
|
-
it("returns a basic request", () => {
|
|
5
|
-
const result = cLibcurl.generate({
|
|
6
|
-
url: "https://example.com"
|
|
7
|
-
});
|
|
8
|
-
expect(result).toBe(
|
|
9
|
-
`CURL *hnd = curl_easy_init();
|
|
10
|
-
|
|
11
|
-
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
|
|
12
|
-
curl_easy_setopt(hnd, CURLOPT_URL, "https://example.com");
|
|
13
|
-
|
|
14
|
-
CURLcode ret = curl_easy_perform(hnd);`
|
|
15
|
-
);
|
|
16
|
-
});
|
|
17
|
-
it("returns a POST request", () => {
|
|
18
|
-
const result = cLibcurl.generate({
|
|
19
|
-
url: "https://example.com",
|
|
20
|
-
method: "post"
|
|
21
|
-
});
|
|
22
|
-
expect(result).toBe(
|
|
23
|
-
`CURL *hnd = curl_easy_init();
|
|
24
|
-
|
|
25
|
-
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
|
|
26
|
-
curl_easy_setopt(hnd, CURLOPT_URL, "https://example.com");
|
|
27
|
-
|
|
28
|
-
CURLcode ret = curl_easy_perform(hnd);`
|
|
29
|
-
);
|
|
30
|
-
});
|
|
31
|
-
it("has headers", () => {
|
|
32
|
-
const result = cLibcurl.generate({
|
|
33
|
-
url: "https://example.com",
|
|
34
|
-
headers: [
|
|
35
|
-
{
|
|
36
|
-
name: "Content-Type",
|
|
37
|
-
value: "application/json"
|
|
38
|
-
}
|
|
39
|
-
]
|
|
40
|
-
});
|
|
41
|
-
expect(result).toBe(
|
|
42
|
-
`CURL *hnd = curl_easy_init();
|
|
43
|
-
|
|
44
|
-
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
|
|
45
|
-
curl_easy_setopt(hnd, CURLOPT_URL, "https://example.com");
|
|
46
|
-
|
|
47
|
-
struct curl_slist *headers = NULL;
|
|
48
|
-
headers = curl_slist_append(headers, "Content-Type: application/json");
|
|
49
|
-
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
|
|
50
|
-
|
|
51
|
-
CURLcode ret = curl_easy_perform(hnd);`
|
|
52
|
-
);
|
|
53
|
-
});
|
|
54
|
-
it("handles multipart form data with files", () => {
|
|
55
|
-
const result = cLibcurl.generate({
|
|
56
|
-
url: "https://example.com",
|
|
57
|
-
method: "POST",
|
|
58
|
-
postData: {
|
|
59
|
-
mimeType: "multipart/form-data",
|
|
60
|
-
params: [
|
|
61
|
-
{
|
|
62
|
-
name: "file",
|
|
63
|
-
fileName: "test.txt"
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
name: "field",
|
|
67
|
-
value: "value"
|
|
68
|
-
}
|
|
69
|
-
]
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
expect(result).toBe(
|
|
73
|
-
`CURL *hnd = curl_easy_init();
|
|
74
|
-
|
|
75
|
-
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
|
|
76
|
-
curl_easy_setopt(hnd, CURLOPT_URL, "https://example.com");
|
|
77
|
-
|
|
78
|
-
curl_mime *mime = curl_mime_init(hnd);
|
|
79
|
-
|
|
80
|
-
{
|
|
81
|
-
curl_mimepart *part = curl_mime_addpart(mime);
|
|
82
|
-
curl_mime_name(part, "file");
|
|
83
|
-
curl_mime_filedata(part, "test.txt");
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
{
|
|
87
|
-
curl_mimepart *part = curl_mime_addpart(mime);
|
|
88
|
-
curl_mime_name(part, "field");
|
|
89
|
-
curl_mime_data(part, "value", CURL_ZERO_TERMINATED);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
curl_easy_setopt(hnd, CURLOPT_MIMEPOST, mime);
|
|
93
|
-
|
|
94
|
-
CURLcode ret = curl_easy_perform(hnd);`
|
|
95
|
-
);
|
|
96
|
-
});
|
|
97
|
-
it("handles url-encoded form data with special characters", () => {
|
|
98
|
-
const result = cLibcurl.generate({
|
|
99
|
-
url: "https://example.com",
|
|
100
|
-
method: "POST",
|
|
101
|
-
postData: {
|
|
102
|
-
mimeType: "application/x-www-form-urlencoded",
|
|
103
|
-
params: [
|
|
104
|
-
{
|
|
105
|
-
name: "special chars!@#",
|
|
106
|
-
value: "value"
|
|
107
|
-
}
|
|
108
|
-
]
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
expect(result).toBe(
|
|
112
|
-
`CURL *hnd = curl_easy_init();
|
|
113
|
-
|
|
114
|
-
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
|
|
115
|
-
curl_easy_setopt(hnd, CURLOPT_URL, "https://example.com");
|
|
116
|
-
|
|
117
|
-
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "special+chars%21%40%23=value");
|
|
118
|
-
|
|
119
|
-
CURLcode ret = curl_easy_perform(hnd);`
|
|
120
|
-
);
|
|
121
|
-
});
|
|
122
|
-
it("handles binary data", () => {
|
|
123
|
-
const result = cLibcurl.generate({
|
|
124
|
-
url: "https://example.com",
|
|
125
|
-
method: "POST",
|
|
126
|
-
postData: {
|
|
127
|
-
mimeType: "application/octet-stream",
|
|
128
|
-
text: "binary content"
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
expect(result).toBe(
|
|
132
|
-
`CURL *hnd = curl_easy_init();
|
|
133
|
-
|
|
134
|
-
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
|
|
135
|
-
curl_easy_setopt(hnd, CURLOPT_URL, "https://example.com");
|
|
136
|
-
|
|
137
|
-
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "binary content");
|
|
138
|
-
|
|
139
|
-
CURLcode ret = curl_easy_perform(hnd);`
|
|
140
|
-
);
|
|
141
|
-
});
|
|
142
|
-
it("handles special characters in URL", () => {
|
|
143
|
-
const result = cLibcurl.generate({
|
|
144
|
-
url: "https://example.com/path with spaces/[brackets]"
|
|
145
|
-
});
|
|
146
|
-
expect(result).toBe(
|
|
147
|
-
`CURL *hnd = curl_easy_init();
|
|
148
|
-
|
|
149
|
-
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
|
|
150
|
-
curl_easy_setopt(hnd, CURLOPT_URL, "https://example.com/path%20with%20spaces/[brackets]");
|
|
151
|
-
|
|
152
|
-
CURLcode ret = curl_easy_perform(hnd);`
|
|
153
|
-
);
|
|
154
|
-
});
|
|
155
|
-
it("handles multiple headers with same name", () => {
|
|
156
|
-
const result = cLibcurl.generate({
|
|
157
|
-
url: "https://example.com",
|
|
158
|
-
headers: [
|
|
159
|
-
{ name: "X-Custom", value: "value1" },
|
|
160
|
-
{ name: "X-Custom", value: "value2" }
|
|
161
|
-
]
|
|
162
|
-
});
|
|
163
|
-
expect(result).toBe(
|
|
164
|
-
`CURL *hnd = curl_easy_init();
|
|
165
|
-
|
|
166
|
-
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
|
|
167
|
-
curl_easy_setopt(hnd, CURLOPT_URL, "https://example.com");
|
|
168
|
-
|
|
169
|
-
struct curl_slist *headers = NULL;
|
|
170
|
-
headers = curl_slist_append(headers, "X-Custom: value2");
|
|
171
|
-
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
|
|
172
|
-
|
|
173
|
-
CURLcode ret = curl_easy_perform(hnd);`
|
|
174
|
-
);
|
|
175
|
-
});
|
|
176
|
-
it("handles headers with empty values", () => {
|
|
177
|
-
const result = cLibcurl.generate({
|
|
178
|
-
url: "https://example.com",
|
|
179
|
-
headers: [{ name: "X-Empty", value: "" }]
|
|
180
|
-
});
|
|
181
|
-
expect(result).toBe(
|
|
182
|
-
`CURL *hnd = curl_easy_init();
|
|
183
|
-
|
|
184
|
-
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
|
|
185
|
-
curl_easy_setopt(hnd, CURLOPT_URL, "https://example.com");
|
|
186
|
-
|
|
187
|
-
struct curl_slist *headers = NULL;
|
|
188
|
-
headers = curl_slist_append(headers, "X-Empty;");
|
|
189
|
-
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
|
|
190
|
-
|
|
191
|
-
CURLcode ret = curl_easy_perform(hnd);`
|
|
192
|
-
);
|
|
193
|
-
});
|
|
194
|
-
it("handles query string parameters", () => {
|
|
195
|
-
const result = cLibcurl.generate({
|
|
196
|
-
url: "https://example.com/api?param1=value1¶m2=special value¶m3=123"
|
|
197
|
-
});
|
|
198
|
-
expect(result).toBe(
|
|
199
|
-
`CURL *hnd = curl_easy_init();
|
|
200
|
-
|
|
201
|
-
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
|
|
202
|
-
curl_easy_setopt(hnd, CURLOPT_URL, "https://example.com/api?param1=value1¶m2=special%20value¶m3=123");
|
|
203
|
-
|
|
204
|
-
CURLcode ret = curl_easy_perform(hnd);`
|
|
205
|
-
);
|
|
206
|
-
});
|
|
207
|
-
});
|
|
208
|
-
//# sourceMappingURL=libcurl.test.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/plugins/c/libcurl/libcurl.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { describe, expect, it } from 'vitest'\n\nimport { cLibcurl } from './libcurl'\n\ndescribe('cLibcurl', () => {\n it('returns a basic request', () => {\n const result = cLibcurl.generate({\n url: 'https://example.com',\n })\n\n expect(result).toBe(\n `CURL *hnd = curl_easy_init();\n\ncurl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, \"GET\");\ncurl_easy_setopt(hnd, CURLOPT_URL, \"https://example.com\");\n\nCURLcode ret = curl_easy_perform(hnd);`,\n )\n })\n\n it('returns a POST request', () => {\n const result = cLibcurl.generate({\n url: 'https://example.com',\n method: 'post',\n })\n\n expect(result).toBe(\n `CURL *hnd = curl_easy_init();\n\ncurl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, \"POST\");\ncurl_easy_setopt(hnd, CURLOPT_URL, \"https://example.com\");\n\nCURLcode ret = curl_easy_perform(hnd);`,\n )\n })\n\n it('has headers', () => {\n const result = cLibcurl.generate({\n url: 'https://example.com',\n headers: [\n {\n name: 'Content-Type',\n value: 'application/json',\n },\n ],\n })\n expect(result).toBe(\n `CURL *hnd = curl_easy_init();\n\ncurl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, \"GET\");\ncurl_easy_setopt(hnd, CURLOPT_URL, \"https://example.com\");\n\nstruct curl_slist *headers = NULL;\nheaders = curl_slist_append(headers, \"Content-Type: application/json\");\ncurl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);\n\nCURLcode ret = curl_easy_perform(hnd);`,\n )\n })\n\n it('handles multipart form data with files', () => {\n const result = cLibcurl.generate({\n url: 'https://example.com',\n method: 'POST',\n postData: {\n mimeType: 'multipart/form-data',\n params: [\n {\n name: 'file',\n fileName: 'test.txt',\n },\n {\n name: 'field',\n value: 'value',\n },\n ],\n },\n })\n\n expect(result).toBe(\n `CURL *hnd = curl_easy_init();\n\ncurl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, \"POST\");\ncurl_easy_setopt(hnd, CURLOPT_URL, \"https://example.com\");\n\ncurl_mime *mime = curl_mime_init(hnd);\n\n{\n curl_mimepart *part = curl_mime_addpart(mime);\n curl_mime_name(part, \"file\");\n curl_mime_filedata(part, \"test.txt\");\n}\n\n{\n curl_mimepart *part = curl_mime_addpart(mime);\n curl_mime_name(part, \"field\");\n curl_mime_data(part, \"value\", CURL_ZERO_TERMINATED);\n}\n\ncurl_easy_setopt(hnd, CURLOPT_MIMEPOST, mime);\n\nCURLcode ret = curl_easy_perform(hnd);`,\n )\n })\n\n it('handles url-encoded form data with special characters', () => {\n const result = cLibcurl.generate({\n url: 'https://example.com',\n method: 'POST',\n postData: {\n mimeType: 'application/x-www-form-urlencoded',\n params: [\n {\n name: 'special chars!@#',\n value: 'value',\n },\n ],\n },\n })\n\n expect(result).toBe(\n `CURL *hnd = curl_easy_init();\n\ncurl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, \"POST\");\ncurl_easy_setopt(hnd, CURLOPT_URL, \"https://example.com\");\n\ncurl_easy_setopt(hnd, CURLOPT_POSTFIELDS, \"special+chars%21%40%23=value\");\n\nCURLcode ret = curl_easy_perform(hnd);`,\n )\n })\n\n it('handles binary data', () => {\n const result = cLibcurl.generate({\n url: 'https://example.com',\n method: 'POST',\n postData: {\n mimeType: 'application/octet-stream',\n text: 'binary content',\n },\n })\n\n expect(result).toBe(\n `CURL *hnd = curl_easy_init();\n\ncurl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, \"POST\");\ncurl_easy_setopt(hnd, CURLOPT_URL, \"https://example.com\");\n\ncurl_easy_setopt(hnd, CURLOPT_POSTFIELDS, \"binary content\");\n\nCURLcode ret = curl_easy_perform(hnd);`,\n )\n })\n\n it('handles special characters in URL', () => {\n const result = cLibcurl.generate({\n url: 'https://example.com/path with spaces/[brackets]',\n })\n\n expect(result).toBe(\n `CURL *hnd = curl_easy_init();\n\ncurl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, \"GET\");\ncurl_easy_setopt(hnd, CURLOPT_URL, \"https://example.com/path%20with%20spaces/[brackets]\");\n\nCURLcode ret = curl_easy_perform(hnd);`,\n )\n })\n\n it('handles multiple headers with same name', () => {\n const result = cLibcurl.generate({\n url: 'https://example.com',\n headers: [\n { name: 'X-Custom', value: 'value1' },\n { name: 'X-Custom', value: 'value2' },\n ],\n })\n\n expect(result).toBe(\n `CURL *hnd = curl_easy_init();\n\ncurl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, \"GET\");\ncurl_easy_setopt(hnd, CURLOPT_URL, \"https://example.com\");\n\nstruct curl_slist *headers = NULL;\nheaders = curl_slist_append(headers, \"X-Custom: value2\");\ncurl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);\n\nCURLcode ret = curl_easy_perform(hnd);`,\n )\n })\n\n it('handles headers with empty values', () => {\n const result = cLibcurl.generate({\n url: 'https://example.com',\n headers: [{ name: 'X-Empty', value: '' }],\n })\n\n expect(result).toBe(\n `CURL *hnd = curl_easy_init();\n\ncurl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, \"GET\");\ncurl_easy_setopt(hnd, CURLOPT_URL, \"https://example.com\");\n\nstruct curl_slist *headers = NULL;\nheaders = curl_slist_append(headers, \"X-Empty;\");\ncurl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);\n\nCURLcode ret = curl_easy_perform(hnd);`,\n )\n })\n\n it('handles query string parameters', () => {\n const result = cLibcurl.generate({\n url: 'https://example.com/api?param1=value1¶m2=special value¶m3=123',\n })\n\n expect(result).toBe(\n `CURL *hnd = curl_easy_init();\n\ncurl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, \"GET\");\ncurl_easy_setopt(hnd, CURLOPT_URL, \"https://example.com/api?param1=value1¶m2=special%20value¶m3=123\");\n\nCURLcode ret = curl_easy_perform(hnd);`,\n )\n })\n})\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { clojureCljhttp } from "./clj_http.js";
|
|
3
|
-
describe("clojureCljhttp", () => {
|
|
4
|
-
it("returns a basic request", () => {
|
|
5
|
-
const result = clojureCljhttp.generate({
|
|
6
|
-
url: "https://example.com"
|
|
7
|
-
});
|
|
8
|
-
expect(result).toBe(
|
|
9
|
-
`(require '[clj-http.client :as client])
|
|
10
|
-
|
|
11
|
-
(client/get "https://example.com")`
|
|
12
|
-
);
|
|
13
|
-
});
|
|
14
|
-
it("returns a POST request", () => {
|
|
15
|
-
const result = clojureCljhttp.generate({
|
|
16
|
-
url: "https://example.com",
|
|
17
|
-
method: "post"
|
|
18
|
-
});
|
|
19
|
-
expect(result).toBe(
|
|
20
|
-
`(require '[clj-http.client :as client])
|
|
21
|
-
|
|
22
|
-
(client/post "https://example.com")`
|
|
23
|
-
);
|
|
24
|
-
});
|
|
25
|
-
it("has headers", () => {
|
|
26
|
-
const result = clojureCljhttp.generate({
|
|
27
|
-
url: "https://example.com",
|
|
28
|
-
headers: [
|
|
29
|
-
{
|
|
30
|
-
name: "Content-Type",
|
|
31
|
-
value: "application/json"
|
|
32
|
-
}
|
|
33
|
-
]
|
|
34
|
-
});
|
|
35
|
-
expect(result).toBe(
|
|
36
|
-
`(require '[clj-http.client :as client])
|
|
37
|
-
|
|
38
|
-
(client/get "https://example.com" {:headers {:Content-Type "application/json"}})`
|
|
39
|
-
);
|
|
40
|
-
});
|
|
41
|
-
it("handles multipart form data with files", () => {
|
|
42
|
-
const result = clojureCljhttp.generate({
|
|
43
|
-
url: "https://example.com",
|
|
44
|
-
method: "POST",
|
|
45
|
-
postData: {
|
|
46
|
-
mimeType: "multipart/form-data",
|
|
47
|
-
params: [
|
|
48
|
-
{
|
|
49
|
-
name: "file",
|
|
50
|
-
fileName: "test.txt"
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
name: "field",
|
|
54
|
-
value: "value"
|
|
55
|
-
}
|
|
56
|
-
]
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
expect(result).toBe(
|
|
60
|
-
`(require '[clj-http.client :as client])
|
|
61
|
-
|
|
62
|
-
(client/post "https://example.com" {:multipart [{:name "file"
|
|
63
|
-
:content (clojure.java.io/file "test.txt")} {:name "field"
|
|
64
|
-
:content "value"}]})`
|
|
65
|
-
);
|
|
66
|
-
});
|
|
67
|
-
it("handles url-encoded form data with special characters", () => {
|
|
68
|
-
const result = clojureCljhttp.generate({
|
|
69
|
-
url: "https://example.com",
|
|
70
|
-
method: "POST",
|
|
71
|
-
postData: {
|
|
72
|
-
mimeType: "application/x-www-form-urlencoded",
|
|
73
|
-
params: [
|
|
74
|
-
{
|
|
75
|
-
name: "special chars!@#",
|
|
76
|
-
value: "value"
|
|
77
|
-
}
|
|
78
|
-
]
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
expect(result).toBe(
|
|
82
|
-
`(require '[clj-http.client :as client])
|
|
83
|
-
|
|
84
|
-
(client/post "https://example.com" {:form-params {:special chars!@# "value"}})`
|
|
85
|
-
);
|
|
86
|
-
});
|
|
87
|
-
it.skip("handles binary data", () => {
|
|
88
|
-
const result = clojureCljhttp.generate({
|
|
89
|
-
url: "https://example.com",
|
|
90
|
-
method: "POST",
|
|
91
|
-
postData: {
|
|
92
|
-
mimeType: "application/octet-stream",
|
|
93
|
-
text: "binary content"
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
expect(result).toBe(
|
|
97
|
-
`(require '[clj-http.client :as client])
|
|
98
|
-
|
|
99
|
-
(client/post "https://example.com" {:body "binary content"
|
|
100
|
-
:content-type :application/octet-stream})`
|
|
101
|
-
);
|
|
102
|
-
});
|
|
103
|
-
it("handles special characters in URL", () => {
|
|
104
|
-
const result = clojureCljhttp.generate({
|
|
105
|
-
url: "https://example.com/path with spaces/[brackets]"
|
|
106
|
-
});
|
|
107
|
-
expect(result).toBe(
|
|
108
|
-
`(require '[clj-http.client :as client])
|
|
109
|
-
|
|
110
|
-
(client/get "https://example.com/path%20with%20spaces/[brackets]")`
|
|
111
|
-
);
|
|
112
|
-
});
|
|
113
|
-
it("handles multiple headers with same name", () => {
|
|
114
|
-
const result = clojureCljhttp.generate({
|
|
115
|
-
url: "https://example.com",
|
|
116
|
-
headers: [
|
|
117
|
-
{ name: "X-Custom", value: "value1" },
|
|
118
|
-
{ name: "X-Custom", value: "value2" }
|
|
119
|
-
]
|
|
120
|
-
});
|
|
121
|
-
expect(result).toBe(
|
|
122
|
-
`(require '[clj-http.client :as client])
|
|
123
|
-
|
|
124
|
-
(client/get "https://example.com" {:headers {:X-Custom "value2"}})`
|
|
125
|
-
);
|
|
126
|
-
});
|
|
127
|
-
it("handles headers with empty values", () => {
|
|
128
|
-
const result = clojureCljhttp.generate({
|
|
129
|
-
url: "https://example.com",
|
|
130
|
-
headers: [{ name: "X-Empty", value: "" }]
|
|
131
|
-
});
|
|
132
|
-
expect(result).toBe(
|
|
133
|
-
`(require '[clj-http.client :as client])
|
|
134
|
-
|
|
135
|
-
(client/get "https://example.com" {:headers {:X-Empty ""}})`
|
|
136
|
-
);
|
|
137
|
-
});
|
|
138
|
-
it("handles query string parameters", () => {
|
|
139
|
-
const result = clojureCljhttp.generate({
|
|
140
|
-
url: "https://example.com/api?param1=value1¶m2=special value¶m3=123"
|
|
141
|
-
});
|
|
142
|
-
expect(result).toBe(
|
|
143
|
-
`(require '[clj-http.client :as client])
|
|
144
|
-
|
|
145
|
-
(client/get "https://example.com/api" {:query-params {:param1 "value1"
|
|
146
|
-
:param2 "special value"
|
|
147
|
-
:param3 "123"}})`
|
|
148
|
-
);
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
//# sourceMappingURL=clj_http.test.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/plugins/clojure/clj_http/clj_http.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { describe, expect, it } from 'vitest'\n\nimport { clojureCljhttp } from './clj_http'\n\ndescribe('clojureCljhttp', () => {\n it('returns a basic request', () => {\n const result = clojureCljhttp.generate({\n url: 'https://example.com',\n })\n\n expect(result).toBe(\n `(require '[clj-http.client :as client])\n\n(client/get \"https://example.com\")`,\n )\n })\n\n it('returns a POST request', () => {\n const result = clojureCljhttp.generate({\n url: 'https://example.com',\n method: 'post',\n })\n\n expect(result).toBe(\n `(require '[clj-http.client :as client])\n\n(client/post \"https://example.com\")`,\n )\n })\n\n it('has headers', () => {\n const result = clojureCljhttp.generate({\n url: 'https://example.com',\n headers: [\n {\n name: 'Content-Type',\n value: 'application/json',\n },\n ],\n })\n expect(result).toBe(\n `(require '[clj-http.client :as client])\n\n(client/get \"https://example.com\" {:headers {:Content-Type \"application/json\"}})`,\n )\n })\n\n it('handles multipart form data with files', () => {\n const result = clojureCljhttp.generate({\n url: 'https://example.com',\n method: 'POST',\n postData: {\n mimeType: 'multipart/form-data',\n params: [\n {\n name: 'file',\n fileName: 'test.txt',\n },\n {\n name: 'field',\n value: 'value',\n },\n ],\n },\n })\n\n expect(result).toBe(\n `(require '[clj-http.client :as client])\n\n(client/post \"https://example.com\" {:multipart [{:name \"file\"\n :content (clojure.java.io/file \"test.txt\")} {:name \"field\"\n :content \"value\"}]})`,\n )\n })\n\n it('handles url-encoded form data with special characters', () => {\n const result = clojureCljhttp.generate({\n url: 'https://example.com',\n method: 'POST',\n postData: {\n mimeType: 'application/x-www-form-urlencoded',\n params: [\n {\n name: 'special chars!@#',\n value: 'value',\n },\n ],\n },\n })\n\n expect(result).toBe(\n `(require '[clj-http.client :as client])\n\n(client/post \"https://example.com\" {:form-params {:special chars!@# \"value\"}})`,\n )\n })\n\n it.skip('handles binary data', () => {\n const result = clojureCljhttp.generate({\n url: 'https://example.com',\n method: 'POST',\n postData: {\n mimeType: 'application/octet-stream',\n text: 'binary content',\n },\n })\n\n expect(result).toBe(\n `(require '[clj-http.client :as client])\n\n(client/post \"https://example.com\" {:body \"binary content\"\n :content-type :application/octet-stream})`,\n )\n })\n\n it('handles special characters in URL', () => {\n const result = clojureCljhttp.generate({\n url: 'https://example.com/path with spaces/[brackets]',\n })\n\n expect(result).toBe(\n `(require '[clj-http.client :as client])\n\n(client/get \"https://example.com/path%20with%20spaces/[brackets]\")`,\n )\n })\n\n it('handles multiple headers with same name', () => {\n const result = clojureCljhttp.generate({\n url: 'https://example.com',\n headers: [\n { name: 'X-Custom', value: 'value1' },\n { name: 'X-Custom', value: 'value2' },\n ],\n })\n\n expect(result).toBe(\n `(require '[clj-http.client :as client])\n\n(client/get \"https://example.com\" {:headers {:X-Custom \"value2\"}})`,\n )\n })\n\n it('handles headers with empty values', () => {\n const result = clojureCljhttp.generate({\n url: 'https://example.com',\n headers: [{ name: 'X-Empty', value: '' }],\n })\n\n expect(result).toBe(\n `(require '[clj-http.client :as client])\n\n(client/get \"https://example.com\" {:headers {:X-Empty \"\"}})`,\n )\n })\n\n it('handles query string parameters', () => {\n const result = clojureCljhttp.generate({\n url: 'https://example.com/api?param1=value1¶m2=special value¶m3=123',\n })\n\n expect(result).toBe(\n `(require '[clj-http.client :as client])\n\n(client/get \"https://example.com/api\" {:query-params {:param1 \"value1\"\n :param2 \"special value\"\n :param3 \"123\"}})`,\n )\n })\n})\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|