@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.
- package/LICENSE +21 -0
- package/README.md +153 -0
- package/dist/src/Headers.d.ts +23 -0
- package/dist/src/Headers.js +287 -0
- package/dist/src/Headers.js.map +1 -0
- package/dist/src/Query.d.ts +8 -0
- package/dist/src/Query.js +136 -0
- package/dist/src/Query.js.map +1 -0
- package/dist/src/Request.d.ts +200 -0
- package/dist/src/Request.js +1191 -0
- package/dist/src/Request.js.map +1 -0
- package/dist/src/Warnings.d.ts +15 -0
- package/dist/src/Warnings.js +111 -0
- package/dist/src/Warnings.js.map +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +333 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/curl/auth.d.ts +12 -0
- package/dist/src/curl/auth.js +40 -0
- package/dist/src/curl/auth.js.map +1 -0
- package/dist/src/curl/form.d.ts +28 -0
- package/dist/src/curl/form.js +218 -0
- package/dist/src/curl/form.js.map +1 -0
- package/dist/src/curl/opts.d.ts +2052 -0
- package/dist/src/curl/opts.js +1000 -0
- package/dist/src/curl/opts.js.map +1 -0
- package/dist/src/curl/url.d.ts +14 -0
- package/dist/src/curl/url.js +218 -0
- package/dist/src/curl/url.js.map +1 -0
- package/dist/src/generators/ansible.d.ts +5 -0
- package/dist/src/generators/ansible.js +282 -0
- package/dist/src/generators/ansible.js.map +1 -0
- package/dist/src/generators/c.d.ts +12 -0
- package/dist/src/generators/c.js +1230 -0
- package/dist/src/generators/c.js.map +1 -0
- package/dist/src/generators/cfml.d.ts +5 -0
- package/dist/src/generators/cfml.js +134 -0
- package/dist/src/generators/cfml.js.map +1 -0
- package/dist/src/generators/clojure.d.ts +7 -0
- package/dist/src/generators/clojure.js +436 -0
- package/dist/src/generators/clojure.js.map +1 -0
- package/dist/src/generators/csharp.d.ts +8 -0
- package/dist/src/generators/csharp.js +356 -0
- package/dist/src/generators/csharp.js.map +1 -0
- package/dist/src/generators/dart.d.ts +5 -0
- package/dist/src/generators/dart.js +273 -0
- package/dist/src/generators/dart.js.map +1 -0
- package/dist/src/generators/elixir.d.ts +8 -0
- package/dist/src/generators/elixir.js +296 -0
- package/dist/src/generators/elixir.js.map +1 -0
- package/dist/src/generators/go.d.ts +5 -0
- package/dist/src/generators/go.js +228 -0
- package/dist/src/generators/go.js.map +1 -0
- package/dist/src/generators/har.d.ts +7 -0
- package/dist/src/generators/har.js +115 -0
- package/dist/src/generators/har.js.map +1 -0
- package/dist/src/generators/http.d.ts +7 -0
- package/dist/src/generators/http.js +165 -0
- package/dist/src/generators/http.js.map +1 -0
- package/dist/src/generators/httpie.d.ts +5 -0
- package/dist/src/generators/httpie.js +446 -0
- package/dist/src/generators/httpie.js.map +1 -0
- package/dist/src/generators/java/httpurlconnection.d.ts +5 -0
- package/dist/src/generators/java/httpurlconnection.js +123 -0
- package/dist/src/generators/java/httpurlconnection.js.map +1 -0
- package/dist/src/generators/java/java.d.ts +8 -0
- package/dist/src/generators/java/java.js +247 -0
- package/dist/src/generators/java/java.js.map +1 -0
- package/dist/src/generators/java/jsoup.d.ts +5 -0
- package/dist/src/generators/java/jsoup.js +152 -0
- package/dist/src/generators/java/jsoup.js.map +1 -0
- package/dist/src/generators/java/okhttp.d.ts +5 -0
- package/dist/src/generators/java/okhttp.js +232 -0
- package/dist/src/generators/java/okhttp.js.map +1 -0
- package/dist/src/generators/javascript/axios.d.ts +5 -0
- package/dist/src/generators/javascript/axios.js +332 -0
- package/dist/src/generators/javascript/axios.js.map +1 -0
- package/dist/src/generators/javascript/got.d.ts +5 -0
- package/dist/src/generators/javascript/got.js +277 -0
- package/dist/src/generators/javascript/got.js.map +1 -0
- package/dist/src/generators/javascript/http.d.ts +8 -0
- package/dist/src/generators/javascript/http.js +183 -0
- package/dist/src/generators/javascript/http.js.map +1 -0
- package/dist/src/generators/javascript/javascript.d.ts +37 -0
- package/dist/src/generators/javascript/javascript.js +676 -0
- package/dist/src/generators/javascript/javascript.js.map +1 -0
- package/dist/src/generators/javascript/jquery.d.ts +15 -0
- package/dist/src/generators/javascript/jquery.js +297 -0
- package/dist/src/generators/javascript/jquery.js.map +1 -0
- package/dist/src/generators/javascript/ky.d.ts +7 -0
- package/dist/src/generators/javascript/ky.js +245 -0
- package/dist/src/generators/javascript/ky.js.map +1 -0
- package/dist/src/generators/javascript/request.d.ts +5 -0
- package/dist/src/generators/javascript/request.js +113 -0
- package/dist/src/generators/javascript/request.js.map +1 -0
- package/dist/src/generators/javascript/superagent.d.ts +10 -0
- package/dist/src/generators/javascript/superagent.js +301 -0
- package/dist/src/generators/javascript/superagent.js.map +1 -0
- package/dist/src/generators/javascript/xhr.d.ts +8 -0
- package/dist/src/generators/javascript/xhr.js +147 -0
- package/dist/src/generators/javascript/xhr.js.map +1 -0
- package/dist/src/generators/json.d.ts +45 -0
- package/dist/src/generators/json.js +197 -0
- package/dist/src/generators/json.js.map +1 -0
- package/dist/src/generators/julia.d.ts +8 -0
- package/dist/src/generators/julia.js +365 -0
- package/dist/src/generators/julia.js.map +1 -0
- package/dist/src/generators/kotlin.d.ts +8 -0
- package/dist/src/generators/kotlin.js +325 -0
- package/dist/src/generators/kotlin.js.map +1 -0
- package/dist/src/generators/lua.d.ts +5 -0
- package/dist/src/generators/lua.js +192 -0
- package/dist/src/generators/lua.js.map +1 -0
- package/dist/src/generators/matlab/common.d.ts +16 -0
- package/dist/src/generators/matlab/common.js +238 -0
- package/dist/src/generators/matlab/common.js.map +1 -0
- package/dist/src/generators/matlab/httpinterface.d.ts +2 -0
- package/dist/src/generators/matlab/httpinterface.js +211 -0
- package/dist/src/generators/matlab/httpinterface.js.map +1 -0
- package/dist/src/generators/matlab/matlab.d.ts +5 -0
- package/dist/src/generators/matlab/matlab.js +29 -0
- package/dist/src/generators/matlab/matlab.js.map +1 -0
- package/dist/src/generators/matlab/webservices.d.ts +2 -0
- package/dist/src/generators/matlab/webservices.js +191 -0
- package/dist/src/generators/matlab/webservices.js.map +1 -0
- package/dist/src/generators/objectivec.d.ts +8 -0
- package/dist/src/generators/objectivec.js +269 -0
- package/dist/src/generators/objectivec.js.map +1 -0
- package/dist/src/generators/ocaml.d.ts +8 -0
- package/dist/src/generators/ocaml.js +150 -0
- package/dist/src/generators/ocaml.js.map +1 -0
- package/dist/src/generators/perl.d.ts +9 -0
- package/dist/src/generators/perl.js +209 -0
- package/dist/src/generators/perl.js.map +1 -0
- package/dist/src/generators/php/guzzle.d.ts +5 -0
- package/dist/src/generators/php/guzzle.js +328 -0
- package/dist/src/generators/php/guzzle.js.map +1 -0
- package/dist/src/generators/php/php.d.ts +8 -0
- package/dist/src/generators/php/php.js +217 -0
- package/dist/src/generators/php/php.js.map +1 -0
- package/dist/src/generators/php/requests.d.ts +5 -0
- package/dist/src/generators/php/requests.js +89 -0
- package/dist/src/generators/php/requests.js.map +1 -0
- package/dist/src/generators/powershell.d.ts +11 -0
- package/dist/src/generators/powershell.js +377 -0
- package/dist/src/generators/powershell.js.map +1 -0
- package/dist/src/generators/python/http.d.ts +5 -0
- package/dist/src/generators/python/http.js +128 -0
- package/dist/src/generators/python/http.js.map +1 -0
- package/dist/src/generators/python/python.d.ts +22 -0
- package/dist/src/generators/python/python.js +1693 -0
- package/dist/src/generators/python/python.js.map +1 -0
- package/dist/src/generators/r/httr.d.ts +10 -0
- package/dist/src/generators/r/httr.js +298 -0
- package/dist/src/generators/r/httr.js.map +1 -0
- package/dist/src/generators/r/httr2.d.ts +5 -0
- package/dist/src/generators/r/httr2.js +214 -0
- package/dist/src/generators/r/httr2.js.map +1 -0
- package/dist/src/generators/ruby/httparty.d.ts +6 -0
- package/dist/src/generators/ruby/httparty.js +308 -0
- package/dist/src/generators/ruby/httparty.js.map +1 -0
- package/dist/src/generators/ruby/ruby.d.ts +14 -0
- package/dist/src/generators/ruby/ruby.js +515 -0
- package/dist/src/generators/ruby/ruby.js.map +1 -0
- package/dist/src/generators/rust.d.ts +8 -0
- package/dist/src/generators/rust.js +177 -0
- package/dist/src/generators/rust.js.map +1 -0
- package/dist/src/generators/swift.d.ts +8 -0
- package/dist/src/generators/swift.js +219 -0
- package/dist/src/generators/swift.js.map +1 -0
- package/dist/src/generators/wget.d.ts +8 -0
- package/dist/src/generators/wget.js +472 -0
- package/dist/src/generators/wget.js.map +1 -0
- package/dist/src/index.d.ts +53 -0
- package/dist/src/index.js +54 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/parse.d.ts +13 -0
- package/dist/src/parse.js +43 -0
- package/dist/src/parse.js.map +1 -0
- package/dist/src/shell/Parser.d.ts +4 -0
- package/dist/src/shell/Parser.js +6 -0
- package/dist/src/shell/Parser.js.map +1 -0
- package/dist/src/shell/Word.d.ts +48 -0
- package/dist/src/shell/Word.js +486 -0
- package/dist/src/shell/Word.js.map +1 -0
- package/dist/src/shell/tokenizer.d.ts +3 -0
- package/dist/src/shell/tokenizer.js +610 -0
- package/dist/src/shell/tokenizer.js.map +1 -0
- package/dist/src/shell/webParser.d.ts +4 -0
- package/dist/src/shell/webParser.js +15 -0
- package/dist/src/shell/webParser.js.map +1 -0
- package/dist/src/utils.d.ts +6 -0
- package/dist/src/utils.js +21 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/tools/compare-requests.d.ts +2 -0
- package/dist/tools/compare-requests.js +448 -0
- package/dist/tools/compare-requests.js.map +1 -0
- package/dist/tools/gen-test.d.ts +2 -0
- package/dist/tools/gen-test.js +114 -0
- package/dist/tools/gen-test.js.map +1 -0
- package/dist/tree-sitter-bash.wasm +0 -0
- package/index.d.ts +3 -0
- package/package.json +97 -0
- package/src/Headers.ts +334 -0
- package/src/Query.ts +147 -0
- package/src/Request.ts +1649 -0
- package/src/Warnings.ts +154 -0
- package/src/cli.ts +561 -0
- package/src/curl/auth.ts +45 -0
- package/src/curl/form.ts +297 -0
- package/src/curl/opts.ts +1417 -0
- package/src/curl/url.ts +241 -0
- package/src/generators/ansible.ts +364 -0
- package/src/generators/c.ts +1371 -0
- package/src/generators/cfml.ts +155 -0
- package/src/generators/clojure.ts +521 -0
- package/src/generators/csharp.ts +383 -0
- package/src/generators/dart.ts +293 -0
- package/src/generators/elixir.ts +349 -0
- package/src/generators/go.ts +269 -0
- package/src/generators/har.ts +147 -0
- package/src/generators/http.ts +194 -0
- package/src/generators/httpie.ts +506 -0
- package/src/generators/java/httpurlconnection.ts +151 -0
- package/src/generators/java/java.ts +280 -0
- package/src/generators/java/jsoup.ts +172 -0
- package/src/generators/java/okhttp.ts +257 -0
- package/src/generators/javascript/axios.ts +395 -0
- package/src/generators/javascript/got.ts +362 -0
- package/src/generators/javascript/http.ts +232 -0
- package/src/generators/javascript/javascript.ts +825 -0
- package/src/generators/javascript/jquery.ts +360 -0
- package/src/generators/javascript/ky.ts +315 -0
- package/src/generators/javascript/request.ts +152 -0
- package/src/generators/javascript/superagent.ts +373 -0
- package/src/generators/javascript/xhr.ts +192 -0
- package/src/generators/json.ts +293 -0
- package/src/generators/julia.ts +398 -0
- package/src/generators/kotlin.ts +355 -0
- package/src/generators/lua.ts +209 -0
- package/src/generators/matlab/common.ts +281 -0
- package/src/generators/matlab/httpinterface.ts +284 -0
- package/src/generators/matlab/matlab.ts +39 -0
- package/src/generators/matlab/webservices.ts +263 -0
- package/src/generators/objectivec.ts +297 -0
- package/src/generators/ocaml.ts +168 -0
- package/src/generators/perl.ts +237 -0
- package/src/generators/php/guzzle.ts +368 -0
- package/src/generators/php/php.ts +239 -0
- package/src/generators/php/requests.ts +103 -0
- package/src/generators/powershell.ts +430 -0
- package/src/generators/python/http.ts +167 -0
- package/src/generators/python/python.ts +1934 -0
- package/src/generators/r/httr.ts +328 -0
- package/src/generators/r/httr2.ts +268 -0
- package/src/generators/ruby/httparty.ts +351 -0
- package/src/generators/ruby/ruby.ts +564 -0
- package/src/generators/rust.ts +243 -0
- package/src/generators/swift.ts +235 -0
- package/src/generators/wget.ts +533 -0
- package/src/index.ts +89 -0
- package/src/parse.ts +72 -0
- package/src/shell/Parser.ts +8 -0
- package/src/shell/Word.ts +531 -0
- package/src/shell/tokenizer.ts +736 -0
- package/src/shell/webParser.ts +18 -0
- package/src/utils.ts +25 -0
- package/tools/compare-requests.ts +571 -0
- package/tools/extract_curl_args.py +511 -0
- 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":"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"}
|
|
@@ -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"}
|