@ohos-ports/curlconverter 4.12.0-beta.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.
Files changed (270) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +153 -0
  3. package/dist/src/Headers.d.ts +23 -0
  4. package/dist/src/Headers.js +287 -0
  5. package/dist/src/Headers.js.map +1 -0
  6. package/dist/src/Query.d.ts +8 -0
  7. package/dist/src/Query.js +136 -0
  8. package/dist/src/Query.js.map +1 -0
  9. package/dist/src/Request.d.ts +200 -0
  10. package/dist/src/Request.js +1191 -0
  11. package/dist/src/Request.js.map +1 -0
  12. package/dist/src/Warnings.d.ts +15 -0
  13. package/dist/src/Warnings.js +111 -0
  14. package/dist/src/Warnings.js.map +1 -0
  15. package/dist/src/cli.d.ts +2 -0
  16. package/dist/src/cli.js +333 -0
  17. package/dist/src/cli.js.map +1 -0
  18. package/dist/src/curl/auth.d.ts +12 -0
  19. package/dist/src/curl/auth.js +40 -0
  20. package/dist/src/curl/auth.js.map +1 -0
  21. package/dist/src/curl/form.d.ts +28 -0
  22. package/dist/src/curl/form.js +218 -0
  23. package/dist/src/curl/form.js.map +1 -0
  24. package/dist/src/curl/opts.d.ts +2052 -0
  25. package/dist/src/curl/opts.js +1000 -0
  26. package/dist/src/curl/opts.js.map +1 -0
  27. package/dist/src/curl/url.d.ts +14 -0
  28. package/dist/src/curl/url.js +218 -0
  29. package/dist/src/curl/url.js.map +1 -0
  30. package/dist/src/generators/ansible.d.ts +5 -0
  31. package/dist/src/generators/ansible.js +282 -0
  32. package/dist/src/generators/ansible.js.map +1 -0
  33. package/dist/src/generators/c.d.ts +12 -0
  34. package/dist/src/generators/c.js +1230 -0
  35. package/dist/src/generators/c.js.map +1 -0
  36. package/dist/src/generators/cfml.d.ts +5 -0
  37. package/dist/src/generators/cfml.js +134 -0
  38. package/dist/src/generators/cfml.js.map +1 -0
  39. package/dist/src/generators/clojure.d.ts +7 -0
  40. package/dist/src/generators/clojure.js +436 -0
  41. package/dist/src/generators/clojure.js.map +1 -0
  42. package/dist/src/generators/csharp.d.ts +8 -0
  43. package/dist/src/generators/csharp.js +356 -0
  44. package/dist/src/generators/csharp.js.map +1 -0
  45. package/dist/src/generators/dart.d.ts +5 -0
  46. package/dist/src/generators/dart.js +273 -0
  47. package/dist/src/generators/dart.js.map +1 -0
  48. package/dist/src/generators/elixir.d.ts +8 -0
  49. package/dist/src/generators/elixir.js +296 -0
  50. package/dist/src/generators/elixir.js.map +1 -0
  51. package/dist/src/generators/go.d.ts +5 -0
  52. package/dist/src/generators/go.js +228 -0
  53. package/dist/src/generators/go.js.map +1 -0
  54. package/dist/src/generators/har.d.ts +7 -0
  55. package/dist/src/generators/har.js +115 -0
  56. package/dist/src/generators/har.js.map +1 -0
  57. package/dist/src/generators/http.d.ts +7 -0
  58. package/dist/src/generators/http.js +165 -0
  59. package/dist/src/generators/http.js.map +1 -0
  60. package/dist/src/generators/httpie.d.ts +5 -0
  61. package/dist/src/generators/httpie.js +446 -0
  62. package/dist/src/generators/httpie.js.map +1 -0
  63. package/dist/src/generators/java/httpurlconnection.d.ts +5 -0
  64. package/dist/src/generators/java/httpurlconnection.js +123 -0
  65. package/dist/src/generators/java/httpurlconnection.js.map +1 -0
  66. package/dist/src/generators/java/java.d.ts +8 -0
  67. package/dist/src/generators/java/java.js +247 -0
  68. package/dist/src/generators/java/java.js.map +1 -0
  69. package/dist/src/generators/java/jsoup.d.ts +5 -0
  70. package/dist/src/generators/java/jsoup.js +152 -0
  71. package/dist/src/generators/java/jsoup.js.map +1 -0
  72. package/dist/src/generators/java/okhttp.d.ts +5 -0
  73. package/dist/src/generators/java/okhttp.js +232 -0
  74. package/dist/src/generators/java/okhttp.js.map +1 -0
  75. package/dist/src/generators/javascript/axios.d.ts +5 -0
  76. package/dist/src/generators/javascript/axios.js +332 -0
  77. package/dist/src/generators/javascript/axios.js.map +1 -0
  78. package/dist/src/generators/javascript/got.d.ts +5 -0
  79. package/dist/src/generators/javascript/got.js +277 -0
  80. package/dist/src/generators/javascript/got.js.map +1 -0
  81. package/dist/src/generators/javascript/http.d.ts +8 -0
  82. package/dist/src/generators/javascript/http.js +183 -0
  83. package/dist/src/generators/javascript/http.js.map +1 -0
  84. package/dist/src/generators/javascript/javascript.d.ts +37 -0
  85. package/dist/src/generators/javascript/javascript.js +676 -0
  86. package/dist/src/generators/javascript/javascript.js.map +1 -0
  87. package/dist/src/generators/javascript/jquery.d.ts +15 -0
  88. package/dist/src/generators/javascript/jquery.js +297 -0
  89. package/dist/src/generators/javascript/jquery.js.map +1 -0
  90. package/dist/src/generators/javascript/ky.d.ts +7 -0
  91. package/dist/src/generators/javascript/ky.js +245 -0
  92. package/dist/src/generators/javascript/ky.js.map +1 -0
  93. package/dist/src/generators/javascript/request.d.ts +5 -0
  94. package/dist/src/generators/javascript/request.js +113 -0
  95. package/dist/src/generators/javascript/request.js.map +1 -0
  96. package/dist/src/generators/javascript/superagent.d.ts +10 -0
  97. package/dist/src/generators/javascript/superagent.js +301 -0
  98. package/dist/src/generators/javascript/superagent.js.map +1 -0
  99. package/dist/src/generators/javascript/xhr.d.ts +8 -0
  100. package/dist/src/generators/javascript/xhr.js +147 -0
  101. package/dist/src/generators/javascript/xhr.js.map +1 -0
  102. package/dist/src/generators/json.d.ts +45 -0
  103. package/dist/src/generators/json.js +197 -0
  104. package/dist/src/generators/json.js.map +1 -0
  105. package/dist/src/generators/julia.d.ts +8 -0
  106. package/dist/src/generators/julia.js +365 -0
  107. package/dist/src/generators/julia.js.map +1 -0
  108. package/dist/src/generators/kotlin.d.ts +8 -0
  109. package/dist/src/generators/kotlin.js +325 -0
  110. package/dist/src/generators/kotlin.js.map +1 -0
  111. package/dist/src/generators/lua.d.ts +5 -0
  112. package/dist/src/generators/lua.js +192 -0
  113. package/dist/src/generators/lua.js.map +1 -0
  114. package/dist/src/generators/matlab/common.d.ts +16 -0
  115. package/dist/src/generators/matlab/common.js +238 -0
  116. package/dist/src/generators/matlab/common.js.map +1 -0
  117. package/dist/src/generators/matlab/httpinterface.d.ts +2 -0
  118. package/dist/src/generators/matlab/httpinterface.js +211 -0
  119. package/dist/src/generators/matlab/httpinterface.js.map +1 -0
  120. package/dist/src/generators/matlab/matlab.d.ts +5 -0
  121. package/dist/src/generators/matlab/matlab.js +29 -0
  122. package/dist/src/generators/matlab/matlab.js.map +1 -0
  123. package/dist/src/generators/matlab/webservices.d.ts +2 -0
  124. package/dist/src/generators/matlab/webservices.js +191 -0
  125. package/dist/src/generators/matlab/webservices.js.map +1 -0
  126. package/dist/src/generators/objectivec.d.ts +8 -0
  127. package/dist/src/generators/objectivec.js +269 -0
  128. package/dist/src/generators/objectivec.js.map +1 -0
  129. package/dist/src/generators/ocaml.d.ts +8 -0
  130. package/dist/src/generators/ocaml.js +150 -0
  131. package/dist/src/generators/ocaml.js.map +1 -0
  132. package/dist/src/generators/perl.d.ts +9 -0
  133. package/dist/src/generators/perl.js +209 -0
  134. package/dist/src/generators/perl.js.map +1 -0
  135. package/dist/src/generators/php/guzzle.d.ts +5 -0
  136. package/dist/src/generators/php/guzzle.js +328 -0
  137. package/dist/src/generators/php/guzzle.js.map +1 -0
  138. package/dist/src/generators/php/php.d.ts +8 -0
  139. package/dist/src/generators/php/php.js +217 -0
  140. package/dist/src/generators/php/php.js.map +1 -0
  141. package/dist/src/generators/php/requests.d.ts +5 -0
  142. package/dist/src/generators/php/requests.js +89 -0
  143. package/dist/src/generators/php/requests.js.map +1 -0
  144. package/dist/src/generators/powershell.d.ts +11 -0
  145. package/dist/src/generators/powershell.js +377 -0
  146. package/dist/src/generators/powershell.js.map +1 -0
  147. package/dist/src/generators/python/http.d.ts +5 -0
  148. package/dist/src/generators/python/http.js +128 -0
  149. package/dist/src/generators/python/http.js.map +1 -0
  150. package/dist/src/generators/python/python.d.ts +22 -0
  151. package/dist/src/generators/python/python.js +1693 -0
  152. package/dist/src/generators/python/python.js.map +1 -0
  153. package/dist/src/generators/r/httr.d.ts +10 -0
  154. package/dist/src/generators/r/httr.js +298 -0
  155. package/dist/src/generators/r/httr.js.map +1 -0
  156. package/dist/src/generators/r/httr2.d.ts +5 -0
  157. package/dist/src/generators/r/httr2.js +214 -0
  158. package/dist/src/generators/r/httr2.js.map +1 -0
  159. package/dist/src/generators/ruby/httparty.d.ts +6 -0
  160. package/dist/src/generators/ruby/httparty.js +308 -0
  161. package/dist/src/generators/ruby/httparty.js.map +1 -0
  162. package/dist/src/generators/ruby/ruby.d.ts +14 -0
  163. package/dist/src/generators/ruby/ruby.js +515 -0
  164. package/dist/src/generators/ruby/ruby.js.map +1 -0
  165. package/dist/src/generators/rust.d.ts +8 -0
  166. package/dist/src/generators/rust.js +177 -0
  167. package/dist/src/generators/rust.js.map +1 -0
  168. package/dist/src/generators/swift.d.ts +8 -0
  169. package/dist/src/generators/swift.js +219 -0
  170. package/dist/src/generators/swift.js.map +1 -0
  171. package/dist/src/generators/wget.d.ts +8 -0
  172. package/dist/src/generators/wget.js +472 -0
  173. package/dist/src/generators/wget.js.map +1 -0
  174. package/dist/src/index.d.ts +53 -0
  175. package/dist/src/index.js +54 -0
  176. package/dist/src/index.js.map +1 -0
  177. package/dist/src/parse.d.ts +13 -0
  178. package/dist/src/parse.js +43 -0
  179. package/dist/src/parse.js.map +1 -0
  180. package/dist/src/shell/Parser.d.ts +4 -0
  181. package/dist/src/shell/Parser.js +6 -0
  182. package/dist/src/shell/Parser.js.map +1 -0
  183. package/dist/src/shell/Word.d.ts +48 -0
  184. package/dist/src/shell/Word.js +486 -0
  185. package/dist/src/shell/Word.js.map +1 -0
  186. package/dist/src/shell/tokenizer.d.ts +3 -0
  187. package/dist/src/shell/tokenizer.js +610 -0
  188. package/dist/src/shell/tokenizer.js.map +1 -0
  189. package/dist/src/shell/webParser.d.ts +4 -0
  190. package/dist/src/shell/webParser.js +15 -0
  191. package/dist/src/shell/webParser.js.map +1 -0
  192. package/dist/src/utils.d.ts +6 -0
  193. package/dist/src/utils.js +21 -0
  194. package/dist/src/utils.js.map +1 -0
  195. package/dist/tools/compare-requests.d.ts +2 -0
  196. package/dist/tools/compare-requests.js +448 -0
  197. package/dist/tools/compare-requests.js.map +1 -0
  198. package/dist/tools/gen-test.d.ts +2 -0
  199. package/dist/tools/gen-test.js +114 -0
  200. package/dist/tools/gen-test.js.map +1 -0
  201. package/dist/tree-sitter-bash.wasm +0 -0
  202. package/index.d.ts +3 -0
  203. package/package.json +97 -0
  204. package/src/Headers.ts +334 -0
  205. package/src/Query.ts +147 -0
  206. package/src/Request.ts +1649 -0
  207. package/src/Warnings.ts +154 -0
  208. package/src/cli.ts +561 -0
  209. package/src/curl/auth.ts +45 -0
  210. package/src/curl/form.ts +297 -0
  211. package/src/curl/opts.ts +1417 -0
  212. package/src/curl/url.ts +241 -0
  213. package/src/generators/ansible.ts +364 -0
  214. package/src/generators/c.ts +1371 -0
  215. package/src/generators/cfml.ts +155 -0
  216. package/src/generators/clojure.ts +521 -0
  217. package/src/generators/csharp.ts +383 -0
  218. package/src/generators/dart.ts +293 -0
  219. package/src/generators/elixir.ts +349 -0
  220. package/src/generators/go.ts +269 -0
  221. package/src/generators/har.ts +147 -0
  222. package/src/generators/http.ts +194 -0
  223. package/src/generators/httpie.ts +506 -0
  224. package/src/generators/java/httpurlconnection.ts +151 -0
  225. package/src/generators/java/java.ts +280 -0
  226. package/src/generators/java/jsoup.ts +172 -0
  227. package/src/generators/java/okhttp.ts +257 -0
  228. package/src/generators/javascript/axios.ts +395 -0
  229. package/src/generators/javascript/got.ts +362 -0
  230. package/src/generators/javascript/http.ts +232 -0
  231. package/src/generators/javascript/javascript.ts +825 -0
  232. package/src/generators/javascript/jquery.ts +360 -0
  233. package/src/generators/javascript/ky.ts +315 -0
  234. package/src/generators/javascript/request.ts +152 -0
  235. package/src/generators/javascript/superagent.ts +373 -0
  236. package/src/generators/javascript/xhr.ts +192 -0
  237. package/src/generators/json.ts +293 -0
  238. package/src/generators/julia.ts +398 -0
  239. package/src/generators/kotlin.ts +355 -0
  240. package/src/generators/lua.ts +209 -0
  241. package/src/generators/matlab/common.ts +281 -0
  242. package/src/generators/matlab/httpinterface.ts +284 -0
  243. package/src/generators/matlab/matlab.ts +39 -0
  244. package/src/generators/matlab/webservices.ts +263 -0
  245. package/src/generators/objectivec.ts +297 -0
  246. package/src/generators/ocaml.ts +168 -0
  247. package/src/generators/perl.ts +237 -0
  248. package/src/generators/php/guzzle.ts +368 -0
  249. package/src/generators/php/php.ts +239 -0
  250. package/src/generators/php/requests.ts +103 -0
  251. package/src/generators/powershell.ts +430 -0
  252. package/src/generators/python/http.ts +167 -0
  253. package/src/generators/python/python.ts +1934 -0
  254. package/src/generators/r/httr.ts +328 -0
  255. package/src/generators/r/httr2.ts +268 -0
  256. package/src/generators/ruby/httparty.ts +351 -0
  257. package/src/generators/ruby/ruby.ts +564 -0
  258. package/src/generators/rust.ts +243 -0
  259. package/src/generators/swift.ts +235 -0
  260. package/src/generators/wget.ts +533 -0
  261. package/src/index.ts +89 -0
  262. package/src/parse.ts +72 -0
  263. package/src/shell/Parser.ts +8 -0
  264. package/src/shell/Word.ts +531 -0
  265. package/src/shell/tokenizer.ts +736 -0
  266. package/src/shell/webParser.ts +18 -0
  267. package/src/utils.ts +25 -0
  268. package/tools/compare-requests.ts +571 -0
  269. package/tools/extract_curl_args.py +511 -0
  270. package/tools/gen-test.ts +129 -0
