deepv-code 1.0.182

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 (223) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +3 -0
  3. package/bundle/assets/help/README.md +113 -0
  4. package/bundle/assets/help/cli-help-knowledge.md +1382 -0
  5. package/bundle/assets/sounds/README.md +74 -0
  6. package/bundle/assets/sounds/confirmation-required.wav +0 -0
  7. package/bundle/assets/sounds/response-complete.wav +0 -0
  8. package/bundle/assets/sounds/selection-made.wav +0 -0
  9. package/bundle/dvcode.js +4442 -0
  10. package/bundle/fix-binary-permissions.js +215 -0
  11. package/bundle/login/templates/authSelectPage.html +870 -0
  12. package/bundle/login/templates/deepv.ico +0 -0
  13. package/bundle/login/templates/feishu.ico +0 -0
  14. package/bundle/node_modules/@vscode/ripgrep/bin/darwin-arm64-rg +0 -0
  15. package/bundle/node_modules/@vscode/ripgrep/bin/darwin-x64-rg +0 -0
  16. package/bundle/node_modules/@vscode/ripgrep/bin/linux-arm-rg +0 -0
  17. package/bundle/node_modules/@vscode/ripgrep/bin/linux-arm64-rg +0 -0
  18. package/bundle/node_modules/@vscode/ripgrep/bin/linux-x64-rg +0 -0
  19. package/bundle/node_modules/@vscode/ripgrep/bin/rg.exe +0 -0
  20. package/bundle/node_modules/@vscode/ripgrep/bin/win32-arm64-rg.exe +0 -0
  21. package/bundle/node_modules/@vscode/ripgrep/bin/win32-ia32-rg.exe +0 -0
  22. package/bundle/node_modules/@vscode/ripgrep/bin/win32-x64-rg.exe +0 -0
  23. package/bundle/node_modules/@vscode/ripgrep/lib/download.js +357 -0
  24. package/bundle/node_modules/@vscode/ripgrep/lib/index.d.ts +1 -0
  25. package/bundle/node_modules/@vscode/ripgrep/lib/index.js +42 -0
  26. package/bundle/node_modules/@vscode/ripgrep/lib/postinstall.js +121 -0
  27. package/bundle/node_modules/@vscode/ripgrep/package.json +24 -0
  28. package/bundle/node_modules/undici/LICENSE +21 -0
  29. package/bundle/node_modules/undici/README.md +472 -0
  30. package/bundle/node_modules/undici/docs/docs/api/Agent.md +83 -0
  31. package/bundle/node_modules/undici/docs/docs/api/BalancedPool.md +99 -0
  32. package/bundle/node_modules/undici/docs/docs/api/CacheStorage.md +30 -0
  33. package/bundle/node_modules/undici/docs/docs/api/CacheStore.md +151 -0
  34. package/bundle/node_modules/undici/docs/docs/api/Client.md +281 -0
  35. package/bundle/node_modules/undici/docs/docs/api/ClientStats.md +27 -0
  36. package/bundle/node_modules/undici/docs/docs/api/Connector.md +115 -0
  37. package/bundle/node_modules/undici/docs/docs/api/ContentType.md +57 -0
  38. package/bundle/node_modules/undici/docs/docs/api/Cookies.md +101 -0
  39. package/bundle/node_modules/undici/docs/docs/api/Debug.md +62 -0
  40. package/bundle/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +204 -0
  41. package/bundle/node_modules/undici/docs/docs/api/Dispatcher.md +1200 -0
  42. package/bundle/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +159 -0
  43. package/bundle/node_modules/undici/docs/docs/api/Errors.md +49 -0
  44. package/bundle/node_modules/undici/docs/docs/api/EventSource.md +45 -0
  45. package/bundle/node_modules/undici/docs/docs/api/Fetch.md +52 -0
  46. package/bundle/node_modules/undici/docs/docs/api/H2CClient.md +262 -0
  47. package/bundle/node_modules/undici/docs/docs/api/MockAgent.md +603 -0
  48. package/bundle/node_modules/undici/docs/docs/api/MockCallHistory.md +197 -0
  49. package/bundle/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +43 -0
  50. package/bundle/node_modules/undici/docs/docs/api/MockClient.md +77 -0
  51. package/bundle/node_modules/undici/docs/docs/api/MockErrors.md +12 -0
  52. package/bundle/node_modules/undici/docs/docs/api/MockPool.md +548 -0
  53. package/bundle/node_modules/undici/docs/docs/api/Pool.md +84 -0
  54. package/bundle/node_modules/undici/docs/docs/api/PoolStats.md +35 -0
  55. package/bundle/node_modules/undici/docs/docs/api/ProxyAgent.md +227 -0
  56. package/bundle/node_modules/undici/docs/docs/api/RedirectHandler.md +96 -0
  57. package/bundle/node_modules/undici/docs/docs/api/RetryAgent.md +45 -0
  58. package/bundle/node_modules/undici/docs/docs/api/RetryHandler.md +117 -0
  59. package/bundle/node_modules/undici/docs/docs/api/Util.md +25 -0
  60. package/bundle/node_modules/undici/docs/docs/api/WebSocket.md +85 -0
  61. package/bundle/node_modules/undici/docs/docs/api/api-lifecycle.md +91 -0
  62. package/bundle/node_modules/undici/docs/docs/best-practices/client-certificate.md +64 -0
  63. package/bundle/node_modules/undici/docs/docs/best-practices/mocking-request.md +190 -0
  64. package/bundle/node_modules/undici/docs/docs/best-practices/proxy.md +127 -0
  65. package/bundle/node_modules/undici/docs/docs/best-practices/writing-tests.md +20 -0
  66. package/bundle/node_modules/undici/index-fetch.js +35 -0
  67. package/bundle/node_modules/undici/index.d.ts +3 -0
  68. package/bundle/node_modules/undici/index.js +183 -0
  69. package/bundle/node_modules/undici/lib/api/abort-signal.js +59 -0
  70. package/bundle/node_modules/undici/lib/api/api-connect.js +110 -0
  71. package/bundle/node_modules/undici/lib/api/api-pipeline.js +252 -0
  72. package/bundle/node_modules/undici/lib/api/api-request.js +199 -0
  73. package/bundle/node_modules/undici/lib/api/api-stream.js +209 -0
  74. package/bundle/node_modules/undici/lib/api/api-upgrade.js +110 -0
  75. package/bundle/node_modules/undici/lib/api/index.js +7 -0
  76. package/bundle/node_modules/undici/lib/api/readable.js +558 -0
  77. package/bundle/node_modules/undici/lib/api/util.js +95 -0
  78. package/bundle/node_modules/undici/lib/cache/memory-cache-store.js +234 -0
  79. package/bundle/node_modules/undici/lib/cache/sqlite-cache-store.js +461 -0
  80. package/bundle/node_modules/undici/lib/core/connect.js +164 -0
  81. package/bundle/node_modules/undici/lib/core/constants.js +143 -0
  82. package/bundle/node_modules/undici/lib/core/diagnostics.js +196 -0
  83. package/bundle/node_modules/undici/lib/core/errors.js +244 -0
  84. package/bundle/node_modules/undici/lib/core/request.js +397 -0
  85. package/bundle/node_modules/undici/lib/core/symbols.js +68 -0
  86. package/bundle/node_modules/undici/lib/core/tree.js +160 -0
  87. package/bundle/node_modules/undici/lib/core/util.js +988 -0
  88. package/bundle/node_modules/undici/lib/dispatcher/agent.js +135 -0
  89. package/bundle/node_modules/undici/lib/dispatcher/balanced-pool.js +206 -0
  90. package/bundle/node_modules/undici/lib/dispatcher/client-h1.js +1615 -0
  91. package/bundle/node_modules/undici/lib/dispatcher/client-h2.js +798 -0
  92. package/bundle/node_modules/undici/lib/dispatcher/client.js +614 -0
  93. package/bundle/node_modules/undici/lib/dispatcher/dispatcher-base.js +161 -0
  94. package/bundle/node_modules/undici/lib/dispatcher/dispatcher.js +48 -0
  95. package/bundle/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +151 -0
  96. package/bundle/node_modules/undici/lib/dispatcher/fixed-queue.js +159 -0
  97. package/bundle/node_modules/undici/lib/dispatcher/h2c-client.js +122 -0
  98. package/bundle/node_modules/undici/lib/dispatcher/pool-base.js +191 -0
  99. package/bundle/node_modules/undici/lib/dispatcher/pool.js +118 -0
  100. package/bundle/node_modules/undici/lib/dispatcher/proxy-agent.js +275 -0
  101. package/bundle/node_modules/undici/lib/dispatcher/retry-agent.js +35 -0
  102. package/bundle/node_modules/undici/lib/global.js +32 -0
  103. package/bundle/node_modules/undici/lib/handler/cache-handler.js +448 -0
  104. package/bundle/node_modules/undici/lib/handler/cache-revalidation-handler.js +124 -0
  105. package/bundle/node_modules/undici/lib/handler/decorator-handler.js +67 -0
  106. package/bundle/node_modules/undici/lib/handler/redirect-handler.js +227 -0
  107. package/bundle/node_modules/undici/lib/handler/retry-handler.js +342 -0
  108. package/bundle/node_modules/undici/lib/handler/unwrap-handler.js +96 -0
  109. package/bundle/node_modules/undici/lib/handler/wrap-handler.js +95 -0
  110. package/bundle/node_modules/undici/lib/interceptor/cache.js +372 -0
  111. package/bundle/node_modules/undici/lib/interceptor/dns.js +432 -0
  112. package/bundle/node_modules/undici/lib/interceptor/dump.js +111 -0
  113. package/bundle/node_modules/undici/lib/interceptor/redirect.js +21 -0
  114. package/bundle/node_modules/undici/lib/interceptor/response-error.js +95 -0
  115. package/bundle/node_modules/undici/lib/interceptor/retry.js +19 -0
  116. package/bundle/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  117. package/bundle/node_modules/undici/lib/llhttp/constants.d.ts +97 -0
  118. package/bundle/node_modules/undici/lib/llhttp/constants.js +498 -0
  119. package/bundle/node_modules/undici/lib/llhttp/constants.js.map +1 -0
  120. package/bundle/node_modules/undici/lib/llhttp/llhttp-wasm.js +15 -0
  121. package/bundle/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +15 -0
  122. package/bundle/node_modules/undici/lib/llhttp/utils.d.ts +2 -0
  123. package/bundle/node_modules/undici/lib/llhttp/utils.js +15 -0
  124. package/bundle/node_modules/undici/lib/llhttp/utils.js.map +1 -0
  125. package/bundle/node_modules/undici/lib/mock/mock-agent.js +224 -0
  126. package/bundle/node_modules/undici/lib/mock/mock-call-history.js +248 -0
  127. package/bundle/node_modules/undici/lib/mock/mock-client.js +64 -0
  128. package/bundle/node_modules/undici/lib/mock/mock-errors.js +19 -0
  129. package/bundle/node_modules/undici/lib/mock/mock-interceptor.js +209 -0
  130. package/bundle/node_modules/undici/lib/mock/mock-pool.js +64 -0
  131. package/bundle/node_modules/undici/lib/mock/mock-symbols.js +31 -0
  132. package/bundle/node_modules/undici/lib/mock/mock-utils.js +433 -0
  133. package/bundle/node_modules/undici/lib/mock/pending-interceptors-formatter.js +43 -0
  134. package/bundle/node_modules/undici/lib/util/cache.js +368 -0
  135. package/bundle/node_modules/undici/lib/util/date.js +259 -0
  136. package/bundle/node_modules/undici/lib/util/stats.js +32 -0
  137. package/bundle/node_modules/undici/lib/util/timers.js +423 -0
  138. package/bundle/node_modules/undici/lib/web/cache/cache.js +862 -0
  139. package/bundle/node_modules/undici/lib/web/cache/cachestorage.js +152 -0
  140. package/bundle/node_modules/undici/lib/web/cache/util.js +45 -0
  141. package/bundle/node_modules/undici/lib/web/cookies/constants.js +12 -0
  142. package/bundle/node_modules/undici/lib/web/cookies/index.js +199 -0
  143. package/bundle/node_modules/undici/lib/web/cookies/parse.js +322 -0
  144. package/bundle/node_modules/undici/lib/web/cookies/util.js +282 -0
  145. package/bundle/node_modules/undici/lib/web/eventsource/eventsource-stream.js +399 -0
  146. package/bundle/node_modules/undici/lib/web/eventsource/eventsource.js +484 -0
  147. package/bundle/node_modules/undici/lib/web/eventsource/util.js +37 -0
  148. package/bundle/node_modules/undici/lib/web/fetch/LICENSE +21 -0
  149. package/bundle/node_modules/undici/lib/web/fetch/body.js +532 -0
  150. package/bundle/node_modules/undici/lib/web/fetch/constants.js +131 -0
  151. package/bundle/node_modules/undici/lib/web/fetch/data-url.js +744 -0
  152. package/bundle/node_modules/undici/lib/web/fetch/dispatcher-weakref.js +46 -0
  153. package/bundle/node_modules/undici/lib/web/fetch/formdata-parser.js +501 -0
  154. package/bundle/node_modules/undici/lib/web/fetch/formdata.js +263 -0
  155. package/bundle/node_modules/undici/lib/web/fetch/global.js +40 -0
  156. package/bundle/node_modules/undici/lib/web/fetch/headers.js +719 -0
  157. package/bundle/node_modules/undici/lib/web/fetch/index.js +2258 -0
  158. package/bundle/node_modules/undici/lib/web/fetch/request.js +1099 -0
  159. package/bundle/node_modules/undici/lib/web/fetch/response.js +636 -0
  160. package/bundle/node_modules/undici/lib/web/fetch/util.js +1782 -0
  161. package/bundle/node_modules/undici/lib/web/fetch/webidl.js +740 -0
  162. package/bundle/node_modules/undici/lib/web/websocket/connection.js +325 -0
  163. package/bundle/node_modules/undici/lib/web/websocket/constants.js +126 -0
  164. package/bundle/node_modules/undici/lib/web/websocket/events.js +331 -0
  165. package/bundle/node_modules/undici/lib/web/websocket/frame.js +138 -0
  166. package/bundle/node_modules/undici/lib/web/websocket/permessage-deflate.js +70 -0
  167. package/bundle/node_modules/undici/lib/web/websocket/receiver.js +454 -0
  168. package/bundle/node_modules/undici/lib/web/websocket/sender.js +109 -0
  169. package/bundle/node_modules/undici/lib/web/websocket/stream/websocketerror.js +83 -0
  170. package/bundle/node_modules/undici/lib/web/websocket/stream/websocketstream.js +485 -0
  171. package/bundle/node_modules/undici/lib/web/websocket/util.js +338 -0
  172. package/bundle/node_modules/undici/lib/web/websocket/websocket.js +686 -0
  173. package/bundle/node_modules/undici/package.json +149 -0
  174. package/bundle/node_modules/undici/scripts/strip-comments.js +10 -0
  175. package/bundle/node_modules/undici/types/README.md +6 -0
  176. package/bundle/node_modules/undici/types/agent.d.ts +35 -0
  177. package/bundle/node_modules/undici/types/api.d.ts +43 -0
  178. package/bundle/node_modules/undici/types/balanced-pool.d.ts +29 -0
  179. package/bundle/node_modules/undici/types/cache-interceptor.d.ts +172 -0
  180. package/bundle/node_modules/undici/types/cache.d.ts +36 -0
  181. package/bundle/node_modules/undici/types/client-stats.d.ts +15 -0
  182. package/bundle/node_modules/undici/types/client.d.ts +110 -0
  183. package/bundle/node_modules/undici/types/connector.d.ts +34 -0
  184. package/bundle/node_modules/undici/types/content-type.d.ts +21 -0
  185. package/bundle/node_modules/undici/types/cookies.d.ts +30 -0
  186. package/bundle/node_modules/undici/types/diagnostics-channel.d.ts +66 -0
  187. package/bundle/node_modules/undici/types/dispatcher.d.ts +281 -0
  188. package/bundle/node_modules/undici/types/env-http-proxy-agent.d.ts +21 -0
  189. package/bundle/node_modules/undici/types/errors.d.ts +171 -0
  190. package/bundle/node_modules/undici/types/eventsource.d.ts +61 -0
  191. package/bundle/node_modules/undici/types/fetch.d.ts +210 -0
  192. package/bundle/node_modules/undici/types/formdata.d.ts +108 -0
  193. package/bundle/node_modules/undici/types/global-dispatcher.d.ts +9 -0
  194. package/bundle/node_modules/undici/types/global-origin.d.ts +7 -0
  195. package/bundle/node_modules/undici/types/h2c-client.d.ts +75 -0
  196. package/bundle/node_modules/undici/types/handlers.d.ts +15 -0
  197. package/bundle/node_modules/undici/types/header.d.ts +160 -0
  198. package/bundle/node_modules/undici/types/index.d.ts +75 -0
  199. package/bundle/node_modules/undici/types/interceptors.d.ts +34 -0
  200. package/bundle/node_modules/undici/types/mock-agent.d.ts +68 -0
  201. package/bundle/node_modules/undici/types/mock-call-history.d.ts +111 -0
  202. package/bundle/node_modules/undici/types/mock-client.d.ts +25 -0
  203. package/bundle/node_modules/undici/types/mock-errors.d.ts +12 -0
  204. package/bundle/node_modules/undici/types/mock-interceptor.d.ts +93 -0
  205. package/bundle/node_modules/undici/types/mock-pool.d.ts +25 -0
  206. package/bundle/node_modules/undici/types/patch.d.ts +29 -0
  207. package/bundle/node_modules/undici/types/pool-stats.d.ts +19 -0
  208. package/bundle/node_modules/undici/types/pool.d.ts +41 -0
  209. package/bundle/node_modules/undici/types/proxy-agent.d.ts +29 -0
  210. package/bundle/node_modules/undici/types/readable.d.ts +68 -0
  211. package/bundle/node_modules/undici/types/retry-agent.d.ts +8 -0
  212. package/bundle/node_modules/undici/types/retry-handler.d.ts +116 -0
  213. package/bundle/node_modules/undici/types/util.d.ts +18 -0
  214. package/bundle/node_modules/undici/types/utility.d.ts +7 -0
  215. package/bundle/node_modules/undici/types/webidl.d.ts +266 -0
  216. package/bundle/node_modules/undici/types/websocket.d.ts +184 -0
  217. package/bundle/sandbox-macos-permissive-closed.sb +26 -0
  218. package/bundle/sandbox-macos-permissive-open.sb +19 -0
  219. package/bundle/sandbox-macos-permissive-proxied.sb +31 -0
  220. package/bundle/sandbox-macos-restrictive-closed.sb +87 -0
  221. package/bundle/sandbox-macos-restrictive-open.sb +90 -0
  222. package/bundle/sandbox-macos-restrictive-proxied.sb +92 -0
  223. package/package.json +137 -0
