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.
- package/LICENSE +202 -0
- package/README.md +3 -0
- package/bundle/assets/help/README.md +113 -0
- package/bundle/assets/help/cli-help-knowledge.md +1382 -0
- package/bundle/assets/sounds/README.md +74 -0
- package/bundle/assets/sounds/confirmation-required.wav +0 -0
- package/bundle/assets/sounds/response-complete.wav +0 -0
- package/bundle/assets/sounds/selection-made.wav +0 -0
- package/bundle/dvcode.js +4442 -0
- package/bundle/fix-binary-permissions.js +215 -0
- package/bundle/login/templates/authSelectPage.html +870 -0
- package/bundle/login/templates/deepv.ico +0 -0
- package/bundle/login/templates/feishu.ico +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/darwin-arm64-rg +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/darwin-x64-rg +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/linux-arm-rg +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/linux-arm64-rg +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/linux-x64-rg +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/rg.exe +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/win32-arm64-rg.exe +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/win32-ia32-rg.exe +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/win32-x64-rg.exe +0 -0
- package/bundle/node_modules/@vscode/ripgrep/lib/download.js +357 -0
- package/bundle/node_modules/@vscode/ripgrep/lib/index.d.ts +1 -0
- package/bundle/node_modules/@vscode/ripgrep/lib/index.js +42 -0
- package/bundle/node_modules/@vscode/ripgrep/lib/postinstall.js +121 -0
- package/bundle/node_modules/@vscode/ripgrep/package.json +24 -0
- package/bundle/node_modules/undici/LICENSE +21 -0
- package/bundle/node_modules/undici/README.md +472 -0
- package/bundle/node_modules/undici/docs/docs/api/Agent.md +83 -0
- package/bundle/node_modules/undici/docs/docs/api/BalancedPool.md +99 -0
- package/bundle/node_modules/undici/docs/docs/api/CacheStorage.md +30 -0
- package/bundle/node_modules/undici/docs/docs/api/CacheStore.md +151 -0
- package/bundle/node_modules/undici/docs/docs/api/Client.md +281 -0
- package/bundle/node_modules/undici/docs/docs/api/ClientStats.md +27 -0
- package/bundle/node_modules/undici/docs/docs/api/Connector.md +115 -0
- package/bundle/node_modules/undici/docs/docs/api/ContentType.md +57 -0
- package/bundle/node_modules/undici/docs/docs/api/Cookies.md +101 -0
- package/bundle/node_modules/undici/docs/docs/api/Debug.md +62 -0
- package/bundle/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +204 -0
- package/bundle/node_modules/undici/docs/docs/api/Dispatcher.md +1200 -0
- package/bundle/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +159 -0
- package/bundle/node_modules/undici/docs/docs/api/Errors.md +49 -0
- package/bundle/node_modules/undici/docs/docs/api/EventSource.md +45 -0
- package/bundle/node_modules/undici/docs/docs/api/Fetch.md +52 -0
- package/bundle/node_modules/undici/docs/docs/api/H2CClient.md +262 -0
- package/bundle/node_modules/undici/docs/docs/api/MockAgent.md +603 -0
- package/bundle/node_modules/undici/docs/docs/api/MockCallHistory.md +197 -0
- package/bundle/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +43 -0
- package/bundle/node_modules/undici/docs/docs/api/MockClient.md +77 -0
- package/bundle/node_modules/undici/docs/docs/api/MockErrors.md +12 -0
- package/bundle/node_modules/undici/docs/docs/api/MockPool.md +548 -0
- package/bundle/node_modules/undici/docs/docs/api/Pool.md +84 -0
- package/bundle/node_modules/undici/docs/docs/api/PoolStats.md +35 -0
- package/bundle/node_modules/undici/docs/docs/api/ProxyAgent.md +227 -0
- package/bundle/node_modules/undici/docs/docs/api/RedirectHandler.md +96 -0
- package/bundle/node_modules/undici/docs/docs/api/RetryAgent.md +45 -0
- package/bundle/node_modules/undici/docs/docs/api/RetryHandler.md +117 -0
- package/bundle/node_modules/undici/docs/docs/api/Util.md +25 -0
- package/bundle/node_modules/undici/docs/docs/api/WebSocket.md +85 -0
- package/bundle/node_modules/undici/docs/docs/api/api-lifecycle.md +91 -0
- package/bundle/node_modules/undici/docs/docs/best-practices/client-certificate.md +64 -0
- package/bundle/node_modules/undici/docs/docs/best-practices/mocking-request.md +190 -0
- package/bundle/node_modules/undici/docs/docs/best-practices/proxy.md +127 -0
- package/bundle/node_modules/undici/docs/docs/best-practices/writing-tests.md +20 -0
- package/bundle/node_modules/undici/index-fetch.js +35 -0
- package/bundle/node_modules/undici/index.d.ts +3 -0
- package/bundle/node_modules/undici/index.js +183 -0
- package/bundle/node_modules/undici/lib/api/abort-signal.js +59 -0
- package/bundle/node_modules/undici/lib/api/api-connect.js +110 -0
- package/bundle/node_modules/undici/lib/api/api-pipeline.js +252 -0
- package/bundle/node_modules/undici/lib/api/api-request.js +199 -0
- package/bundle/node_modules/undici/lib/api/api-stream.js +209 -0
- package/bundle/node_modules/undici/lib/api/api-upgrade.js +110 -0
- package/bundle/node_modules/undici/lib/api/index.js +7 -0
- package/bundle/node_modules/undici/lib/api/readable.js +558 -0
- package/bundle/node_modules/undici/lib/api/util.js +95 -0
- package/bundle/node_modules/undici/lib/cache/memory-cache-store.js +234 -0
- package/bundle/node_modules/undici/lib/cache/sqlite-cache-store.js +461 -0
- package/bundle/node_modules/undici/lib/core/connect.js +164 -0
- package/bundle/node_modules/undici/lib/core/constants.js +143 -0
- package/bundle/node_modules/undici/lib/core/diagnostics.js +196 -0
- package/bundle/node_modules/undici/lib/core/errors.js +244 -0
- package/bundle/node_modules/undici/lib/core/request.js +397 -0
- package/bundle/node_modules/undici/lib/core/symbols.js +68 -0
- package/bundle/node_modules/undici/lib/core/tree.js +160 -0
- package/bundle/node_modules/undici/lib/core/util.js +988 -0
- package/bundle/node_modules/undici/lib/dispatcher/agent.js +135 -0
- package/bundle/node_modules/undici/lib/dispatcher/balanced-pool.js +206 -0
- package/bundle/node_modules/undici/lib/dispatcher/client-h1.js +1615 -0
- package/bundle/node_modules/undici/lib/dispatcher/client-h2.js +798 -0
- package/bundle/node_modules/undici/lib/dispatcher/client.js +614 -0
- package/bundle/node_modules/undici/lib/dispatcher/dispatcher-base.js +161 -0
- package/bundle/node_modules/undici/lib/dispatcher/dispatcher.js +48 -0
- package/bundle/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +151 -0
- package/bundle/node_modules/undici/lib/dispatcher/fixed-queue.js +159 -0
- package/bundle/node_modules/undici/lib/dispatcher/h2c-client.js +122 -0
- package/bundle/node_modules/undici/lib/dispatcher/pool-base.js +191 -0
- package/bundle/node_modules/undici/lib/dispatcher/pool.js +118 -0
- package/bundle/node_modules/undici/lib/dispatcher/proxy-agent.js +275 -0
- package/bundle/node_modules/undici/lib/dispatcher/retry-agent.js +35 -0
- package/bundle/node_modules/undici/lib/global.js +32 -0
- package/bundle/node_modules/undici/lib/handler/cache-handler.js +448 -0
- package/bundle/node_modules/undici/lib/handler/cache-revalidation-handler.js +124 -0
- package/bundle/node_modules/undici/lib/handler/decorator-handler.js +67 -0
- package/bundle/node_modules/undici/lib/handler/redirect-handler.js +227 -0
- package/bundle/node_modules/undici/lib/handler/retry-handler.js +342 -0
- package/bundle/node_modules/undici/lib/handler/unwrap-handler.js +96 -0
- package/bundle/node_modules/undici/lib/handler/wrap-handler.js +95 -0
- package/bundle/node_modules/undici/lib/interceptor/cache.js +372 -0
- package/bundle/node_modules/undici/lib/interceptor/dns.js +432 -0
- package/bundle/node_modules/undici/lib/interceptor/dump.js +111 -0
- package/bundle/node_modules/undici/lib/interceptor/redirect.js +21 -0
- package/bundle/node_modules/undici/lib/interceptor/response-error.js +95 -0
- package/bundle/node_modules/undici/lib/interceptor/retry.js +19 -0
- package/bundle/node_modules/undici/lib/llhttp/.gitkeep +0 -0
- package/bundle/node_modules/undici/lib/llhttp/constants.d.ts +97 -0
- package/bundle/node_modules/undici/lib/llhttp/constants.js +498 -0
- package/bundle/node_modules/undici/lib/llhttp/constants.js.map +1 -0
- package/bundle/node_modules/undici/lib/llhttp/llhttp-wasm.js +15 -0
- package/bundle/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +15 -0
- package/bundle/node_modules/undici/lib/llhttp/utils.d.ts +2 -0
- package/bundle/node_modules/undici/lib/llhttp/utils.js +15 -0
- package/bundle/node_modules/undici/lib/llhttp/utils.js.map +1 -0
- package/bundle/node_modules/undici/lib/mock/mock-agent.js +224 -0
- package/bundle/node_modules/undici/lib/mock/mock-call-history.js +248 -0
- package/bundle/node_modules/undici/lib/mock/mock-client.js +64 -0
- package/bundle/node_modules/undici/lib/mock/mock-errors.js +19 -0
- package/bundle/node_modules/undici/lib/mock/mock-interceptor.js +209 -0
- package/bundle/node_modules/undici/lib/mock/mock-pool.js +64 -0
- package/bundle/node_modules/undici/lib/mock/mock-symbols.js +31 -0
- package/bundle/node_modules/undici/lib/mock/mock-utils.js +433 -0
- package/bundle/node_modules/undici/lib/mock/pending-interceptors-formatter.js +43 -0
- package/bundle/node_modules/undici/lib/util/cache.js +368 -0
- package/bundle/node_modules/undici/lib/util/date.js +259 -0
- package/bundle/node_modules/undici/lib/util/stats.js +32 -0
- package/bundle/node_modules/undici/lib/util/timers.js +423 -0
- package/bundle/node_modules/undici/lib/web/cache/cache.js +862 -0
- package/bundle/node_modules/undici/lib/web/cache/cachestorage.js +152 -0
- package/bundle/node_modules/undici/lib/web/cache/util.js +45 -0
- package/bundle/node_modules/undici/lib/web/cookies/constants.js +12 -0
- package/bundle/node_modules/undici/lib/web/cookies/index.js +199 -0
- package/bundle/node_modules/undici/lib/web/cookies/parse.js +322 -0
- package/bundle/node_modules/undici/lib/web/cookies/util.js +282 -0
- package/bundle/node_modules/undici/lib/web/eventsource/eventsource-stream.js +399 -0
- package/bundle/node_modules/undici/lib/web/eventsource/eventsource.js +484 -0
- package/bundle/node_modules/undici/lib/web/eventsource/util.js +37 -0
- package/bundle/node_modules/undici/lib/web/fetch/LICENSE +21 -0
- package/bundle/node_modules/undici/lib/web/fetch/body.js +532 -0
- package/bundle/node_modules/undici/lib/web/fetch/constants.js +131 -0
- package/bundle/node_modules/undici/lib/web/fetch/data-url.js +744 -0
- package/bundle/node_modules/undici/lib/web/fetch/dispatcher-weakref.js +46 -0
- package/bundle/node_modules/undici/lib/web/fetch/formdata-parser.js +501 -0
- package/bundle/node_modules/undici/lib/web/fetch/formdata.js +263 -0
- package/bundle/node_modules/undici/lib/web/fetch/global.js +40 -0
- package/bundle/node_modules/undici/lib/web/fetch/headers.js +719 -0
- package/bundle/node_modules/undici/lib/web/fetch/index.js +2258 -0
- package/bundle/node_modules/undici/lib/web/fetch/request.js +1099 -0
- package/bundle/node_modules/undici/lib/web/fetch/response.js +636 -0
- package/bundle/node_modules/undici/lib/web/fetch/util.js +1782 -0
- package/bundle/node_modules/undici/lib/web/fetch/webidl.js +740 -0
- package/bundle/node_modules/undici/lib/web/websocket/connection.js +325 -0
- package/bundle/node_modules/undici/lib/web/websocket/constants.js +126 -0
- package/bundle/node_modules/undici/lib/web/websocket/events.js +331 -0
- package/bundle/node_modules/undici/lib/web/websocket/frame.js +138 -0
- package/bundle/node_modules/undici/lib/web/websocket/permessage-deflate.js +70 -0
- package/bundle/node_modules/undici/lib/web/websocket/receiver.js +454 -0
- package/bundle/node_modules/undici/lib/web/websocket/sender.js +109 -0
- package/bundle/node_modules/undici/lib/web/websocket/stream/websocketerror.js +83 -0
- package/bundle/node_modules/undici/lib/web/websocket/stream/websocketstream.js +485 -0
- package/bundle/node_modules/undici/lib/web/websocket/util.js +338 -0
- package/bundle/node_modules/undici/lib/web/websocket/websocket.js +686 -0
- package/bundle/node_modules/undici/package.json +149 -0
- package/bundle/node_modules/undici/scripts/strip-comments.js +10 -0
- package/bundle/node_modules/undici/types/README.md +6 -0
- package/bundle/node_modules/undici/types/agent.d.ts +35 -0
- package/bundle/node_modules/undici/types/api.d.ts +43 -0
- package/bundle/node_modules/undici/types/balanced-pool.d.ts +29 -0
- package/bundle/node_modules/undici/types/cache-interceptor.d.ts +172 -0
- package/bundle/node_modules/undici/types/cache.d.ts +36 -0
- package/bundle/node_modules/undici/types/client-stats.d.ts +15 -0
- package/bundle/node_modules/undici/types/client.d.ts +110 -0
- package/bundle/node_modules/undici/types/connector.d.ts +34 -0
- package/bundle/node_modules/undici/types/content-type.d.ts +21 -0
- package/bundle/node_modules/undici/types/cookies.d.ts +30 -0
- package/bundle/node_modules/undici/types/diagnostics-channel.d.ts +66 -0
- package/bundle/node_modules/undici/types/dispatcher.d.ts +281 -0
- package/bundle/node_modules/undici/types/env-http-proxy-agent.d.ts +21 -0
- package/bundle/node_modules/undici/types/errors.d.ts +171 -0
- package/bundle/node_modules/undici/types/eventsource.d.ts +61 -0
- package/bundle/node_modules/undici/types/fetch.d.ts +210 -0
- package/bundle/node_modules/undici/types/formdata.d.ts +108 -0
- package/bundle/node_modules/undici/types/global-dispatcher.d.ts +9 -0
- package/bundle/node_modules/undici/types/global-origin.d.ts +7 -0
- package/bundle/node_modules/undici/types/h2c-client.d.ts +75 -0
- package/bundle/node_modules/undici/types/handlers.d.ts +15 -0
- package/bundle/node_modules/undici/types/header.d.ts +160 -0
- package/bundle/node_modules/undici/types/index.d.ts +75 -0
- package/bundle/node_modules/undici/types/interceptors.d.ts +34 -0
- package/bundle/node_modules/undici/types/mock-agent.d.ts +68 -0
- package/bundle/node_modules/undici/types/mock-call-history.d.ts +111 -0
- package/bundle/node_modules/undici/types/mock-client.d.ts +25 -0
- package/bundle/node_modules/undici/types/mock-errors.d.ts +12 -0
- package/bundle/node_modules/undici/types/mock-interceptor.d.ts +93 -0
- package/bundle/node_modules/undici/types/mock-pool.d.ts +25 -0
- package/bundle/node_modules/undici/types/patch.d.ts +29 -0
- package/bundle/node_modules/undici/types/pool-stats.d.ts +19 -0
- package/bundle/node_modules/undici/types/pool.d.ts +41 -0
- package/bundle/node_modules/undici/types/proxy-agent.d.ts +29 -0
- package/bundle/node_modules/undici/types/readable.d.ts +68 -0
- package/bundle/node_modules/undici/types/retry-agent.d.ts +8 -0
- package/bundle/node_modules/undici/types/retry-handler.d.ts +116 -0
- package/bundle/node_modules/undici/types/util.d.ts +18 -0
- package/bundle/node_modules/undici/types/utility.d.ts +7 -0
- package/bundle/node_modules/undici/types/webidl.d.ts +266 -0
- package/bundle/node_modules/undici/types/websocket.d.ts +184 -0
- package/bundle/sandbox-macos-permissive-closed.sb +26 -0
- package/bundle/sandbox-macos-permissive-open.sb +19 -0
- package/bundle/sandbox-macos-permissive-proxied.sb +31 -0
- package/bundle/sandbox-macos-restrictive-closed.sb +87 -0
- package/bundle/sandbox-macos-restrictive-open.sb +90 -0
- package/bundle/sandbox-macos-restrictive-proxied.sb +92 -0
- package/package.json +137 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
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.
|