@@ -0,0 +1,154 @@
1
+ import type { Parser } from "./shell/Parser.js";
2
+ import type { GlobalConfig } from "./curl/opts.js";
3
+ import type { Request } from "./Request.js";
4
+
5
+ export type Warnings = [string, string][];
6
+
7
+ export function warnf(global_: GlobalConfig, warning: [string, string]) {
8
+ global_.warnings.push(warning);
9
+ }
10
+
11
+ function underline(
12
+ node: Parser.SyntaxNode | Parser.TreeCursor,
13
+ startIndex: number,
14
+ endIndex: number,
15
+ curlCommand: string,
16
+ ): string {
17
+ if (startIndex === endIndex) {
18
+ endIndex++;
19
+ }
20
+
21
+ // TODO: \r ?
22
+ let lineStart = startIndex;
23
+ if (startIndex > 0) {
24
+ // If it's -1 we're on the first line
25
+ lineStart = curlCommand.lastIndexOf("\n", startIndex - 1) + 1;
26
+ }
27
+
28
+ let underlineLength = endIndex - startIndex;
29
+ let lineEnd = curlCommand.indexOf("\n", startIndex);
30
+ if (lineEnd === -1) {
31
+ lineEnd = curlCommand.length;
32
+ } else if (lineEnd < endIndex) {
33
+ // Add extra "^" past the end of a line to signal that the node continues
34
+ underlineLength = lineEnd - startIndex + 1;
35
+ }
36
+
37
+ const line = curlCommand.slice(lineStart, lineEnd);
38
+ const underline =
39
+ " ".repeat(startIndex - lineStart) + "^".repeat(underlineLength);
40
+ return line + "\n" + underline;
41
+ }
42
+
43
+ export function underlineCursor(
44
+ node: Parser.TreeCursor,
45
+ curlCommand: string,
46
+ ): string {
47
+ return underline(node, node.startIndex, node.endIndex, curlCommand);
48
+ }
49
+
50
+ export function underlineNode(
51
+ node: Parser.SyntaxNode,
52
+ curlCommand?: string,
53
+ ): string {
54
+ // doesn't include leading whitespace
55
+ const command = node.tree.rootNode;
56
+ let startIndex = node.startIndex;
57
+ let endIndex = node.endIndex;
58
+ if (!curlCommand) {
59
+ curlCommand = command.text;
60
+ startIndex -= command.startIndex;
61
+ endIndex -= command.startIndex;
62
+ }
63
+ return underline(node, startIndex, endIndex, curlCommand);
64
+ }
65
+
66
+ export function underlineNodeEnd(
67
+ node: Parser.SyntaxNode,
68
+ curlCommand?: string,
69
+ ): string {
70
+ // doesn't include leading whitespace
71
+ const command = node.tree.rootNode;
72
+ let startIndex = node.startIndex;
73
+ let endIndex = node.endIndex;
74
+ if (!curlCommand) {
75
+ curlCommand = command.text;
76
+ startIndex -= command.startIndex;
77
+ endIndex -= command.startIndex;
78
+ }
79
+ if (startIndex === endIndex) {
80
+ endIndex++;
81
+ }
82
+
83
+ // TODO: \r ?
84
+ let lineStart = startIndex;
85
+ if (startIndex > 0) {
86
+ // If it's -1 we're on the first line
87
+ lineStart = curlCommand.lastIndexOf("\n", endIndex - 1) + 1;
88
+ }
89
+
90
+ const underlineStart = Math.max(startIndex, lineStart);
91
+ const underlineLength = endIndex - underlineStart;
92
+ let lineEnd = curlCommand.indexOf("\n", endIndex);
93
+ if (lineEnd === -1) {
94
+ lineEnd = curlCommand.length;
95
+ }
96
+
97
+ const line = curlCommand.slice(lineStart, lineEnd);
98
+ const underline =
99
+ " ".repeat(underlineStart - lineStart) + "^".repeat(underlineLength);
100
+ return line + "\n" + underline;
101
+ }
102
+
103
+ export interface Support {
104
+ // multipleRequests?: boolean; // Why call this function?
105
+ multipleUrls?: boolean;
106
+ dataReadsFile?: boolean;
107
+ queryReadsFile?: boolean;
108
+ cookieFiles?: boolean;
109
+ }
110
+
111
+ export function warnIfPartsIgnored(
112
+ request: Request,
113
+ warnings: Warnings,
114
+ support?: Support,
115
+ ) {
116
+ if (request.urls.length > 1 && !support?.multipleUrls) {
117
+ warnings.push([
118
+ "multiple-urls",
119
+ "found " +
120
+ request.urls.length +
121
+ " URLs, only the first one will be used: " +
122
+ request.urls
123
+ .map((u) => JSON.stringify(u.originalUrl.toString()))
124
+ .join(", "),
125
+ ]);
126
+ }
127
+ if (request.dataReadsFile && !support?.dataReadsFile) {
128
+ warnings.push([
129
+ "unsafe-data",
130
+ // TODO: better wording. Could be "body:" too
131
+ "the generated data content is wrong, " +
132
+ // TODO: might not come from "@"
133
+ JSON.stringify("@" + request.dataReadsFile) +
134
+ " means read the file " +
135
+ JSON.stringify(request.dataReadsFile),
136
+ ]);
137
+ }
138
+ if (request.urls[0].queryReadsFile && !support?.queryReadsFile) {
139
+ warnings.push([
140
+ "unsafe-query",
141
+ "the generated URL query string is wrong, " +
142
+ JSON.stringify("@" + request.urls[0].queryReadsFile) +
143
+ " means read the file " +
144
+ JSON.stringify(request.urls[0].queryReadsFile),
145
+ ]);
146
+ }
147
+ if (request.cookieFiles && !support?.cookieFiles) {
148
+ warnings.push([
149
+ "cookie-files",
150
+ "passing a file for --cookie/-b is not supported: " +
151
+ request.cookieFiles.map((c) => JSON.stringify(c.toString())).join(", "),
152
+ ]);
153
+ }
154
+ }
package/src/cli.ts ADDED
@@ -0,0 +1,561 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { CCError, has } from "./utils.js";
4
+ import type { Warnings } from "./Warnings.js";
5
+ import { Word } from "./shell/Word.js";
6
+ import {
7
+ parseArgs,
8
+ curlLongOpts,
9
+ curlLongOptsShortened,
10
+ curlShortOpts,
11
+ } from "./curl/opts.js";
12
+ import type { LongOpts, ShortOpts } from "./curl/opts.js";
13
+
14
+ import { buildRequests } from "./Request.js";
15
+ import type { Request } from "./Request.js";
16
+
17
+ import {
18
+ _toAnsible,
19
+ toAnsibleWarn,
20
+ supportedArgs as supportedArgsAnsible,
21
+ } from "./generators/ansible.js";
22
+ import {
23
+ _toC,
24
+ toCWarn,
25
+ supportedArgs as supportedArgsC,
26
+ } from "./generators/c.js";
27
+ import {
28
+ _toCFML,
29
+ toCFMLWarn,
30
+ supportedArgs as supportedArgsCFML,
31
+ } from "./generators/cfml.js";
32
+ import {
33
+ _toClojure,
34
+ toClojureWarn,
35
+ supportedArgs as supportedArgsClojure,
36
+ } from "./generators/clojure.js";
37
+ import {
38
+ _toCSharp,
39
+ toCSharpWarn,
40
+ supportedArgs as supportedArgsCSharp,
41
+ } from "./generators/csharp.js";
42
+ import {
43
+ _toDart,
44
+ toDartWarn,
45
+ supportedArgs as supportedArgsDart,
46
+ } from "./generators/dart.js";
47
+ import {
48
+ _toElixir,
49
+ toElixirWarn,
50
+ supportedArgs as supportedArgsElixir,
51
+ } from "./generators/elixir.js";
52
+ import {
53
+ _toGo,
54
+ toGoWarn,
55
+ supportedArgs as supportedArgsGo,
56
+ } from "./generators/go.js";
57
+ import {
58
+ _toHarString,
59
+ toHarStringWarn,
60
+ supportedArgs as supportedArgsHarString,
61
+ } from "./generators/har.js";
62
+ import {
63
+ _toHTTP,
64
+ toHTTPWarn,
65
+ supportedArgs as supportedArgsHTTP,
66
+ } from "./generators/http.js";
67
+ import {
68
+ _toHttpie,
69
+ toHttpieWarn,
70
+ supportedArgs as supportedArgsHttpie,
71
+ } from "./generators/httpie.js";
72
+ import {
73
+ _toJava,
74
+ toJavaWarn,
75
+ supportedArgs as supportedArgsJava,
76
+ } from "./generators/java/java.js";
77
+ import {
78
+ _toJavaHttpUrlConnection,
79
+ toJavaHttpUrlConnectionWarn,
80
+ supportedArgs as supportedArgsJavaHttpUrlConnection,
81
+ } from "./generators/java/httpurlconnection.js";
82
+ import {
83
+ _toJavaJsoup,
84
+ toJavaJsoupWarn,
85
+ supportedArgs as supportedArgsJavaJsoup,
86
+ } from "./generators/java/jsoup.js";
87
+ import {
88
+ _toJavaOkHttp,
89
+ toJavaOkHttpWarn,
90
+ supportedArgs as supportedArgsJavaOkHttp,
91
+ } from "./generators/java/okhttp.js";
92
+ import {
93
+ _toJavaScript,
94
+ toJavaScriptWarn,
95
+ javaScriptSupportedArgs as supportedArgsJavaScript,
96
+ } from "./generators/javascript/javascript.js";
97
+ import {
98
+ _toJavaScriptJquery,
99
+ toJavaScriptJqueryWarn,
100
+ supportedArgs as supportedArgsJavaScriptJquery,
101
+ } from "./generators/javascript/jquery.js";
102
+ import {
103
+ _toJavaScriptXHR,
104
+ toJavaScriptXHRWarn,
105
+ supportedArgs as supportedArgsJavaScriptXHR,
106
+ } from "./generators/javascript/xhr.js";
107
+ import {
108
+ _toJsonString,
109
+ toJsonStringWarn,
110
+ supportedArgs as supportedArgsJsonString,
111
+ } from "./generators/json.js";
112
+ import {
113
+ _toJulia,
114
+ toJuliaWarn,
115
+ supportedArgs as supportedArgsJulia,
116
+ } from "./generators/julia.js";
117
+ import {
118
+ _toKotlin,
119
+ toKotlinWarn,
120
+ supportedArgs as supportedArgsKotlin,
121
+ } from "./generators/kotlin.js";
122
+ import {
123
+ _toLua,
124
+ toLuaWarn,
125
+ supportedArgs as supportedArgsLua,
126
+ } from "./generators/lua.js";
127
+ import {
128
+ _toMATLAB,
129
+ toMATLABWarn,
130
+ supportedArgs as supportedArgsMATLAB,
131
+ } from "./generators/matlab/matlab.js";
132
+ import {
133
+ _toNode,
134
+ toNodeWarn,
135
+ nodeSupportedArgs as supportedArgsNode,
136
+ } from "./generators/javascript/javascript.js";
137
+ import {
138
+ _toNodeAxios,
139
+ toNodeAxiosWarn,
140
+ supportedArgs as supportedArgsNodeAxios,
141
+ } from "./generators/javascript/axios.js";
142
+ import {
143
+ _toNodeGot,
144
+ toNodeGotWarn,
145
+ supportedArgs as supportedArgsNodeGot,
146
+ } from "./generators/javascript/got.js";
147
+ import {
148
+ _toNodeHttp,
149
+ toNodeHttpWarn,
150
+ supportedArgs as supportedArgsNodeHttp,
151
+ } from "./generators/javascript/http.js";
152
+ import {
153
+ _toNodeKy,
154
+ toNodeKyWarn,
155
+ supportedArgs as supportedArgsNodeKy,
156
+ } from "./generators/javascript/ky.js";
157
+ import {
158
+ _toNodeRequest,
159
+ toNodeRequestWarn,
160
+ supportedArgs as supportedArgsNodeRequest,
161
+ } from "./generators/javascript/request.js";
162
+ import {
163
+ _toNodeSuperAgent,
164
+ toNodeSuperAgentWarn,
165
+ supportedArgs as supportedArgsNodeSuperAgent,
166
+ } from "./generators/javascript/superagent.js";
167
+ import {
168
+ _toOCaml,
169
+ toOCamlWarn,
170
+ supportedArgs as supportedArgsOCaml,
171
+ } from "./generators/ocaml.js";
172
+ import {
173
+ _toObjectiveC,
174
+ toObjectiveCWarn,
175
+ supportedArgs as supportedArgsObjectiveC,
176
+ } from "./generators/objectivec.js";
177
+ import {
178
+ _toPerl,
179
+ toPerlWarn,
180
+ supportedArgs as supportedArgsPerl,
181
+ } from "./generators/perl.js";
182
+ import {
183
+ _toPhp,
184
+ toPhpWarn,
185
+ supportedArgs as supportedArgsPhp,
186
+ } from "./generators/php/php.js";
187
+ import {
188
+ _toPhpGuzzle,
189
+ toPhpGuzzleWarn,
190
+ supportedArgs as supportedArgsPhpGuzzle,
191
+ } from "./generators/php/guzzle.js";
192
+ import {
193
+ _toPhpRequests,
194
+ toPhpRequestsWarn,
195
+ supportedArgs as supportedArgsPhpRequests,
196
+ } from "./generators/php/requests.js";
197
+ import {
198
+ _toPowershellRestMethod,
199
+ toPowershellRestMethodWarn,
200
+ supportedArgs as supportedArgsPowershellRestMethod,
201
+ } from "./generators/powershell.js";
202
+ import {
203
+ _toPowershellWebRequest,
204
+ toPowershellWebRequestWarn,
205
+ supportedArgs as supportedArgsPowershellWebRequest,
206
+ } from "./generators/powershell.js";
207
+ import {
208
+ _toPython,
209
+ toPythonWarn,
210
+ supportedArgs as supportedArgsPython,
211
+ } from "./generators/python/python.js";
212
+ import {
213
+ _toPythonHttp,
214
+ toPythonHttpWarn,
215
+ supportedArgs as supportedArgsPythonHttp,
216
+ } from "./generators/python/http.js";
217
+ import {
218
+ _toR,
219
+ toRWarn,
220
+ supportedArgs as supportedArgsR,
221
+ } from "./generators/r/httr.js";
222
+ import {
223
+ _toRHttr2,
224
+ toRHttr2Warn,
225
+ supportedArgs as supportedArgsRHttr2,
226
+ } from "./generators/r/httr2.js";
227
+ import {
228
+ _toRuby,
229
+ toRubyWarn,
230
+ supportedArgs as supportedArgsRuby,
231
+ } from "./generators/ruby/ruby.js";
232
+ import {
233
+ _toRubyHttparty,
234
+ toRubyHttpartyWarn,
235
+ supportedArgs as supportedArgsRubyHttparty,
236
+ } from "./generators/ruby/httparty.js";
237
+ import {
238
+ _toRust,
239
+ toRustWarn,
240
+ supportedArgs as supportedArgsRust,
241
+ } from "./generators/rust.js";
242
+ import {
243
+ _toSwift,
244
+ toSwiftWarn,
245
+ supportedArgs as supportedArgsSwift,
246
+ } from "./generators/swift.js";
247
+ import {
248
+ _toWget,
249
+ toWgetWarn,
250
+ supportedArgs as supportedArgsWget,
251
+ } from "./generators/wget.js";
252
+
253
+ import fs from "fs";
254
+
255
+ // This line is updated by extract_curl_args.py
256
+ const VERSION = "4.12.0 (curl 8.2.1)";
257
+
258
+ // sets a default in case --language isn't passed
259
+ const defaultLanguage = "python";
260
+
261
+ // Maps options for --language to functions
262
+ // NOTE: make sure to update this when adding language support
263
+ // prettier-ignore
264
+ const translate: {
265
+ [key: string]: [
266
+ (request: Request[], warnings?: Warnings) => string,
267
+ (curlCommand: string | string[], warnings?: Warnings) => [string, Warnings],
268
+ Set<string>,
269
+ ];
270
+ } = {
271
+ ansible: [_toAnsible, toAnsibleWarn, supportedArgsAnsible],
272
+ c: [_toC, toCWarn, supportedArgsC],
273
+ cfml: [_toCFML, toCFMLWarn, supportedArgsCFML],
274
+ clojure: [_toClojure, toClojureWarn, supportedArgsClojure],
275
+ csharp: [_toCSharp, toCSharpWarn, supportedArgsCSharp],
276
+ "c#": [_toCSharp, toCSharpWarn, supportedArgsCSharp], // undocumented alias
277
+ browser: [_toJavaScript, toJavaScriptWarn, supportedArgsJavaScript], // for backwards compatibility, undocumented
278
+ dart: [_toDart, toDartWarn, supportedArgsDart],
279
+ elixir: [_toElixir, toElixirWarn, supportedArgsElixir],
280
+ go: [_toGo, toGoWarn, supportedArgsGo],
281
+ golang: [_toGo, toGoWarn, supportedArgsGo], // undocumented alias
282
+ har: [_toHarString, toHarStringWarn, supportedArgsHarString],
283
+ http: [_toHTTP, toHTTPWarn, supportedArgsHTTP],
284
+ httpie: [_toHttpie, toHttpieWarn, supportedArgsHttpie],
285
+ java: [_toJava, toJavaWarn, supportedArgsJava],
286
+ "java-httpurlconnection": [_toJavaHttpUrlConnection, toJavaHttpUrlConnectionWarn, supportedArgsJavaHttpUrlConnection],
287
+ "java-jsoup": [_toJavaJsoup, toJavaJsoupWarn, supportedArgsJavaJsoup],
288
+ "java-okhttp": [_toJavaOkHttp, toJavaOkHttpWarn, supportedArgsJavaOkHttp],
289
+ javascript: [_toJavaScript, toJavaScriptWarn, supportedArgsJavaScript],
290
+ "javascript-axios": [_toNodeAxios, toNodeAxiosWarn, supportedArgsNodeAxios], // undocumented alias
291
+ "javascript-fetch": [_toJavaScript, toJavaScriptWarn, supportedArgsJavaScript], // undocumented alias
292
+ "javascript-got": [_toNodeGot, toNodeGotWarn, supportedArgsNodeGot], // undocumented alias
293
+ "javascript-ky": [_toNodeKy, toNodeKyWarn, supportedArgsNodeKy], // undocumented alias
294
+ "javascript-jquery": [_toJavaScriptJquery, toJavaScriptJqueryWarn, supportedArgsJavaScriptJquery],
295
+ "javascript-request": [_toNodeRequest, toNodeRequestWarn, supportedArgsNodeRequest], // undocumented alias
296
+ "javascript-superagent": [_toNodeSuperAgent, toNodeSuperAgentWarn, supportedArgsNodeSuperAgent], // undocumented alias
297
+ "javascript-xhr": [_toJavaScriptXHR, toJavaScriptXHRWarn, supportedArgsJavaScriptXHR],
298
+ json: [_toJsonString, toJsonStringWarn, supportedArgsJsonString],
299
+ julia: [_toJulia, toJuliaWarn, supportedArgsJulia],
300
+ kotlin: [_toKotlin, toKotlinWarn, supportedArgsKotlin],
301
+ lua: [_toLua, toLuaWarn, supportedArgsLua],
302
+ matlab: [_toMATLAB, toMATLABWarn, supportedArgsMATLAB],
303
+ node: [_toNode, toNodeWarn, supportedArgsNode],
304
+ "node-axios": [_toNodeAxios, toNodeAxiosWarn, supportedArgsNodeAxios],
305
+ "node-fetch": [_toNode, toNodeWarn, supportedArgsNode], // undocumented alias
306
+ "node-got": [_toNodeGot, toNodeGotWarn, supportedArgsNodeGot],
307
+ "node-http": [_toNodeHttp, toNodeHttpWarn, supportedArgsNodeHttp], // undocumented alias
308
+ "node-ky": [_toNodeKy, toNodeKyWarn, supportedArgsNodeKy],
309
+ "node-jquery": [_toJavaScriptJquery, toJavaScriptJqueryWarn, supportedArgsJavaScriptJquery], // undocumented alias
310
+ "node-request": [_toNodeRequest, toNodeRequestWarn, supportedArgsNodeRequest],
311
+ "node-superagent": [_toNodeSuperAgent, toNodeSuperAgentWarn, supportedArgsNodeSuperAgent],
312
+ "node-xhr": [_toJavaScriptXHR, toJavaScriptXHRWarn, supportedArgsJavaScriptXHR], // undocumented alias
313
+ nodejs: [_toNode, toNodeWarn, supportedArgsNode], // undocumented alias
314
+ "nodejs-axios": [_toNodeAxios, toNodeAxiosWarn, supportedArgsNodeAxios], // undocumented alias
315
+ "nodejs-fetch": [_toNode, toNodeWarn, supportedArgsNode], // undocumented alias
316
+ "nodejs-got": [_toNodeGot, toNodeGotWarn, supportedArgsNodeGot], // undocumented alias
317
+ "nodejs-http": [_toNodeHttp, toNodeHttpWarn, supportedArgsNodeHttp], // undocumented alias
318
+ "nodejs-ky": [_toNodeKy, toNodeKyWarn, supportedArgsNodeKy], // undocumented alias
319
+ "nodejs-jquery": [_toJavaScriptJquery, toJavaScriptJqueryWarn, supportedArgsJavaScriptJquery], // undocumented alias
320
+ "nodejs-request": [_toNodeRequest, toNodeRequestWarn, supportedArgsNodeRequest], // undocumented alias
321
+ "nodejs-superagent": [_toNodeSuperAgent, toNodeSuperAgentWarn, supportedArgsNodeSuperAgent], // undocumented alias
322
+ "nodejs-xhr": [_toJavaScriptXHR, toJavaScriptXHRWarn, supportedArgsJavaScriptXHR], // undocumented alias
323
+ objc: [_toObjectiveC, toObjectiveCWarn, supportedArgsObjectiveC],
324
+ objectivec: [_toObjectiveC, toObjectiveCWarn, supportedArgsObjectiveC], // undocumented alias
325
+ "objective-c": [_toObjectiveC, toObjectiveCWarn, supportedArgsObjectiveC], // undocumented alias
326
+ ocaml: [_toOCaml, toOCamlWarn, supportedArgsOCaml],
327
+ perl: [_toPerl, toPerlWarn, supportedArgsPerl],
328
+ php: [_toPhp, toPhpWarn, supportedArgsPhp],
329
+ "php-curl": [_toPhp, toPhpWarn, supportedArgsPhp], // undocumented alias
330
+ "php-guzzle": [_toPhpGuzzle, toPhpGuzzleWarn, supportedArgsPhpGuzzle],
331
+ "php-requests": [_toPhpRequests, toPhpRequestsWarn, supportedArgsPhpRequests],
332
+ powershell: [_toPowershellRestMethod, toPowershellRestMethodWarn, supportedArgsPowershellRestMethod],
333
+ "powershell-restmethod": [_toPowershellRestMethod, toPowershellRestMethodWarn, supportedArgsPowershellRestMethod], // undocumented alias
334
+ "powershell-webrequest": [_toPowershellWebRequest, toPowershellWebRequestWarn, supportedArgsPowershellWebRequest],
335
+ python: [_toPython, toPythonWarn, supportedArgsPython],
336
+ "python-http": [_toPythonHttp, toPythonHttpWarn, supportedArgsPythonHttp],
337
+ "python-httpclient": [_toPythonHttp, toPythonHttpWarn, supportedArgsPythonHttp], // undocumented alias
338
+ r: [_toR, toRWarn, supportedArgsR],
339
+ "r-httr": [_toR, toRWarn, supportedArgsR], // undocumented alias
340
+ "r-httr2": [_toRHttr2, toRHttr2Warn, supportedArgsRHttr2],
341
+ ruby: [_toRuby, toRubyWarn, supportedArgsRuby],
342
+ "ruby-httparty": [_toRubyHttparty, toRubyHttpartyWarn, supportedArgsRubyHttparty],
343
+ rust: [_toRust, toRustWarn, supportedArgsRust],
344
+ swift: [_toSwift, toSwiftWarn, supportedArgsSwift],
345
+ wget: [_toWget, toWgetWarn, supportedArgsWget],
346
+ };
347
+
348
+ const USAGE = `Usage: curlconverter [--language <language>] [-] [curl_options...]
349
+
350
+ language: the language to convert the curl command to. The choices are
351
+ ansible
352
+ c
353
+ cfml
354
+ clojure
355
+ csharp
356
+ dart
357
+ elixir
358
+ go
359
+ har
360
+ http
361
+ httpie
362
+ java
363
+ java-httpurlconnection
364
+ java-jsoup
365
+ java-okhttp
366
+ javascript
367
+ javascript-jquery
368
+ javascript-xhr
369
+ json
370
+ julia
371
+ kotlin
372
+ lua
373
+ matlab
374
+ node
375
+ node-axios
376
+ node-http
377
+ node-got
378
+ node-ky
379
+ node-request
380
+ node-superagent
381
+ objc
382
+ ocaml
383
+ perl
384
+ php
385
+ php-guzzle
386
+ php-requests
387
+ powershell
388
+ powershell-webrequest
389
+ python (the default)
390
+ r
391
+ r-httr2
392
+ ruby
393
+ ruby-httparty
394
+ rust
395
+ swift
396
+ wget
397
+
398
+ -: read curl command from stdin
399
+
400
+ --verbose/-v: print warnings and error tracebacks
401
+
402
+ curl_options: these should be passed exactly as they would be passed to curl.
403
+ see 'curl --help' or 'curl --manual' for which options are allowed here`;
404
+
405
+ const curlconverterLongOpts: LongOpts = {
406
+ ...curlLongOpts,
407
+ language: { type: "string", name: "language" },
408
+ stdin: { type: "bool", name: "stdin" },
409
+ };
410
+ const curlconverterShortOpts: ShortOpts = {
411
+ ...curlShortOpts,
412
+ // a single "-" (dash) tells curlconverter to read input from stdin
413
+ "": "stdin",
414
+ };
415
+
416
+ function printWarnings(warnings: Warnings, verbose: boolean): Warnings {
417
+ if (!verbose) {
418
+ return warnings;
419
+ }
420
+ for (const w of warnings) {
421
+ for (const line of w[1].trim().split("\n")) {
422
+ console.error("warning: " + line);
423
+ }
424
+ }
425
+ return [];
426
+ }
427
+ function exitWithError(error: unknown, verbose = false): never {
428
+ let errMsg: Error | string | unknown = error;
429
+ if (!verbose) {
430
+ if (error instanceof CCError) {
431
+ errMsg = "";
432
+ for (const line of error.message.toString().split("\n")) {
433
+ errMsg += "error: " + line + "\n";
434
+ }
435
+ errMsg = (errMsg as string).trimEnd();
436
+ } else if (error instanceof Error) {
437
+ // .toString() removes the traceback
438
+ errMsg = error.toString();
439
+ }
440
+ }
441
+ console.error(errMsg);
442
+ process.exit(2); // curl exits with 2 so we do too
443
+ }
444
+
445
+ // argv is ['node', 'cli.js', ...]
446
+ // parseArgs() ignores the first argument but we need to remove "node"
447
+ const argv = process.argv.slice(1).map((arg) => new Word(arg));
448
+ let global_, seenArgs;
449
+ let warnings: Warnings = [];
450
+ try {
451
+ [global_, seenArgs] = parseArgs(
452
+ argv,
453
+ curlconverterLongOpts,
454
+ curlLongOptsShortened,
455
+ curlconverterShortOpts,
456
+ undefined,
457
+ warnings,
458
+ );
459
+ } catch (e) {
460
+ exitWithError(e);
461
+ }
462
+ if (global_.help) {
463
+ console.log(USAGE.trim());
464
+ process.exit(0);
465
+ }
466
+ if (global_.version) {
467
+ console.log("curlconverter " + VERSION);
468
+ process.exit(0);
469
+ }
470
+ const verbose = !!global_.verbose;
471
+ const commandFromStdin = global_.stdin;
472
+ const language = global_.language || defaultLanguage;
473
+ if (!has(translate, language)) {
474
+ exitWithError(
475
+ new CCError(
476
+ "unexpected --language: " +
477
+ JSON.stringify(language) +
478
+ "\n" +
479
+ "must be one of: " +
480
+ Object.keys(translate).sort().join(", "),
481
+ ),
482
+ verbose,
483
+ );
484
+ }
485
+
486
+ if (!seenArgs.length) {
487
+ console.log(USAGE.trim());
488
+ process.exit(2);
489
+ }
490
+
491
+ const [generator, warnGenerator, supportedArgs] = translate[language];
492
+ const extraArgs = seenArgs.filter((a) => {
493
+ const [arg, actual] = a;
494
+ const ignore = ["stdin", "verbose", "language"].includes(arg);
495
+ if (!ignore && !supportedArgs.has(arg)) {
496
+ warnings.push([
497
+ arg,
498
+ actual + " is not a supported option",
499
+ // + (longArg.removed ? ", it was removed in curl " + longArg.removed : ""),
500
+ ]);
501
+ }
502
+ return !ignore;
503
+ });
504
+
505
+ let code;
506
+ if (commandFromStdin) {
507
+ // This lets you do
508
+ // echo curl example.com | curlconverter --verbose
509
+ // TODO: remove repeated args
510
+ if (extraArgs.length > 0) {
511
+ // Throw an error so that if user typos something like
512
+ // curlconverter - -data
513
+ // they aren't stuck with what looks like a hung terminal.
514
+ const extraArgsStr = extraArgs.map((a) => a[1]).join(", ");
515
+ exitWithError(
516
+ new CCError(
517
+ "if you pass --stdin or -, you can't also pass " + extraArgsStr,
518
+ ),
519
+ verbose,
520
+ );
521
+ }
522
+ const input = fs.readFileSync(0, "utf8");
523
+ try {
524
+ [code, warnings] = warnGenerator(input, warnings);
525
+ } catch (e) {
526
+ printWarnings(warnings, true); // print warnings to help figure out the error
527
+ exitWithError(e, verbose);
528
+ }
529
+ warnings = printWarnings(warnings, verbose);
530
+ } else {
531
+ warnings = printWarnings(warnings, verbose);
532
+
533
+ let stdin;
534
+ if (!process.stdin.isTTY) {
535
+ // TODO: what if there's an EOF character? does curl read each @- until EOF?
536
+ stdin = new Word(fs.readFileSync(0).toString());
537
+ }
538
+ let requests;
539
+ try {
540
+ requests = buildRequests(global_, stdin);
541
+ } catch (e) {
542
+ exitWithError(e, verbose);
543
+ }
544
+ warnings = printWarnings(warnings, verbose);
545
+ // Warning for users using the pre-4.0 CLI
546
+ if (requests[0].urls[0].originalUrl.startsWith("curl ")) {
547
+ console.error(`\
548
+ warning: Passing a whole curl command as a single argument?
549
+ warning: Pass options to curlconverter as if it was curl instead:
550
+ warning: curlconverter 'curl example.com' -> curlconverter example.com`);
551
+ }
552
+ try {
553
+ code = generator(requests, warnings);
554
+ } catch (e) {
555
+ exitWithError(e, verbose);
556
+ }
557
+ warnings = printWarnings(warnings, verbose);
558
+ }
559
+
560
+ printWarnings(warnings, verbose);
561
+ process.stdout.write(code);