@theia/plugin-ext 1.37.0-next.19 → 1.37.0-next.22

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.
@@ -1,3 +1,4 @@
1
+ import { RequestService } from '@theia/core/shared/@theia/request';
1
2
  import { PluginDeployerResolver, PluginDeployerResolverContext } from '../../common';
2
3
  /**
3
4
  * Resolver that handle the github: protocol
@@ -8,12 +9,13 @@ export declare class GithubPluginDeployerResolver implements PluginDeployerResol
8
9
  private static PREFIX;
9
10
  private static GITHUB_ENDPOINT;
10
11
  private unpackedFolder;
12
+ protected readonly request: RequestService;
11
13
  constructor();
12
14
  /**
13
15
  * Grab the remote file specified by Github URL
14
16
  */
15
17
  resolve(pluginResolverContext: PluginDeployerResolverContext): Promise<void>;
16
- protected grabGithubFile(pluginResolverContext: PluginDeployerResolverContext, orgName: string, repoName: string, filename: string, version: string, resolve: (value?: void | PromiseLike<void>) => void, reject: (reason?: any) => void): void;
18
+ protected grabGithubFile(pluginResolverContext: PluginDeployerResolverContext, orgName: string, repoName: string, filename: string, version: string): Promise<void>;
17
19
  /**
18
20
  * Handle only the plugins that starts with github:
19
21
  */
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-github-resolver.d.ts","sourceRoot":"","sources":["../../../src/main/node/plugin-github-resolver.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAErF;;;;GAIG;AACH,qBACa,4BAA6B,YAAW,sBAAsB;IAEvE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAa;IAElC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAyB;IAEvD,OAAO,CAAC,cAAc,CAAS;;IAS/B;;OAEG;IACG,OAAO,CAAC,qBAAqB,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IAoElF,SAAS,CAAC,cAAc,CAAC,qBAAqB,EAAE,6BAA6B,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAE/I,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAwB9F;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGpC"}
1
+ {"version":3,"file":"plugin-github-resolver.d.ts","sourceRoot":"","sources":["../../../src/main/node/plugin-github-resolver.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAkB,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAKnF,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAErF;;;;GAIG;AACH,qBACa,4BAA6B,YAAW,sBAAsB;IAEvE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAa;IAElC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAyB;IAEvD,OAAO,CAAC,cAAc,CAAS;IAG/B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;;IAS3C;;OAEG;IACG,OAAO,CAAC,qBAAqB,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;cAyDlE,cAAc,CAAC,qBAAqB,EAAE,6BAA6B,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBzK;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGpC"}
@@ -26,11 +26,11 @@ var __metadata = (this && this.__metadata) || function (k, v) {
26
26
  var GithubPluginDeployerResolver_1;
27
27
  Object.defineProperty(exports, "__esModule", { value: true });
28
28
  exports.GithubPluginDeployerResolver = void 0;
29
+ const request_1 = require("@theia/core/shared/@theia/request");
29
30
  const inversify_1 = require("@theia/core/shared/inversify");
30
- const fs = require("fs");
31
+ const fs_1 = require("fs");
31
32
  const os = require("os");
32
33
  const path = require("path");
33
- const request = require("request");
34
34
  /**
35
35
  * Resolver that handle the github: protocol
36
36
  * github:<org>/<repo>/<filename>@latest
@@ -39,8 +39,8 @@ const request = require("request");
39
39
  let GithubPluginDeployerResolver = GithubPluginDeployerResolver_1 = class GithubPluginDeployerResolver {
40
40
  constructor() {
41
41
  this.unpackedFolder = path.resolve(os.tmpdir(), 'github-remote');
42
- if (!fs.existsSync(this.unpackedFolder)) {
43
- fs.mkdirSync(this.unpackedFolder);
42
+ if (!(0, fs_1.existsSync)(this.unpackedFolder)) {
43
+ (0, fs_1.mkdirSync)(this.unpackedFolder);
44
44
  }
45
45
  }
46
46
  /**
@@ -48,83 +48,72 @@ let GithubPluginDeployerResolver = GithubPluginDeployerResolver_1 = class Github
48
48
  */
49
49
  async resolve(pluginResolverContext) {
50
50
  // download the file
51
- return new Promise((resolve, reject) => {
52
- // extract data
53
- const extracted = /^github:(.*)\/(.*)\/(.*)$/gm.exec(pluginResolverContext.getOriginId());
54
- if (!extracted || extracted === null || extracted.length !== 4) {
55
- reject(new Error('Invalid extension' + pluginResolverContext.getOriginId()));
56
- return;
57
- }
58
- const orgName = extracted[1];
59
- const repoName = extracted[2];
60
- const file = extracted[3];
61
- // get version if any
62
- const splitFile = file.split('@');
63
- let version;
64
- let filename;
65
- if (splitFile.length === 1) {
66
- filename = file;
67
- version = 'latest';
68
- }
69
- else {
70
- filename = splitFile[0];
71
- version = splitFile[1];
72
- }
73
- // latest version, need to get the redirect
74
- const url = GithubPluginDeployerResolver_1.GITHUB_ENDPOINT + orgName + '/' + repoName + '/releases/latest';
51
+ // extract data
52
+ const extracted = /^github:(.*)\/(.*)\/(.*)$/gm.exec(pluginResolverContext.getOriginId());
53
+ if (!extracted || extracted === null || extracted.length !== 4) {
54
+ throw new Error('Invalid extension' + pluginResolverContext.getOriginId());
55
+ }
56
+ const orgName = extracted[1];
57
+ const repoName = extracted[2];
58
+ const file = extracted[3];
59
+ // get version if any
60
+ const splitFile = file.split('@');
61
+ let version;
62
+ let filename;
63
+ if (splitFile.length === 1) {
64
+ filename = file;
65
+ version = 'latest';
66
+ }
67
+ else {
68
+ filename = splitFile[0];
69
+ version = splitFile[1];
70
+ }
71
+ // latest version, need to get the redirect
72
+ const url = GithubPluginDeployerResolver_1.GITHUB_ENDPOINT + orgName + '/' + repoName + '/releases/latest';
73
+ // if latest, resolve first the real version
74
+ if (version === 'latest') {
75
75
  // disable redirect to grab the release
76
- const options = {
77
- followRedirect: false
78
- };
79
- // if latest, resolve first the real version
80
- if (version === 'latest') {
81
- request.get(url, options).on('response', response => {
82
- // should have a redirect
83
- if (response.statusCode === 302) {
84
- const redirectLocation = response.headers.location;
85
- if (!redirectLocation) {
86
- reject(new Error('Invalid github link with latest not being found'));
87
- return;
88
- }
89
- // parse redirect link
90
- const taggedValueArray = /^https:\/\/.*tag\/(.*)/gm.exec(redirectLocation);
91
- if (!taggedValueArray || taggedValueArray.length !== 2) {
92
- reject(new Error('The redirect link for latest is invalid ' + redirectLocation));
93
- return;
94
- }
95
- // grab version of tag
96
- this.grabGithubFile(pluginResolverContext, orgName, repoName, filename, taggedValueArray[1], resolve, reject);
97
- }
98
- });
99
- }
100
- else {
101
- this.grabGithubFile(pluginResolverContext, orgName, repoName, filename, version, resolve, reject);
76
+ const followRedirects = 0;
77
+ const response = await this.request.request({ url, followRedirects });
78
+ // should have a redirect
79
+ if (response.res.statusCode === 302) {
80
+ const redirectLocation = response.res.headers.location;
81
+ if (!redirectLocation) {
82
+ throw new Error('Invalid github link with latest not being found');
83
+ }
84
+ // parse redirect link
85
+ const taggedValueArray = /^https:\/\/.*tag\/(.*)/gm.exec(redirectLocation);
86
+ if (!taggedValueArray || taggedValueArray.length !== 2) {
87
+ throw new Error('The redirect link for latest is invalid ' + redirectLocation);
88
+ }
89
+ // grab version of tag
90
+ return this.grabGithubFile(pluginResolverContext, orgName, repoName, filename, taggedValueArray[1]);
102
91
  }
103
- });
92
+ }
93
+ else {
94
+ return this.grabGithubFile(pluginResolverContext, orgName, repoName, filename, version);
95
+ }
104
96
  }
105
97
  /*
106
98
  * Grab the github file specified by the plugin's ID
107
99
  */
108
- grabGithubFile(pluginResolverContext, orgName, repoName, filename, version,
109
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
110
- resolve, reject) {
100
+ async grabGithubFile(pluginResolverContext, orgName, repoName, filename, version) {
111
101
  const unpackedPath = path.resolve(this.unpackedFolder, path.basename(version + filename));
112
- const finish = () => {
113
- pluginResolverContext.addPlugin(pluginResolverContext.getOriginId(), unpackedPath);
114
- resolve();
115
- };
116
- // use of cache. If file is already there use it directly
117
- if (fs.existsSync(unpackedPath)) {
118
- finish();
102
+ try {
103
+ await fs_1.promises.access(unpackedPath);
104
+ // use of cache. If file is already there use it directly
119
105
  return;
120
106
  }
121
- const dest = fs.createWriteStream(unpackedPath);
122
- dest.addListener('finish', finish);
107
+ catch (_a) { }
123
108
  const url = GithubPluginDeployerResolver_1.GITHUB_ENDPOINT + orgName + '/' + repoName + '/releases/download/' + version + '/' + filename;
124
- request.get(url)
125
- .on('error', err => {
126
- reject(err);
127
- }).pipe(dest);
109
+ const response = await this.request.request({ url });
110
+ if (request_1.RequestContext.isSuccess(response)) {
111
+ await fs_1.promises.writeFile(unpackedPath, response.buffer);
112
+ pluginResolverContext.addPlugin(pluginResolverContext.getOriginId(), unpackedPath);
113
+ }
114
+ else {
115
+ throw new Error(`Could not download the plugin from GitHub. URL: ${url}. HTTP status code: ${response.res.statusCode}`);
116
+ }
128
117
  }
129
118
  /**
130
119
  * Handle only the plugins that starts with github:
@@ -135,6 +124,10 @@ let GithubPluginDeployerResolver = GithubPluginDeployerResolver_1 = class Github
135
124
  };
136
125
  GithubPluginDeployerResolver.PREFIX = 'github:';
137
126
  GithubPluginDeployerResolver.GITHUB_ENDPOINT = 'https://github.com/';
127
+ __decorate([
128
+ (0, inversify_1.inject)(request_1.RequestService),
129
+ __metadata("design:type", Object)
130
+ ], GithubPluginDeployerResolver.prototype, "request", void 0);
138
131
  GithubPluginDeployerResolver = GithubPluginDeployerResolver_1 = __decorate([
139
132
  (0, inversify_1.injectable)(),
140
133
  __metadata("design:paramtypes", [])
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-github-resolver.js","sourceRoot":"","sources":["../../../src/main/node/plugin-github-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-github-resolver.js","sourceRoot":"","sources":["../../../src/main/node/plugin-github-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { RequestService } from '@theia/core/shared/@theia/request';
1
2
  import { PluginDeployerResolver, PluginDeployerResolverContext } from '../../common';
2
3
  /**
3
4
  * Resolver that handle the http(s): protocol
@@ -6,6 +7,7 @@ import { PluginDeployerResolver, PluginDeployerResolverContext } from '../../com
6
7
  */
7
8
  export declare class HttpPluginDeployerResolver implements PluginDeployerResolver {
8
9
  private unpackedFolder;
10
+ protected readonly request: RequestService;
9
11
  constructor();
10
12
  /**
11
13
  * Grab the remote file specified by the given URL
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-http-resolver.d.ts","sourceRoot":"","sources":["../../../src/main/node/plugin-http-resolver.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAErF;;;;GAIG;AACH,qBACa,0BAA2B,YAAW,sBAAsB;IAErE,OAAO,CAAC,cAAc,CAAS;;IAS/B;;OAEG;IACG,OAAO,CAAC,qBAAqB,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IAuClF;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGpC"}
1
+ {"version":3,"file":"plugin-http-resolver.d.ts","sourceRoot":"","sources":["../../../src/main/node/plugin-http-resolver.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAkB,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAMnF,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAErF;;;;GAIG;AACH,qBACa,0BAA2B,YAAW,sBAAsB;IAErE,OAAO,CAAC,cAAc,CAAS;IAG/B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;;IAS3C;;OAEG;IACG,OAAO,CAAC,qBAAqB,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BlF;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGpC"}
@@ -25,12 +25,12 @@ var __metadata = (this && this.__metadata) || function (k, v) {
25
25
  };
26
26
  Object.defineProperty(exports, "__esModule", { value: true });
27
27
  exports.HttpPluginDeployerResolver = void 0;
28
+ const request_1 = require("@theia/core/shared/@theia/request");
28
29
  const inversify_1 = require("@theia/core/shared/inversify");
29
- const fs = require("fs");
30
+ const fs_1 = require("fs");
30
31
  const os = require("os");
31
32
  const path = require("path");
32
33
  const url = require("url");
33
- const request = require("request");
34
34
  /**
35
35
  * Resolver that handle the http(s): protocol
36
36
  * http://path/to/my.plugin
@@ -39,8 +39,8 @@ const request = require("request");
39
39
  let HttpPluginDeployerResolver = class HttpPluginDeployerResolver {
40
40
  constructor() {
41
41
  this.unpackedFolder = path.resolve(os.tmpdir(), 'http-remote');
42
- if (!fs.existsSync(this.unpackedFolder)) {
43
- fs.mkdirSync(this.unpackedFolder);
42
+ if (!(0, fs_1.existsSync)(this.unpackedFolder)) {
43
+ (0, fs_1.mkdirSync)(this.unpackedFolder);
44
44
  }
45
45
  }
46
46
  /**
@@ -48,34 +48,30 @@ let HttpPluginDeployerResolver = class HttpPluginDeployerResolver {
48
48
  */
49
49
  async resolve(pluginResolverContext) {
50
50
  // download the file
51
- return new Promise((resolve, reject) => {
52
- // keep filename of the url
53
- const urlPath = pluginResolverContext.getOriginId();
54
- const link = url.parse(urlPath);
55
- if (!link.pathname) {
56
- reject(new Error('invalid link URI' + urlPath));
57
- return;
58
- }
59
- const dirname = path.dirname(link.pathname);
60
- const basename = path.basename(link.pathname);
61
- const filename = dirname.replace(/\W/g, '_') + ('-') + basename;
62
- const unpackedPath = path.resolve(this.unpackedFolder, path.basename(filename));
63
- const finish = () => {
64
- pluginResolverContext.addPlugin(pluginResolverContext.getOriginId(), unpackedPath);
65
- resolve();
66
- };
51
+ // keep filename of the url
52
+ const urlPath = pluginResolverContext.getOriginId();
53
+ const link = url.parse(urlPath);
54
+ if (!link.pathname) {
55
+ throw new Error('invalid link URI' + urlPath);
56
+ }
57
+ const dirname = path.dirname(link.pathname);
58
+ const basename = path.basename(link.pathname);
59
+ const filename = dirname.replace(/\W/g, '_') + ('-') + basename;
60
+ const unpackedPath = path.resolve(this.unpackedFolder, path.basename(filename));
61
+ try {
62
+ await fs_1.promises.access(unpackedPath);
67
63
  // use of cache. If file is already there use it directly
68
- if (fs.existsSync(unpackedPath)) {
69
- finish();
70
- return;
71
- }
72
- const dest = fs.createWriteStream(unpackedPath);
73
- dest.addListener('finish', finish);
74
- request.get(pluginResolverContext.getOriginId())
75
- .on('error', err => {
76
- reject(err);
77
- }).pipe(dest);
78
- });
64
+ return;
65
+ }
66
+ catch (_a) { }
67
+ const response = await this.request.request({ url: pluginResolverContext.getOriginId() });
68
+ if (request_1.RequestContext.isSuccess(response)) {
69
+ await fs_1.promises.writeFile(unpackedPath, response.buffer);
70
+ pluginResolverContext.addPlugin(pluginResolverContext.getOriginId(), unpackedPath);
71
+ }
72
+ else {
73
+ throw new Error(`Could not download the plugin from ${pluginResolverContext.getOriginId()}. HTTP status code: ${response.res.statusCode}`);
74
+ }
79
75
  }
80
76
  /**
81
77
  * Handle only the plugins that starts with http or https:
@@ -84,6 +80,10 @@ let HttpPluginDeployerResolver = class HttpPluginDeployerResolver {
84
80
  return /^http[s]?:\/\/.*$/gm.test(pluginId);
85
81
  }
86
82
  };
83
+ __decorate([
84
+ (0, inversify_1.inject)(request_1.RequestService),
85
+ __metadata("design:type", Object)
86
+ ], HttpPluginDeployerResolver.prototype, "request", void 0);
87
87
  HttpPluginDeployerResolver = __decorate([
88
88
  (0, inversify_1.injectable)(),
89
89
  __metadata("design:paramtypes", [])
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-http-resolver.js","sourceRoot":"","sources":["../../../src/main/node/plugin-http-resolver.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;;;;;;;;;;;;AAEhF,4DAA0D;AAC1D,yBAAyB;AACzB,yBAAyB;AACzB,6BAA6B;AAC7B,2BAA2B;AAC3B,mCAAmC;AAInC;;;;GAIG;AAEH,IAAa,0BAA0B,GAAvC,MAAa,0BAA0B;IAInC;QACI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;QAC/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;YACrC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACrC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,qBAAoD;QAE9D,oBAAoB;QACpB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAEzC,2BAA2B;YAC3B,MAAM,OAAO,GAAG,qBAAqB,CAAC,WAAW,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;gBAChD,OAAO;aACV;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;YAChE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAEhF,MAAM,MAAM,GAAG,GAAG,EAAE;gBAChB,qBAAqB,CAAC,SAAS,CAAC,qBAAqB,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,CAAC;gBACnF,OAAO,EAAE,CAAC;YACd,CAAC,CAAC;YAEF,yDAAyD;YACzD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;gBAC7B,MAAM,EAAE,CAAC;gBACT,OAAO;aACV;YACD,MAAM,IAAI,GAAG,EAAE,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAEhD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;iBAC3C,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACf,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IAEP,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAgB;QACnB,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;CACJ,CAAA;AA3DY,0BAA0B;IADtC,IAAA,sBAAU,GAAE;;GACA,0BAA0B,CA2DtC;AA3DY,gEAA0B"}
1
+ {"version":3,"file":"plugin-http-resolver.js","sourceRoot":"","sources":["../../../src/main/node/plugin-http-resolver.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;;;;;;;;;;;;AAEhF,+DAAmF;AACnF,4DAAkE;AAClE,2BAA2D;AAC3D,yBAAyB;AACzB,6BAA6B;AAC7B,2BAA2B;AAG3B;;;;GAIG;AAEH,IAAa,0BAA0B,GAAvC,MAAa,0BAA0B;IAOnC;QACI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC,cAAc,CAAC,EAAE;YAClC,IAAA,cAAS,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAClC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,qBAAoD;QAE9D,oBAAoB;QACpB,2BAA2B;QAC3B,MAAM,OAAO,GAAG,qBAAqB,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,OAAO,CAAC,CAAC;SACjD;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QAChE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEhF,IAAI;YACA,MAAM,aAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9B,yDAAyD;YACzD,OAAO;SACV;QAAC,WAAM,GAAG;QAEX,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,qBAAqB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC1F,IAAI,wBAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YACpC,MAAM,aAAE,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClD,qBAAqB,CAAC,SAAS,CAAC,qBAAqB,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,CAAC;SACtF;aAAM;YACH,MAAM,IAAI,KAAK,CAAC,sCAAsC,qBAAqB,CAAC,WAAW,EAAE,uBAAuB,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;SAC9I;IAEL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAgB;QACnB,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;CACJ,CAAA;AAjDG;IADC,IAAA,kBAAM,EAAC,wBAAc,CAAC;;2DACoB;AALlC,0BAA0B;IADtC,IAAA,sBAAU,GAAE;;GACA,0BAA0B,CAsDtC;AAtDY,gEAA0B"}
package/package.json CHANGED
@@ -1,35 +1,35 @@
1
1
  {
2
2
  "name": "@theia/plugin-ext",
3
- "version": "1.37.0-next.19+b206d89a7",
3
+ "version": "1.37.0-next.22+0e0e9ee4b",
4
4
  "description": "Theia - Plugin Extension",
5
5
  "main": "lib/common/index.js",
6
6
  "typings": "lib/common/index.d.ts",
7
7
  "dependencies": {
8
- "@theia/bulk-edit": "1.37.0-next.19+b206d89a7",
9
- "@theia/callhierarchy": "1.37.0-next.19+b206d89a7",
10
- "@theia/console": "1.37.0-next.19+b206d89a7",
11
- "@theia/core": "1.37.0-next.19+b206d89a7",
12
- "@theia/debug": "1.37.0-next.19+b206d89a7",
13
- "@theia/editor": "1.37.0-next.19+b206d89a7",
14
- "@theia/editor-preview": "1.37.0-next.19+b206d89a7",
15
- "@theia/file-search": "1.37.0-next.19+b206d89a7",
16
- "@theia/filesystem": "1.37.0-next.19+b206d89a7",
17
- "@theia/markers": "1.37.0-next.19+b206d89a7",
18
- "@theia/messages": "1.37.0-next.19+b206d89a7",
19
- "@theia/monaco": "1.37.0-next.19+b206d89a7",
8
+ "@theia/bulk-edit": "1.37.0-next.22+0e0e9ee4b",
9
+ "@theia/callhierarchy": "1.37.0-next.22+0e0e9ee4b",
10
+ "@theia/console": "1.37.0-next.22+0e0e9ee4b",
11
+ "@theia/core": "1.37.0-next.22+0e0e9ee4b",
12
+ "@theia/debug": "1.37.0-next.22+0e0e9ee4b",
13
+ "@theia/editor": "1.37.0-next.22+0e0e9ee4b",
14
+ "@theia/editor-preview": "1.37.0-next.22+0e0e9ee4b",
15
+ "@theia/file-search": "1.37.0-next.22+0e0e9ee4b",
16
+ "@theia/filesystem": "1.37.0-next.22+0e0e9ee4b",
17
+ "@theia/markers": "1.37.0-next.22+0e0e9ee4b",
18
+ "@theia/messages": "1.37.0-next.22+0e0e9ee4b",
19
+ "@theia/monaco": "1.37.0-next.22+0e0e9ee4b",
20
20
  "@theia/monaco-editor-core": "1.72.3",
21
- "@theia/navigator": "1.37.0-next.19+b206d89a7",
22
- "@theia/output": "1.37.0-next.19+b206d89a7",
23
- "@theia/plugin": "1.37.0-next.19+b206d89a7",
24
- "@theia/preferences": "1.37.0-next.19+b206d89a7",
25
- "@theia/scm": "1.37.0-next.19+b206d89a7",
26
- "@theia/search-in-workspace": "1.37.0-next.19+b206d89a7",
27
- "@theia/task": "1.37.0-next.19+b206d89a7",
28
- "@theia/terminal": "1.37.0-next.19+b206d89a7",
29
- "@theia/timeline": "1.37.0-next.19+b206d89a7",
30
- "@theia/typehierarchy": "1.37.0-next.19+b206d89a7",
31
- "@theia/variable-resolver": "1.37.0-next.19+b206d89a7",
32
- "@theia/workspace": "1.37.0-next.19+b206d89a7",
21
+ "@theia/navigator": "1.37.0-next.22+0e0e9ee4b",
22
+ "@theia/output": "1.37.0-next.22+0e0e9ee4b",
23
+ "@theia/plugin": "1.37.0-next.22+0e0e9ee4b",
24
+ "@theia/preferences": "1.37.0-next.22+0e0e9ee4b",
25
+ "@theia/scm": "1.37.0-next.22+0e0e9ee4b",
26
+ "@theia/search-in-workspace": "1.37.0-next.22+0e0e9ee4b",
27
+ "@theia/task": "1.37.0-next.22+0e0e9ee4b",
28
+ "@theia/terminal": "1.37.0-next.22+0e0e9ee4b",
29
+ "@theia/timeline": "1.37.0-next.22+0e0e9ee4b",
30
+ "@theia/typehierarchy": "1.37.0-next.22+0e0e9ee4b",
31
+ "@theia/variable-resolver": "1.37.0-next.22+0e0e9ee4b",
32
+ "@theia/workspace": "1.37.0-next.22+0e0e9ee4b",
33
33
  "@types/mime": "^2.0.1",
34
34
  "@vscode/debugprotocol": "^1.51.0",
35
35
  "decompress": "^4.2.1",
@@ -41,7 +41,6 @@
41
41
  "macaddress": "^0.2.9",
42
42
  "mime": "^2.4.4",
43
43
  "ps-tree": "^1.2.0",
44
- "request": "^2.82.0",
45
44
  "semver": "^5.4.1",
46
45
  "uuid": "^8.0.0",
47
46
  "vhost": "^3.0.2",
@@ -90,11 +89,10 @@
90
89
  "@types/decompress": "^4.2.2",
91
90
  "@types/escape-html": "^0.0.20",
92
91
  "@types/lodash.clonedeep": "^4.5.3",
93
- "@types/ps-tree": "^1.1.0",
94
- "@types/request": "^2.0.3"
92
+ "@types/ps-tree": "^1.1.0"
95
93
  },
96
94
  "nyc": {
97
95
  "extends": "../../configs/nyc.json"
98
96
  },
99
- "gitHead": "b206d89a7ad556a83f137a7e784e0fa47294354d"
97
+ "gitHead": "0e0e9ee4b38b94edfee5d521b8cdacb832d72f86"
100
98
  }
@@ -14,11 +14,11 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { injectable } from '@theia/core/shared/inversify';
18
- import * as fs from 'fs';
17
+ import { RequestContext, RequestService } from '@theia/core/shared/@theia/request';
18
+ import { inject, injectable } from '@theia/core/shared/inversify';
19
+ import { promises as fs, existsSync, mkdirSync } from 'fs';
19
20
  import * as os from 'os';
20
21
  import * as path from 'path';
21
- import * as request from 'request';
22
22
  import { PluginDeployerResolver, PluginDeployerResolverContext } from '../../common';
23
23
 
24
24
  /**
@@ -35,10 +35,13 @@ export class GithubPluginDeployerResolver implements PluginDeployerResolver {
35
35
 
36
36
  private unpackedFolder: string;
37
37
 
38
+ @inject(RequestService)
39
+ protected readonly request: RequestService;
40
+
38
41
  constructor() {
39
42
  this.unpackedFolder = path.resolve(os.tmpdir(), 'github-remote');
40
- if (!fs.existsSync(this.unpackedFolder)) {
41
- fs.mkdirSync(this.unpackedFolder);
43
+ if (!existsSync(this.unpackedFolder)) {
44
+ mkdirSync(this.unpackedFolder);
42
45
  }
43
46
  }
44
47
 
@@ -48,95 +51,76 @@ export class GithubPluginDeployerResolver implements PluginDeployerResolver {
48
51
  async resolve(pluginResolverContext: PluginDeployerResolverContext): Promise<void> {
49
52
 
50
53
  // download the file
51
- return new Promise<void>((resolve, reject) => {
52
- // extract data
53
- const extracted = /^github:(.*)\/(.*)\/(.*)$/gm.exec(pluginResolverContext.getOriginId());
54
- if (!extracted || extracted === null || extracted.length !== 4) {
55
- reject(new Error('Invalid extension' + pluginResolverContext.getOriginId()));
56
- return;
57
- }
54
+ // extract data
55
+ const extracted = /^github:(.*)\/(.*)\/(.*)$/gm.exec(pluginResolverContext.getOriginId());
56
+ if (!extracted || extracted === null || extracted.length !== 4) {
57
+ throw new Error('Invalid extension' + pluginResolverContext.getOriginId());
58
+ }
58
59
 
59
- const orgName = extracted[1];
60
- const repoName = extracted[2];
61
- const file = extracted[3];
62
-
63
- // get version if any
64
- const splitFile = file.split('@');
65
- let version;
66
- let filename: string;
67
- if (splitFile.length === 1) {
68
- filename = file;
69
- version = 'latest';
70
- } else {
71
- filename = splitFile[0];
72
- version = splitFile[1];
73
- }
74
- // latest version, need to get the redirect
75
- const url = GithubPluginDeployerResolver.GITHUB_ENDPOINT + orgName + '/' + repoName + '/releases/latest';
60
+ const orgName = extracted[1];
61
+ const repoName = extracted[2];
62
+ const file = extracted[3];
63
+
64
+ // get version if any
65
+ const splitFile = file.split('@');
66
+ let version;
67
+ let filename: string;
68
+ if (splitFile.length === 1) {
69
+ filename = file;
70
+ version = 'latest';
71
+ } else {
72
+ filename = splitFile[0];
73
+ version = splitFile[1];
74
+ }
75
+ // latest version, need to get the redirect
76
+ const url = GithubPluginDeployerResolver.GITHUB_ENDPOINT + orgName + '/' + repoName + '/releases/latest';
76
77
 
78
+ // if latest, resolve first the real version
79
+ if (version === 'latest') {
77
80
  // disable redirect to grab the release
78
- const options = {
79
- followRedirect: false
80
- };
81
- // if latest, resolve first the real version
82
- if (version === 'latest') {
83
- request.get(url, options).on('response', response => {
84
-
85
- // should have a redirect
86
- if (response.statusCode === 302) {
87
- const redirectLocation = response.headers.location;
88
- if (!redirectLocation) {
89
- reject(new Error('Invalid github link with latest not being found'));
90
- return;
91
- }
92
-
93
- // parse redirect link
94
- const taggedValueArray = /^https:\/\/.*tag\/(.*)/gm.exec(redirectLocation);
95
- if (!taggedValueArray || taggedValueArray.length !== 2) {
96
- reject(new Error('The redirect link for latest is invalid ' + redirectLocation));
97
- return;
98
- }
99
-
100
- // grab version of tag
101
- this.grabGithubFile(pluginResolverContext, orgName, repoName, filename, taggedValueArray[1], resolve, reject);
102
-
103
- }
104
- });
105
- } else {
106
- this.grabGithubFile(pluginResolverContext, orgName, repoName, filename, version, resolve, reject);
107
- }
108
-
109
- });
81
+ const followRedirects = 0;
82
+ const response = await this.request.request({ url, followRedirects });
83
+ // should have a redirect
84
+ if (response.res.statusCode === 302) {
85
+ const redirectLocation = response.res.headers.location;
86
+ if (!redirectLocation) {
87
+ throw new Error('Invalid github link with latest not being found');
88
+ }
89
+
90
+ // parse redirect link
91
+ const taggedValueArray = /^https:\/\/.*tag\/(.*)/gm.exec(redirectLocation);
92
+ if (!taggedValueArray || taggedValueArray.length !== 2) {
93
+ throw new Error('The redirect link for latest is invalid ' + redirectLocation);
94
+ }
95
+
96
+ // grab version of tag
97
+ return this.grabGithubFile(pluginResolverContext, orgName, repoName, filename, taggedValueArray[1]);
110
98
 
99
+ }
100
+ } else {
101
+ return this.grabGithubFile(pluginResolverContext, orgName, repoName, filename, version);
102
+ }
111
103
  }
112
104
 
113
105
  /*
114
106
  * Grab the github file specified by the plugin's ID
115
107
  */
116
- protected grabGithubFile(pluginResolverContext: PluginDeployerResolverContext, orgName: string, repoName: string, filename: string, version: string,
117
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
- resolve: (value?: void | PromiseLike<void>) => void, reject: (reason?: any) => void): void {
119
-
108
+ protected async grabGithubFile(pluginResolverContext: PluginDeployerResolverContext, orgName: string, repoName: string, filename: string, version: string): Promise<void> {
120
109
  const unpackedPath = path.resolve(this.unpackedFolder, path.basename(version + filename));
121
- const finish = () => {
122
- pluginResolverContext.addPlugin(pluginResolverContext.getOriginId(), unpackedPath);
123
- resolve();
124
- };
125
-
126
- // use of cache. If file is already there use it directly
127
- if (fs.existsSync(unpackedPath)) {
128
- finish();
110
+ try {
111
+ await fs.access(unpackedPath);
112
+ // use of cache. If file is already there use it directly
129
113
  return;
130
- }
131
- const dest = fs.createWriteStream(unpackedPath);
114
+ } catch { }
132
115
 
133
- dest.addListener('finish', finish);
134
116
  const url = GithubPluginDeployerResolver.GITHUB_ENDPOINT + orgName + '/' + repoName + '/releases/download/' + version + '/' + filename;
135
- request.get(url)
136
- .on('error', err => {
137
- reject(err);
138
- }).pipe(dest);
139
-
117
+ const response = await this.request.request({ url });
118
+ if (RequestContext.isSuccess(response)) {
119
+ await fs.writeFile(unpackedPath, response.buffer);
120
+ pluginResolverContext.addPlugin(pluginResolverContext.getOriginId(), unpackedPath);
121
+ } else {
122
+ throw new Error(`Could not download the plugin from GitHub. URL: ${url}. HTTP status code: ${response.res.statusCode}`);
123
+ }
140
124
  }
141
125
 
142
126
  /**
@@ -14,13 +14,12 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { injectable } from '@theia/core/shared/inversify';
18
- import * as fs from 'fs';
17
+ import { RequestContext, RequestService } from '@theia/core/shared/@theia/request';
18
+ import { inject, injectable } from '@theia/core/shared/inversify';
19
+ import { promises as fs, existsSync, mkdirSync } from 'fs';
19
20
  import * as os from 'os';
20
21
  import * as path from 'path';
21
22
  import * as url from 'url';
22
- import * as request from 'request';
23
-
24
23
  import { PluginDeployerResolver, PluginDeployerResolverContext } from '../../common';
25
24
 
26
25
  /**
@@ -33,10 +32,13 @@ export class HttpPluginDeployerResolver implements PluginDeployerResolver {
33
32
 
34
33
  private unpackedFolder: string;
35
34
 
35
+ @inject(RequestService)
36
+ protected readonly request: RequestService;
37
+
36
38
  constructor() {
37
39
  this.unpackedFolder = path.resolve(os.tmpdir(), 'http-remote');
38
- if (!fs.existsSync(this.unpackedFolder)) {
39
- fs.mkdirSync(this.unpackedFolder);
40
+ if (!existsSync(this.unpackedFolder)) {
41
+ mkdirSync(this.unpackedFolder);
40
42
  }
41
43
  }
42
44
 
@@ -46,39 +48,31 @@ export class HttpPluginDeployerResolver implements PluginDeployerResolver {
46
48
  async resolve(pluginResolverContext: PluginDeployerResolverContext): Promise<void> {
47
49
 
48
50
  // download the file
49
- return new Promise<void>((resolve, reject) => {
50
-
51
- // keep filename of the url
52
- const urlPath = pluginResolverContext.getOriginId();
53
- const link = url.parse(urlPath);
54
- if (!link.pathname) {
55
- reject(new Error('invalid link URI' + urlPath));
56
- return;
57
- }
58
-
59
- const dirname = path.dirname(link.pathname);
60
- const basename = path.basename(link.pathname);
61
- const filename = dirname.replace(/\W/g, '_') + ('-') + basename;
62
- const unpackedPath = path.resolve(this.unpackedFolder, path.basename(filename));
51
+ // keep filename of the url
52
+ const urlPath = pluginResolverContext.getOriginId();
53
+ const link = url.parse(urlPath);
54
+ if (!link.pathname) {
55
+ throw new Error('invalid link URI' + urlPath);
56
+ }
63
57
 
64
- const finish = () => {
65
- pluginResolverContext.addPlugin(pluginResolverContext.getOriginId(), unpackedPath);
66
- resolve();
67
- };
58
+ const dirname = path.dirname(link.pathname);
59
+ const basename = path.basename(link.pathname);
60
+ const filename = dirname.replace(/\W/g, '_') + ('-') + basename;
61
+ const unpackedPath = path.resolve(this.unpackedFolder, path.basename(filename));
68
62
 
63
+ try {
64
+ await fs.access(unpackedPath);
69
65
  // use of cache. If file is already there use it directly
70
- if (fs.existsSync(unpackedPath)) {
71
- finish();
72
- return;
73
- }
74
- const dest = fs.createWriteStream(unpackedPath);
66
+ return;
67
+ } catch { }
75
68
 
76
- dest.addListener('finish', finish);
77
- request.get(pluginResolverContext.getOriginId())
78
- .on('error', err => {
79
- reject(err);
80
- }).pipe(dest);
81
- });
69
+ const response = await this.request.request({ url: pluginResolverContext.getOriginId() });
70
+ if (RequestContext.isSuccess(response)) {
71
+ await fs.writeFile(unpackedPath, response.buffer);
72
+ pluginResolverContext.addPlugin(pluginResolverContext.getOriginId(), unpackedPath);
73
+ } else {
74
+ throw new Error(`Could not download the plugin from ${pluginResolverContext.getOriginId()}. HTTP status code: ${response.res.statusCode}`);
75
+ }
82
76
 
83
77
  }
84
78