Binary file
@@ -0,0 +1,357 @@
1
+ // @ts-check
2
+ 'use strict';
3
+
4
+ const path = require('path');
5
+ const fs = require('fs');
6
+ const os = require('os');
7
+ const https = require('https');
8
+ const util = require('util');
9
+ const url = require('url');
10
+ const stream = require('stream');
11
+ const child_process = require('child_process');
12
+ const proxy_from_env = require('proxy-from-env');
13
+ const yauzl = require('yauzl'); // use yauzl ^2.9.2 because vscode already ships with it.
14
+ const packageVersion = require('../package.json').version;
15
+ const tmpDir = path.join(os.tmpdir(), `vscode-ripgrep-cache-${packageVersion}`);
16
+
17
+ const fsUnlink = util.promisify(fs.unlink);
18
+ const fsExists = util.promisify(fs.exists);
19
+ const fsMkdir = util.promisify(fs.mkdir);
20
+
21
+ const isWindows = os.platform() === 'win32';
22
+
23
+ const REPO = 'microsoft/ripgrep-prebuilt';
24
+ const pipelineAsync = util.promisify(stream.pipeline);
25
+
26
+ /**
27
+ * @param {string} _url
28
+ */
29
+ function isGithubUrl(_url) {
30
+ return url.parse(_url).hostname === 'api.github.com';
31
+ }
32
+
33
+
34
+ /**
35
+ * @param {string} _url
36
+ * @param {fs.PathLike} dest
37
+ * @param {any} opts
38
+ */
39
+ function download(_url, dest, opts) {
40
+
41
+ const proxy = proxy_from_env.getProxyForUrl(url.parse(_url));
42
+ if (proxy !== '') {
43
+ var HttpsProxyAgent = require('https-proxy-agent');
44
+ opts = {
45
+ ...opts,
46
+ "agent": new HttpsProxyAgent.HttpsProxyAgent(proxy),
47
+ proxy
48
+ };
49
+ }
50
+
51
+
52
+ if (opts.headers && opts.headers.authorization && !isGithubUrl(_url)) {
53
+ delete opts.headers.authorization;
54
+ }
55
+
56
+ return new Promise((resolve, reject) => {
57
+ console.log(`Download options: ${JSON.stringify(opts)}`);
58
+ const outFile = fs.createWriteStream(dest);
59
+ const mergedOpts = {
60
+ ...url.parse(_url),
61
+ ...opts
62
+ };
63
+ https.get(mergedOpts, response => {
64
+ console.log('statusCode: ' + response.statusCode);
65
+ if (response.statusCode === 302) {
66
+ response.resume();
67
+ console.log('Following redirect to: ' + response.headers.location);
68
+ return download(response.headers.location, dest, opts)
69
+ .then(resolve, reject);
70
+ } else if (response.statusCode !== 200) {
71
+ reject(new Error('Download failed with ' + response.statusCode));
72
+ return;
73
+ }
74
+
75
+ response.pipe(outFile);
76
+ outFile.on('finish', () => {
77
+ resolve();
78
+ });
79
+ }).on('error', async err => {
80
+ await fsUnlink(dest);
81
+ reject(err);
82
+ });
83
+ });
84
+ }
85
+
86
+ /**
87
+ * @param {string} _url
88
+ * @param {any} opts
89
+ */
90
+ function get(_url, opts) {
91
+ console.log(`GET ${_url}`);
92
+
93
+ const proxy = proxy_from_env.getProxyForUrl(url.parse(_url));
94
+ if (proxy !== '') {
95
+ var HttpsProxyAgent = require('https-proxy-agent');
96
+ opts = {
97
+ ...opts,
98
+ "agent": new HttpsProxyAgent.HttpsProxyAgent(proxy)
99
+ };
100
+ }
101
+
102
+ return new Promise((resolve, reject) => {
103
+ let result = '';
104
+ opts = {
105
+ ...url.parse(_url),
106
+ ...opts
107
+ };
108
+ https.get(opts, response => {
109
+ if (response.statusCode !== 200) {
110
+ reject(new Error('Request failed: ' + response.statusCode));
111
+ }
112
+
113
+ response.on('data', d => {
114
+ result += d.toString();
115
+ });
116
+
117
+ response.on('end', () => {
118
+ resolve(result);
119
+ });
120
+
121
+ response.on('error', e => {
122
+ reject(e);
123
+ });
124
+ }).on('error', e => reject(e));
125
+ });
126
+ }
127
+
128
+ /**
129
+ * @param {string} repo
130
+ * @param {string} tag
131
+ */
132
+ function getApiUrl(repo, tag) {
133
+ return `https://api.github.com/repos/${repo}/releases/tags/${tag}`;
134
+ }
135
+
136
+ /**
137
+ * @param {{ force: boolean; token: string; version: string; }} opts
138
+ * @param {string} assetName
139
+ * @param {string} downloadFolder
140
+ */
141
+ async function getAssetFromGithubApi(opts, assetName, downloadFolder) {
142
+ const assetDownloadPath = path.join(downloadFolder, assetName);
143
+
144
+ // We can just use the cached binary
145
+ if (!opts.force && await fsExists(assetDownloadPath)) {
146
+ console.log('Using cached download: ' + assetDownloadPath);
147
+ return assetDownloadPath;
148
+ }
149
+
150
+ const downloadOpts = {
151
+ headers: {
152
+ 'user-agent': 'vscode-ripgrep'
153
+ }
154
+ };
155
+
156
+ if (opts.token) {
157
+ downloadOpts.headers.authorization = `token ${opts.token}`;
158
+ }
159
+
160
+ console.log(`Finding release for ${opts.version}`);
161
+ const release = await get(getApiUrl(REPO, opts.version), downloadOpts);
162
+ let jsonRelease;
163
+ try {
164
+ jsonRelease = JSON.parse(release);
165
+ } catch (e) {
166
+ throw new Error('Malformed API response: ' + e.stack);
167
+ }
168
+
169
+ if (!jsonRelease.assets) {
170
+ throw new Error('Bad API response: ' + JSON.stringify(release));
171
+ }
172
+
173
+ const asset = jsonRelease.assets.find(a => a.name === assetName);
174
+ if (!asset) {
175
+ throw new Error('Asset not found with name: ' + assetName);
176
+ }
177
+
178
+ console.log(`Downloading from ${asset.url}`);
179
+ console.log(`Downloading to ${assetDownloadPath}`);
180
+
181
+ downloadOpts.headers.accept = 'application/octet-stream';
182
+ await download(asset.url, assetDownloadPath, downloadOpts);
183
+ }
184
+
185
+ /**
186
+ * @param {string} zipPath
187
+ * @param {string} destinationDir
188
+ */
189
+ function unzipWindows(zipPath, destinationDir) {
190
+ // code from https://stackoverflow.com/questions/63932027/how-to-unzip-to-a-folder-using-yauzl
191
+ return new Promise((resolve, reject) => {
192
+ try {
193
+ // Create folder if not exists
194
+ fs.promises.mkdir(path.dirname(destinationDir), { recursive: true });
195
+
196
+ // Same as example we open the zip.
197
+ yauzl.open(zipPath, { lazyEntries: true }, (err, zipFile) => {
198
+ if (err) {
199
+ zipFile?.close();
200
+ reject(err);
201
+ return;
202
+ }
203
+
204
+ // This is the key. We start by reading the first entry.
205
+ zipFile.readEntry();
206
+
207
+ // Now for every entry, we will write a file or dir
208
+ // to disk. Then call zipFile.readEntry() again to
209
+ // trigger the next cycle.
210
+ zipFile.on('entry', (entry) => {
211
+ try {
212
+ // Directories
213
+ if (/\/$/.test(entry.fileName)) {
214
+ // Create the directory then read the next entry.
215
+ fs.promises.mkdir(path.join(destinationDir, entry.fileName), { recursive: true });
216
+ zipFile.readEntry();
217
+ }
218
+ // Files
219
+ else {
220
+ // Write the file to disk.
221
+ zipFile.openReadStream(entry, (readErr, readStream) => {
222
+ if (readErr) {
223
+ zipFile.close();
224
+ reject(readErr);
225
+ return;
226
+ }
227
+
228
+ const file = fs.createWriteStream(path.join(destinationDir, entry.fileName));
229
+ readStream.pipe(file);
230
+ file.on('finish', () => {
231
+ // Wait until the file is finished writing, then read the next entry.
232
+ // @ts-ignore: Typing for close() is wrong.
233
+ file.close(() => {
234
+ zipFile.readEntry();
235
+ });
236
+
237
+ file.on('error', (err) => {
238
+ zipFile.close();
239
+ reject(err);
240
+ });
241
+ });
242
+ });
243
+ }
244
+ } catch (e) {
245
+ zipFile.close();
246
+ reject(e);
247
+ }
248
+ });
249
+ zipFile.on('end', (err) => {
250
+ resolve();
251
+ });
252
+ zipFile.on('error', (err) => {
253
+ zipFile.close();
254
+ reject(err);
255
+ });
256
+ });
257
+ }
258
+ catch (e) {
259
+ reject(e);
260
+ }
261
+ });
262
+ }
263
+
264
+ /**
265
+ * Handle whitespace in filepath as powershell splits path with whitespaces
266
+ * @param {string} path
267
+ */
268
+ function sanitizePathForPowershell(path) {
269
+ path = path.replace(/ /g, '` '); // replace whitespace with "` " as solution provided here https://stackoverflow.com/a/18537344/7374562
270
+ return path;
271
+ }
272
+
273
+ function untar(zipPath, destinationDir) {
274
+ return new Promise((resolve, reject) => {
275
+ const unzipProc = child_process.spawn('tar', ['xvf', zipPath, '-C', destinationDir], { stdio: 'inherit' });
276
+ unzipProc.on('error', err => {
277
+ reject(err);
278
+ });
279
+ unzipProc.on('close', code => {
280
+ console.log(`tar xvf exited with ${code}`);
281
+ if (code !== 0) {
282
+ reject(new Error(`tar xvf exited with ${code}`));
283
+ return;
284
+ }
285
+
286
+ resolve();
287
+ });
288
+ });
289
+ }
290
+
291
+ /**
292
+ * @param {string} zipPath
293
+ * @param {string} destinationDir
294
+ */
295
+ async function unzipRipgrep(zipPath, destinationDir) {
296
+ if (isWindows) {
297
+ await unzipWindows(zipPath, destinationDir);
298
+ } else {
299
+ await untar(zipPath, destinationDir);
300
+ }
301
+
302
+ const expectedName = path.join(destinationDir, 'rg');
303
+ if (await fsExists(expectedName)) {
304
+ return expectedName;
305
+ }
306
+
307
+ if (await fsExists(expectedName + '.exe')) {
308
+ return expectedName + '.exe';
309
+ }
310
+
311
+ throw new Error(`Expecting rg or rg.exe unzipped into ${destinationDir}, didn't find one.`);
312
+ }
313
+
314
+ module.exports = async opts => {
315
+ if (!opts.version) {
316
+ return Promise.reject(new Error('Missing version'));
317
+ }
318
+
319
+ if (!opts.target) {
320
+ return Promise.reject(new Error('Missing target'));
321
+ }
322
+
323
+ const extension = isWindows ? '.zip' : '.tar.gz';
324
+ const assetName = ['ripgrep', opts.version, opts.target].join('-') + extension;
325
+
326
+ if (!await fsExists(tmpDir)) {
327
+ await fsMkdir(tmpDir);
328
+ }
329
+
330
+ const assetDownloadPath = path.join(tmpDir, assetName);
331
+ try {
332
+ await getAssetFromGithubApi(opts, assetName, tmpDir)
333
+ } catch (e) {
334
+ console.log('Deleting invalid download cache');
335
+ try {
336
+ await fsUnlink(assetDownloadPath);
337
+ } catch (e) { }
338
+
339
+ throw e;
340
+ }
341
+
342
+ console.log(`Unzipping to ${opts.destDir}`);
343
+ try {
344
+ const destinationPath = await unzipRipgrep(assetDownloadPath, opts.destDir);
345
+ if (!isWindows) {
346
+ await util.promisify(fs.chmod)(destinationPath, '755');
347
+ }
348
+ } catch (e) {
349
+ console.log('Deleting invalid download');
350
+
351
+ try {
352
+ await fsUnlink(assetDownloadPath);
353
+ } catch (e) { }
354
+
355
+ throw e;
356
+ }
357
+ };
@@ -0,0 +1 @@
1
+ export declare const rgPath: string;
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+
3
+ const path = require('path');
4
+ const fs = require('fs');
5
+
6
+ function getRgPath() {
7
+ const platform = process.platform;
8
+ const arch = process.arch;
9
+
10
+ // Normalize arch name
11
+ const normalizedArch = arch === 'x64' ? 'x64' : arch;
12
+ const platformKey = `${platform}-${normalizedArch}`;
13
+
14
+ // Define binary names by platform
15
+ const binaryName = platform === 'win32' ? 'rg.exe' : 'rg';
16
+
17
+ // Try platform-specific binary first
18
+ const platformSpecificPath = path.join(__dirname, `../bin/${platformKey}-${binaryName}`);
19
+ if (fs.existsSync(platformSpecificPath)) {
20
+ return platformSpecificPath;
21
+ }
22
+
23
+ // Fall back to standard binary name
24
+ const standardPath = path.join(__dirname, `../bin/${binaryName}`);
25
+ if (fs.existsSync(standardPath)) {
26
+ return standardPath;
27
+ }
28
+
29
+ // List available binaries for better error message
30
+ const binDir = path.join(__dirname, '../bin');
31
+ let availableBinaries = [];
32
+ if (fs.existsSync(binDir)) {
33
+ availableBinaries = fs.readdirSync(binDir);
34
+ }
35
+
36
+ throw new Error(`Ripgrep binary not found for platform ${platform}-${arch}.
37
+ Available binaries: ${availableBinaries.join(', ')}
38
+ Looking for: ${platformKey}-${binaryName} or ${binaryName}
39
+ Please ensure the binary is available for your platform.`);
40
+ }
41
+
42
+ module.exports.rgPath = getRgPath();
@@ -0,0 +1,121 @@
1
+ // @ts-check
2
+ 'use strict';
3
+
4
+ const os = require('os');
5
+ const fs = require('fs');
6
+ const path = require('path');
7
+ const util = require('util');
8
+ const child_process = require('child_process');
9
+
10
+ const download = require('./download');
11
+
12
+ const fsExists = util.promisify(fs.exists);
13
+ const mkdir = util.promisify(fs.mkdir);
14
+ const exec = util.promisify(child_process.exec);
15
+
16
+ const forceInstall = process.argv.includes('--force');
17
+ if (forceInstall) {
18
+ console.log('--force, ignoring caches');
19
+ }
20
+
21
+ const VERSION = 'v13.0.0-13';
22
+ const MULTI_ARCH_LINUX_VERSION = 'v13.0.0-4';// use this for arm-unknown-linux-gnueabihf and powerpc64le-unknown-linux-gnu until we can fix https://github.com/microsoft/ripgrep-prebuilt/issues/24 and https://github.com/microsoft/ripgrep-prebuilt/issues/32 respectively.
23
+ const BIN_PATH = path.join(__dirname, '../bin');
24
+
25
+ process.on('unhandledRejection', (reason, promise) => {
26
+ console.log('Unhandled rejection: ', promise, 'reason:', reason);
27
+ });
28
+
29
+ async function getTarget() {
30
+ const arch = process.env.npm_config_arch || os.arch();
31
+
32
+ switch (os.platform()) {
33
+ case 'darwin':
34
+ return arch === 'arm64' ? 'aarch64-apple-darwin' :
35
+ 'x86_64-apple-darwin';
36
+ case 'win32':
37
+ return arch === 'x64' ? 'x86_64-pc-windows-msvc' :
38
+ arch === 'arm64' ? 'aarch64-pc-windows-msvc' :
39
+ 'i686-pc-windows-msvc';
40
+ case 'linux':
41
+ return arch === 'x64' ? 'x86_64-unknown-linux-musl' :
42
+ arch === 'arm' ? 'arm-unknown-linux-gnueabihf' :
43
+ arch === 'armv7l' ? 'arm-unknown-linux-gnueabihf' :
44
+ arch === 'arm64' ? 'aarch64-unknown-linux-musl':
45
+ arch === 'ppc64' ? 'powerpc64le-unknown-linux-gnu' :
46
+ arch === 'riscv64' ? 'riscv64gc-unknown-linux-gnu' :
47
+ arch === 's390x' ? 's390x-unknown-linux-gnu' :
48
+ 'i686-unknown-linux-musl'
49
+ default: throw new Error('Unknown platform: ' + os.platform());
50
+ }
51
+ }
52
+
53
+ /**
54
+ * Sleep for a specified number of milliseconds
55
+ * @param {number} ms Time to sleep in milliseconds
56
+ * @returns {Promise<void>}
57
+ */
58
+ function sleep(ms) {
59
+ return new Promise(resolve => setTimeout(resolve, ms));
60
+ }
61
+
62
+ /**
63
+ * Retry a function with exponential backoff
64
+ * @param {Function} fn Function to retry
65
+ * @param {number} maxRetries Maximum number of retries
66
+ * @returns {Promise<any>}
67
+ */
68
+ async function retry(fn, maxRetries = 5) {
69
+ let retries = 0;
70
+ let lastError;
71
+
72
+ while (retries < maxRetries) {
73
+ try {
74
+ return await fn();
75
+ } catch (err) {
76
+ lastError = err;
77
+ retries++;
78
+
79
+ if (retries >= maxRetries) {
80
+ break;
81
+ }
82
+
83
+ const delay = Math.pow(2, retries) * 1000;
84
+ console.error(err);
85
+ console.log(`Download attempt ${retries} failed, retrying in ${delay/1000} seconds...`);
86
+ await sleep(delay);
87
+ }
88
+ }
89
+
90
+ throw lastError;
91
+ }
92
+
93
+ async function main() {
94
+ const binExists = await fsExists(BIN_PATH);
95
+ if (!forceInstall && binExists) {
96
+ console.log('bin/ folder already exists, exiting');
97
+ process.exit(0);
98
+ }
99
+
100
+ if (!binExists) {
101
+ await mkdir(BIN_PATH);
102
+ }
103
+
104
+ const target = await getTarget();
105
+ const opts = {
106
+ version: target === "arm-unknown-linux-gnueabihf" || target === "powerpc64le-unknown-linux-gnu" || target === "s390x-unknown-linux-gnu" ? MULTI_ARCH_LINUX_VERSION: VERSION,
107
+ token: process.env['GITHUB_TOKEN'],
108
+ target: await getTarget(),
109
+ destDir: BIN_PATH,
110
+ force: forceInstall
111
+ };
112
+
113
+ try {
114
+ await retry(() => download(opts));
115
+ } catch (err) {
116
+ console.error(`Downloading ripgrep failed after multiple retries: ${err.stack}`);
117
+ process.exit(1);
118
+ }
119
+ }
120
+
121
+ main();
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@vscode/ripgrep",
3
+ "version": "1.15.14",
4
+ "description": "A module for using ripgrep in a Node project",
5
+ "main": "lib/index.js",
6
+ "typings": "lib/index.d.ts",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/microsoft/vscode-ripgrep"
10
+ },
11
+ "scripts": {
12
+ "postinstall": "node ./lib/postinstall.js"
13
+ },
14
+ "author": "Rob Lourens",
15
+ "license": "MIT",
16
+ "dependencies": {
17
+ "https-proxy-agent": "^7.0.2",
18
+ "yauzl": "^2.9.2",
19
+ "proxy-from-env": "^1.1.0"
20
+ },
21
+ "devDependencies": {
22
+ "@types/node": "^20.8.4"
23
+ }
24
+ }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) Matteo Collina and Undici contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.