@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,610 @@
1
+ import { Word, firstShellToken } from "./Word.js";
2
+ import { CCError } from "../utils.js";
3
+ import { clip } from "../parse.js";
4
+ import parser from "./Parser.js";
5
+ import { underlineNode, underlineCursor } from "../Warnings.js";
6
+ const BACKSLASHES = /\\./gs;
7
+ function removeBackslash(m) {
8
+ return m.charAt(1) === "\n" ? "" : m.charAt(1);
9
+ }
10
+ function removeBackslashes(str) {
11
+ return str.replace(BACKSLASHES, removeBackslash);
12
+ }
13
+ // https://www.gnu.org/software/bash/manual/bash.html#Double-Quotes
14
+ const DOUBLE_QUOTE_BACKSLASHES = /\\[\\$`"\n]/gs;
15
+ function removeDoubleQuoteBackslashes(str) {
16
+ return str.replace(DOUBLE_QUOTE_BACKSLASHES, removeBackslash);
17
+ }
18
+ // ANSI-C quoted strings look $'like this'.
19
+ // Not all shells have them but Bash does
20
+ // https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
21
+ //
22
+ // https://git.savannah.gnu.org/cgit/bash.git/tree/lib/sh/strtrans.c
23
+ const ANSI_BACKSLASHES = /\\(\\|a|b|e|E|f|n|r|t|v|'|"|\?|[0-7]{1,3}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{1,4}|U[0-9A-Fa-f]{1,8}|c.)/gs;
24
+ function removeAnsiCBackslashes(str) {
25
+ function unescapeChar(m) {
26
+ switch (m.charAt(1)) {
27
+ case "\\":
28
+ return "\\";
29
+ case "a":
30
+ return "\x07";
31
+ case "b":
32
+ return "\b";
33
+ case "e":
34
+ case "E":
35
+ return "\x1B";
36
+ case "f":
37
+ return "\f";
38
+ case "n":
39
+ return "\n";
40
+ case "r":
41
+ return "\r";
42
+ case "t":
43
+ return "\t";
44
+ case "v":
45
+ return "\v";
46
+ case "'":
47
+ return "'";
48
+ case '"':
49
+ return '"';
50
+ case "?":
51
+ return "?";
52
+ case "c":
53
+ // Bash handles all characters by considering the first byte
54
+ // of its UTF-8 input and can produce invalid UTF-8, whereas
55
+ // JavaScript stores strings in UTF-16
56
+ if (m.codePointAt(2) > 127) {
57
+ throw new CCError('non-ASCII control character in ANSI-C quoted string: "\\u{' +
58
+ m.codePointAt(2).toString(16) +
59
+ '}"');
60
+ }
61
+ // If this produces a 0x00 (null) character, it will cause bash to
62
+ // terminate the string at that character, but we return the null
63
+ // character in the result.
64
+ return m[2] === "?"
65
+ ? "\x7F"
66
+ : String.fromCodePoint(m[2].toUpperCase().codePointAt(0) & 0b00011111);
67
+ case "x":
68
+ case "u":
69
+ case "U":
70
+ // Hexadecimal character literal
71
+ // Unlike bash, this will error if the the code point is greater than 10FFFF
72
+ return String.fromCodePoint(parseInt(m.slice(2), 16));
73
+ case "0":
74
+ case "1":
75
+ case "2":
76
+ case "3":
77
+ case "4":
78
+ case "5":
79
+ case "6":
80
+ case "7":
81
+ // Octal character literal
82
+ return String.fromCodePoint(parseInt(m.slice(1), 8) % 256);
83
+ default:
84
+ // There must be a mis-match between ANSI_BACKSLASHES and the switch statement
85
+ throw new CCError("unhandled character in ANSI-C escape code: " + JSON.stringify(m));
86
+ }
87
+ }
88
+ return str.replace(ANSI_BACKSLASHES, unescapeChar);
89
+ }
90
+ function toTokens(node, curlCommand, warnings) {
91
+ let vals = [];
92
+ switch (node.type) {
93
+ case "$":
94
+ // TODO: https://github.com/tree-sitter/tree-sitter-bash/issues/258
95
+ return ["$"];
96
+ case "word":
97
+ case "number":
98
+ // TODO: number might have a ${variable}
99
+ return [removeBackslashes(node.text)];
100
+ case "raw_string":
101
+ return [node.text.slice(1, -1)];
102
+ case "ansi_c_string":
103
+ return [removeAnsiCBackslashes(node.text.slice(2, -1))];
104
+ case "string":
105
+ case "translated_string": {
106
+ // TODO: MISSING quotes, for example
107
+ // curl "example.com
108
+ let res = "";
109
+ for (const child of node.namedChildren) {
110
+ if (child.type === "string_content") {
111
+ res += removeDoubleQuoteBackslashes(child.text);
112
+ }
113
+ else {
114
+ // expansion, simple_expansion or command_substitution (or concat?)
115
+ const subVal = toTokens(child, curlCommand, warnings);
116
+ if (typeof subVal === "string") {
117
+ res += subVal;
118
+ }
119
+ else {
120
+ if (res) {
121
+ vals.push(res);
122
+ res = "";
123
+ }
124
+ vals = vals.concat(subVal);
125
+ }
126
+ }
127
+ }
128
+ if (res || vals.length === 0) {
129
+ vals.push(res);
130
+ }
131
+ return vals;
132
+ }
133
+ case "simple_expansion":
134
+ // TODO: handle variables downstream
135
+ // '$' + variable_name or special_variable_name
136
+ warnings.push([
137
+ "expansion",
138
+ "found environment variable\n" + underlineNode(node, curlCommand),
139
+ ]);
140
+ if (node.firstNamedChild &&
141
+ node.firstNamedChild.type === "special_variable_name") {
142
+ // https://www.gnu.org/software/bash/manual/bash.html#Special-Parameters
143
+ // TODO: warning isn't printed
144
+ warnings.push([
145
+ "special_variable_name",
146
+ node.text +
147
+ " is a special Bash variable\n" +
148
+ underlineNode(node.firstNamedChild, curlCommand),
149
+ ]);
150
+ }
151
+ return [
152
+ {
153
+ type: "variable",
154
+ value: node.text.slice(1),
155
+ text: node.text,
156
+ syntaxNode: node,
157
+ },
158
+ ];
159
+ case "expansion":
160
+ // Expansions look ${like_this}
161
+ // https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion
162
+ // TODO: MISSING }, for example
163
+ // curl example${com
164
+ warnings.push([
165
+ "expansion",
166
+ "found expansion expression\n" + underlineNode(node, curlCommand),
167
+ ]);
168
+ // variable_name or subscript or no child
169
+ // TODO: handle substitutions
170
+ return [
171
+ {
172
+ type: "variable",
173
+ value: node.text.slice(2, -1),
174
+ text: node.text,
175
+ syntaxNode: node,
176
+ },
177
+ ];
178
+ case "command_substitution":
179
+ // TODO: MISSING ), for example
180
+ // curl example$(com
181
+ warnings.push([
182
+ "expansion",
183
+ "found command substitution expression\n" +
184
+ underlineNode(node, curlCommand),
185
+ ]);
186
+ return [
187
+ {
188
+ type: "command",
189
+ // TODO: further tokenize and pass an array of args
190
+ // to subprocess.run() or a command name + string args to C#
191
+ value: node.text.slice(node.text.startsWith("$(") ? 2 : 1, -1),
192
+ text: node.text,
193
+ syntaxNode: node,
194
+ },
195
+ ];
196
+ case "concatenation": {
197
+ // item[]=1 turns into item=1 if we don't do this
198
+ // https://github.com/tree-sitter/tree-sitter-bash/issues/104
199
+ let prevEnd = 0;
200
+ let res = "";
201
+ for (const child of node.children) {
202
+ // TODO: removeBackslashes()?
203
+ // Can we get anything other than []{} characters here?
204
+ res += node.text.slice(prevEnd, child.startIndex - node.startIndex);
205
+ prevEnd = child.endIndex - node.startIndex;
206
+ const subVal = toTokens(child, curlCommand, warnings);
207
+ if (typeof subVal === "string") {
208
+ res += subVal;
209
+ }
210
+ else {
211
+ if (res) {
212
+ vals.push(res);
213
+ res = "";
214
+ }
215
+ vals = vals.concat(subVal);
216
+ }
217
+ }
218
+ res += node.text.slice(prevEnd);
219
+ if (res || vals.length === 0) {
220
+ vals.push(res);
221
+ }
222
+ return vals;
223
+ }
224
+ default:
225
+ throw new CCError("unexpected syntax node type " +
226
+ JSON.stringify(node.type) +
227
+ '. Must be one of "word", "number", "string", "raw_string", "ansi_c_string", "expansion", "simple_expansion", "translated_string", "command_substitution" or "concatenation"\n' +
228
+ underlineNode(node, curlCommand));
229
+ }
230
+ }
231
+ function toWord(node, curlCommand, warnings) {
232
+ return new Word(toTokens(node, curlCommand, warnings));
233
+ }
234
+ function* traverseLookingForBadNodes(tree) {
235
+ const cursor = tree.walk();
236
+ let reachedRoot = false;
237
+ while (!reachedRoot) {
238
+ if (cursor.nodeType === "ERROR" || cursor.nodeIsMissing) {
239
+ yield cursor;
240
+ }
241
+ if (cursor.gotoFirstChild()) {
242
+ continue;
243
+ }
244
+ if (cursor.gotoNextSibling()) {
245
+ continue;
246
+ }
247
+ let retracing = true;
248
+ while (retracing) {
249
+ if (!cursor.gotoParent()) {
250
+ retracing = false;
251
+ reachedRoot = true;
252
+ }
253
+ if (cursor.gotoNextSibling()) {
254
+ retracing = false;
255
+ }
256
+ }
257
+ }
258
+ }
259
+ function warnAboutBadNodes(ast, curlCommand, warnings) {
260
+ const maxShown = 3;
261
+ let count = 0;
262
+ for (const badNode of traverseLookingForBadNodes(ast)) {
263
+ if (count < maxShown) {
264
+ let underlinedNode = "";
265
+ try {
266
+ underlinedNode = ":\n" + underlineCursor(badNode, curlCommand);
267
+ }
268
+ catch (_a) { }
269
+ const line = badNode.startPosition.row;
270
+ const column = badNode.startPosition.column;
271
+ warnings.push([
272
+ "bash",
273
+ `Bash parsing error on line ${line + 1}` +
274
+ (column !== 0 ? `, column ${column + 1}` : "") +
275
+ underlinedNode,
276
+ ]);
277
+ }
278
+ count += 1;
279
+ }
280
+ const extra = count - maxShown;
281
+ if (extra > 0) {
282
+ warnings.push([
283
+ "bash",
284
+ `${extra} more Bash parsing error${extra > 1 ? "s" : ""} omitted`,
285
+ ]);
286
+ }
287
+ }
288
+ function warnAboutUselessBackslash(n, curlCommandLines, warnings) {
289
+ const lastCommandLine = curlCommandLines[n.endPosition.row];
290
+ const impromperBackslash = lastCommandLine.match(/\\\s+$/);
291
+ if (impromperBackslash &&
292
+ curlCommandLines.length > n.endPosition.row + 1 &&
293
+ impromperBackslash.index !== undefined) {
294
+ warnings.push([
295
+ "unescaped-newline",
296
+ "The trailling '\\' on line " +
297
+ (n.endPosition.row + 1) +
298
+ " is followed by whitespace, so it won't escape the newline after it:\n" +
299
+ // TODO: cut off line if it's very long?
300
+ lastCommandLine +
301
+ "\n" +
302
+ " ".repeat(impromperBackslash.index) +
303
+ "^".repeat(impromperBackslash[0].length),
304
+ ]);
305
+ }
306
+ }
307
+ function extractRedirect(node, curlCommand, warnings) {
308
+ if (!node.namedChildCount) {
309
+ throw new CCError('got empty "redirected_statement" AST node');
310
+ }
311
+ let stdin, stdinFile;
312
+ const [command, ...redirects] = node.namedChildren;
313
+ if (command.type !== "command") {
314
+ throw new CCError('got "redirected_statement" AST node whose first child is not a "command", got ' +
315
+ command.type +
316
+ " instead\n" +
317
+ underlineNode(command, curlCommand));
318
+ }
319
+ if (node.childCount < 2) {
320
+ throw new CCError('got "redirected_statement" AST node with only one child - no redirect');
321
+ }
322
+ if (redirects.length > 1) {
323
+ warnings.push([
324
+ "multiple-redirects",
325
+ // TODO: this is misleading because not all generators support redirects
326
+ "found " +
327
+ redirects.length +
328
+ " redirect nodes. Only the first one will be used:\n" +
329
+ underlineNode(redirects[1], curlCommand),
330
+ ]);
331
+ }
332
+ const redirect = redirects[0];
333
+ if (redirect.type === "file_redirect") {
334
+ const destination = redirect.childForFieldName("destination");
335
+ if (!destination) {
336
+ throw new CCError('got "file_redirect" AST node with no "destination" child');
337
+ }
338
+ stdinFile = toWord(destination, curlCommand, warnings);
339
+ }
340
+ else if (redirect.type === "heredoc_redirect") {
341
+ const heredocBody = redirect.descendantsOfType("heredoc_body")[0];
342
+ if (!heredocBody) {
343
+ throw new CCError('got "redirected_statement" AST node without heredoc_body');
344
+ }
345
+ // TODO: heredocs can do variable expansion and stuff
346
+ stdin = new Word(heredocBody.text);
347
+ }
348
+ else if (redirect.type === "herestring_redirect") {
349
+ // TODO: herestring_redirect can be in a command node
350
+ // https://github.com/tree-sitter/tree-sitter-bash/issues/260
351
+ if (redirect.namedChildCount < 1 || !redirect.firstNamedChild) {
352
+ throw new CCError('got "redirected_statement" AST node with empty herestring');
353
+ }
354
+ stdin = toWord(redirect.firstNamedChild, curlCommand, warnings);
355
+ }
356
+ else {
357
+ throw new CCError('got "redirected_statement" AST node whose second child is not one of "file_redirect", "heredoc_redirect" or "herestring_redirect", got ' +
358
+ command.type +
359
+ " instead");
360
+ }
361
+ return [command, stdin, stdinFile];
362
+ }
363
+ function _findCurlInPipeline(node, curlCommand, warnings) {
364
+ let command, stdin, stdinFile;
365
+ for (const child of node.namedChildren) {
366
+ if (child.type === "command") {
367
+ const commandName = child.namedChildren[0];
368
+ if (commandName.type !== "command_name") {
369
+ throw new CCError('got "command" AST node whose first child is not a "command_name", got ' +
370
+ commandName.type +
371
+ " instead\n" +
372
+ underlineNode(commandName, curlCommand));
373
+ }
374
+ const commandNameWord = commandName.namedChildren[0];
375
+ if (commandNameWord.type !== "word") {
376
+ throw new CCError('got "command_name" AST node whose first child is not a "word", got ' +
377
+ commandNameWord.type +
378
+ " instead\n" +
379
+ underlineNode(commandNameWord, curlCommand));
380
+ }
381
+ if (commandNameWord.text === "curl") {
382
+ if (!command) {
383
+ command = child;
384
+ }
385
+ else {
386
+ warnings.push([
387
+ "multiple-curl-in-pipeline",
388
+ "found multiple curl commands in pipeline:\n" +
389
+ underlineNode(child, curlCommand),
390
+ ]);
391
+ }
392
+ }
393
+ }
394
+ else if (child.type === "redirected_statement") {
395
+ const [redirCommand, redirStdin, redirStdinFile] = extractRedirect(child, curlCommand, warnings);
396
+ if (redirCommand.namedChildren[0].text === "curl") {
397
+ if (!command) {
398
+ [command, stdin, stdinFile] = [
399
+ redirCommand,
400
+ redirStdin,
401
+ redirStdinFile,
402
+ ];
403
+ }
404
+ else {
405
+ warnings.push([
406
+ "multiple-curl-in-pipeline",
407
+ "found multiple curl commands in pipeline:\n" +
408
+ underlineNode(redirCommand, curlCommand),
409
+ ]);
410
+ }
411
+ }
412
+ }
413
+ else if (child.type === "pipeline") {
414
+ // pipelines can be nested
415
+ // https://github.com/tree-sitter/tree-sitter-bash/issues/167
416
+ const [nestedCommand, nestedStdin, nestedStdinFile] = _findCurlInPipeline(child, curlCommand, warnings);
417
+ if (!nestedCommand) {
418
+ continue;
419
+ }
420
+ if (nestedCommand.namedChildren[0].text === "curl") {
421
+ if (!command) {
422
+ [command, stdin, stdinFile] = [
423
+ nestedCommand,
424
+ nestedStdin,
425
+ nestedStdinFile,
426
+ ];
427
+ }
428
+ else {
429
+ warnings.push([
430
+ "multiple-curl-in-pipeline",
431
+ "found multiple curl commands in pipeline:\n" +
432
+ underlineNode(nestedCommand, curlCommand),
433
+ ]);
434
+ }
435
+ }
436
+ }
437
+ }
438
+ return [command, stdin, stdinFile];
439
+ }
440
+ // TODO: use pipeline input/output redirects,
441
+ // i.e. add stdinCommand and stdout/stdoutFile/stdoutCommand
442
+ function findCurlInPipeline(node, curlCommand, warnings) {
443
+ const [command, stdin, stdinFile] = _findCurlInPipeline(node, curlCommand, warnings);
444
+ if (!command) {
445
+ throw new CCError("could not find curl command in pipeline\n" +
446
+ underlineNode(node, curlCommand));
447
+ }
448
+ return [command, stdin, stdinFile];
449
+ }
450
+ // TODO: check entire AST for ERROR/MISSING nodes
451
+ // TODO: get all command nodes
452
+ function extractCommandNodes(ast, curlCommand, warnings) {
453
+ // https://github.com/tree-sitter/tree-sitter-bash/blob/master/grammar.js
454
+ // The AST must be in a nice format, i.e.
455
+ // (program
456
+ // (command
457
+ // name: (command_name (word))
458
+ // argument+: (
459
+ // word |
460
+ // "string" |
461
+ // 'raw_string' |
462
+ // $'ansi_c_string' |
463
+ // $"translated_string" |
464
+ // ${expansion} |
465
+ // $simple_expansion |
466
+ // concatenation)))
467
+ // or
468
+ // (program
469
+ // (redirected_statement
470
+ // body: (command, same as above)
471
+ // redirect))
472
+ // Shouldn't happen.
473
+ if (ast.rootNode.type !== "program") {
474
+ // TODO: better error message.
475
+ throw new CCError(
476
+ // TODO: expand "AST" acronym the first time it appears in an error message
477
+ 'expected a "program" top-level AST node, got ' +
478
+ ast.rootNode.type +
479
+ " instead");
480
+ }
481
+ if (ast.rootNode.namedChildCount < 1 || !ast.rootNode.namedChildren) {
482
+ // TODO: better error message.
483
+ throw new CCError('empty "program" node');
484
+ }
485
+ const curlCommandLines = curlCommand.split("\n");
486
+ let sawComment = false;
487
+ const commands = [];
488
+ // Get top-level command and redirected_statement AST nodes, skipping comments
489
+ for (const n of ast.rootNode.namedChildren) {
490
+ switch (n.type) {
491
+ case "comment":
492
+ sawComment = true;
493
+ continue;
494
+ case "command":
495
+ commands.push([n, undefined, undefined]);
496
+ warnAboutUselessBackslash(n, curlCommandLines, warnings);
497
+ break;
498
+ case "redirected_statement":
499
+ commands.push(extractRedirect(n, curlCommand, warnings));
500
+ warnAboutUselessBackslash(n, curlCommandLines, warnings);
501
+ break;
502
+ case "pipeline":
503
+ commands.push(findCurlInPipeline(n, curlCommand, warnings));
504
+ warnAboutUselessBackslash(n, curlCommandLines, warnings);
505
+ break;
506
+ case "heredoc_body": // https://github.com/tree-sitter/tree-sitter-bash/issues/118
507
+ continue;
508
+ case "ERROR":
509
+ throw new CCError(`Bash parsing error on line ${n.startPosition.row + 1}:\n` +
510
+ underlineNode(n, curlCommand));
511
+ default:
512
+ // TODO: better error message.
513
+ throw new CCError("found " +
514
+ JSON.stringify(n.type) +
515
+ ' AST node, only "command", "pipeline" or "redirected_statement" are supported\n' +
516
+ underlineNode(n, curlCommand));
517
+ }
518
+ }
519
+ if (!commands.length) {
520
+ // NOTE: if you add more node types in the `for` loop above, this error needs to be updated.
521
+ // We would probably need to keep track of the node types we've seen.
522
+ throw new CCError('expected a "command" or "redirected_statement" AST node' +
523
+ (sawComment ? ', only found "comment" nodes' : ""));
524
+ }
525
+ return commands;
526
+ }
527
+ function toNameAndArgv(command, curlCommand, warnings) {
528
+ if (command.childCount < 1) {
529
+ // TODO: better error message.
530
+ throw new CCError('empty "command" node\n' + underlineNode(command, curlCommand));
531
+ }
532
+ // TODO: warn about leading variable_assignment s
533
+ const name = command.childForFieldName("name");
534
+ const args = command.childrenForFieldName("argument");
535
+ // TODO: find if one changes stdin
536
+ // const redirects = command.childrenForFieldName("redirect");
537
+ if (!name) {
538
+ throw new CCError('found "command" AST node with no "command_name" child\n' +
539
+ underlineNode(command, curlCommand));
540
+ }
541
+ return [name, args];
542
+ }
543
+ // Checks that name is "curl"
544
+ function nameToWord(name, curlCommand, warnings) {
545
+ if (name.childCount < 1 || !name.firstChild) {
546
+ throw new CCError('found empty "command_name" AST node\n' +
547
+ underlineNode(name, curlCommand));
548
+ }
549
+ else if (name.childCount > 1) {
550
+ warnings.push([
551
+ "extra-command_name-children",
552
+ 'expected "command_name" node to only have one child but it has ' +
553
+ name.childCount,
554
+ ]);
555
+ }
556
+ const nameNode = name.firstChild;
557
+ const nameWord = toWord(nameNode, curlCommand, warnings);
558
+ const nameWordStr = nameWord.toString();
559
+ const cmdNameShellToken = firstShellToken(nameWord);
560
+ if (cmdNameShellToken) {
561
+ // The most common reason for the command name to contain an expression
562
+ // is probably users accidentally copying a $ from the shell prompt
563
+ // without a space after it
564
+ if (nameWordStr !== "$curl") {
565
+ // TODO: or just assume it evaluates to "curl"?
566
+ throw new CCError("expected command name to be a simple value but found a " +
567
+ cmdNameShellToken.type +
568
+ "\n" +
569
+ underlineNode(cmdNameShellToken.syntaxNode, curlCommand));
570
+ }
571
+ }
572
+ else if (nameWordStr.trim() !== "curl") {
573
+ const c = nameWordStr.trim();
574
+ if (!c) {
575
+ throw new CCError("found command without a command_name\n" +
576
+ underlineNode(nameNode, curlCommand));
577
+ }
578
+ throw new CCError('command should begin with "curl" but instead begins with ' +
579
+ JSON.stringify(clip(c)) +
580
+ "\n" +
581
+ underlineNode(nameNode, curlCommand));
582
+ }
583
+ return nameWord;
584
+ }
585
+ export function tokenize(curlCommand, warnings = []) {
586
+ const ast = parser.parse(curlCommand);
587
+ warnAboutBadNodes(ast, curlCommand, warnings);
588
+ // TODO: pass syntax nodes for each token downstream and use it to
589
+ // highlight the problematic parts in warnings/errors so that it's clear
590
+ // which command a warning/error is for
591
+ // TODO: could even go further and pass all start/end indexes of all
592
+ // values all the way through the conversion so when you mouse over a part of
593
+ // the generated Python code we could highlight the part of the curl command
594
+ // that it came from.
595
+ const commandNodes = extractCommandNodes(ast, curlCommand, warnings);
596
+ const commands = [];
597
+ for (const [command, stdin, stdinFile] of commandNodes) {
598
+ const [name, argv] = toNameAndArgv(command, curlCommand, warnings);
599
+ commands.push([
600
+ [
601
+ nameToWord(name, curlCommand, warnings),
602
+ ...argv.map((arg) => toWord(arg, curlCommand, warnings)),
603
+ ],
604
+ stdin,
605
+ stdinFile,
606
+ ]);
607
+ }
608
+ return commands;
609
+ }
610
+ //# sourceMappingURL=tokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../../src/shell/tokenizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAS,eAAe,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAiB,MAAM,gBAAgB,CAAC;AAE/E,MAAM,WAAW,GAAG,OAAO,CAAC;AAC5B,SAAS,eAAe,CAAC,CAAS;IAChC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AACD,SAAS,iBAAiB,CAAC,GAAW;IACpC,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AACnD,CAAC;AACD,mEAAmE;AACnE,MAAM,wBAAwB,GAAG,eAAe,CAAC;AACjD,SAAS,4BAA4B,CAAC,GAAW;IAC/C,OAAO,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC;AAChE,CAAC;AACD,2CAA2C;AAC3C,yCAAyC;AACzC,6EAA6E;AAC7E,EAAE;AACF,oEAAoE;AACpE,MAAM,gBAAgB,GACpB,uGAAuG,CAAC;AAC1G,SAAS,sBAAsB,CAAC,GAAW;IACzC,SAAS,YAAY,CAAC,CAAS;QAC7B,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC;YACd,KAAK,GAAG;gBACN,OAAO,MAAM,CAAC;YAChB,KAAK,GAAG;gBACN,OAAO,IAAI,CAAC;YACd,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,OAAO,MAAM,CAAC;YAChB,KAAK,GAAG;gBACN,OAAO,IAAI,CAAC;YACd,KAAK,GAAG;gBACN,OAAO,IAAI,CAAC;YACd,KAAK,GAAG;gBACN,OAAO,IAAI,CAAC;YACd,KAAK,GAAG;gBACN,OAAO,IAAI,CAAC;YACd,KAAK,GAAG;gBACN,OAAO,IAAI,CAAC;YACd,KAAK,GAAG;gBACN,OAAO,GAAG,CAAC;YACb,KAAK,GAAG;gBACN,OAAO,GAAG,CAAC;YACb,KAAK,GAAG;gBACN,OAAO,GAAG,CAAC;YACb,KAAK,GAAG;gBACN,4DAA4D;gBAC5D,4DAA4D;gBAC5D,sCAAsC;gBACtC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,GAAG,GAAG,EAAE,CAAC;oBAC5B,MAAM,IAAI,OAAO,CACf,4DAA4D;wBAC1D,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC9B,IAAI,CACP,CAAC;gBACJ,CAAC;gBACD,kEAAkE;gBAClE,iEAAiE;gBACjE,2BAA2B;gBAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;oBACjB,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,MAAM,CAAC,aAAa,CAClB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,GAAG,UAAU,CAChD,CAAC;YACR,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,gCAAgC;gBAChC,4EAA4E;gBAC5E,OAAO,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACxD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,0BAA0B;gBAC1B,OAAO,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAC7D;gBACE,8EAA8E;gBAC9E,MAAM,IAAI,OAAO,CACf,6CAA6C,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAClE,CAAC;QACN,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,QAAQ,CACf,IAAuB,EACvB,WAAmB,EACnB,QAAkB;IAElB,IAAI,IAAI,GAAY,EAAE,CAAC;IACvB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,GAAG;YACN,mEAAmE;YACnE,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACX,wCAAwC;YACxC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,KAAK,YAAY;YACf,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,eAAe;YAClB,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,KAAK,QAAQ,CAAC;QACd,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,oCAAoC;YACpC,oBAAoB;YACpB,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvC,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBACpC,GAAG,IAAI,4BAA4B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClD,CAAC;qBAAM,CAAC;oBACN,mEAAmE;oBACnE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;oBACtD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;wBAC/B,GAAG,IAAI,MAAM,CAAC;oBAChB,CAAC;yBAAM,CAAC;wBACN,IAAI,GAAG,EAAE,CAAC;4BACR,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACf,GAAG,GAAG,EAAE,CAAC;wBACX,CAAC;wBACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,kBAAkB;YACrB,oCAAoC;YACpC,+CAA+C;YAC/C,QAAQ,CAAC,IAAI,CAAC;gBACZ,WAAW;gBACX,8BAA8B,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;aAClE,CAAC,CAAC;YACH,IACE,IAAI,CAAC,eAAe;gBACpB,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,uBAAuB,EACrD,CAAC;gBACD,wEAAwE;gBACxE,8BAA8B;gBAC9B,QAAQ,CAAC,IAAI,CAAC;oBACZ,uBAAuB;oBACvB,IAAI,CAAC,IAAI;wBACP,+BAA+B;wBAC/B,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC;iBACnD,CAAC,CAAC;YACL,CAAC;YACD,OAAO;gBACL;oBACE,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oBACzB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,UAAU,EAAE,IAAI;iBACjB;aACF,CAAC;QACJ,KAAK,WAAW;YACd,+BAA+B;YAC/B,+EAA+E;YAC/E,+BAA+B;YAC/B,oBAAoB;YACpB,QAAQ,CAAC,IAAI,CAAC;gBACZ,WAAW;gBACX,8BAA8B,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;aAClE,CAAC,CAAC;YACH,yCAAyC;YACzC,6BAA6B;YAC7B,OAAO;gBACL;oBACE,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,UAAU,EAAE,IAAI;iBACjB;aACF,CAAC;QACJ,KAAK,sBAAsB;YACzB,+BAA+B;YAC/B,oBAAoB;YACpB,QAAQ,CAAC,IAAI,CAAC;gBACZ,WAAW;gBACX,yCAAyC;oBACvC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;aACnC,CAAC,CAAC;YACH,OAAO;gBACL;oBACE,IAAI,EAAE,SAAS;oBACf,mDAAmD;oBACnD,4DAA4D;oBAC5D,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC9D,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,UAAU,EAAE,IAAI;iBACjB;aACF,CAAC;QACJ,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,iDAAiD;YACjD,6DAA6D;YAC7D,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,6BAA6B;gBAC7B,uDAAuD;gBACvD,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;gBACpE,OAAO,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;gBAE3C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;gBACtD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC/B,GAAG,IAAI,MAAM,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,EAAE,CAAC;wBACR,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACf,GAAG,GAAG,EAAE,CAAC;oBACX,CAAC;oBACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YACD,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD;YACE,MAAM,IAAI,OAAO,CACf,8BAA8B;gBAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzB,+KAA+K;gBAC/K,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CACnC,CAAC;IACN,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CACb,IAAuB,EACvB,WAAmB,EACnB,QAAkB;IAElB,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,QAAQ,CAAC,CAAC,0BAA0B,CAClC,IAAiB;IAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE3B,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,OAAO,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACxD,MAAM,MAAM,CAAC;QACf,CAAC;QAED,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,OAAO,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;gBACzB,SAAS,GAAG,KAAK,CAAC;gBAClB,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;YAED,IAAI,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;gBAC7B,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,GAAgB,EAChB,WAAmB,EACnB,QAAkB;IAElB,MAAM,QAAQ,GAAG,CAAC,CAAC;IACnB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,OAAO,IAAI,0BAA0B,CAAC,GAAG,CAAC,EAAE,CAAC;QACtD,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YACrB,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,cAAc,GAAG,KAAK,GAAG,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACjE,CAAC;YAAC,WAAM,CAAC,CAAA,CAAC;YACV,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;YACvC,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC;gBACZ,MAAM;gBACN,8BAA8B,IAAI,GAAG,CAAC,EAAE;oBACtC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9C,cAAc;aACjB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC;YACZ,MAAM;YACN,GAAG,KAAK,2BAA2B,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU;SAClE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,CAAoB,EACpB,gBAA0B,EAC1B,QAAkB;IAElB,MAAM,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC5D,MAAM,kBAAkB,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3D,IACE,kBAAkB;QAClB,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;QAC/C,kBAAkB,CAAC,KAAK,KAAK,SAAS,EACtC,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,mBAAmB;YACnB,6BAA6B;gBAC3B,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;gBACvB,wEAAwE;gBACxE,wCAAwC;gBACxC,eAAe;gBACf,IAAI;gBACJ,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBACpC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,IAAuB,EACvB,WAAmB,EACnB,QAAkB;IAElB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1B,MAAM,IAAI,OAAO,CAAC,2CAA2C,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,KAAK,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;IACnD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,OAAO,CACf,gFAAgF;YAC9E,OAAO,CAAC,IAAI;YACZ,YAAY;YACZ,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CACtC,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,OAAO,CACf,uEAAuE,CACxE,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC;YACZ,oBAAoB;YACpB,wEAAwE;YACxE,QAAQ;gBACN,SAAS,CAAC,MAAM;gBAChB,qDAAqD;gBACrD,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,QAAQ,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,OAAO,CACf,0DAA0D,CAC3D,CAAC;QACJ,CAAC;QACD,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAChD,MAAM,WAAW,GAAG,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,OAAO,CACf,0DAA0D,CAC3D,CAAC;QACJ,CAAC;QACD,qDAAqD;QACrD,KAAK,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QACnD,qDAAqD;QACrD,6DAA6D;QAC7D,IAAI,QAAQ,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC9D,MAAM,IAAI,OAAO,CACf,2DAA2D,CAC5D,CAAC;QACJ,CAAC;QACD,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,OAAO,CACf,yIAAyI;YACvI,OAAO,CAAC,IAAI;YACZ,UAAU,CACb,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,mBAAmB,CAC1B,IAAuB,EACvB,WAAmB,EACnB,QAAkB;IAElB,IAAI,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,WAAW,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACxC,MAAM,IAAI,OAAO,CACf,wEAAwE;oBACtE,WAAW,CAAC,IAAI;oBAChB,YAAY;oBACZ,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC,CAC1C,CAAC;YACJ,CAAC;YACD,MAAM,eAAe,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACrD,IAAI,eAAe,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpC,MAAM,IAAI,OAAO,CACf,qEAAqE;oBACnE,eAAe,CAAC,IAAI;oBACpB,YAAY;oBACZ,aAAa,CAAC,eAAe,EAAE,WAAW,CAAC,CAC9C,CAAC;YACJ,CAAC;YACD,IAAI,eAAe,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,KAAK,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,CAAC;wBACZ,2BAA2B;wBAC3B,6CAA6C;4BAC3C,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC;qBACpC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YACjD,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,cAAc,CAAC,GAAG,eAAe,CAChE,KAAK,EACL,WAAW,EACX,QAAQ,CACT,CAAC;YACF,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAClD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG;wBAC5B,YAAY;wBACZ,UAAU;wBACV,cAAc;qBACf,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,CAAC;wBACZ,2BAA2B;wBAC3B,6CAA6C;4BAC3C,aAAa,CAAC,YAAY,EAAE,WAAW,CAAC;qBAC3C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACrC,0BAA0B;YAC1B,6DAA6D;YAC7D,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,eAAe,CAAC,GAAG,mBAAmB,CACvE,KAAK,EACL,WAAW,EACX,QAAQ,CACT,CAAC;YACF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,SAAS;YACX,CAAC;YACD,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACnD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG;wBAC5B,aAAa;wBACb,WAAW;wBACX,eAAe;qBAChB,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,CAAC;wBACZ,2BAA2B;wBAC3B,6CAA6C;4BAC3C,aAAa,CAAC,aAAa,EAAE,WAAW,CAAC;qBAC5C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,6CAA6C;AAC7C,4DAA4D;AAC5D,SAAS,kBAAkB,CACzB,IAAuB,EACvB,WAAmB,EACnB,QAAkB;IAElB,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,mBAAmB,CACrD,IAAI,EACJ,WAAW,EACX,QAAQ,CACT,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,OAAO,CACf,2CAA2C;YACzC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CACnC,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,iDAAiD;AACjD,8BAA8B;AAC9B,SAAS,mBAAmB,CAC1B,GAAgB,EAChB,WAAmB,EACnB,QAAkB;IAElB,yEAAyE;IACzE,yCAAyC;IACzC,WAAW;IACX,aAAa;IACb,kCAAkC;IAClC,mBAAmB;IACnB,eAAe;IACf,mBAAmB;IACnB,uBAAuB;IACvB,2BAA2B;IAC3B,+BAA+B;IAC/B,uBAAuB;IACvB,4BAA4B;IAC5B,yBAAyB;IACzB,KAAK;IACL,WAAW;IACX,0BAA0B;IAC1B,qCAAqC;IACrC,iBAAiB;IAEjB,oBAAoB;IACpB,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACpC,8BAA8B;QAC9B,MAAM,IAAI,OAAO;QACf,2EAA2E;QAC3E,+CAA+C;YAC7C,GAAG,CAAC,QAAQ,CAAC,IAAI;YACjB,UAAU,CACb,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACpE,8BAA8B;QAC9B,MAAM,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,MAAM,QAAQ,GAAwC,EAAE,CAAC;IACzD,8EAA8E;IAC9E,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC3C,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,SAAS;gBACZ,UAAU,GAAG,IAAI,CAAC;gBAClB,SAAS;YACX,KAAK,SAAS;gBACZ,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;gBACzC,yBAAyB,CAAC,CAAC,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;gBACzD,MAAM;YACR,KAAK,sBAAsB;gBACzB,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACzD,yBAAyB,CAAC,CAAC,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;gBACzD,MAAM;YACR,KAAK,UAAU;gBACb,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAC5D,yBAAyB,CAAC,CAAC,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;gBACzD,MAAM;YACR,KAAK,cAAc,EAAE,6DAA6D;gBAChF,SAAS;YACX,KAAK,OAAO;gBACV,MAAM,IAAI,OAAO,CACf,8BAA8B,CAAC,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,KAAK;oBACxD,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC,CAChC,CAAC;YACJ;gBACE,8BAA8B;gBAC9B,MAAM,IAAI,OAAO,CACf,QAAQ;oBACN,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;oBACtB,iFAAiF;oBACjF,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC,CAChC,CAAC;QACN,CAAC;IACH,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,4FAA4F;QAC5F,qEAAqE;QACrE,MAAM,IAAI,OAAO,CACf,yDAAyD;YACvD,CAAC,UAAU,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC,CACrD,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CACpB,OAA0B,EAC1B,WAAmB,EACnB,QAAkB;IAElB,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAC3B,8BAA8B;QAC9B,MAAM,IAAI,OAAO,CACf,wBAAwB,GAAG,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAC/D,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACtD,kCAAkC;IAClC,8DAA8D;IAE9D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,OAAO,CACf,yDAAyD;YACvD,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CACtC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,6BAA6B;AAC7B,SAAS,UAAU,CACjB,IAAuB,EACvB,WAAmB,EACnB,QAAkB;IAElB,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,IAAI,OAAO,CACf,uCAAuC;YACrC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CACnC,CAAC;IACJ,CAAC;SAAM,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC;YACZ,6BAA6B;YAC7B,iEAAiE;gBAC/D,IAAI,CAAC,UAAU;SAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACxC,MAAM,iBAAiB,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,iBAAiB,EAAE,CAAC;QACtB,uEAAuE;QACvE,mEAAmE;QACnE,2BAA2B;QAC3B,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;YAC5B,+CAA+C;YAC/C,MAAM,IAAI,OAAO,CACf,yDAAyD;gBACvD,iBAAiB,CAAC,IAAI;gBACtB,IAAI;gBACJ,aAAa,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,IAAI,OAAO,CACf,wCAAwC;gBACtC,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CACvC,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,OAAO,CACf,2DAA2D;YACzD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI;YACJ,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CACvC,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,WAAmB,EACnB,WAAqB,EAAE;IAEvB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtC,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAE9C,kEAAkE;IAClE,wEAAwE;IACxE,uCAAuC;IACvC,oEAAoE;IACpE,6EAA6E;IAC7E,4EAA4E;IAC5E,qBAAqB;IACrB,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACrE,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QACnE,QAAQ,CAAC,IAAI,CAAC;YACZ;gBACE,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC;gBACvC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;aACzD;YACD,KAAK;YACL,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import Parser from "web-tree-sitter";
2
+ declare const parser: Parser;
3
+ export default parser;
4
+ export type { Parser };
@@ -0,0 +1,15 @@
1
+ // This file replaces Parser.ts when curlconverter is running in the browser.
2
+ import Parser from "web-tree-sitter";
3
+ // NOTE: top-level await requires Safari 15+
4
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#browser_compatibility
5
+ await Parser.init({
6
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
7
+ locateFile(scriptName, scriptDirectory) {
8
+ return "/" + scriptName;
9
+ },
10
+ });
11
+ const Bash = await Parser.Language.load("/tree-sitter-bash.wasm");
12
+ const parser = new Parser();
13
+ parser.setLanguage(Bash);
14
+ export default parser;
15
+ //# sourceMappingURL=webParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webParser.js","sourceRoot":"","sources":["../../../src/shell/webParser.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,4CAA4C;AAC5C,0GAA0G;AAC1G,MAAM,MAAM,CAAC,IAAI,CAAC;IAChB,6DAA6D;IAC7D,UAAU,CAAC,UAAkB,EAAE,eAAuB;QACpD,OAAO,GAAG,GAAG,UAAU,CAAC;IAC1B,CAAC;CACF,CAAC,CAAC;AACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAClE,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAC5B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAEzB,eAAe,MAAM,CAAC"}